From: jenkins-bot Date: Tue, 19 Apr 2016 12:12:34 +0000 (+0000) Subject: Merge "Fix wrong @return type hints in Language::tsTo… methods" X-Git-Tag: 1.31.0-rc.0~7250 X-Git-Url: http://git.cyclocoop.org/%22%20.%20generer_url_ecrire%28%22suivi_revisions%22%29%20.%20%22?a=commitdiff_plain;h=75cdcc94007dca953927b13db411aac94750b074;hp=6209fe38e461b41bb2dd30080821cdb35add3b2a;p=lhc%2Fweb%2Fwiklou.git Merge "Fix wrong @return type hints in Language::tsTo… methods" --- diff --git a/.jscsrc b/.jscsrc index 116c5cfbc8..f3db218447 100644 --- a/.jscsrc +++ b/.jscsrc @@ -4,7 +4,6 @@ "requireVarDeclFirst": null, - "disallowQuotedKeysInObjects": "allButReserved", "requireDotNotation": { "allExcept": [ "keywords" ] }, "jsDoc": { "checkAnnotations": { diff --git a/RELEASE-NOTES-1.27 b/RELEASE-NOTES-1.27 index 391d2ce50d..72d4b3885e 100644 --- a/RELEASE-NOTES-1.27 +++ b/RELEASE-NOTES-1.27 @@ -7,9 +7,17 @@ production. === PHP version requirement === As of 1.27, MediaWiki now requires PHP 5.5.9 or higher. This corresponds with -HHVM 3.1. +HHVM 3.1. Additionally, the following PHP extensions are required: +* ctype +* iconv +* json +* mbstring +* xml === Configuration changes in 1.27 === +* $wgAllowMicrodataAttributes and $wgAllowRdfaAttributes were removed, + now always enabled. If you use RDFa on your wiki, you now have to explicitly + set $wgHtml5Version to 'HTML+RDFa 1.0' or 'XHTML+RDFa 1.0'. * $wgUseLinkNamespaceDBFields was removed. * Deprecated $wgResourceLoaderMinifierStatementsOnOwnLine and $wgResourceLoaderMinifierMaxLineLength, because there was little value in @@ -98,6 +106,14 @@ HHVM 3.1. * $wgEnotifUseJobQ was removed and the job queue is always used. * The functionality of the ApiSandbox extension has been merged into core. The extension should no longer be used. +* $wgPreloadJavaScriptMwUtil was removed (deprecated in 1.26). + Extensions, skins, gadgets and scripts that use the mediawiki.util module must + express a dependency on it. +* $wgIncludeLegacyJavaScript, deprecated in MediaWiki 1.26, now defaults false. + Extensions, skins, gadgets and scripts that need the mediawiki.legacy.wikibits + module should express a dependency on it. +* Removed configuration option $wgCopyrightIcon (deprecated since 1.18). Use + $wgFooterIcons['copyright']['copyright'] instead. === New features in 1.27 === * $wgDataCenterUpdateStickTTL was also added. This decides how long a user @@ -166,6 +182,14 @@ HHVM 3.1. be a good idea, but will log out all current sessions. * $wgEventRelayerConfig was added, for managing PubSub event relay configuration, specifically for reliable CDN url purges. +* Requests have unique IDs, equal to the UNIQUE_ID environment variable (when + MediaWiki is behind Apache+mod_unique_id or something similar) or a randomly- + generated 24-character string. This request ID is used to annotate log records + and error messages. It is available client-side via mw.config.get( 'wgRequestId' ). + The request ID supplants exception IDs. Accordingly, MWExceptionHandler::getLogId() + is deprecated. +* (T33313) Add a preference for watching uploads by default, also applies + to API-based upload tools. === External library changes in 1.27 === @@ -234,15 +258,11 @@ HHVM 3.1. * ApiQuery::setGeneratorContinue() was removed (deprecated since 1.24). * ApiMain::getModules() was removed (deprecated since 1.21). * ApiBase::getVersion() was removed (deprecated since 1.21). -* Language::getLangObj() was removed (deprecated since 1.24). -* Language::getLanguageName() was removed (deprecated since 1.20). -* Language::getLanguageNames() was removed (deprecated since 1.20). -* Language::getTranslatedLanguageNames() was removed (deprecated since 1.20). -* Language::specialPage() was removed (deprecated since 1.24). -* OutputPage::getHeadItems() was removed (deprecated since 1.24). -* OutputPage::getScript() was removed (deprecated since 1.24). -* OutputPage::out() was removed (deprecated since 1.22). -* OutputPage::setAllowedModules() was removed (deprecated since 1.24). +* ApiMain::getShowVersions() was removed (deprecated in 1.21). +* ApiMain::addModule() was removed (deprecated in 1.21). +* ApiMain::addFormat() was removed (deprecated in 1.21). +* ApiMain::getFormats() was removed (deprecated in 1.21). +* ApiPageSet::finishPageSetGeneration() was removed (deprecated in 1.21). === Languages updated in 1.27 === @@ -251,8 +271,12 @@ regularly. Below only new and removed languages are listed, as well as changes to languages because of Phabricator reports. * (T113688) Change default numerals from Gurmukhi to Arabic for Punjabi locale. +* (T116020) Aliases of magic words in MessagesXx.php are sorted by usage. === Other changes in 1.27 === +* Added dependency injection (DI) infrastructure, see docs/injection.txt for details. + It is planned to incrementally move MediaWiki code towards using DI, using the + service locator (SL) pattern as a stepping stone. * ProfilerOutputUdp was removed. Note that there is a ProfilerOutputStats class. * WikiPage::doDeleteArticleReal() and WikiPage::doDeleteArticle() now ignore the 2nd and 3rd arguments (formerly $id and $commit). @@ -362,6 +386,34 @@ changes to languages because of Phabricator reports. * Unit tests don't work with external PHPUnit anymore, Composer is now the only supported way. Run `composer install` to install it and other dev dependencies to run unit tests. * wl_id field added to the watchlist table. +* Revision::getRawText() was removed (deprecated since 1.21). +* WikiPage::replaceSection() was removed (deprecated since 1.21). +* Article::replaceSection() was removed (deprecated since 1.21). +* Language::getLangObj() was removed (deprecated since 1.24). +* Language::getLanguageName() was removed (deprecated since 1.20). +* Language::getLanguageNames() was removed (deprecated since 1.20). +* Language::getTranslatedLanguageNames() was removed (deprecated since 1.20). +* Language::specialPage() was removed (deprecated since 1.24). +* MediaWikiTestCase::assertException() was removed (deprecated since 1.22). +* OutputPage::getHeadItems() was removed (deprecated since 1.24). +* OutputPage::getScript() was removed (deprecated since 1.24). +* OutputPage::out() was removed (deprecated since 1.22). +* OutputPage::setAllowedModules() was removed (deprecated since 1.24). +* UserrightsPage::makeGroupNameListForLog() was removed (deprecated since 1.21). +* MediaWikiSite::newFromGlobalId() was removed (deprecated since 1.21). +* Title::newFromRedirect() was removed (deprecated since 1.21). +* Skin::commonPrintStylesheet() was removed (deprecated since 1.22). +* Skin::getCommonStylePath() was removed (deprecated since 1.24). +* Skin::newFromKey() was removed (deprecated since 1.24). +* Skin::getUsableSkins() was removed (deprecated since 1.23). +* LoadBalancer::pickRandom() was removed (deprecated in 1.21). +* Article::getUndoText() and WikiPage::getUndoText were removed (deprecated since + 1.21). +* DifferenceEngine::setText() was removed (deprecated in 1.21). +* Title::newFromRedirectArray() was removed (deprecated in 1.21). +* UserMailer::send() no longer accepts $replyto as the 5th argument and $contentType + as the 6th. These must be passed in the options array now. +* Title::newFromRedirectRecurse() was removed (deprecated in 1.21). == Compatibility == diff --git a/autoload.php b/autoload.php index e74df0aa1f..b851e39bc6 100644 --- a/autoload.php +++ b/autoload.php @@ -7,11 +7,11 @@ $wgAutoloadLocalClasses = [ 'APCBagOStuff' => __DIR__ . '/includes/libs/objectcache/APCBagOStuff.php', 'AbstractContent' => __DIR__ . '/includes/content/AbstractContent.php', 'Action' => __DIR__ . '/includes/actions/Action.php', - 'ActiveUsersPager' => __DIR__ . '/includes/specials/SpecialActiveusers.php', + 'ActiveUsersPager' => __DIR__ . '/includes/specials/pagers/ActiveUsersPager.php', 'ActivityUpdateJob' => __DIR__ . '/includes/jobqueue/jobs/ActivityUpdateJob.php', 'AjaxDispatcher' => __DIR__ . '/includes/AjaxDispatcher.php', 'AjaxResponse' => __DIR__ . '/includes/AjaxResponse.php', - 'AllMessagesTablePager' => __DIR__ . '/includes/specials/SpecialAllMessages.php', + 'AllMessagesTablePager' => __DIR__ . '/includes/specials/pagers/AllMessagesTablePager.php', 'AllTrans' => __DIR__ . '/maintenance/language/alltrans.php', 'AlphabeticPager' => __DIR__ . '/includes/pager/AlphabeticPager.php', 'AlterSharedConstraints' => __DIR__ . '/maintenance/oracle/alterSharedConstraints.php', @@ -180,12 +180,12 @@ $wgAutoloadLocalClasses = [ 'BitmapMetadataHandler' => __DIR__ . '/includes/media/BitmapMetadataHandler.php', 'Blob' => __DIR__ . '/includes/db/DatabaseUtility.php', 'Block' => __DIR__ . '/includes/Block.php', - 'BlockListPager' => __DIR__ . '/includes/specials/SpecialBlockList.php', + 'BlockListPager' => __DIR__ . '/includes/specials/pagers/BlockListPager.php', 'BlockLogFormatter' => __DIR__ . '/includes/logging/BlockLogFormatter.php', 'BmpHandler' => __DIR__ . '/includes/media/BMP.php', 'BotPassword' => __DIR__ . '/includes/user/BotPassword.php', 'BrokenRedirectsPage' => __DIR__ . '/includes/specials/SpecialBrokenRedirects.php', - 'BufferingStatsdDataFactory' => __DIR__ . '/includes/libs/BufferingStatsdDataFactory.php', + 'BufferingStatsdDataFactory' => __DIR__ . '/includes/libs/stats/BufferingStatsdDataFactory.php', 'CLIParser' => __DIR__ . '/maintenance/parse.php', 'CSSMin' => __DIR__ . '/includes/libs/CSSMin.php', 'CacheDependency' => __DIR__ . '/includes/cache/CacheDependency.php', @@ -200,7 +200,7 @@ $wgAutoloadLocalClasses = [ 'CategoryMembershipChange' => __DIR__ . '/includes/changes/CategoryMembershipChange.php', 'CategoryMembershipChangeJob' => __DIR__ . '/includes/jobqueue/jobs/CategoryMembershipChangeJob.php', 'CategoryPage' => __DIR__ . '/includes/page/CategoryPage.php', - 'CategoryPager' => __DIR__ . '/includes/specials/SpecialCategories.php', + 'CategoryPager' => __DIR__ . '/includes/specials/pagers/CategoryPager.php', 'CategoryViewer' => __DIR__ . '/includes/CategoryViewer.php', 'CdbException' => __DIR__ . '/includes/compat/CdbCompat.php', 'CdbReader' => __DIR__ . '/includes/compat/CdbCompat.php', @@ -240,9 +240,9 @@ $wgAutoloadLocalClasses = [ 'CliInstaller' => __DIR__ . '/includes/installer/CliInstaller.php', 'CloneDatabase' => __DIR__ . '/includes/db/CloneDatabase.php', 'CodeContentHandler' => __DIR__ . '/includes/content/CodeContentHandler.php', - 'Collation' => __DIR__ . '/includes/Collation.php', - 'CollationCkb' => __DIR__ . '/includes/Collation.php', - 'CollationEt' => __DIR__ . '/includes/Collation.php', + 'Collation' => __DIR__ . '/includes/collation/Collation.php', + 'CollationCkb' => __DIR__ . '/includes/collation/CollationCkb.php', + 'CollationEt' => __DIR__ . '/includes/collation/CollationEt.php', 'CommandLineInc' => __DIR__ . '/maintenance/commandLine.inc', 'CommandLineInstaller' => __DIR__ . '/maintenance/install.php', 'CompareParserCache' => __DIR__ . '/maintenance/compareParserCache.php', @@ -263,13 +263,13 @@ $wgAutoloadLocalClasses = [ 'ContentHandler' => __DIR__ . '/includes/content/ContentHandler.php', 'ContentModelLogFormatter' => __DIR__ . '/includes/logging/ContentModelLogFormatter.php', 'ContextSource' => __DIR__ . '/includes/context/ContextSource.php', - 'ContribsPager' => __DIR__ . '/includes/specials/SpecialContributions.php', + 'ContribsPager' => __DIR__ . '/includes/specials/pagers/ContribsPager.php', 'ConvertExtensionToRegistration' => __DIR__ . '/maintenance/convertExtensionToRegistration.php', 'ConvertLinks' => __DIR__ . '/maintenance/convertLinks.php', 'ConvertUserOptions' => __DIR__ . '/maintenance/convertUserOptions.php', 'ConverterRule' => __DIR__ . '/languages/ConverterRule.php', 'Cookie' => __DIR__ . '/includes/libs/Cookie.php', - 'CookieJar' => __DIR__ . '/includes/libs/Cookie.php', + 'CookieJar' => __DIR__ . '/includes/libs/CookieJar.php', 'CopyFileBackend' => __DIR__ . '/maintenance/copyFileBackend.php', 'CopyFileOp' => __DIR__ . '/includes/filebackend/FileOp.php', 'CopyJobQueue' => __DIR__ . '/maintenance/copyJobQueue.php', @@ -332,7 +332,7 @@ $wgAutoloadLocalClasses = [ 'DeleteOrphanedRevisions' => __DIR__ . '/maintenance/deleteOrphanedRevisions.php', 'DeleteRevision' => __DIR__ . '/maintenance/deleteRevision.php', 'DeleteSelfExternals' => __DIR__ . '/maintenance/deleteSelfExternals.php', - 'DeletedContribsPager' => __DIR__ . '/includes/specials/SpecialDeletedContributions.php', + 'DeletedContribsPager' => __DIR__ . '/includes/specials/pagers/DeletedContribsPager.php', 'DeletedContributionsPage' => __DIR__ . '/includes/specials/SpecialDeletedContributions.php', 'DependencyWrapper' => __DIR__ . '/includes/cache/CacheDependency.php', 'DeprecatedGlobal' => __DIR__ . '/includes/DeprecatedGlobal.php', @@ -397,8 +397,7 @@ $wgAutoloadLocalClasses = [ 'ErrorPageError' => __DIR__ . '/includes/exception/ErrorPageError.php', 'EventRelayer' => __DIR__ . '/includes/libs/eventrelayer/EventRelayer.php', 'EventRelayerGroup' => __DIR__ . '/includes/EventRelayerGroup.php', - 'EventRelayerMCRD' => __DIR__ . '/includes/libs/eventrelayer/EventRelayerMCRD.php', - 'EventRelayerNull' => __DIR__ . '/includes/libs/eventrelayer/EventRelayer.php', + 'EventRelayerNull' => __DIR__ . '/includes/libs/eventrelayer/EventRelayerNull.php', 'Exif' => __DIR__ . '/includes/media/Exif.php', 'ExifBitmapHandler' => __DIR__ . '/includes/media/ExifBitmap.php', 'ExplodeIterator' => __DIR__ . '/includes/libs/ExplodeIterator.php', @@ -423,7 +422,6 @@ $wgAutoloadLocalClasses = [ 'FakeConverter' => __DIR__ . '/languages/FakeConverter.php', 'FakeMaintenance' => __DIR__ . '/maintenance/Maintenance.php', 'FakeResultWrapper' => __DIR__ . '/includes/db/DatabaseUtility.php', - 'Fallback' => __DIR__ . '/includes/Fallback.php', 'FatalError' => __DIR__ . '/includes/exception/FatalError.php', 'FauxRequest' => __DIR__ . '/includes/FauxRequest.php', 'FauxResponse' => __DIR__ . '/includes/WebResponse.php', @@ -490,7 +488,6 @@ $wgAutoloadLocalClasses = [ 'GenerateNormalizerDataAr' => __DIR__ . '/maintenance/language/generateNormalizerDataAr.php', 'GenerateNormalizerDataMl' => __DIR__ . '/maintenance/language/generateNormalizerDataMl.php', 'GenerateSitemap' => __DIR__ . '/maintenance/generateSitemap.php', - 'GenerateUtf8Case' => __DIR__ . '/maintenance/language/generateUtf8Case.php', 'GenericArrayObject' => __DIR__ . '/includes/libs/GenericArrayObject.php', 'GetConfiguration' => __DIR__ . '/maintenance/getConfiguration.php', 'GetLagTimes' => __DIR__ . '/maintenance/getLagTimes.php', @@ -564,8 +561,8 @@ $wgAutoloadLocalClasses = [ 'IPSet' => __DIR__ . '/includes/compat/IPSetCompat.php', 'IPTC' => __DIR__ . '/includes/media/IPTC.php', 'IRCColourfulRCFeedFormatter' => __DIR__ . '/includes/rcfeed/IRCColourfulRCFeedFormatter.php', - 'IcuCollation' => __DIR__ . '/includes/Collation.php', - 'IdentityCollation' => __DIR__ . '/includes/Collation.php', + 'IcuCollation' => __DIR__ . '/includes/collation/IcuCollation.php', + 'IdentityCollation' => __DIR__ . '/includes/collation/IdentityCollation.php', 'ImageBuilder' => __DIR__ . '/maintenance/rebuildImages.php', 'ImageCleanup' => __DIR__ . '/maintenance/cleanupImages.php', 'ImageGallery' => __DIR__ . '/includes/gallery/TraditionalImageGallery.php', @@ -573,7 +570,7 @@ $wgAutoloadLocalClasses = [ 'ImageHandler' => __DIR__ . '/includes/media/ImageHandler.php', 'ImageHistoryList' => __DIR__ . '/includes/page/ImageHistoryList.php', 'ImageHistoryPseudoPager' => __DIR__ . '/includes/page/ImageHistoryPseudoPager.php', - 'ImageListPager' => __DIR__ . '/includes/specials/SpecialListfiles.php', + 'ImageListPager' => __DIR__ . '/includes/specials/pagers/ImageListPager.php', 'ImagePage' => __DIR__ . '/includes/page/ImagePage.php', 'ImageQueryPage' => __DIR__ . '/includes/specialpage/ImageQueryPage.php', 'ImportLogFormatter' => __DIR__ . '/includes/logging/ImportLogFormatter.php', @@ -620,6 +617,7 @@ $wgAutoloadLocalClasses = [ 'JobQueueFederated' => __DIR__ . '/includes/jobqueue/JobQueueFederated.php', 'JobQueueGroup' => __DIR__ . '/includes/jobqueue/JobQueueGroup.php', 'JobQueueMemory' => __DIR__ . '/includes/jobqueue/JobQueueMemory.php', + 'JobQueueReadOnlyError' => __DIR__ . '/includes/jobqueue/JobQueue.php', 'JobQueueRedis' => __DIR__ . '/includes/jobqueue/JobQueueRedis.php', 'JobRunner' => __DIR__ . '/includes/jobqueue/JobRunner.php', 'JobSpecification' => __DIR__ . '/includes/jobqueue/JobSpecification.php', @@ -634,11 +632,11 @@ $wgAutoloadLocalClasses = [ 'LBFactoryMulti' => __DIR__ . '/includes/db/loadbalancer/LBFactoryMulti.php', 'LBFactorySimple' => __DIR__ . '/includes/db/loadbalancer/LBFactorySimple.php', 'LBFactorySingle' => __DIR__ . '/includes/db/loadbalancer/LBFactorySingle.php', - 'LCStore' => __DIR__ . '/includes/cache/LocalisationCache.php', - 'LCStoreCDB' => __DIR__ . '/includes/cache/LocalisationCache.php', - 'LCStoreDB' => __DIR__ . '/includes/cache/LocalisationCache.php', - 'LCStoreNull' => __DIR__ . '/includes/cache/LocalisationCache.php', - 'LCStoreStaticArray' => __DIR__ . '/includes/cache/LCStoreStaticArray.php', + 'LCStore' => __DIR__ . '/includes/cache/localisation/LCStore.php', + 'LCStoreCDB' => __DIR__ . '/includes/cache/localisation/LCStoreCDB.php', + 'LCStoreDB' => __DIR__ . '/includes/cache/localisation/LCStoreDB.php', + 'LCStoreNull' => __DIR__ . '/includes/cache/localisation/LCStoreNull.php', + 'LCStoreStaticArray' => __DIR__ . '/includes/cache/localisation/LCStoreStaticArray.php', 'LangMemUsage' => __DIR__ . '/maintenance/language/langmemusage.php', 'Language' => __DIR__ . '/languages/Language.php', 'LanguageAr' => __DIR__ . '/languages/classes/LanguageAr.php', @@ -718,8 +716,8 @@ $wgAutoloadLocalClasses = [ 'LocalIdLookup' => __DIR__ . '/includes/user/LocalIdLookup.php', 'LocalRepo' => __DIR__ . '/includes/filerepo/LocalRepo.php', 'LocalSettingsGenerator' => __DIR__ . '/includes/installer/LocalSettingsGenerator.php', - 'LocalisationCache' => __DIR__ . '/includes/cache/LocalisationCache.php', - 'LocalisationCacheBulkLoad' => __DIR__ . '/includes/cache/LocalisationCache.php', + 'LocalisationCache' => __DIR__ . '/includes/cache/localisation/LocalisationCache.php', + 'LocalisationCacheBulkLoad' => __DIR__ . '/includes/cache/localisation/LocalisationCacheBulkLoad.php', 'LockManager' => __DIR__ . '/includes/filebackend/lockmanager/LockManager.php', 'LockManagerGroup' => __DIR__ . '/includes/filebackend/lockmanager/LockManagerGroup.php', 'LogEntry' => __DIR__ . '/includes/logging/LogEntry.php', @@ -795,6 +793,8 @@ $wgAutoloadLocalClasses = [ 'MediaWiki\\Logger\\Monolog\\WikiProcessor' => __DIR__ . '/includes/debug/logger/monolog/WikiProcessor.php', 'MediaWiki\\Logger\\NullSpi' => __DIR__ . '/includes/debug/logger/NullSpi.php', 'MediaWiki\\Logger\\Spi' => __DIR__ . '/includes/debug/logger/Spi.php', + 'MediaWiki\\MediaWikiServices' => __DIR__ . '/includes/MediaWikiServices.php', + 'MediaWiki\\Services\\ServiceContainer' => __DIR__ . '/includes/Services/ServiceContainer.php', 'MediaWiki\\Session\\BotPasswordSessionProvider' => __DIR__ . '/includes/session/BotPasswordSessionProvider.php', 'MediaWiki\\Session\\CookieSessionProvider' => __DIR__ . '/includes/session/CookieSessionProvider.php', 'MediaWiki\\Session\\ImmutableSessionProviderWithCookie' => __DIR__ . '/includes/session/ImmutableSessionProviderWithCookie.php', @@ -833,7 +833,7 @@ $wgAutoloadLocalClasses = [ 'MemoizedCallable' => __DIR__ . '/includes/libs/MemoizedCallable.php', 'MemoryFileBackend' => __DIR__ . '/includes/filebackend/MemoryFileBackend.php', 'MergeHistory' => __DIR__ . '/includes/MergeHistory.php', - 'MergeHistoryPager' => __DIR__ . '/includes/specials/SpecialMergeHistory.php', + 'MergeHistoryPager' => __DIR__ . '/includes/specials/pagers/MergeHistoryPager.php', 'MergeLogFormatter' => __DIR__ . '/includes/logging/MergeLogFormatter.php', 'MergeMessageFileList' => __DIR__ . '/maintenance/mergeMessageFileList.php', 'MergeableUpdate' => __DIR__ . '/includes/deferred/MergeableUpdate.php', @@ -880,8 +880,8 @@ $wgAutoloadLocalClasses = [ 'NamespaceAwareForeignTitleFactory' => __DIR__ . '/includes/title/NamespaceAwareForeignTitleFactory.php', 'NamespaceConflictChecker' => __DIR__ . '/maintenance/namespaceDupes.php', 'NamespaceImportTitleFactory' => __DIR__ . '/includes/title/NamespaceImportTitleFactory.php', - 'NewFilesPager' => __DIR__ . '/includes/specials/SpecialNewimages.php', - 'NewPagesPager' => __DIR__ . '/includes/specials/SpecialNewpages.php', + 'NewFilesPager' => __DIR__ . '/includes/specials/pagers/NewFilesPager.php', + 'NewPagesPager' => __DIR__ . '/includes/specials/pagers/NewPagesPager.php', 'NewUsersLogFormatter' => __DIR__ . '/includes/logging/NewUsersLogFormatter.php', 'NolinesImageGallery' => __DIR__ . '/includes/gallery/NolinesImageGallery.php', 'NotRecursiveIterator' => __DIR__ . '/includes/utils/iterators/NotRecursiveIterator.php', @@ -892,6 +892,7 @@ $wgAutoloadLocalClasses = [ 'NullJob' => __DIR__ . '/includes/jobqueue/jobs/NullJob.php', 'NullLockManager' => __DIR__ . '/includes/filebackend/lockmanager/LockManager.php', 'NullRepo' => __DIR__ . '/includes/filerepo/NullRepo.php', + 'NullStatsdDataFactory' => __DIR__ . '/includes/libs/stats/NullStatsdDataFactory.php', 'OOUIHTMLForm' => __DIR__ . '/includes/htmlform/OOUIHTMLForm.php', 'ORAField' => __DIR__ . '/includes/db/DatabaseOracle.php', 'ORAResult' => __DIR__ . '/includes/db/DatabaseOracle.php', @@ -933,7 +934,7 @@ $wgAutoloadLocalClasses = [ 'PackedHoverImageGallery' => __DIR__ . '/includes/gallery/PackedOverlayImageGallery.php', 'PackedImageGallery' => __DIR__ . '/includes/gallery/PackedImageGallery.php', 'PackedOverlayImageGallery' => __DIR__ . '/includes/gallery/PackedOverlayImageGallery.php', - 'Page' => __DIR__ . '/includes/page/WikiPage.php', + 'Page' => __DIR__ . '/includes/page/Page.php', 'PageArchive' => __DIR__ . '/includes/specials/SpecialUndelete.php', 'PageExists' => __DIR__ . '/maintenance/pageExists.php', 'PageLangLogFormatter' => __DIR__ . '/includes/logging/PageLangLogFormatter.php', @@ -1006,7 +1007,7 @@ $wgAutoloadLocalClasses = [ 'ProtectAction' => __DIR__ . '/includes/actions/ProtectAction.php', 'ProtectLogFormatter' => __DIR__ . '/includes/logging/ProtectLogFormatter.php', 'ProtectedPagesPager' => __DIR__ . '/includes/specials/SpecialProtectedpages.php', - 'ProtectedTitlesPager' => __DIR__ . '/includes/specials/SpecialProtectedtitles.php', + 'ProtectedTitlesPager' => __DIR__ . '/includes/specials/pagers/ProtectedTitlesPager.php', 'ProtectionForm' => __DIR__ . '/includes/ProtectionForm.php', 'PruneFileCache' => __DIR__ . '/maintenance/pruneFileCache.php', 'PublishStashedFileJob' => __DIR__ . '/includes/jobqueue/jobs/PublishStashedFileJob.php', @@ -1266,6 +1267,7 @@ $wgAutoloadLocalClasses = [ 'SquidUpdate' => __DIR__ . '/includes/deferred/CdnCacheUpdate.php', 'SrConverter' => __DIR__ . '/languages/classes/LanguageSr.php', 'StatsOutput' => __DIR__ . '/maintenance/language/StatOutputs.php', + 'StatsdAwareInterface' => __DIR__ . '/includes/libs/stats/StatsdAwareInterface.php', 'Status' => __DIR__ . '/includes/Status.php', 'StatusValue' => __DIR__ . '/includes/libs/StatusValue.php', 'StorageTypeStats' => __DIR__ . '/maintenance/storage/storageTypeStats.php', @@ -1370,7 +1372,7 @@ $wgAutoloadLocalClasses = [ 'UploadStashNotLoggedInException' => __DIR__ . '/includes/upload/UploadStash.php', 'UploadStashWrongOwnerException' => __DIR__ . '/includes/upload/UploadStash.php', 'UploadStashZeroLengthFileException' => __DIR__ . '/includes/upload/UploadStash.php', - 'UppercaseCollation' => __DIR__ . '/includes/Collation.php', + 'UppercaseCollation' => __DIR__ . '/includes/collation/UppercaseCollation.php', 'UsageException' => __DIR__ . '/includes/api/ApiMain.php', 'User' => __DIR__ . '/includes/user/User.php', 'UserArray' => __DIR__ . '/includes/user/UserArray.php', @@ -1387,7 +1389,7 @@ $wgAutoloadLocalClasses = [ 'UsercreateTemplate' => __DIR__ . '/includes/templates/Usercreate.php', 'UserloginTemplate' => __DIR__ . '/includes/templates/Userlogin.php', 'UserrightsPage' => __DIR__ . '/includes/specials/SpecialUserrights.php', - 'UsersPager' => __DIR__ . '/includes/specials/SpecialListusers.php', + 'UsersPager' => __DIR__ . '/includes/specials/pagers/UsersPager.php', 'UtfNormal' => __DIR__ . '/includes/compat/normal/UtfNormal.php', 'UzConverter' => __DIR__ . '/languages/classes/LanguageUz.php', 'VFormHTMLForm' => __DIR__ . '/includes/htmlform/VFormHTMLForm.php', diff --git a/composer.json b/composer.json index a21b4e8e98..6b7898ddd1 100644 --- a/composer.json +++ b/composer.json @@ -16,12 +16,16 @@ "wiki": "https://www.mediawiki.org/" }, "require": { - "composer/semver": "1.2.0", + "composer/semver": "1.4.0", "cssjanus/cssjanus": "1.1.2", + "ext-ctype": "*", "ext-iconv": "*", + "ext-json": "*", + "ext-mbstring": "*", + "ext-xml": "*", "liuggio/statsd-php-client": "1.0.18", "mediawiki/at-ease": "1.1.0", - "oojs/oojs-ui": "0.16.2", + "oojs/oojs-ui": "0.16.5", "oyejorge/less.php": "1.7.0.10", "php": ">=5.5.9", "psr/log": "1.0.0", @@ -30,6 +34,7 @@ "wikimedia/cdb": "1.3.0", "wikimedia/cldr-plural-rule-parser": "1.0.0", "wikimedia/composer-merge-plugin": "1.3.1", + "wikimedia/html-formatter": "1.0.1", "wikimedia/ip-set": "1.0.1", "wikimedia/php-session-serializer": "1.0.3", "wikimedia/relpath": "1.0.3", @@ -42,17 +47,16 @@ "jakub-onderka/php-parallel-lint": "0.9.2", "justinrainbow/json-schema": "~1.3", "mediawiki/mediawiki-codesniffer": "0.6.0", - "monolog/monolog": "~1.17.2", + "monolog/monolog": "~1.18.2", "nikic/php-parser": "1.4.1", "nmred/kafka-php": "0.1.5", - "phpunit/phpunit": "4.8.23", + "phpunit/phpunit": "4.8.24", "wikimedia/avro": "1.7.7" }, "suggest": { "ext-apc": "Local data and opcode cache", "ext-fileinfo": "Improved mime magic detection", "ext-intl": "ICU integration", - "ext-mbstring": "Multibyte string support", "ext-wikidiff2": "Diff accelerator", "monolog/monolog": "Flexible debug logging system", "nmred/kafka-php": "Send debug log events to kafka", diff --git a/docs/contenthandler.txt b/docs/contenthandler.txt index f1f478ef31..6209b1426c 100644 --- a/docs/contenthandler.txt +++ b/docs/contenthandler.txt @@ -96,7 +96,7 @@ used. Most importantly, the following functions have been deprecated: -* Revisions::getText() and Revisions::getRawText() is deprecated in favor Revisions::getContent() +* Revisions::getText() is deprecated in favor Revisions::getContent() * WikiPage::getText() is deprecated in favor WikiPage::getContent() Also, the old Article::getContent() (which returns text) is superceded by Article::getContentObject(). However, both diff --git a/docs/extension.schema.json b/docs/extension.schema.json index 4218e8a50a..370e18e274 100644 --- a/docs/extension.schema.json +++ b/docs/extension.schema.json @@ -322,6 +322,10 @@ "type": "string", "description": "Equivalent of remoteBasePath, but relative to $wgExtensionAssetsPath" }, + "skipFunction": { + "type": "string", + "description": "Modules that provide fallback functionality can provide a \"skip function\". This function, if provided, will be passed along to the module registry on the client. When this module is loaded (either directly or as a dependency of another module), then this function is executed first. If the function returns true, the module will instantly be considered \"ready\" without requesting the associated module resources. The value returned here must be valid javascript for execution in a private function. It must not contain the \"function () {\" and \"}\" wrapper though." + }, "scripts": { "type": ["string", "array"], "description": "Scripts to always include (array of file paths)", @@ -422,7 +426,7 @@ ] }, "templates": { - "type": "object", + "type": ["object", "array"], "description": "Templates to be loaded for client-side usage" }, "targets": { diff --git a/docs/hooks.txt b/docs/hooks.txt index a431f1b3fb..31e9d92a46 100644 --- a/docs/hooks.txt +++ b/docs/hooks.txt @@ -376,6 +376,7 @@ $user: Current user 'APIEditBeforeSave': Before saving a page with api.php?action=edit, after processing request parameters. Return false to let the request fail, returning an error message or an tag if $resultArr was filled. +Unlike for example 'EditFilterMergedContent' this also being run on undo. $editPage: the EditPage object $text: the new text of the article (has yet to be saved) &$resultArr: data in this array will be added to the API result @@ -1996,6 +1997,11 @@ $user: $wgUser $request: $wgRequest $mediaWiki: The $mediawiki object +'MediaWikiServices': Override services in the default MediaWikiServices instance. +Extensions may use this to define, replace, or wrap existing services. +However, the preferred way to define a new service is the $wgServiceWiringFiles array. +$services: MediaWikiServices + 'MessageCache::get': When fetching a message. Can be used to override the key for customisations. Given and returned message key must be in special format: 1) first letter must be in lower case according to the content language. @@ -2854,6 +2860,7 @@ $special: the SpecialPage object $subPage: the subpage string or null if no subpage was specified 'SpecialPageBeforeExecute': Called before SpecialPage::execute. +Return false to prevent execution. $special: the SpecialPage object $subPage: the subpage string or null if no subpage was specified diff --git a/docs/injection.txt b/docs/injection.txt new file mode 100644 index 0000000000..e0466c44a5 --- /dev/null +++ b/docs/injection.txt @@ -0,0 +1,248 @@ +injection.txt + +This is an overview of how MediaWiki makes use of dependency injection. +The design described here grew from the discussion of RFC T384. + + +The term "dependency injection" (DI) refers to a pattern on object oriented +programming that tries to improve modularity by reducing strong coupling +between classes. In practical terms, this means that anything an object needs +to operate should be injected from the outside, the object itself should only +know narrow interfaces, no concrete implementation of the logic it relies on. + +The requirement to inject everything typically results in an architecture that +based on two main types of objects: simple value objects with no business logic +(and often immutable), and essentially stateless service objects that use +other service objects to operate on the value objects. + +As of the beginning of 2016 (MW version 1.27), MediaWiki is only starting to +use the DI approach. Much of the code still relies on global state or direct +instantiation, resulting in a highly cyclical dependency graph. + + +== Overview == +The heart of the DI in MediaWiki is the central service locator, +MediaWikiServices, which acts as the top level factory for services in +MediaWiki. MediaWikiServices::getInstance() returns the default service +locator instance, which can be used to gain access to default instances of +various services. MediaWikiServices however also allows new services to be +defined and default services to be redefined. Services are defined or +redefined by providing a callback function, the "instantiator" function, +that will return a new instance of the service. + +When MediaWikiServices::getInstance() is first called, it will create an +instance of MediaWikiServices and populate it with the services defined +in the files listed by $wgServiceWiringFiles, thereby "bootstrapping" the +DI framework. Per default, $wgServiceWiringFiles lists +includes/ServiceWiring.php, which defines all default service +implementations, and specifies how they depend on each other ("wiring"). + +When a new service is added to MediaWiki core, an instantiator function +that will create the appropriate default instance for that service must +be added to ServiceWiring.php. This makes the service available through +the generic getService() method on the service locator returned by +MediaWikiServices::getInstance(). + +Extensions can add their own wiring files to $wgServiceWiringFiles, in order +to define their own service. Extensions may also use the 'MediaWikiServices' +hook to define or redefined services by calling methods on the default +MediaWikiServices instance. + + +It should be noted that the term "service locator" is often used to refer to a +top level factory that is accessed directly, throughout the code, to avoid +explicit dependency injection. In contrast, the term "DI container" is often +used to describe a top level factory that is only accessed when services +are created. We use the term "service locator" for the top level factory +because it is more descriptive than "DI container", even though application +logic is strongly discouraged from accessing MediaWikiServices directly. +MediaWikiServices::getInstance() should ideally be accessed only in "static +entry points" such as hook handler functions. See "Migration" below. + + +== Configuration == + +When the default MediaWikiServices instance is created, a Config object is +provided to the constructor. This Config object represents the "bootstrap" +configuration which will become available as the 'BootstrapConfig' service. +As of MW 1.27, the bootstrap config is a GlobalVarConfig object providing +access to the $wgXxx configuration variables. + +The bootstrap config is then used to construct a 'ConfigFactory' service, +which in turn is used to construct the 'MainConfig' service. Application +logic should use the 'MainConfig' service (or a more specific configuration +object). 'BootstrapConfig' should only be used for bootstrapping basic +services that are needed to load the 'MainConfig'. + + +Note: Several well known services in MediaWiki core act as factories +themselves, e.g. ApiModuleManager, ObjectCache, SpecialPageFactory, etc. +The registries these factories are based on are currently managed as part of +the configuration. This may however change in the future. + + +== Migration == + +This section provides some recipes for improving code modularity by reducing +strong coupling. The dependency injection mechanism described above is an +essential tool in this effort. + +Migrate access to global service instances and config variables: +Assume Foo is a class that uses the $wgScriptPath global and calls +wfGetDB() to get a database connection, in non-static methods. +* Add $scriptPath as a constructor parameter and use $this->scriptPath + instead of $wgScriptPath. +* Add LoadBalancer $dbLoadBalancer as a constructor parameter. Use + $this->dbLoadBalancer->getConnection() instead of wfGetDB(). +* Any code that calls Foo's constructor would now need to provide the + $scriptPath and $dbLoadBalancer. To avoid this, avoid direct instantiation + of services all together - see below. + +Migrate class-level singleton getters: +Assume class Foo has mostly non-static methods, and provides a static +getInstance() method that returns a singleton (or default instance). +* Add an instantiator function for Foo into ServiceWiring.php. The instantiator + would do exactly what Foo::getInstance() did. However, it should + replace any access to global state with calls to $services->getXxx() to get a + service, or $services->getMainConfig()->get() to get a configuration setting. +* Add a getFoo() method to MediaWikiServices. Don't forget to add the + appropriate test cases in MediaWikiServicesTest. +* Turn Foo::getInstance() into a deprecated alias for + MediaWikiServices::getInstance()->getFoo(). Change all calls to + Foo::getInstance() to use injection (see above). + +Migrate direct service instantiation: +Assume class Bar calls new Foo(). +* Add an instantiator function for Foo into ServiceWiring.php and add a getFoo() + method to MediaWikiServices. Don't forget to add the appropriate test cases + in MediaWikiServicesTest. +* In the instantiator, replace any access to global state with calls + to $services->getXxx() to get a service, or $services->getMainConfig()->get() + to get a configuration setting. +* The code in Bar that calls Foo's constructor should be changed to have a Foo + instance injected; Eventually, the only code that instantiates Foo is the + instantiator in ServiceWiring.php. +* As an intermediate step, Bar's constructor could initialize the $foo member + variable by calling MediaWikiServices::getInstance()->getFoo(). This is + acceptable as a stepping stone, but should be replaced by proper injection + via a constructor argument. Do not however inject the MediaWikiServices + object! + +Migrate parameterized helper instantiation: +Assume class Bar creates some helper object by calling new Foo( $x ), +and Foo uses a global singleton of the Xyzzy service. +* Define a FooFactory class (or a FooFactory interface along with a MyFooFactory + implementation). FooFactory defines the method newFoo( $x ) or getFoo( $x ), + depending on the desired semantics (newFoo would guarantee a fresh instance). + When Foo gets refactored to have Xyzzy injected, FooFactory will need a + Xyzzy instance, so newFoo() can pass it to new Foo(). +* Add an instantiator function for FooFactory into ServiceWiring.php and add a + getFooFactory() method to MediaWikiServices. Don't forget to add the + appropriate test cases in MediaWikiServicesTest. +* The code in Bar that calls Foo's constructor should be changed to have a + FooFactory instance injected; Eventually, the only code that instantiates + Foo are implementations of FooFactory, and the only code that instantiates + FooFactory is the instantiator in ServiceWiring.php. +* As an intermediate step, Bar's constructor could initialize the $fooFactory + member variable by calling MediaWikiServices::getInstance()->getFooFactory(). + This is acceptable as a stepping stone, but should be replaced by proper + injection via a constructor argument. Do not however inject the + MediaWikiServices object! + +Migrate a handler registry: +Assume class Bar calls FooRegistry::getFoo( $x ) to get a specialized Foo +instance for handling $x. +* Turn getFoo into a non-static method. +* Add an instantiator function for FooRegistry into ServiceWiring.php and add + a getFooRegistry() method to MediaWikiServices. Don't forget to add the + appropriate test cases in MediaWikiServicesTest. +* Change all code that calls FooRegistry::getFoo() statically to call this + method on a FooRegistry instance. That is, Bar would have a $fooRegistry + member, initialized from a constructor parameter. +* As an intermediate step, Bar's constructor could initialize the $fooRegistry + member variable by calling MediaWikiServices::getInstance()-> + getFooRegistry(). This is acceptable as a stepping stone, but should be + replaced by proper injection via a constructor argument. Do not however + inject the MediaWikiServices object! + +Migrate deferred service instantiation: +Assume class Bar calls new Foo(), but only when needed, to avoid the cost of +instantiating Foo(). +* Define a FooFactory interface and a MyFooFactory implementation of that + interface. FooFactory defines the method getFoo() with no parameters. +* Precede as for the "parameterized helper instantiation" case described above. + +Migrate a class with only static methods: +Assume Foo is a class with only static methods, such as frob(), which +interacts with global state or system resources. +* Introduce a FooService interface and a DefaultFoo implementation of that + interface. FooService contains the public methods defined by Foo. +* Add an instantiator function for FooService into ServiceWiring.php and + add a getFooService() method to MediaWikiServices. Don't forget to + add the appropriate test cases in MediaWikiServicesTest. +* Add a private static getFooService() method to Foo. That method just + calls MediaWikiServices::getInstance()->getFooService(). +* Make all methods in Foo delegate to the FooService returned by + getFooService(). That is, Foo::frob() would do self::getFooService()->frob(). +* Deprecate Foo. Inject a FooService into all code that calls methods + on Foo, and change any calls to static methods in foo to the methods + provided by the FooService interface. + +Migrate static hook handler functions (to allow unit testing): +Assume MyExtHooks::onFoo is a static hook handler function that is called with +the parameter $x; Further assume MyExt::onFoo needs service Bar, which is +already known to MediaWikiServices (if not, see above). +* Create a non-static doFoo( $x ) method in MyExtHooks that has the same + signature as onFoo( $x ). Move the code from onFoo() into doFoo(), replacing + any access to global or static variables with access to instance member + variables. +* Add a constructor to MyExtHooks that takes a Bar service as a parameter. +* Add a static method called newFromGlobalState() with no parameters. It should + just return new MyExtHooks( MediaWikiServices::getBar() ). +* The original static handler method onFoo( $x ) is then implemented as + self::newFromGlobalState()->doFoo( $x ). + +Migrate a "smart record": +Assume Thingy is a "smart record" that "knows" how to load and store itself. +For this purpose, Thingy uses wfGetDB(). +* Create a "dumb" value class ThingyRecord that contains all the information + that Thingy represents (e.g. the information from a database row). The value + object should not know about any service. +* Create a DAO-style service for loading and storing ThingyRecords, called + ThingyStore. It may be useful to split the interfaces for reading and + writing, with a single class implementing both interfaces, so we in the + end have the ThingyLookup and ThingyStore interfaces, and a SqlThingyStore + implementation. +* Add instantiator functions for ThingyLookup and ThingyStore in + ServiceWiring.php. Since we want to use the same instance for both service + interfaces, the instantiator for ThingyLookup would return + $services->getThingyStore(). +* Add getThingyLookup() and getThingyStore methods to MediaWikiServices. + Don't forget to add the appropriate test cases in MediaWikiServicesTest. +* In the old Thingy class, replace all member variables that represent the + record's data with a single ThingyRecord object. +* In the old Thingy class, replace all calls to static methods or functions, + such as wfGetDB(), with calls to the appropriate services, such as + LoadBalancer::getConnection(). +* In Thingy's constructor, pull in any services needed, such as the + LoadBalancer, by using MediaWikiServices::getInstance(). These services + cannot be injected without changing the constructor signature, which + is often impractical for "smart records" that get instantiated directly + in many places in the code base. +* Deprecate the old Thingy class. Replace all usages of it with one of the + three new classes: loading needs a ThingyLookup, storing needs a ThingyStore, + and reading data needs a ThingyRecord. + +Migrate lazy loading: +Assume Thingy is a "smart record" as described above, but requires lazy loading +of some or all the data it represents. +* Instead of a plain object, define ThingyRecord to be an interface. Provide a + "simple" and "lazy" implementations, called SimpleThingyRecord and + LazyThingyRecord. LazyThingyRecord knows about some lower level storage + interface, like a LoadBalancer, and uses it to load information on demand. +* Any direct instantiation of a ThingyRecord would use the SimpleThingyRecord + implementation. +* SqlThingyStore however creates instances of LazyThingyRecord, and injects + whatever storage layer service LazyThingyRecord needs to perform lazy loading. + + diff --git a/docs/memcached.txt b/docs/memcached.txt index e914a3a6a7..8c59e72dd6 100644 --- a/docs/memcached.txt +++ b/docs/memcached.txt @@ -122,7 +122,7 @@ Lag time of the databases: key: $wgDBname:lag_times ex: wikidb:lag_times stores: array mapping the database id to its lag time - expriy: 5 secondes + expiry: 5 secondes cleared by: nothing Localisation: @@ -139,7 +139,7 @@ Message Cache: ex: wikidb:messages, wikidb:messages-hash, wikidb:messages-status stores: an array where the keys are DB keys and the values are messages set in: wfMessage(), Article::editUpdates() and Title::moveTo() - expriy: $wgMsgCacheExpiry + expiry: $wgMsgCacheExpiry cleared by: nothing Newtalk: @@ -194,14 +194,14 @@ Revision text: ex: wikidb:revisiontext:textid:1012 stores: text of a revision cleared by: nothing - expriry: $wgRevisionCacheExpiry + expiry: $wgRevisionCacheExpiry Sessions: controlled by: $wgSessionsInObjectCache key: $wgBDname:session:$id ex: wikidb:session:38d7c5b8d3bfc51egf40c69bc40f8be3 stores: $SESSION, useful when using a multi-sever wiki - expriy: one hour + expiry: one hour cleared by: session_destroy() Sidebar: @@ -210,7 +210,7 @@ Sidebar: key: $wgDBname:sidebar ex: wikidb:sidebar stores: the html output of the sidebar - expriy: $wgSidebarCacheExpiry + expiry: $wgSidebarCacheExpiry cleared by: MessageCache::replace() Special:Allpages: diff --git a/includes/Block.php b/includes/Block.php index b8e900d90a..93df004c5f 100644 --- a/includes/Block.php +++ b/includes/Block.php @@ -137,7 +137,7 @@ class Block { if ( $options['by'] ) { # Local user - $this->setBlocker( User::newFromID( $options['by'] ) ); + $this->setBlocker( User::newFromId( $options['by'] ) ); } else { # Foreign user $this->setBlocker( $options['byText'] ); @@ -568,7 +568,7 @@ class Block { if ( $this->forcedTargetID ) { $uid = $this->forcedTargetID; } else { - $uid = $this->target instanceof User ? $this->target->getID() : 0; + $uid = $this->target instanceof User ? $this->target->getId() : 0; } $a = [ diff --git a/includes/Collation.php b/includes/Collation.php deleted file mode 100644 index 7a3623d7d7..0000000000 --- a/includes/Collation.php +++ /dev/null @@ -1,648 +0,0 @@ -lang = Language::factory( 'en' ); - } - - function getSortKey( $string ) { - return $this->lang->uc( $string ); - } - - function getFirstLetter( $string ) { - if ( $string[0] == "\0" ) { - $string = substr( $string, 1 ); - } - return $this->lang->ucfirst( $this->lang->firstChar( $string ) ); - } -} - -/** - * Collation class that's essentially a no-op. - * - * Does sorting based on binary value of the string. - * Like how things were pre 1.17. - */ -class IdentityCollation extends Collation { - - function getSortKey( $string ) { - return $string; - } - - function getFirstLetter( $string ) { - global $wgContLang; - // Copied from UppercaseCollation. - // I'm kind of unclear on when this could happen... - if ( $string[0] == "\0" ) { - $string = substr( $string, 1 ); - } - return $wgContLang->firstChar( $string ); - } -} - -class IcuCollation extends Collation { - const FIRST_LETTER_VERSION = 2; - - /** @var Collator */ - private $primaryCollator; - - /** @var Collator */ - private $mainCollator; - - /** @var string */ - private $locale; - - /** @var Language */ - protected $digitTransformLanguage; - - /** @var array */ - private $firstLetterData; - - /** - * Unified CJK blocks. - * - * The same definition of a CJK block must be used for both Collation and - * generateCollationData.php. These blocks are omitted from the first - * letter data, as an optimisation measure and because the default UCA table - * is pretty useless for sorting Chinese text anyway. Japanese and Korean - * blocks are not included here, because they are smaller and more useful. - */ - private static $cjkBlocks = [ - [ 0x2E80, 0x2EFF ], // CJK Radicals Supplement - [ 0x2F00, 0x2FDF ], // Kangxi Radicals - [ 0x2FF0, 0x2FFF ], // Ideographic Description Characters - [ 0x3000, 0x303F ], // CJK Symbols and Punctuation - [ 0x31C0, 0x31EF ], // CJK Strokes - [ 0x3200, 0x32FF ], // Enclosed CJK Letters and Months - [ 0x3300, 0x33FF ], // CJK Compatibility - [ 0x3400, 0x4DBF ], // CJK Unified Ideographs Extension A - [ 0x4E00, 0x9FFF ], // CJK Unified Ideographs - [ 0xF900, 0xFAFF ], // CJK Compatibility Ideographs - [ 0xFE30, 0xFE4F ], // CJK Compatibility Forms - [ 0x20000, 0x2A6DF ], // CJK Unified Ideographs Extension B - [ 0x2A700, 0x2B73F ], // CJK Unified Ideographs Extension C - [ 0x2B740, 0x2B81F ], // CJK Unified Ideographs Extension D - [ 0x2F800, 0x2FA1F ], // CJK Compatibility Ideographs Supplement - ]; - - /** - * Additional characters (or character groups) to be considered separate - * letters for given languages, or to be removed from the list of such - * letters (denoted by keys starting with '-'). - * - * These are additions to (or subtractions from) the data stored in the - * first-letters-root.ser file (which among others includes full basic latin, - * cyrillic and greek alphabets). - * - * "Separate letter" is a letter that would have a separate heading/section - * for it in a dictionary or a phone book in this language. This data isn't - * used for sorting (the ICU library handles that), only for deciding which - * characters (or character groups) to use as headings. - * - * Initially generated based on the primary level of Unicode collation - * tailorings available at http://developer.mimer.com/charts/tailorings.htm , - * later modified. - * - * Empty arrays are intended; this signifies that the data for the language is - * available and that there are, in fact, no additional letters to consider. - */ - private static $tailoringFirstLetters = [ - // Verified by native speakers - 'be' => [ "Ё" ], - 'be-tarask' => [ "Ё" ], - 'cy' => [ "Ch", "Dd", "Ff", "Ng", "Ll", "Ph", "Rh", "Th" ], - 'en' => [], - 'fa' => [ "Ø¢", "Ø¡", "ه" ], - 'fi' => [ "Å", "Ä", "Ö" ], - 'fr' => [], - 'hu' => [ "Cs", "Dz", "Dzs", "Gy", "Ly", "Ny", "Ö", "Sz", "Ty", "Ü", "Zs" ], - 'is' => [ "Á", "Ð", "É", "Í", "Ó", "Ú", "Ý", "Þ", "Æ", "Ö", "Å" ], - 'it' => [], - 'lv' => [ "Č", "Ä¢", "Ķ", "Ä»", "Ņ", "Å ", "Ž" ], - 'pl' => [ "Ą", "Ć", "Ę", "Ł", "Ń", "Ó", "Ś", "Ź", "Å»" ], - 'pt' => [], - 'ru' => [], - 'sv' => [ "Å", "Ä", "Ö" ], - 'sv@collation=standard' => [ "Å", "Ä", "Ö" ], - 'uk' => [ "Ґ", "Ь" ], - 'vi' => [ "Ă", "Â", "Đ", "Ê", "Ô", "Æ ", "Ư" ], - // Not verified, but likely correct - 'af' => [], - 'ast' => [ "Ch", "Ll", "Ñ" ], - 'az' => [ "Ç", "Ə", "Ğ", "Ä°", "Ö", "Ş", "Ü" ], - 'bg' => [], - 'br' => [ "Ch", "C'h" ], - 'bs' => [ "Č", "Ć", "Dž", "Đ", "Lj", "Nj", "Å ", "Ž" ], - 'ca' => [], - 'co' => [], - 'cs' => [ "Č", "Ch", "Ř", "Å ", "Ž" ], - 'da' => [ "Æ", "Ø", "Å" ], - 'de' => [], - 'dsb' => [ "Č", "Ć", "Dź", "Ě", "Ch", "Ł", "Ń", "Ŕ", "Å ", "Ś", "Ž", "Ź" ], - 'el' => [], - 'eo' => [ "Ĉ", "Ĝ", "Ĥ", "Ä´", "Ŝ", "Ŭ" ], - 'es' => [ "Ñ" ], - 'et' => [ "Å ", "Ž", "Õ", "Ä", "Ö", "Ü", "W" ], // added W for CollationEt (xx-uca-et) - 'eu' => [ "Ñ" ], - 'fo' => [ "Á", "Ð", "Í", "Ó", "Ú", "Ý", "Æ", "Ø", "Å" ], - 'fur' => [ "À", "Á", "Â", "È", "Ì", "Ò", "Ù" ], - 'fy' => [], - 'ga' => [], - 'gd' => [], - 'gl' => [ "Ch", "Ll", "Ñ" ], - 'hr' => [ "Č", "Ć", "Dž", "Đ", "Lj", "Nj", "Å ", "Ž" ], - 'hsb' => [ "Č", "Dź", "Ě", "Ch", "Ł", "Ń", "Ř", "Å ", "Ć", "Ž" ], - 'kk' => [ "Ò®", "І" ], - 'kl' => [ "Æ", "Ø", "Å" ], - 'ku' => [ "Ç", "Ê", "Î", "Ş", "Û" ], - 'ky' => [ "Ё" ], - 'la' => [], - 'lb' => [], - 'lt' => [ "Č", "Å ", "Ž" ], - 'mk' => [], - 'mo' => [ "Ă", "Â", "Î", "Ş", "Å¢" ], - 'mt' => [ "Ċ", "Ä ", "Għ", "Ħ", "Å»" ], - 'nl' => [], - 'no' => [ "Æ", "Ø", "Å" ], - 'oc' => [], - 'rm' => [], - 'ro' => [ "Ă", "Â", "Î", "Ş", "Å¢" ], - 'rup' => [ "Ă", "Â", "Î", "Ľ", "Ń", "Ş", "Å¢" ], - 'sco' => [], - 'sk' => [ "Ä", "Č", "Ch", "Ô", "Å ", "Ž" ], - 'sl' => [ "Č", "Å ", "Ž" ], - 'smn' => [ "Á", "Č", "Đ", "Ŋ", "Å ", "Ŧ", "Ž", "Æ", "Ø", "Å", "Ä", "Ö" ], - 'sq' => [ "Ç", "Dh", "Ë", "Gj", "Ll", "Nj", "Rr", "Sh", "Th", "Xh", "Zh" ], - 'sr' => [], - 'tk' => [ "Ç", "Ä", "Ž", "Ň", "Ö", "Ş", "Ü", "Ý" ], - 'tl' => [ "Ñ", "Ng" ], - 'tr' => [ "Ç", "Ğ", "Ä°", "Ö", "Ş", "Ü" ], - 'tt' => [ "Ә", "Ó¨", "Ò®", "Җ", "Ò¢", "Òº" ], - 'uz' => [ "Ch", "G'", "Ng", "O'", "Sh" ], - ]; - - const RECORD_LENGTH = 14; - - function __construct( $locale ) { - if ( !extension_loaded( 'intl' ) ) { - throw new MWException( 'An ICU collation was requested, ' . - 'but the intl extension is not available.' ); - } - - $this->locale = $locale; - // Drop everything after the '@' in locale's name - $localeParts = explode( '@', $locale ); - $this->digitTransformLanguage = Language::factory( $locale === 'root' ? 'en' : $localeParts[0] ); - - $this->mainCollator = Collator::create( $locale ); - if ( !$this->mainCollator ) { - throw new MWException( "Invalid ICU locale specified for collation: $locale" ); - } - - $this->primaryCollator = Collator::create( $locale ); - $this->primaryCollator->setStrength( Collator::PRIMARY ); - } - - function getSortKey( $string ) { - // intl extension produces non null-terminated - // strings. Appending '' fixes it so that it doesn't generate - // a warning on each access in debug php. - MediaWiki\suppressWarnings(); - $key = $this->mainCollator->getSortKey( $string ) . ''; - MediaWiki\restoreWarnings(); - return $key; - } - - function getPrimarySortKey( $string ) { - MediaWiki\suppressWarnings(); - $key = $this->primaryCollator->getSortKey( $string ) . ''; - MediaWiki\restoreWarnings(); - return $key; - } - - function getFirstLetter( $string ) { - $string = strval( $string ); - if ( $string === '' ) { - return ''; - } - - // Check for CJK - $firstChar = mb_substr( $string, 0, 1, 'UTF-8' ); - if ( ord( $firstChar ) > 0x7f && self::isCjk( UtfNormal\Utils::utf8ToCodepoint( $firstChar ) ) ) { - return $firstChar; - } - - $sortKey = $this->getPrimarySortKey( $string ); - - // Do a binary search to find the correct letter to sort under - $min = ArrayUtils::findLowerBound( - [ $this, 'getSortKeyByLetterIndex' ], - $this->getFirstLetterCount(), - 'strcmp', - $sortKey ); - - if ( $min === false ) { - // Before the first letter - return ''; - } - return $this->getLetterByIndex( $min ); - } - - function getFirstLetterData() { - if ( $this->firstLetterData !== null ) { - return $this->firstLetterData; - } - - $cache = wfGetCache( CACHE_ANYTHING ); - $cacheKey = wfMemcKey( - 'first-letters', - $this->locale, - $this->digitTransformLanguage->getCode(), - self::getICUVersion() - ); - $cacheEntry = $cache->get( $cacheKey ); - - if ( $cacheEntry && isset( $cacheEntry['version'] ) - && $cacheEntry['version'] == self::FIRST_LETTER_VERSION - ) { - $this->firstLetterData = $cacheEntry; - return $this->firstLetterData; - } - - // Generate data from serialized data file - - if ( isset( self::$tailoringFirstLetters[$this->locale] ) ) { - $letters = wfGetPrecompiledData( "first-letters-root.ser" ); - // Append additional characters - $letters = array_merge( $letters, self::$tailoringFirstLetters[$this->locale] ); - // Remove unnecessary ones, if any - if ( isset( self::$tailoringFirstLetters['-' . $this->locale] ) ) { - $letters = array_diff( $letters, self::$tailoringFirstLetters['-' . $this->locale] ); - } - // Apply digit transforms - $digits = [ '0', '1', '2', '3', '4', '5', '6', '7', '8', '9' ]; - $letters = array_diff( $letters, $digits ); - foreach ( $digits as $digit ) { - $letters[] = $this->digitTransformLanguage->formatNum( $digit, true ); - } - } else { - $letters = wfGetPrecompiledData( "first-letters-{$this->locale}.ser" ); - if ( $letters === false ) { - throw new MWException( "MediaWiki does not support ICU locale " . - "\"{$this->locale}\"" ); - } - } - - /* Sort the letters. - * - * It's impossible to have the precompiled data file properly sorted, - * because the sort order changes depending on ICU version. If the - * array is not properly sorted, the binary search will return random - * results. - * - * We also take this opportunity to remove primary collisions. - */ - $letterMap = []; - foreach ( $letters as $letter ) { - $key = $this->getPrimarySortKey( $letter ); - if ( isset( $letterMap[$key] ) ) { - // Primary collision - // Keep whichever one sorts first in the main collator - if ( $this->mainCollator->compare( $letter, $letterMap[$key] ) < 0 ) { - $letterMap[$key] = $letter; - } - } else { - $letterMap[$key] = $letter; - } - } - ksort( $letterMap, SORT_STRING ); - - /* Remove duplicate prefixes. Basically if something has a sortkey - * which is a prefix of some other sortkey, then it is an - * expansion and probably should not be considered a section - * header. - * - * For example 'þ' is sometimes sorted as if it is the letters - * 'th'. Other times it is its own primary element. Another - * example is '₨'. Sometimes its a currency symbol. Sometimes it - * is an 'R' followed by an 's'. - * - * Additionally an expanded element should always sort directly - * after its first element due to they way sortkeys work. - * - * UCA sortkey elements are of variable length but no collation - * element should be a prefix of some other element, so I think - * this is safe. See: - * - https://ssl.icu-project.org/repos/icu/icuhtml/trunk/design/collation/ICU_collation_design.htm - * - http://site.icu-project.org/design/collation/uca-weight-allocation - * - * Additionally, there is something called primary compression to - * worry about. Basically, if you have two primary elements that - * are more than one byte and both start with the same byte then - * the first byte is dropped on the second primary. Additionally - * either \x03 or \xFF may be added to mean that the next primary - * does not start with the first byte of the first primary. - * - * This shouldn't matter much, as the first primary is not - * changed, and that is what we are comparing against. - * - * tl;dr: This makes some assumptions about how icu implements - * collations. It seems incredibly unlikely these assumptions - * will change, but nonetheless they are assumptions. - */ - - $prev = false; - $duplicatePrefixes = []; - foreach ( $letterMap as $key => $value ) { - // Remove terminator byte. Otherwise the prefix - // comparison will get hung up on that. - $trimmedKey = rtrim( $key, "\0" ); - if ( $prev === false || $prev === '' ) { - $prev = $trimmedKey; - // We don't yet have a collation element - // to compare against, so continue. - continue; - } - - // Due to the fact the array is sorted, we only have - // to compare with the element directly previous - // to the current element (skipping expansions). - // An element "X" will always sort directly - // before "XZ" (Unless we have "XY", but we - // do not update $prev in that case). - if ( substr( $trimmedKey, 0, strlen( $prev ) ) === $prev ) { - $duplicatePrefixes[] = $key; - // If this is an expansion, we don't want to - // compare the next element to this element, - // but to what is currently $prev - continue; - } - $prev = $trimmedKey; - } - foreach ( $duplicatePrefixes as $badKey ) { - wfDebug( "Removing '{$letterMap[$badKey]}' from first letters.\n" ); - unset( $letterMap[$badKey] ); - // This code assumes that unsetting does not change sort order. - } - $data = [ - 'chars' => array_values( $letterMap ), - 'keys' => array_keys( $letterMap ), - 'version' => self::FIRST_LETTER_VERSION, - ]; - - // Reduce memory usage before caching - unset( $letterMap ); - - // Save to cache - $this->firstLetterData = $data; - $cache->set( $cacheKey, $data, $cache::TTL_WEEK ); - return $data; - } - - function getLetterByIndex( $index ) { - if ( $this->firstLetterData === null ) { - $this->getFirstLetterData(); - } - return $this->firstLetterData['chars'][$index]; - } - - function getSortKeyByLetterIndex( $index ) { - if ( $this->firstLetterData === null ) { - $this->getFirstLetterData(); - } - return $this->firstLetterData['keys'][$index]; - } - - function getFirstLetterCount() { - if ( $this->firstLetterData === null ) { - $this->getFirstLetterData(); - } - return count( $this->firstLetterData['chars'] ); - } - - static function isCjk( $codepoint ) { - foreach ( self::$cjkBlocks as $block ) { - if ( $codepoint >= $block[0] && $codepoint <= $block[1] ) { - return true; - } - } - return false; - } - - /** - * Return the version of ICU library used by PHP's intl extension, - * or false when the extension is not installed of the version - * can't be determined. - * - * The constant INTL_ICU_VERSION this function refers to isn't really - * documented. It is available since PHP 5.3.7 (see PHP bug 54561). - * This function will return false on older PHPs. - * - * @since 1.21 - * @return string|bool - */ - static function getICUVersion() { - return defined( 'INTL_ICU_VERSION' ) ? INTL_ICU_VERSION : false; - } - - /** - * Return the version of Unicode appropriate for the version of ICU library - * currently in use, or false when it can't be determined. - * - * @since 1.21 - * @return string|bool - */ - static function getUnicodeVersionForICU() { - $icuVersion = IcuCollation::getICUVersion(); - if ( !$icuVersion ) { - return false; - } - - $versionPrefix = substr( $icuVersion, 0, 3 ); - // Source: http://site.icu-project.org/download - $map = [ - '50.' => '6.2', - '49.' => '6.1', - '4.8' => '6.0', - '4.6' => '6.0', - '4.4' => '5.2', - '4.2' => '5.1', - '4.0' => '5.1', - '3.8' => '5.0', - '3.6' => '5.0', - '3.4' => '4.1', - ]; - - if ( isset( $map[$versionPrefix] ) ) { - return $map[$versionPrefix]; - } else { - return false; - } - } -} - -/** - * Workaround for the lack of support of Sorani Kurdish / Central Kurdish language ('ckb') in ICU. - * - * Uses the same collation rules as Persian / Farsi ('fa'), but different characters for digits. - */ -class CollationCkb extends IcuCollation { - function __construct() { - // This will set $locale and collators, which affect the actual sorting order - parent::__construct( 'fa' ); - // Override the 'fa' language set by parent constructor, which affects #getFirstLetterData() - $this->digitTransformLanguage = Language::factory( 'ckb' ); - } -} - -/** - * Workaround for incorrect collation of Estonian language ('et') in ICU (bug 54168). - * - * 'W' and 'V' should not be considered the same letter for the purposes of collation in modern - * Estonian. We work around this by replacing 'W' and 'w' with 'á´¡' U+1D21 'LATIN LETTER SMALL - * CAPITAL W' for sortkey generation, which is collated like 'W' and is not tailored to have the - * same primary weight as 'V' in Estonian. - */ -class CollationEt extends IcuCollation { - function __construct() { - parent::__construct( 'et' ); - } - - private static function mangle( $string ) { - return str_replace( - [ 'w', 'W' ], - 'á´¡', // U+1D21 'LATIN LETTER SMALL CAPITAL W' - $string - ); - } - - private static function unmangle( $string ) { - // Casing data is lost… - return str_replace( - 'á´¡', // U+1D21 'LATIN LETTER SMALL CAPITAL W' - 'W', - $string - ); - } - - function getSortKey( $string ) { - return parent::getSortKey( self::mangle( $string ) ); - } - - function getFirstLetter( $string ) { - return self::unmangle( parent::getFirstLetter( self::mangle( $string ) ) ); - } -} diff --git a/includes/DefaultSettings.php b/includes/DefaultSettings.php index c04602c69b..10e6adbe48 100644 --- a/includes/DefaultSettings.php +++ b/includes/DefaultSettings.php @@ -585,10 +585,9 @@ $wgLockManagers = []; * Requires PHP's Exif extension: http://www.php.net/manual/en/ref.exif.php * * @note FOR WINDOWS USERS: - * To enable Exif functions, add the following lines to the "Windows + * To enable Exif functions, add the following line to the "Windows * extensions" section of php.ini: * @code{.ini} - * extension=extensions/php_mbstring.dll * extension=extensions/php_exif.dll * @endcode */ @@ -2288,7 +2287,7 @@ $wgSessionsInObjectCache = true; $wgObjectCacheSessionExpiry = 3600; /** - * @deprecated since 1.27, MediaWiki\\Session\\SessionManager doesn't use PHP session storage. + * @deprecated since 1.27, MediaWiki\Session\SessionManager doesn't use PHP session storage. */ $wgSessionHandler = null; @@ -3081,10 +3080,11 @@ $wgHtml5 = true; /** * Defines the value of the version attribute in the <html> tag, if any. - * If $wgAllowRdfaAttributes is true, and this evaluates to boolean false - * (like if it's left at the default null value), it will be auto-initialized - * to the correct value for RDFa+HTML5. As such, you should have no reason to - * ever actually set this to anything. + * + * If your wiki uses RDFa, set it to the correct value for RDFa+HTML5. + * Correct current values are 'HTML+RDFa 1.0' or 'XHTML+RDFa 1.0'. + * See also http://www.w3.org/TR/rdfa-in-html/#document-conformance + * @since 1.16 */ $wgHtml5Version = null; @@ -3105,17 +3105,6 @@ $wgHTMLFormAllowTableFormat = true; */ $wgUseMediaWikiUIEverywhere = false; -/** - * Enabled RDFa attributes for use in wikitext. - * NOTE: Interaction with HTML5 is somewhat underspecified. - */ -$wgAllowRdfaAttributes = false; - -/** - * Enabled HTML5 microdata attributes for use in wikitext. - */ -$wgAllowMicrodataAttributes = false; - /** * Should we try to make our HTML output well-formed XML? If set to false, * output will be a few bytes shorter, and the HTML will arguably be more @@ -3572,25 +3561,7 @@ $wgResourceLoaderMinifierMaxLineLength = 1000; * * @deprecated since 1.26: Always declare dependencies. */ -$wgIncludeLegacyJavaScript = true; - -/** - * Whether to ensure the mediawiki.util is loaded before other modules. - * - * Before MediaWiki 1.19, modules used to load less asynchronous which allowed - * modules to lack dependencies on 'popular' modules that were likely loaded already. - * - * This setting is to aid scripts during migration by providing mediawiki.util - * unconditionally (which was the most commonly missed dependency). It doesn't - * cover all missing dependencies obviously but should fix most of them. - * - * This should be removed at some point after site/user scripts have been fixed. - * Enable this if your wiki has a large amount of user/site scripts that are - * lacking dependencies. - * - * @deprecated since 1.26: Always declare dependencies. - */ -$wgPreloadJavaScriptMwUtil = false; +$wgIncludeLegacyJavaScript = false; /** * Whether or not to assign configuration variables to the global window object. @@ -4591,6 +4562,7 @@ $wgDefaultUserOptions = [ 'watchcreations' => 1, 'watchdefault' => 1, 'watchdeletion' => 0, + 'watchuploads' => 1, 'watchlistdays' => 3.0, 'watchlisthideanons' => 0, 'watchlisthidebots' => 0, @@ -4659,15 +4631,15 @@ $wgAuthenticationTokenVersion = null; * @since 1.27 */ $wgSessionProviders = [ - 'MediaWiki\\Session\\CookieSessionProvider' => [ - 'class' => 'MediaWiki\\Session\\CookieSessionProvider', + MediaWiki\Session\CookieSessionProvider::class => [ + 'class' => MediaWiki\Session\CookieSessionProvider::class, 'args' => [ [ 'priority' => 30, 'callUserSetCookiesHook' => true, ] ], ], - 'MediaWiki\\Session\\BotPasswordSessionProvider' => [ - 'class' => 'MediaWiki\\Session\\BotPasswordSessionProvider', + MediaWiki\Session\BotPasswordSessionProvider::class => [ + 'class' => MediaWiki\Session\BotPasswordSessionProvider::class, 'args' => [ [ 'priority' => 40, ] ], @@ -5973,7 +5945,7 @@ $wgCachePrefix = false; /** * Display the new debugging toolbar. This also enables profiling on database * queries and other useful output. - * Will disable file cache. + * Will be ignored if $wgUseFileCache or $wgUseSquid is enabled. * * @since 1.19 */ @@ -6238,14 +6210,15 @@ $wgGitBin = '/usr/bin/git'; * %h will be replaced by the short SHA-1 (7 first chars) and %H by the * full SHA-1 of the HEAD revision. * %r will be replaced with a URL-encoded version of $1. + * %R will be replaced with $1 and no URL-encoding * * @since 1.20 */ $wgGitRepositoryViewers = [ 'https://(?:[a-z0-9_]+@)?gerrit.wikimedia.org/r/(?:p/)?(.*)' => - 'https://git.wikimedia.org/tree/%r/%H', + 'https://phabricator.wikimedia.org/r/revision/%R;%H', 'ssh://(?:[a-z0-9_]+@)?gerrit.wikimedia.org:29418/(.*)' => - 'https://git.wikimedia.org/tree/%r/%H', + 'https://phabricator.wikimedia.org/r/revision/%R;%H', ]; /** @} */ # End of maintenance } @@ -6507,6 +6480,10 @@ $wgUnwatchedPageThreshold = false; * 'legend' => 'legend-msg', * // optional (defaults to 'flag'), CSS class to put on changes lists rows * 'class' => 'css-class', + * // optional (defaults to 'any'), how top-level flag is determined. 'any' + * // will set the top-level flag if any line contains the flag, 'all' will + * // only be set if all lines contain the flag. + * 'grouping' => 'any', * ); * @endcode * @@ -6517,23 +6494,27 @@ $wgRecentChangesFlags = [ 'letter' => 'newpageletter', 'title' => 'recentchanges-label-newpage', 'legend' => 'recentchanges-legend-newpage', + 'grouping' => 'any', ], 'minor' => [ 'letter' => 'minoreditletter', 'title' => 'recentchanges-label-minor', 'legend' => 'recentchanges-legend-minor', 'class' => 'minoredit', + 'grouping' => 'all', ], 'bot' => [ 'letter' => 'boteditletter', 'title' => 'recentchanges-label-bot', 'legend' => 'recentchanges-legend-bot', 'class' => 'botedit', + 'grouping' => 'all', ], 'unpatrolled' => [ 'letter' => 'unpatrolledletter', 'title' => 'recentchanges-label-unpatrolled', 'legend' => 'recentchanges-legend-unpatrolled', + 'grouping' => 'any', ], ]; @@ -6573,12 +6554,6 @@ $wgRightsText = null; */ $wgRightsIcon = null; -/** - * Set this to some HTML to override the rights icon with an arbitrary logo - * @deprecated since 1.18 Use $wgFooterIcons['copyright']['copyright'] - */ -$wgCopyrightIcon = null; - /** * Set this to true if you want detailed copyright information forms on Upload. */ @@ -6911,6 +6886,21 @@ $wgAuth = null; */ $wgHooks = []; +/** + * List of service wiring files to be loaded by the default instance of MediaWikiServices. + * Each file listed here is expected to return an associative array mapping service names + * to instantiator functions. Extensions may add wiring files to define their own services. + * However, this cannot be used to replace existing services - use the MediaWikiServices + * hook for that. + * + * @see MediaWikiServices + * @see ServiceContainer::loadWiringFiles() for details on loading service instantiator functions. + * @see docs/injection.txt for an overview of dependency injection in MediaWiki. + */ +$wgServiceWiringFiles = [ + __DIR__ . '/ServiceWiring.php' +]; + /** * Maps jobs to their handling classes; extensions * can add to this to provide custom jobs @@ -7218,6 +7208,7 @@ $wgLogActionsHandlers = [ 'move/move' => 'MoveLogFormatter', 'move/move_redir' => 'MoveLogFormatter', 'patrol/patrol' => 'PatrolLogFormatter', + 'patrol/autopatrol' => 'PatrolLogFormatter', 'protect/modify' => 'ProtectLogFormatter', 'protect/move_prot' => 'ProtectLogFormatter', 'protect/protect' => 'ProtectLogFormatter', @@ -7235,6 +7226,77 @@ $wgLogActionsHandlers = [ 'upload/upload' => 'UploadLogFormatter', ]; +/** + * List of log types that can be filtered by action types + * + * To each action is associated the list of log_action + * subtypes to search for, usually one, but not necessarily so + * Extensions may append to this array + * @since 1.27 + */ +$wgActionFilteredLogs = [ + 'block' => [ + 'block' => [ 'block' ], + 'reblock' => [ 'reblock' ], + 'unblock' => [ 'unblock' ], + ], + 'contentmodel' => [ + 'change' => [ 'change' ], + 'new' => [ 'new' ], + ], + 'delete' => [ + 'delete' => [ 'delete' ], + 'restore' => [ 'restore' ], + 'event' => [ 'event' ], + 'revision' => [ 'revision' ], + ], + 'import' => [ + 'interwiki' => [ 'interwiki' ], + 'upload' => [ 'upload' ], + ], + 'managetags' => [ + 'create' => [ 'create' ], + 'delete' => [ 'delete' ], + 'activate' => [ 'activate' ], + 'deactivate' => [ 'deactivate' ], + ], + 'move' => [ + 'move' => [ 'move' ], + 'move_redir' => [ 'move_redir' ], + ], + 'newusers' => [ + 'create' => [ 'create', 'newusers' ], + 'create2' => ['create2' ], + 'autocreate' => [ 'autocreate' ], + 'byemail' => [ 'byemail' ], + ], + 'patrol' => [ + 'patrol' => [ 'patrol' ], + 'autopatrol' => [ 'autopatrol' ], + ], + 'protect' => [ + 'protect' => [ 'protect' ], + 'modify' => [ 'modify' ], + 'unprotect' => [ 'unprotect' ], + 'move_prot' => ['move_prot'], + ], + 'rights' => [ + 'rights' => [ 'rights' ], + 'autopromote' => [ 'autopromote' ], + ], + 'suppress' => [ + 'event' => [ 'event' ], + 'revision' => [ 'revision' ], + 'delete' => [ 'delete' ], + 'block' => [ 'block' ], + 'reblock' => [ 'reblock' ], + ], + 'upload' => [ + 'upload' => [ 'upload' ], + 'overwrite' => [ 'overwrite' ], + ], +]; + /** * Maintain a log of newusers at Log/newusers? */ diff --git a/includes/EditPage.php b/includes/EditPage.php index 32687003c1..352253163c 100644 --- a/includes/EditPage.php +++ b/includes/EditPage.php @@ -530,11 +530,12 @@ class EditPage { if ( $permErrors ) { wfDebug( __METHOD__ . ": User can't edit\n" ); // Auto-block user's IP if the account was "hard" blocked - $user = $wgUser; - DeferredUpdates::addCallableUpdate( function() use ( $user ) { - $user->spreadAnyEditBlock(); - } ); - + if ( !wfReadOnly() ) { + $user = $wgUser; + DeferredUpdates::addCallableUpdate( function () use ( $user ) { + $user->spreadAnyEditBlock(); + } ); + } $this->displayPermissionsError( $permErrors ); return; @@ -1174,7 +1175,7 @@ class EditPage { * Get the content of the wanted revision, without section extraction. * * The result of this function can be used to compare user's input with - * section replaced in its context (using WikiPage::replaceSection()) + * section replaced in its context (using WikiPage::replaceSectionAtRev()) * to the original text of the edit. * * This differs from Article::getContent() that when a missing revision is @@ -1520,7 +1521,7 @@ class EditPage { // is if an extension hook aborted from inside ArticleSave. // Render the status object into $this->hookError // FIXME this sucks, we should just use the Status object throughout - $this->hookError = '
' . $status->getWikitext() . + $this->hookError = '
' . $status->getWikiText() . '
'; return true; } @@ -1735,7 +1736,9 @@ class EditPage { if ( $wgUser->isBlockedFrom( $this->mTitle, false ) ) { // Auto-block user's IP if the account was "hard" blocked - $wgUser->spreadAnyEditBlock(); + if ( !wfReadOnly() ) { + $wgUser->spreadAnyEditBlock(); + } # Check block state against master, thus 'false'. $status->setResult( false, self::AS_BLOCKED_PAGE_FOR_USER ); return $status; @@ -1979,7 +1982,7 @@ class EditPage { } elseif ( $this->section != '' ) { # Try to get a section anchor from the section source, redirect # to edited section if header found. - # XXX: Might be better to integrate this into Article::replaceSection + # XXX: Might be better to integrate this into Article::replaceSectionAtRev # for duplicate heading checking and maybe parsing. $hasmatch = preg_match( "/^ *([=]{1,6})(.*?)(\\1) *\\n/i", $this->textbox1, $matches ); # We can't deal with anchors, includes, html etc in the header for now, diff --git a/includes/Fallback.php b/includes/Fallback.php deleted file mode 100644 index 4c19dca267..0000000000 --- a/includes/Fallback.php +++ /dev/null @@ -1,172 +0,0 @@ - 0 ) { - if ( $splitPos > 256 ) { - // Optimize large string offsets by skipping ahead N bytes. - // This will cut out most of our slow time on Latin-based text, - // and 1/2 to 1/3 on East European and Asian scripts. - $bytePos = $splitPos; - while ( $bytePos < $byteLen && $str[$bytePos] >= "\x80" && $str[$bytePos] < "\xc0" ) { - ++$bytePos; - } - $charPos = mb_strlen( substr( $str, 0, $bytePos ) ); - } else { - $charPos = 0; - $bytePos = 0; - } - - while ( $charPos++ < $splitPos ) { - ++$bytePos; - // Move past any tail bytes - while ( $bytePos < $byteLen && $str[$bytePos] >= "\x80" && $str[$bytePos] < "\xc0" ) { - ++$bytePos; - } - } - } else { - $splitPosX = $splitPos + 1; - $charPos = 0; // relative to end of string; we don't care about the actual char position here - $bytePos = $byteLen; - while ( $bytePos > 0 && $charPos-- >= $splitPosX ) { - --$bytePos; - // Move past any tail bytes - while ( $bytePos > 0 && $str[$bytePos] >= "\x80" && $str[$bytePos] < "\xc0" ) { - --$bytePos; - } - } - } - - return $bytePos; - } - - /** - * Fallback implementation of mb_strlen, hardcoded to UTF-8. - * @param string $str - * @param string $enc Optional encoding; ignored - * @return int - */ - public static function mb_strlen( $str, $enc = '' ) { - $counts = count_chars( $str ); - $total = 0; - - // Count ASCII bytes - for ( $i = 0; $i < 0x80; $i++ ) { - $total += $counts[$i]; - } - - // Count multibyte sequence heads - for ( $i = 0xc0; $i < 0xff; $i++ ) { - $total += $counts[$i]; - } - return $total; - } - - /** - * Fallback implementation of mb_strpos, hardcoded to UTF-8. - * @param string $haystack - * @param string $needle - * @param string $offset Optional start position - * @param string $encoding Optional encoding; ignored - * @return int - */ - public static function mb_strpos( $haystack, $needle, $offset = 0, $encoding = '' ) { - $needle = preg_quote( $needle, '/' ); - - $ar = []; - preg_match( '/' . $needle . '/u', $haystack, $ar, PREG_OFFSET_CAPTURE, $offset ); - - if ( isset( $ar[0][1] ) ) { - return $ar[0][1]; - } else { - return false; - } - } - - /** - * Fallback implementation of mb_strrpos, hardcoded to UTF-8. - * @param string $haystack - * @param string $needle - * @param string $offset Optional start position - * @param string $encoding Optional encoding; ignored - * @return int - */ - public static function mb_strrpos( $haystack, $needle, $offset = 0, $encoding = '' ) { - $needle = preg_quote( $needle, '/' ); - - $ar = []; - preg_match_all( '/' . $needle . '/u', $haystack, $ar, PREG_OFFSET_CAPTURE, $offset ); - - if ( isset( $ar[0] ) && count( $ar[0] ) > 0 && - isset( $ar[0][count( $ar[0] ) - 1][1] ) ) { - return $ar[0][count( $ar[0] ) - 1][1]; - } else { - return false; - } - } -} diff --git a/includes/FauxRequest.php b/includes/FauxRequest.php index c2108f207a..158c8521fe 100644 --- a/includes/FauxRequest.php +++ b/includes/FauxRequest.php @@ -39,7 +39,7 @@ class FauxRequest extends WebRequest { * @param array $data Array of *non*-urlencoded key => value pairs, the * fake GET/POST values * @param bool $wasPosted Whether to treat the data as POST - * @param MediaWiki\\Session\\Session|array|null $session Session, session + * @param MediaWiki\Session\Session|array|null $session Session, session * data array, or null * @param string $protocol 'http' or 'https' * @throws MWException diff --git a/includes/GitInfo.php b/includes/GitInfo.php index 29516ab7cd..de7e8c28e2 100644 --- a/includes/GitInfo.php +++ b/includes/GitInfo.php @@ -257,9 +257,6 @@ class GitInfo { if ( $url === false ) { return false; } - if ( substr( $url, -4 ) !== '.git' ) { - $url .= '.git'; - } foreach ( self::getViewers() as $repo => $viewer ) { $pattern = '#^' . $repo . '$#'; if ( preg_match( $pattern, $url, $matches ) ) { @@ -269,6 +266,7 @@ class GitInfo { '%h' => substr( $headSHA1, 0, 7 ), '%H' => $headSHA1, '%r' => urlencode( $matches[1] ), + '%R' => $matches[1], ]; return strtr( $viewerUrl, $replacements ); } diff --git a/includes/GlobalFunctions.php b/includes/GlobalFunctions.php index 3fa91fa700..5c42bc26cf 100644 --- a/includes/GlobalFunctions.php +++ b/includes/GlobalFunctions.php @@ -39,59 +39,6 @@ use MediaWiki\Session\SessionManager; * PHP extensions may be included here. */ -if ( !function_exists( 'mb_substr' ) ) { - /** - * @codeCoverageIgnore - * @see Fallback::mb_substr - * @return string - */ - function mb_substr( $str, $start, $count = 'end' ) { - return Fallback::mb_substr( $str, $start, $count ); - } - - /** - * @codeCoverageIgnore - * @see Fallback::mb_substr_split_unicode - * @return int - */ - function mb_substr_split_unicode( $str, $splitPos ) { - return Fallback::mb_substr_split_unicode( $str, $splitPos ); - } -} - -if ( !function_exists( 'mb_strlen' ) ) { - /** - * @codeCoverageIgnore - * @see Fallback::mb_strlen - * @return int - */ - function mb_strlen( $str, $enc = '' ) { - return Fallback::mb_strlen( $str, $enc ); - } -} - -if ( !function_exists( 'mb_strpos' ) ) { - /** - * @codeCoverageIgnore - * @see Fallback::mb_strpos - * @return int - */ - function mb_strpos( $haystack, $needle, $offset = 0, $encoding = '' ) { - return Fallback::mb_strpos( $haystack, $needle, $offset, $encoding ); - } -} - -if ( !function_exists( 'mb_strrpos' ) ) { - /** - * @codeCoverageIgnore - * @see Fallback::mb_strrpos - * @return int - */ - function mb_strrpos( $haystack, $needle, $offset = 0, $encoding = '' ) { - return Fallback::mb_strrpos( $haystack, $needle, $offset, $encoding ); - } -} - // hash_equals function only exists in PHP >= 5.6.0 // http://php.net/hash_equals if ( !function_exists( 'hash_equals' ) ) { @@ -2990,7 +2937,7 @@ function wfBaseConvert( $input, $sourceBase, $destBase, $pad = 1, /** * @deprecated since 1.27, PHP's session generation isn't used with - * MediaWiki\\Session\\SessionManager + * MediaWiki\Session\SessionManager */ function wfFixSessionID() { wfDeprecated( __FUNCTION__, '1.27' ); @@ -2999,7 +2946,7 @@ function wfFixSessionID() { /** * Reset the session id * - * @deprecated since 1.27, use MediaWiki\\Session\\SessionManager instead + * @deprecated since 1.27, use MediaWiki\Session\SessionManager instead * @since 1.22 */ function wfResetSessionID() { @@ -3021,7 +2968,7 @@ function wfResetSessionID() { /** * Initialise php session * - * @deprecated since 1.27, use MediaWiki\\Session\\SessionManager instead. + * @deprecated since 1.27, use MediaWiki\Session\SessionManager instead. * Generally, "using" SessionManager will be calling ->getSessionById() or * ::getGlobalSession() (depending on whether you were passing $sessionId * here), then calling $session->persist(). diff --git a/includes/HistoryBlob.php b/includes/HistoryBlob.php index 87fc0122e7..8673125550 100644 --- a/includes/HistoryBlob.php +++ b/includes/HistoryBlob.php @@ -263,7 +263,7 @@ class HistoryBlobStub { if ( !isset( $parts[1] ) || $parts[1] == '' ) { return false; } - $row->old_text = ExternalStore::fetchFromUrl( $url ); + $row->old_text = ExternalStore::fetchFromURL( $url ); } diff --git a/includes/Html.php b/includes/Html.php index 3b360392d1..890beb0e0d 100644 --- a/includes/Html.php +++ b/includes/Html.php @@ -216,7 +216,7 @@ class Html { if ( in_array( $element, self::$voidElements ) ) { if ( $wgWellFormedXml ) { // Silly XML. - return substr( $start, 0, -1 ) . ' />'; + return substr( $start, 0, -1 ) . '/>'; } return $start; } else { diff --git a/includes/HtmlFormatter.php b/includes/HtmlFormatter.php index 5b8122dcca..9bae8b5fef 100644 --- a/includes/HtmlFormatter.php +++ b/includes/HtmlFormatter.php @@ -1,7 +1,7 @@ html = $html; - } - - /** - * Turns a chunk of HTML into a proper document - * @param string $html - * @return string - */ - public static function wrapHTML( $html ) { - return '' . $html . ''; - } - - /** - * Override this in descendant class to modify HTML after it has been converted from DOM tree - * @param string $html HTML to process - * @return string Processed HTML - */ - protected function onHtmlReady( $html ) { - return $html; - } - - /** - * @return DOMDocument DOM to manipulate - */ - public function getDoc() { - if ( !$this->doc ) { - // DOMDocument::loadHTML apparently isn't very good with encodings, so - // convert input to ASCII by encoding everything above 128 as entities. - if ( function_exists( 'mb_convert_encoding' ) ) { - $html = mb_convert_encoding( $this->html, 'HTML-ENTITIES', 'UTF-8' ); - } else { - $html = preg_replace_callback( '/[\x{80}-\x{10ffff}]/u', function ( $m ) { - return '&#' . UtfNormal\Utils::utf8ToCodepoint( $m[0] ) . ';'; - }, $this->html ); - } - - // Workaround for bug that caused spaces before references - // to disappear during processing: https://phabricator.wikimedia.org/T55086 - // TODO: Please replace with a better fix if one can be found. - $html = str_replace( ' <', ' <', $html ); - - libxml_use_internal_errors( true ); - $loader = libxml_disable_entity_loader(); - $this->doc = new DOMDocument(); - $this->doc->strictErrorChecking = false; - $this->doc->loadHTML( $html ); - libxml_disable_entity_loader( $loader ); - libxml_use_internal_errors( false ); - $this->doc->encoding = 'UTF-8'; - } - return $this->doc; - } - - /** - * Sets whether images/videos/sounds should be removed from output - * @param bool $flag - */ - public function setRemoveMedia( $flag = true ) { - $this->removeMedia = $flag; - } - - /** - * Adds one or more selector of content to remove. A subset of CSS selector - * syntax is supported: - * - * - * .class - * . - * # - * - * @param array|string $selectors Selector(s) of stuff to remove - */ - public function remove( $selectors ) { - $this->itemsToRemove = array_merge( $this->itemsToRemove, (array)$selectors ); - } - - /** - * Adds one or more element name to the list to flatten (remove tag, but not its content) - * Can accept undelimited regexes - * - * Note this interface may fail in surprising unexpected ways due to usage of regexes, - * so should not be relied on for HTML markup security measures. - * - * @param array|string $elements Name(s) of tag(s) to flatten - */ - public function flatten( $elements ) { - $this->elementsToFlatten = array_merge( $this->elementsToFlatten, (array)$elements ); - } - - /** - * Instructs the formatter to flatten all tags - */ - public function flattenAllTags() { - $this->flatten( '[?!]?[a-z0-9]+' ); - } - - /** - * Removes content we've chosen to remove. The text of the removed elements can be - * extracted with the getText method. - * @return array Array of removed DOMElements - */ - public function filterContent() { - $removals = $this->parseItemsToRemove(); - - // Bail out early if nothing to do - if ( array_reduce( $removals, - function ( $carry, $item ) { - return $carry && !$item; - }, - true - ) ) { - return []; - } - - $doc = $this->getDoc(); - - // Remove tags - - // You can't remove DOMNodes from a DOMNodeList as you're iterating - // over them in a foreach loop. It will seemingly leave the internal - // iterator on the foreach out of wack and results will be quite - // strange. Though, making a queue of items to remove seems to work. - $domElemsToRemove = []; - foreach ( $removals['TAG'] as $tagToRemove ) { - $tagToRemoveNodes = $doc->getElementsByTagName( $tagToRemove ); - foreach ( $tagToRemoveNodes as $tagToRemoveNode ) { - if ( $tagToRemoveNode ) { - $domElemsToRemove[] = $tagToRemoveNode; - } - } - } - $removed = $this->removeElements( $domElemsToRemove ); - - // Elements with named IDs - $domElemsToRemove = []; - foreach ( $removals['ID'] as $itemToRemove ) { - $itemToRemoveNode = $doc->getElementById( $itemToRemove ); - if ( $itemToRemoveNode ) { - $domElemsToRemove[] = $itemToRemoveNode; - } - } - $removed = array_merge( $removed, $this->removeElements( $domElemsToRemove ) ); - - // CSS Classes - $domElemsToRemove = []; - $xpath = new DOMXPath( $doc ); - foreach ( $removals['CLASS'] as $classToRemove ) { - $elements = $xpath->query( '//*[contains(@class, "' . $classToRemove . '")]' ); - - /** @var $element DOMElement */ - foreach ( $elements as $element ) { - $classes = $element->getAttribute( 'class' ); - if ( preg_match( "/\b$classToRemove\b/", $classes ) && $element->parentNode ) { - $domElemsToRemove[] = $element; - } - } - } - $removed = array_merge( $removed, $this->removeElements( $domElemsToRemove ) ); - - // Tags with CSS Classes - foreach ( $removals['TAG_CLASS'] as $classToRemove ) { - $parts = explode( '.', $classToRemove ); - - $elements = $xpath->query( - '//' . $parts[0] . '[@class="' . $parts[1] . '"]' - ); - $removed = array_merge( $removed, $this->removeElements( $elements ) ); - } - - return $removed; - } - - /** - * Removes a list of elelments from DOMDocument - * @param array|DOMNodeList $elements - * @return array Array of removed elements - */ - private function removeElements( $elements ) { - $list = $elements; - if ( $elements instanceof DOMNodeList ) { - $list = []; - foreach ( $elements as $element ) { - $list[] = $element; - } - } - /** @var $element DOMElement */ - foreach ( $list as $element ) { - if ( $element->parentNode ) { - $element->parentNode->removeChild( $element ); - } - } - return $list; - } - - /** - * libxml in its usual pointlessness converts many chars to entities - this function - * perfoms a reverse conversion - * @param string $html - * @return string - */ - private function fixLibXML( $html ) { - static $replacements; - if ( !$replacements ) { - // We don't include rules like '"' => '&quot;' because entities had already been - // normalized by libxml. Using this function with input not sanitized by libxml is UNSAFE! - $replacements = new ReplacementArray( [ - '"' => '&quot;', - '&' => '&amp;', - '<' => '&lt;', - '>' => '&gt;', - ] ); - } - $html = $replacements->replace( $html ); - - if ( function_exists( 'mb_convert_encoding' ) ) { - // Just in case the conversion in getDoc() above used named - // entities that aren't known to html_entity_decode(). - $html = mb_convert_encoding( $html, 'UTF-8', 'HTML-ENTITIES' ); - } else { - $html = html_entity_decode( $html, ENT_COMPAT, 'utf-8' ); - } - return $html; - } - - /** - * Performs final transformations and returns resulting HTML. Note that if you want to call this - * both without an element and with an element you should call it without an element first. If you - * specify the $element in the method it'll change the underlying dom and you won't be able to get - * it back. - * - * @param DOMElement|string|null $element ID of element to get HTML from or - * false to get it from the whole tree - * @return string Processed HTML - */ - public function getText( $element = null ) { - - if ( $this->doc ) { - if ( $element !== null && !( $element instanceof DOMElement ) ) { - $element = $this->doc->getElementById( $element ); - } - if ( $element ) { - $body = $this->doc->getElementsByTagName( 'body' )->item( 0 ); - $nodesArray = []; - foreach ( $body->childNodes as $node ) { - $nodesArray[] = $node; - } - foreach ( $nodesArray as $nodeArray ) { - $body->removeChild( $nodeArray ); - } - $body->appendChild( $element ); - } - $html = $this->doc->saveHTML(); - - $html = $this->fixLibXml( $html ); - if ( wfIsWindows() ) { - // Cleanup for CRLF misprocessing of unknown origin on Windows. - // If this error continues in the future, please track it down in the - // XML code paths if possible and fix there. - $html = str_replace( ' ', '', $html ); - } - } else { - $html = $this->html; - } - // Remove stuff added by wrapHTML() - $html = preg_replace( '/|^.*?|<\/body>.*$/s', '', $html ); - $html = $this->onHtmlReady( $html ); - - if ( $this->elementsToFlatten ) { - $elements = implode( '|', $this->elementsToFlatten ); - $html = preg_replace( "#]*>#is", '', $html ); - } - - return $html; - } - - /** - * Helper function for parseItemsToRemove(). This function extracts the selector type - * and the raw name of a selector from a CSS-style selector string and assigns those - * values to parameters passed by reference. For example, if given '#toc' as the - * $selector parameter, it will assign 'ID' as the $type and 'toc' as the $rawName. - * @param string $selector CSS selector to parse - * @param string $type The type of selector (ID, CLASS, TAG_CLASS, or TAG) - * @param string $rawName The raw name of the selector - * @return bool Whether the selector was successfully recognised - * @throws MWException - */ - protected function parseSelector( $selector, &$type, &$rawName ) { - if ( strpos( $selector, '.' ) === 0 ) { - $type = 'CLASS'; - $rawName = substr( $selector, 1 ); - } elseif ( strpos( $selector, '#' ) === 0 ) { - $type = 'ID'; - $rawName = substr( $selector, 1 ); - } elseif ( strpos( $selector, '.' ) !== 0 && strpos( $selector, '.' ) !== false ) { - $type = 'TAG_CLASS'; - $rawName = $selector; - } elseif ( strpos( $selector, '[' ) === false && strpos( $selector, ']' ) === false ) { - $type = 'TAG'; - $rawName = $selector; - } else { - throw new MWException( __METHOD__ . "(): unrecognized selector '$selector'" ); - } - - return true; - } - - /** - * Transforms CSS-style selectors into an internal representation suitable for - * processing by filterContent() - * @return array - */ - protected function parseItemsToRemove() { - $removals = [ - 'ID' => [], - 'TAG' => [], - 'CLASS' => [], - 'TAG_CLASS' => [], - ]; - - foreach ( $this->itemsToRemove as $itemToRemove ) { - $type = ''; - $rawName = ''; - if ( $this->parseSelector( $itemToRemove, $type, $rawName ) ) { - $removals[$type][] = $rawName; - } - } - - if ( $this->removeMedia ) { - $removals['TAG'][] = 'img'; - $removals['TAG'][] = 'audio'; - $removals['TAG'][] = 'video'; - } - - return $removals; - } +class HtmlFormatter extends HtmlFormatter\HtmlFormatter { } diff --git a/includes/HttpFunctions.php b/includes/HttpFunctions.php index f980a93d56..b12f49f0b0 100644 --- a/includes/HttpFunctions.php +++ b/includes/HttpFunctions.php @@ -80,7 +80,7 @@ class Http { } else { $errors = $status->getErrorsByType( 'error' ); $logger = LoggerFactory::getInstance( 'http' ); - $logger->warning( $status->getWikiText( null, null, 'en' ), + $logger->warning( $status->getWikiText( false, false, 'en' ), [ 'error' => $errors, 'caller' => $caller, 'content' => $req->getContent() ] ); return false; } @@ -192,6 +192,26 @@ class Http { $uri ); } + + /** + * Gets the relevant proxy from $wgHTTPProxy/http_proxy (when set). + * + * @return mixed The proxy address or an empty string if not set. + */ + public static function getProxy() { + global $wgHTTPProxy; + + if ( $wgHTTPProxy ) { + return $wgHTTPProxy; + } + + $envHttpProxy = getenv( "http_proxy" ); + if ( $envHttpProxy ) { + return $envHttpProxy; + } + + return ""; + } } /** @@ -368,8 +388,6 @@ class MWHttpRequest { * @return void */ public function proxySetup() { - global $wgHTTPProxy; - // If there is an explicit proxy set and proxies are not disabled, then use it if ( $this->proxy && !$this->noProxy ) { return; @@ -379,10 +397,8 @@ class MWHttpRequest { // local URL and proxies are not disabled if ( Http::isLocalURL( $this->url ) || $this->noProxy ) { $this->proxy = ''; - } elseif ( $wgHTTPProxy ) { - $this->proxy = $wgHTTPProxy; - } elseif ( getenv( "http_proxy" ) ) { - $this->proxy = getenv( "http_proxy" ); + } else { + $this->proxy = Http::getProxy(); } } @@ -991,7 +1007,7 @@ class PhpHttpRequest extends MWHttpRequest { ]; if ( $this->proxy ) { - $options['http']['proxy'] = $this->urlToTCP( $this->proxy ); + $options['http']['proxy'] = $this->urlToTcp( $this->proxy ); $options['http']['request_fulluri'] = true; } diff --git a/includes/Linker.php b/includes/Linker.php index 43df8397cf..4ba3a755a3 100644 --- a/includes/Linker.php +++ b/includes/Linker.php @@ -992,7 +992,7 @@ class Linker { */ public static function makeMediaLinkFile( Title $title, $file, $html = '' ) { if ( $file && $file->exists() ) { - $url = $file->getURL(); + $url = $file->getUrl(); $class = 'internal'; } else { $url = self::getUploadUrl( $title ); diff --git a/includes/MediaWiki.php b/includes/MediaWiki.php index 45a13853e4..ad02e68bb5 100644 --- a/includes/MediaWiki.php +++ b/includes/MediaWiki.php @@ -246,13 +246,13 @@ class MediaWiki { } elseif ( !$this->tryNormaliseRedirect( $title ) ) { // Prevent information leak via Special:MyPage et al (T109724) if ( $title->isSpecialPage() ) { - $specialPage = SpecialPageFactory::getPage( $title->getDBKey() ); + $specialPage = SpecialPageFactory::getPage( $title->getDBkey() ); if ( $specialPage instanceof RedirectSpecialPage ) { $specialPage->setContext( $this->context ); if ( $this->config->get( 'HideIdentifiableRedirects' ) && $specialPage->personallyIdentifiableTarget() ) { - list( , $subpage ) = SpecialPageFactory::resolveAlias( $title->getDBKey() ); + list( , $subpage ) = SpecialPageFactory::resolveAlias( $title->getDBkey() ); $target = $specialPage->getRedirect( $subpage ); // target can also be true. We let that case fall through to normal processing. if ( $target instanceof Title ) { @@ -830,9 +830,18 @@ class MediaWiki { $errno = $errstr = null; $info = wfParseUrl( $this->config->get( 'Server' ) ); MediaWiki\suppressWarnings(); + $host = $info['host']; + $port = 80; + if ( isset( $info['scheme'] ) && $info['scheme'] == 'https' ) { + $host = "tls://" . $host; + $port = 443; + } + if ( isset( $info['port'] ) ) { + $port = $info['port']; + } $sock = fsockopen( - $info['host'], - isset( $info['port'] ) ? $info['port'] : 80, + $host, + $port, $errno, $errstr, // If it takes more than 100ms to connect to ourselves there diff --git a/includes/MediaWikiServices.php b/includes/MediaWikiServices.php new file mode 100644 index 0000000000..7b1def9eae --- /dev/null +++ b/includes/MediaWikiServices.php @@ -0,0 +1,153 @@ +get( 'ServiceWiringFiles' ); + $instance->loadWiringFiles( $wiringFiles ); + + // Provide a traditional hook point to allow extensions to configure services. + Hooks::run( 'MediaWikiServices', [ $instance ] ); + } + + return $instance; + } + + /** + * @param Config $config The Config object to be registered as the 'BootstrapConfig' service. + * This has to contain at least the information needed to set up the 'ConfigFactory' + * service. + */ + public function __construct( Config $config ) { + parent::__construct(); + + // register the given Config object as the bootstrap config service. + $this->defineService( 'BootstrapConfig', function() use ( $config ) { + return $config; + } ); + } + + /** + * Returns the Config object containing the bootstrap configuration. + * Bootstrap configuration would typically include database credentials + * and other information that may be needed before the ConfigFactory + * service can be instantiated. + * + * @note This should only be used during bootstrapping, in particular + * when creating the MainConfig service. Application logic should + * use getMainConfig() to get a Config instances. + * + * @return Config + */ + public function getBootstrapConfig() { + return $this->getService( 'BootstrapConfig' ); + } + + /** + * @return ConfigFactory + */ + public function getConfigFactory() { + return $this->getService( 'ConfigFactory' ); + } + + /** + * Returns the Config object that provides configuration for MediaWiki core. + * This may or may not be the same object that is returned by getBootstrapConfig(). + * + * @return Config + */ + public function getMainConfig() { + return $this->getService( 'MainConfig' ); + } + + /** + * @return SiteLookup + */ + public function getSiteLookup() { + return $this->getService( 'SiteLookup' ); + } + + /** + * @return SiteStore + */ + public function getSiteStore() { + return $this->getService( 'SiteStore' ); + } + + /////////////////////////////////////////////////////////////////////////// + // NOTE: When adding a service getter here, don't forget to add a test + // case for it in MediaWikiServicesTest::provideGetters() and in + // MediaWikiServicesTest::provideGetService()! + /////////////////////////////////////////////////////////////////////////// + +} diff --git a/includes/MergeHistory.php b/includes/MergeHistory.php index a92056dda5..441fe9e2c0 100644 --- a/includes/MergeHistory.php +++ b/includes/MergeHistory.php @@ -51,7 +51,7 @@ class MergeHistory { /** @var string SQL WHERE condition that selects source revisions to insert into destination */ protected $timeWhere; - /** @var MWTimestamp|boolean Timestamp upto which history from the source will be merged */ + /** @var MWTimestamp|bool Timestamp upto which history from the source will be merged */ protected $timestampLimit; /** @var integer Number of revisions merged (for Special:MergeHistory success message) */ @@ -61,7 +61,7 @@ class MergeHistory { * MergeHistory constructor. * @param Title $source Page from which history will be merged * @param Title $dest Page to which history will be merged - * @param string|boolean $timestamp Timestamp up to which history from the source will be merged + * @param string|bool $timestamp Timestamp up to which history from the source will be merged */ public function __construct( Title $source, Title $dest, $timestamp = false ) { // Save the parameters diff --git a/includes/Message.php b/includes/Message.php index 9d5f5e642a..fd016fcb37 100644 --- a/includes/Message.php +++ b/includes/Message.php @@ -160,19 +160,18 @@ class Message implements MessageSpecifier, Serializable { /** * In which language to get this message. True, which is the default, - * means the current interface language, false content language. + * means the current user language, false content language. * * @var bool */ protected $interface = true; /** - * In which language to get this message. Overrides the $interface - * variable. + * In which language to get this message. Overrides the $interface setting. * - * @var Language + * @var Language|bool Explicit language object, or false for user language */ - protected $language = null; + protected $language = false; /** * @var string The message key. If $keysToTry has more than one element, @@ -225,18 +224,14 @@ class Message implements MessageSpecifier, Serializable { /** * @since 1.17 - * * @param string|string[]|MessageSpecifier $key Message key, or array of * message keys to try and use the first non-empty message for, or a * MessageSpecifier to copy from. * @param array $params Message parameters. - * @param Language $language Optional language of the message, defaults to $wgLang. - * + * @param Language $language [optional] Language to use (defaults to current user language). * @throws InvalidArgumentException */ public function __construct( $key, $params = [], Language $language = null ) { - global $wgLang; - if ( $key instanceof MessageSpecifier ) { if ( $params ) { throw new InvalidArgumentException( @@ -260,7 +255,9 @@ class Message implements MessageSpecifier, Serializable { $this->key = reset( $this->keysToTry ); $this->parameters = array_values( $params ); - $this->language = $language ?: $wgLang; + // User language is only resolved in getLanguage(). This helps preserve the + // semantic intent of "user language" across serialize() and unserialize(). + $this->language = $language ?: false; } /** @@ -271,7 +268,7 @@ class Message implements MessageSpecifier, Serializable { public function serialize() { return serialize( [ 'interface' => $this->interface, - 'language' => $this->language instanceof StubUserLang ? false : $this->language->getCode(), + 'language' => $this->language ? $this->language->getCode() : false, 'key' => $this->key, 'keysToTry' => $this->keysToTry, 'parameters' => $this->parameters, @@ -287,8 +284,6 @@ class Message implements MessageSpecifier, Serializable { * @param string $serialized */ public function unserialize( $serialized ) { - global $wgLang; - $data = unserialize( $serialized ); $this->interface = $data['interface']; $this->key = $data['key']; @@ -296,7 +291,7 @@ class Message implements MessageSpecifier, Serializable { $this->parameters = $data['parameters']; $this->format = $data['format']; $this->useDatabase = $data['useDatabase']; - $this->language = $data['language'] ? Language::factory( $data['language'] ) : $wgLang; + $this->language = $data['language'] ? Language::factory( $data['language'] ) : false; $this->title = $data['title']; } @@ -365,7 +360,8 @@ class Message implements MessageSpecifier, Serializable { * @return Language */ public function getLanguage() { - return $this->language; + // Defaults to false which means current user language + return $this->language ?: RequestContext::getMain()->getLanguage(); } /** @@ -425,7 +421,7 @@ class Message implements MessageSpecifier, Serializable { public function getTitle() { global $wgContLang, $wgForceUIMsgAsContentMsg; - $code = $this->language->getCode(); + $code = $this->getLanguage()->getCode(); $title = $this->key; if ( $wgContLang->getCode() !== $code @@ -656,23 +652,24 @@ class Message implements MessageSpecifier, Serializable { /** * Request the message in any language that is supported. + * * As a side effect interface message status is unconditionally * turned off. * * @since 1.17 - * * @param Language|string $lang Language code or Language object. - * * @return Message $this * @throws MWException */ public function inLanguage( $lang ) { - if ( $lang instanceof Language || $lang instanceof StubUserLang ) { + if ( $lang instanceof Language ) { $this->language = $lang; } elseif ( is_string( $lang ) ) { if ( !$this->language instanceof Language || $this->language->getCode() != $lang ) { $this->language = Language::factory( $lang ); } + } elseif ( $lang instanceof StubUserLang ) { + $this->language = false; } else { $type = gettype( $lang ); throw new MWException( __METHOD__ . " must be " @@ -1061,17 +1058,17 @@ class Message implements MessageSpecifier, Serializable { } elseif ( isset( $param['num'] ) ) { // Replace number params always in before step for now. // No support for combined raw and num params - return [ 'before', $this->language->formatNum( $param['num'] ) ]; + return [ 'before', $this->getLanguage()->formatNum( $param['num'] ) ]; } elseif ( isset( $param['duration'] ) ) { - return [ 'before', $this->language->formatDuration( $param['duration'] ) ]; + return [ 'before', $this->getLanguage()->formatDuration( $param['duration'] ) ]; } elseif ( isset( $param['expiry'] ) ) { - return [ 'before', $this->language->formatExpiry( $param['expiry'] ) ]; + return [ 'before', $this->getLanguage()->formatExpiry( $param['expiry'] ) ]; } elseif ( isset( $param['period'] ) ) { - return [ 'before', $this->language->formatTimePeriod( $param['period'] ) ]; + return [ 'before', $this->getLanguage()->formatTimePeriod( $param['period'] ) ]; } elseif ( isset( $param['size'] ) ) { - return [ 'before', $this->language->formatSize( $param['size'] ) ]; + return [ 'before', $this->getLanguage()->formatSize( $param['size'] ) ]; } elseif ( isset( $param['bitrate'] ) ) { - return [ 'before', $this->language->formatBitrate( $param['bitrate'] ) ]; + return [ 'before', $this->getLanguage()->formatBitrate( $param['bitrate'] ) ]; } elseif ( isset( $param['plaintext'] ) ) { return [ 'after', $this->formatPlaintext( $param['plaintext'] ) ]; } else { @@ -1108,7 +1105,7 @@ class Message implements MessageSpecifier, Serializable { $this->title, /*linestart*/true, $this->interface, - $this->language + $this->getLanguage() ); return $out instanceof ParserOutput ? $out->getText() : $out; @@ -1127,7 +1124,7 @@ class Message implements MessageSpecifier, Serializable { return MessageCache::singleton()->transform( $string, $this->interface, - $this->language, + $this->getLanguage(), $this->title ); } @@ -1145,7 +1142,7 @@ class Message implements MessageSpecifier, Serializable { $cache = MessageCache::singleton(); foreach ( $this->keysToTry as $key ) { - $message = $cache->get( $key, $this->useDatabase, $this->language ); + $message = $cache->get( $key, $this->useDatabase, $this->getLanguage() ); if ( $message !== false && $message !== '' ) { break; } diff --git a/includes/MimeMagic.php b/includes/MimeMagic.php index aedfd8fece..a432d44c9a 100644 --- a/includes/MimeMagic.php +++ b/includes/MimeMagic.php @@ -645,7 +645,7 @@ class MimeMagic { throw new MWException( "Seeking $tailLength bytes from EOF failed in " . __METHOD__ ); } - $tail = fread( $f, $tailLength ); + $tail = $tailLength ? fread( $f, $tailLength ) : ''; fclose( $f ); wfDebug( __METHOD__ . ": analyzing head and tail of $file for magic numbers.\n" ); diff --git a/includes/MovePage.php b/includes/MovePage.php index 321b7e3339..b9af755325 100644 --- a/includes/MovePage.php +++ b/includes/MovePage.php @@ -238,7 +238,7 @@ class MovePage { $file->load( File::READ_LATEST ); if ( $file->exists() ) { $status = $file->move( $this->newTitle ); - if ( !$status->isOk() ) { + if ( !$status->isOK() ) { return $status; } } diff --git a/includes/OutputPage.php b/includes/OutputPage.php index 6774072d11..c724207034 100644 --- a/includes/OutputPage.php +++ b/includes/OutputPage.php @@ -460,7 +460,7 @@ class OutputPage extends ContextSource { * @param string $script Raw HTML */ function addScript( $script ) { - $this->mScripts .= $script . "\n"; + $this->mScripts .= $script; } /** @@ -516,7 +516,7 @@ class OutputPage extends ContextSource { * @param string $script JavaScript text, no "\n" ); } else { $this->parent->request->response()->header( "Refresh: 0;url=$lsUrl" ); diff --git a/includes/installer/WebInstallerInstall.php b/includes/installer/WebInstallerInstall.php index 9d0d680cfd..63740e3824 100644 --- a/includes/installer/WebInstallerInstall.php +++ b/includes/installer/WebInstallerInstall.php @@ -81,9 +81,9 @@ class WebInstallerInstall extends WebInstallerPage { if ( $step == 'extension-tables' ) { $this->endLiveBox(); } - $msg = $status->isOk() ? 'config-install-step-done' : 'config-install-step-failed'; + $msg = $status->isOK() ? 'config-install-step-done' : 'config-install-step-failed'; $html = wfMessage( 'word-separator' )->escaped() . wfMessage( $msg )->escaped(); - if ( !$status->isOk() ) { + if ( !$status->isOK() ) { $html = "$html"; } $this->addHTML( $html . "\n" ); diff --git a/includes/installer/WebInstallerName.php b/includes/installer/WebInstallerName.php index 556461828d..dcd30cf2bc 100644 --- a/includes/installer/WebInstallerName.php +++ b/includes/installer/WebInstallerName.php @@ -73,7 +73,7 @@ class WebInstallerName extends WebInstallerPage { 'label' => '', // @todo Needs a label? 'attribs' => [ 'readonly' => 'readonly', 'class' => 'enabledByOther' ] ] ) . - $this->getFieldSetStart( 'config-admin-box' ) . + $this->getFieldsetStart( 'config-admin-box' ) . $this->parent->getTextBox( [ 'var' => '_AdminName', 'label' => 'config-admin-name', @@ -100,7 +100,7 @@ class WebInstallerName extends WebInstallerPage { 'label' => 'config-subscribe', 'help' => $this->parent->getHelpBox( 'config-subscribe-help' ) ] ) . - $this->getFieldSetEnd() . + $this->getFieldsetEnd() . $this->parent->getInfoBox( wfMessage( 'config-almost-done' )->text() ) . // getRadioSet() builds a set of labeled radio buttons. // For grep: The following messages are used as the item labels: diff --git a/includes/installer/WebInstallerOptions.php b/includes/installer/WebInstallerOptions.php index 7cc5db23bd..0c01b6457b 100644 --- a/includes/installer/WebInstallerOptions.php +++ b/includes/installer/WebInstallerOptions.php @@ -67,7 +67,7 @@ class WebInstallerOptions extends WebInstallerPage { $this->parent->getHelpBox( 'config-license-help' ) . # E-mail - $this->getFieldSetStart( 'config-email-settings' ) . + $this->getFieldsetStart( 'config-email-settings' ) . $this->parent->getCheckBox( [ 'var' => 'wgEnableEmail', 'label' => 'config-enable-email', @@ -101,11 +101,11 @@ class WebInstallerOptions extends WebInstallerPage { ] ) . $this->parent->getHelpBox( 'config-email-auth-help' ) . "
" . - $this->getFieldSetEnd() + $this->getFieldsetEnd() ); $skins = $this->parent->findExtensions( 'skins' ); - $skinHtml = $this->getFieldSetStart( 'config-skins' ); + $skinHtml = $this->getFieldsetStart( 'config-skins' ); $skinNames = array_map( 'strtolower', $skins ); $chosenSkinName = $this->getVar( 'wgDefaultSkin', $this->parent->getDefaultSkin( $skinNames ) ); @@ -136,13 +136,13 @@ class WebInstallerOptions extends WebInstallerPage { } $skinHtml .= $this->parent->getHelpBox( 'config-skins-help' ) . - $this->getFieldSetEnd(); + $this->getFieldsetEnd(); $this->addHTML( $skinHtml ); $extensions = $this->parent->findExtensions(); if ( $extensions ) { - $extHtml = $this->getFieldSetStart( 'config-extensions' ); + $extHtml = $this->getFieldsetStart( 'config-extensions' ); foreach ( $extensions as $ext ) { $extHtml .= $this->parent->getCheckBox( [ @@ -152,7 +152,7 @@ class WebInstallerOptions extends WebInstallerPage { } $extHtml .= $this->parent->getHelpBox( 'config-extensions-help' ) . - $this->getFieldSetEnd(); + $this->getFieldsetEnd(); $this->addHTML( $extHtml ); } @@ -167,7 +167,7 @@ class WebInstallerOptions extends WebInstallerPage { $uploadwrapperStyle = $this->getVar( 'wgEnableUploads' ) ? '' : 'display: none'; $this->addHTML( # Uploading - $this->getFieldSetStart( 'config-upload-settings' ) . + $this->getFieldsetStart( 'config-upload-settings' ) . $this->parent->getCheckBox( [ 'var' => 'wgEnableUploads', 'label' => 'config-upload-enable', @@ -195,7 +195,7 @@ class WebInstallerOptions extends WebInstallerPage { 'label' => 'config-instantcommons', 'help' => $this->parent->getHelpBox( 'config-instantcommons-help' ) ] ) . - $this->getFieldSetEnd() + $this->getFieldsetEnd() ); $caches = [ 'none' ]; @@ -219,7 +219,7 @@ class WebInstallerOptions extends WebInstallerPage { $hidden = ( $cacheval == 'memcached' ) ? '' : 'display: none'; $this->addHTML( # Advanced settings - $this->getFieldSetStart( 'config-advanced-settings' ) . + $this->getFieldsetStart( 'config-advanced-settings' ) . # Object cache settings // getRadioSet() builds a set of labeled radio buttons. // For grep: The following messages are used as the item labels: @@ -239,7 +239,7 @@ class WebInstallerOptions extends WebInstallerPage { 'help' => $this->parent->getHelpBox( 'config-memcached-help' ) ] ) . '' . - $this->getFieldSetEnd() + $this->getFieldsetEnd() ); $this->endForm(); diff --git a/includes/installer/i18n/ast.json b/includes/installer/i18n/ast.json index da2a1c5d55..8651c152b0 100644 --- a/includes/installer/i18n/ast.json +++ b/includes/installer/i18n/ast.json @@ -12,7 +12,7 @@ "config-localsettings-upgrade": "Detectose un ficheru LocalSettings.php.\nP'anovar esta instalación, escriba'l valor de\n$wgUpgradeKey nel cuadru d'abaxo.\nAlcontraralu en LocalSettings.php.", "config-localsettings-cli-upgrade": "Deteutose un ficheru LocalSettings.php.\nP'anovar esta instalación, execute update.php", "config-localsettings-key": "Clave d'anovamientu:", - "config-localsettings-badkey": "La clave que dio ye incorreuta.", + "config-localsettings-badkey": "La clave d'anovamientu que disti ye incorreuta.", "config-upgrade-key-missing": "Deteutose una instalación esistente de MediaWiki.\nP'anovar esta instalación, ponga la llinia siguiente al final del ficheru LocalSettings.php:\n\n$1", "config-localsettings-incomplete": "Paez que'l ficheru LocalSettings.php esistente ta incompletu.\nLa variable $1 nun ta definida.\nCamude'l ficheru LocalSettings.php pa qu'esta variable quede definida y calque \"{{int:Config-continue}}\".", "config-localsettings-connection-error": "Alcontróse un error al conectar cola base de datos usando la configuración especificada en LocalSettings.php. Corrixa esta configuración y vuelva a intentalo.\n\n$1", @@ -55,12 +55,7 @@ "config-no-db": "¡Nun pudo alcontrase un controlador de base de datos afayadizu! Necesites instalar un controlador de base de datos pa PHP.\n{{PLURAL:$2|Tien sofitu el tipu de base de datos siguiente|Tienen sofitu los tipos de base de datos siguientes}}: $1.\n\nSi compilasti PHP tu mesmu, reconfigúralu con un cliente de base de datos activáu, por exemplu, usando ./configure --with-mysqli.\nSi instalasti PHP dende un paquete de Debian o Ubuntu, necesites instalar tamién,por exemplu, el paquete php5-mysql.", "config-outdated-sqlite": "'''Avisu:''' tien SQLite $1, que ye inferior a la versión mínima necesaria $2. SQLite nun tará disponible.", "config-no-fts3": "'''Avisu:''' SQLite ta compiláu ensin el [//sqlite.org/fts3.html módulu FTS3]; les funciones de gueta nun tarán disponibles nesti sistema.", - "config-register-globals-error": "Error: la opción de PHP [http://php.net/register_globals register_globals] ta activada.\nTien de desactivase pa siguir cola instalación.\nVisita [https://www.mediawiki.org/wiki/register_globals https://www.mediawiki.org/wiki/register_globals] p'alcontrar ayuda tocante a cómo facelo.", - "config-magic-quotes-gpc": "Fatal: ¡[http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-gpc magic_quotes_gpc] ta activáu!\nEsta opción causa la imprevisible corrupción de la entrada de datos.\nNun puedes instalar o utilizar MediaWiki nun siendo que esta opción tea desactivada.", - "config-magic-quotes-runtime": "Fatal: ¡[http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-runtime magic_quotes_runtime] ta activáu!\nEsta opción causa la imprevisible corrupción de la entrada de datos.\nNun puedes instalar o utilizar MediaWiki nun siendo que esta opción tea desactivada.", - "config-magic-quotes-sybase": "Fatal: ¡[http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-sybase magic_quotes_sybase] ta activáu!\nEsta opción causa la imprevisible corrupción de la entrada de datos.\nNun puedes instalar o utilizar MediaWiki nun siendo que esta opción tea desactivada.", "config-mbstring": "Fatal: ¡[@http://www.php.net/manual/en/ref.mbstring.php#mbstring.overload mbstring.func_overload] ta activáu!\nEsta opción causa errores y pué corromper los datos de mou imprevisible.\nNun puedes instalar o utilizar MediaWiki nun siendo que esta opción tea desactivada.", - "config-safe-mode": "Atención: el [http://www.php.net/features.safe-mode mou seguru] de PHP ta activáu.\nPuede causar problemes, especialmente si uses la carga de ficheros ya l'encontu pa math.", "config-xml-bad": "Falta'l módulu XML de PHP.\nMediaWiki rique funciones d'esti módulu y nun va funcionar con esta configuración.\nSeique precises instalar el paquete RPM llamáu php-xml.", "config-pcre-old": "Fatal: Ríquese PCRE $1 o posterior.\nEl binariu de PHP ta enllazáu con PCRE $2.\n[https://www.mediawiki.org/wiki/Manual:Errors_and_symptoms/PCRE Más información].", "config-apc": "[http://www.php.net/apc APC] ta instaláu", @@ -99,6 +94,6 @@ "config-download-localsettings": "Descargar LocalSettings.php", "config-help": "Ayuda", "config-nofile": "Nun pudo atopase'l ficheru \"$1\". ¿Desaniciose?", - "mainpagetext": "'''MediaWiki instalóse correchamente.'''", + "mainpagetext": "Instalóse MediaWiki.", "mainpagedocfooter": "Consulta la [//meta.wikimedia.org/wiki/Help:Contents Guía del usuariu] pa saber cómo usar el software wiki.\n\n== Primeros pasos ==\n\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Llista de les opciones de configuración]\n* [//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* [//www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Llocaliza MediaWiki na to llingua]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Depriende como combatir la puxarra na to wiki]" } diff --git a/includes/installer/i18n/ba.json b/includes/installer/i18n/ba.json index efaf3cfa51..80105f26f8 100644 --- a/includes/installer/i18n/ba.json +++ b/includes/installer/i18n/ba.json @@ -5,7 +5,12 @@ "Seb35", "Рустам Нурыев", "Sagan", - "Азат Хәлилов" + "Азат Хәлилов", + "Айсар", + "Янмурза Баки", + "Гульчатай", + "Вильданова Гюзель", + "З. ӘЙЛЕ" ] }, "config-desc": "MediaWiki йөкләүсе", @@ -45,7 +50,277 @@ "config-help-restart": "Һеҙ үҙегеҙ индергән һәм һаҡланған әлеге мәғлүмәттәрҙе юйып, урынлаштырыуҙың яңы процессын ебәрергә теләйһегеҙме?", "config-restart": "Эйе, яңынан башларға", "config-welcome": "=== Даирәне тикшереү ===", + "config-copyright": "=== Авторлыҡ хоҡуҡтары һәм шарттар ===\n\n$1\n\nMediaWiki - ирекле программа тьәминәте. Һеҙ уны ирекле программа тьәминәте фонды баҫып сығарған GNU General Public License лицензия талаптарына ярашлы рәүештә тарата һәм/йәки үҙгәртә алаһығыҙ;икенсе версияһына йәки ниндәйҙә булһа һуңғы версияһына ярашлы рәүештә.\nMediaWiki - файҙалы булыу өмөтө менән таратыла, ләкин бер ниндәй ҙә гарантияларһыҙ, хатта күҙ уңында тотолған гарантияларһыҙ коммерция ҡимәтенән тыш йәки ниндәй ҙә булһа маҡсатҡа яраҡһыҙ . Ҡара. тулыраҡ мәғлүмәт алыу өсөн GNU General Public License лицезияһы. \nҺеҙ копияһын GNU General Public Licenseошо программа менән бергә алырға тейеш инегеҙ, әгәр алмаһағыҙ, Free Software Foundation, Inc. ошо адрес буйынса яҙығыҙ:51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA йәки [http://www.gnu.org/copyleft/gpl.html уны онлайнда уҡығыҙ].", + "config-sidebar": "* [//www.mediawiki.org Сайт MediaWiki]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Help:Contents/ru Ҡулланыусылар өсөн белешмә]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Contents/ru Администраторҙар өсөн белешмә]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ/ru FAQ]\n----\n* Readme-файл\n* Сығарылыш тураһында мәғлүмәт\n* Лицензия\n* Яңыртыуҙар", + "config-env-good": "Мөхитте тикшереү уңышлы тамамланды. MediaWiki урынлаштырырға мөмкин.", + "config-env-bad": "Мөхит тикшерелде. Һеҙ MediaWiki урынлаштыра алмайһығыҙ.", + "config-env-php": "PHP: $1 өлгөһө урынлаштырылды.", + "config-env-hhvm": "HHVM $1 урынлаштырылды.", + "config-unicode-using-intl": " [http://pecl.php.net/intl ҡушылмаһы файҙаланасаҡ, «intl» для PECL] Юникод нормаль эшләһен өсөн.", + "config-unicode-pure-php-warning": "'''Иғтибар!''': [http://pecl.php.net/intl ҡушылмаһы intl из PECL] Юникод өсөн рөхсәт ителмәгән PHP менән бик әкрен эшләйәсәк.\nҺеҙҙең сайт бик көсөргәнешле эшләһә [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations нормализации Юникодты нормалләштереү] өсөн уҡығыҙ.", + "config-unicode-update-warning": "\"Иҫкәртеү\". Ҡуйылған тышлыҡ Юникодты нормаға килтереүҙең иҫке китапхана версияһын ҡуллана[http://site.icu-project.org/ проекта ICU].Әгәр Юникодты тулы мәғәнәһендә ҡулланырға теләһәгеҙ, һеҙ [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations версияны яңыртырға] тейешһегеҙ.", + "config-no-db": "Мәғлүмәттәр базаһына тура килгән драйверҙарҙы табып булманы!Һеҙгә PHP өсөн мәғлүмәттәр базаһының драйверҙарын ҡуйырға кәрәк.{{PLURAL:$2|сираттағы төр ҡулланыла|сираттағы төрҙәр ҡулланыла}}мәғлүмәттәр базалары:$1.\nӘгәр һеҙ үҙегеҙ PHP -ға компиляция яһаған булһағыҙ, мәғлүмәттәр базаһына клиентты индереп уны яңынан, мәҫәлән, ./configure --with-mysqli ярҙамы менән көйләгеҙ. Әгәр ҙә һеҙ PHP -ны Debian йәки Ubuntu пакеттарынан ҡуйһағыҙ, һеҙгә, мәҫәлән, php5-mysql пакетын да ҡуйырға кәрәк булыр.", + "config-outdated-sqlite": "'''Киҫәтеү''': Һеҙҙә SQLite $1 ҡуйылған, $2 тейешле өлгөнән түбән . SQLite асылмаясаҡ.", + "config-no-fts3": "'''Иғтибар''': SQLite модулһыҙ йыйлған [//sqlite.org/fts3.html FTS3] — был мәғлүмәт базаһы өсөн эҙләү мөмкин булмаясаҡ.", + "config-mbstring": "\"Проблема\": PHP опцияһы тоташтырылған\n[http://www.php.net/manual/en/ref.mbstring.php#mbstring.overload mbstring.func_overload]!'''\nБыл индерелгән мәғлүмәттәрҙең хаталарына һәм көтөлмәгән боҙолоуҙарға килтерә.\nОпцияны һүндермәйенсә MediaWikiны ҡуйыу һәм ҡулланыу мөмкин түгел.", + "config-xml-bad": "РНР өсөн XML-модуль юҡ. \nMediaWiki бындай конфигурацияла эшләмәйәсәк, сөнки был модулдең функционалы талап ителә.\nБәлки, Һеҙгә RPM-пакет php-xml булдырырыға кәрәк булыр.", + "config-pcre-old": "'''Фаталь хата:''' PCRE версияһы йәки яңырағы талап ителә $1.\nБашҡарылыусы файл PHP менән бәйләнгән PCRE $2версияһы.\n[https://www.mediawiki.org/wiki/Manual:Errors_and_symptoms/PCRE Ентекләберәк].", + "config-pcre-no-utf8": "'''Фаталь хата'''. PHP өсөн PCRE модуле PCRE_UTF8 менән яраҡлыштырылмаған.\nMediaWiki дөрөҫ эшләһен өсөн UTF-8 талап ителә.", + "config-memory-raised": "Хәтер сикләнгән PHP (memory_limit) $1 $2 тиклем арттырылған.", + "config-memory-bad": "'''Иғтибар:''' PHP күләме memory_limit $1 тәшкил итә.\nБәлки, был саманан тыш аҙҙыр. \nҠуйылыштың уңышһыҙлыҡҡа осрауы бар!", + "config-ctype": "Фаталь хата: PHР тотороҡло эшләргә тейеш [http://www.php.net/manual/en/iconv.installation.php киңәйтеү iconv].", + "config-iconv": "Фаталь хата: PHР тотороҡло эшләргә тейеш [http://www.php.net/manual/en/iconv.installation.php киңәйтеү iconv].", + "config-json": "'''Фаталь хата:''' PHP JSON ярҙамынан тыш эшләнгән.\nҺеҙгә йә PHP JSON киңәйтеүен, йәки MediaWiki алдынан [http://pecl.php.net/package/jsonc PECL jsonc] киңәйтеүен ҡуйырға кәрәк.\n* PHP-киңәйтеүсе /etc/php.ini йәки /etc/php.d/json.ini инергә тейеш булһа ла, Red Hat Enterprise Linux (CentOS) 5 һәм 6, составына инә.\n* 2013 йылдың майынан һуң сығарылған Linux-тың ҡайһы бер дистрибутивтары PECL киңәйтеүен php5-json или php-pecl-jsonc кеүек асыр урынға, PHP киңәйтеүсеһен асмай.", + "config-xcache": "[http://xcache.lighttpd.net/ XCache] урынлаштырылды", + "config-apc": "[http://www.php.net/apc APC] урынлаштырылды", + "config-wincache": "[http://www.iis.net/download/WinCacheForPhp WinCache] урынлыштырылды", + "config-no-cache-apcu": "'''Иғтибар:''' [http://www.php.net/apcu APCu], [http://xcache.lighttpd.net/ XCache] табылманы йәки [http://www.iis.net/download/WinCacheForPhp WinCache].\nОбъекттарҙы кэшлау һүндереләсәк..", + "config-mod-security": "Иғтибар: һеҙҙең веб-серверығыҙҙа [http://modsecurity.org/ mod_security]/mod_security2 ҡабыҙылған. Уның күп кенә стандарт көйләүҙәре MediaWiki йәки бүтән ПО ҡулланыусыларға серверға ирекле контент ебәрегрә мөмкинлек буйынса проблемалар тыуҙырыуы мөмкин.\nКөтөлмәгән хаталарға тап булһағыҙ, ошонда [http://modsecurity.org/documentation/ документации mod_security]йәки үҙегеҙҙең хостинг-провайдерығыҙға мөрәжәғәт итегеҙ.", + "config-diff3-bad": "GNU diff3 табылманы.", + "config-git": "Git өлгөләрҙе контролләү системаһы табылды: $1.", + "config-git-bad": "Git өлгөләре менән идара итеү программаһы табылды?", + "config-imagemagick": "ImageMagick: $1 табылды.\nФайлдарҙы тейәргә рөхсәт итһәгеҙ, рәсемдәрҙе миниатюр итеп күһәтеү мөминлеге бар.", + "config-gd": "Found GD graphics library built-in.\nImage thumbnailing will be enabled if you enable uploads.", + "config-no-scaling": "Эске китапхананы GD йәки ImageMagick табып булманы.\nМиниатюр рәсемдәр ҡарау мөмкин булмаясаҡ.", + "config-no-uri": "'''Хата:''' Ағымдағы URI билдәләп булмай.\nУрынлаштырыу өҙөлдө.", + "config-no-cli-uri": "'''Киҫәтеү''': параметр күрһәтелмәгән --scriptpath, килешеү байынса: $1 .", + "config-using-server": "«$1» сервер исеме файҙаланыла.", + "config-using-uri": " \"$1$2\" сервер исеме файҙаланыла.", + "config-uploads-not-safe": "'''Иғтибар:''' ($1) күсереүҙәре өсөе ҡулланылған директория ирекле скриптар яһау өсөн бармай. \nMediaWiki барлыҡ күсерелгән файлдарҙы тикшерһә лә, файлды күсереүҙән алда [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Security#Upload_security бирешеүсәнлекте ябыу] тәҡдим ителә.", + "config-no-cli-uploads-check": "\"Иғтибар\" әйтмәйенсә тейәлеү өсөн каталог ($1) CLI урынлаштырған мәлдә тиҙ боҙололоусанлыҡҡа, ирекле сценарийҙы үтәүгә тикшерелмәне.", + "config-brokenlibxml": "Системағыҙҙа MediaWiki һәм башҡа веб-ҡушымталар мәғлүмәттәрен йәшерен щарралауы ихтимал булған PHP һәм libxml2 версиялары бар. \nlibxml2 2.7.3 йәки юғарыраҡ версияға ([https://bugs.php.net/bug.php?id=45996 хата тураһында мәғлүмәттәр]) тиклем яңыртығыҙ.\nБәйләнеш өҙөлдө.", + "config-suhosin-max-value-length": "Suhosin ҡуйылған һәм GET length параметрын $1 байтҡаса кәметә. MediaWiki-ның ResourceLoader компоненты был сикләүҙе урап үтә, әммә был етештереүсәнлекте кәметә. Әгәр мөмкин булһа, 1024 асылындағы suhosin.get.max_value_length йәки унан юғарыраҡ булған php.ini, шулай уҡ $wgResourceLoaderMaxQueryLength өсөн шундай уҡ LocalSettings.php ҡуйырға була.", + "config-db-type": "Мәғлүмәт базаһы төрө:", + "config-db-host": "Мәғлүмәт базаһы хосты:", + "config-db-host-help": "Әгәр ҙә серверҙың база мәғлүмәттәре икенсе серверҙа урынлашһа, бында уның исемен йәки IP-адресын индерегеҙ.\nӘгәр ҙә һеҙ виртуаль хостингты ҡулланһағыҙ, һеҙҙең провайдерығыҙ хостың дөрөҫ исемен үҙенең документацияһында күрһәтергә тейеш.\nӘгәр ҙә һеҙ системаны Windows аҫтына ҡуяһығыҙ һәм MySQL - ды ҡулланаһығыҙ икән, «localhost» исемле сервер эшләй алмаясаҡ. Был осраҡта 127.0.0.1 локаль IP-адресығыҙҙы күрһәтергә тырышығыҙ.\nӘгәр ҙә һеҙ PostgreSQL-ды ҡулланаһығыҙ икән, был шаҡмаҡты сокет Unix аша инеү өсөн буш ҡалдырығыҙ.", + "config-db-host-oracle": "TNS мәғлүмәт базаһы:", + "config-db-host-oracle-help": "Ғәмәлдәге [http://download.oracle.com/docs/cd/B28359_01/network.111/b28317/tnsnames.htm Local Connect Name] индерегеҙ; tnsnames.ora файлы был инсталляция өсөн күренергә тейеш.
Клиенттарҙың 10g версияһындағы һәм юғарыраҡ китапханаһын ҡулланғанда шулай уҡ атама биреү ысулын файҙаланыу мөмкинлеге бар [http://download.oracle.com/docs/cd/E11882_01/network.112/e10836/naming.htm Easy Connect].", + "config-db-wiki-settings": "Был викиҙың идентификацияһы", + "config-db-name": "Мәғлүмәт базаһы исеме:", + "config-db-name-help": "Үҙегеҙҙең вики өсөн исем - идентификатор һайлағыҙ.\nИсемдә тултырылмаған урын булмаҫҡа тейеш.\nӘгәр һеҙ виртуаль хостингты ҡулланаһығыҙ икән, провайдер һеҙгә мәғлүмәттәр базаһының конкрет исемен бирер йәки идара итеү панеле ярҙамы менән мәғлүмәттәр базаһын булдырырға мөмкинлек бирер.", + "config-db-name-oracle": "Мәғлүмәт базаһы схемаһы", + "config-db-account-oracle-warn": "Oracle мәғлүмәттәр базаһы итеп ҡуйыуҙың өс юлы бар:\nӘгәр иҫәп яҙмаһын ҡуйыу процесында булдырырға теләһәгеҙ, зинһар, SYSDBA ҡуйыу өсөн иҫәп алыу ролен һәм веб-күҙәтеү мөмкинлеге булған иҫәп алыуҙың теләгән вәкәләттәрен күрһәтегеҙ. Шулай уҡ веб-күҙәтеү мөмкинлеге булған иҫәпте ҡулдан эшләргә һәм уны (әгәр схема объекттарын төҙөүгә кәрәкле рөхсәте бар икән) йәки ике иҫәп яҙмаһын, береһен - объекттар төҙөү хоҡуғы менән, икенсеһен веб-күҙәтеүҙе сикләүсе, күрһәтәһегеҙ. \nТейешле өҫтөнлөктәр менән иҫәп яҙмаһын булдырыу сценарийын ошо ҡоролма программаһының «maintenance/oracle/» папкаһында табырға мөмкин. Сикләнгән иҫәп яҙмаһын файҫаланыу килешеү буйынса иҫәп яҙмаларының барлыҡ мөмкинлектәрен һүндереүгә килтереү ихтималлығын күҙ уңында тотоғоҙ.", + "config-db-install-account": "Көйләү өсөн иҫәп яҙмаһы", + "config-db-username": "Мәғлүмәт базаһын ҡулланыусы исеме", + "config-db-password": "Мәғлүмәт базаһының серһүҙе", + "config-db-install-username": "Ҡуйылыш процесында мәғлүмәттәр базаһына тоташтырыу өсөн файҙаланасаҡ ҡулланыусы исемен индерегеҙ.\nБыл исем MediaWiki ҡулланыусыныҡы түгел, был мәғлүмәттәр базаһы өсөн ҡулланыусы исеме.", + "config-db-install-password": "Ҡуйылыш процесында мәғлүмәттәр базаһына тоташтырыу өсөн файҙаланасаҡ ҡулланыусы исемен индерегеҙ.\nБыл исем MediaWiki ҡулланыусыныҡы түгел, ә мәғлүмәттәр базаһы өсөн ҡулланыусы исеме.", + "config-db-install-help": "Ҡуйылыш процесын көйләгәндә мәғлүмәттәр базаһына тоташтырыу өсөн файҙаланасаҡ ҡулланыусы исемен һәм паролен индерегеҙ.", + "config-db-account-lock": "Ғәҙәти эш өсөн шул уҡ ҡулланыусы исемен һәм серһүҙен файҙаланырға", + "config-db-wiki-account": "Ғәҙәти эш өсөн иҫәп яҙмаһы", + "config-db-wiki-help": "Викиҙың ғәҙәттәге эше ваҡытында мәғлүмәт базаһына инеү өсөн файҙаланылған ҡулланыусы исемен һәм серһүҙен индерегеҙ. Әгәр бындай иҫәп яҙмаһы юҡ икән, ә ваҡытлыса яҙма етерлек өҫтөнлөктәргә эйә икән, ғәҙәттәге иҫәп яҙмаһы викиҙа эшләү өсөн кәрәкле минималь өҫтөнлөктәр менән булдырыласаҡ.", + "config-db-prefix": "Мәғлүмәт базаһы таблицаларының префиксы", + "config-db-prefix-help": "Әгәр һеҙгә бер мәғлүмәт базаһын бер нисә вики йәки MediaWiki һәм башҡа веб-ҡушымталар араһында бүлергә тура килһә, таблицалағы барлыҡ исемдәр өсөн перфикс өҫтәй алаһығыҙ. Ара ҡулланмағыҙ.\nБыл урын ғәҙәттә буш ҡала.", + "config-db-charset": "Мәғлүмәт базаһын кодлау", + "config-charset-mysql5-binary": "MySQL 4.1/5.0 бинарлы", + "config-charset-mysql5": "MySQL 4.1/5.0 UTF-8", + "config-charset-mysql4": "MySQL 4.0 һәм UTF-8 үҙ-ара бәйләнешле", + "config-charset-help": "'''Иғтибар.''' Әгәр '''кире тап килгән UTF-8''' урынына MySQL 4.1+ ҡулланаһығыҙ һәм mysqldump ярҙамында мәғлүмәт базаһының резерв күсермәләрен файҙаланһағыҙ, ASCII булмаған символдар барыһы ла могут яңылыш күрһәтелеп, резерв күсермәләре ҡулланыуға яраҡһыҙ буласаҡ!\n\n'''Бинар режимда''' MediaWiki базала юникод тексын нимә яҙылған, шул килеш һаҡлаясаҡ.\nБыл UTF-8 режимында MySQL булыуға ҡарағанда һөҙөмтәлерәк, сөнки Юникодтың символдар тупланмаһын тулыһынса ҡулланыу мөмкинлеген бирә. \n'''UTF-8 режимында''' MySQL мәғлүмәттәрегеҙҙең ниндәй символдар тупланмаһына ҡарауын беләсәк һәм уларҙы тейешенсә үҙгәртәсәк (Ё хәрефе Е хәрефенән һуң киләсәк, ә бинар режимдағыса Я-нан һуң түгел), әммә [//ru.wikipedia.org/wiki/ Юникодта бирелгән символдар#.D0.91.D0.B0.D0.B7.D0.BE.D0.B2.D0.B0.D1.8F_.D0.BC.D0.BD.D0.BE.D0.B3.D0.BE.D1.8F.D0.B7.D1.8B.D0.BA.D0.BE.D0.B2.D0.B0.D1.8F_.D0.BF.D0.BB.D0.BE.D1.81.D0.BA.D0.BE.D1.81.D1.82.D1.8C BMP] сигенән сығыусы символдарҙы һаҡларға рөхсәт итмәйәсәк.", + "config-mysql-old": "PostgreSQL $1 йәки тағы ла һуңыраҡ булған версия кәрәк. Һеҙҙә PostgreSQL $2 ҡуйылған.", + "config-db-port": "Мәғлүмәт базаһы порты:", + "config-db-schema": "MediaWiki өсөн схема:", + "config-db-schema-help": "Был схема ғәҙәттә яҡшы эшләй.\nУны, үҙегеҙгә кәрәк булһа ғына, үҙгәртегеҙ", + "config-pg-test-error": "Мәғлүмәт базаһына инеп булманы$1: $2", + "config-sqlite-dir": "SQLite мәғлүмәттәре директориһы:", + "config-sqlite-dir-help": "SQLite бөтә мәғлүмәттәрҙе бер файлда һаҡлай. \nҠуйған ваҡытта веб-сервер һеҙ күрһәткән директорияны уҡый алырға тейеш. \n\nУға Интернет аша инеү '''мөмкин түгел''', шуға ул PHP файлдар һаҡланған файл менән тап килмәҫкә тейеш.\nҠуйыусы бал директорияны .htaccess файлына яҙасаҡ, әгәр ул эшләмәһә, кемдер бөтөн мәғлүмәт базаһына инә аласаҡ. Был базала шулай уҡ ҡулланыусылар тураһында мәғлүмәт тә (электрон почта адрестары, серһүҙ хештары), шулай уҡ юйылған биттәр һәм вики тураһында башҡа йәшерен мәғлүмәттәр һаҡлана. \n\nБыл базаны, мөмкин булһа, ситтәрәк, мәҫәлән, /var/lib/mediawiki/yourwiki һаҡлағыҙ.", + "config-oracle-def-ts": "Килешеү буйынса таблица арауығы:", + "config-oracle-temp-ts": "Таблицаларҙың ваҡытлы киңлеге:", + "config-type-mysql": "MySQL (йәки тура килгән)", + "config-type-mssql": "Microsoft SQL Server", + "config-support-info": "MediaWiki -ла түбәндәге СУБД бар:\n\n$1\n\nӘгәр мәғлүмәт һаҡлау системаһын исемлектә күрмәһәгеҙ, рөхсәт алыу өсөн өҫтәге һылтанмалағы инструкция буйынса эш итегеҙ.", + "config-dbsupport-mysql": "* [{{int:version-db-mysql-url}} MySQL] — MediaWiki-ҙың иҫ яҡшы эшләгән төп мәғлүмәттәр базаһы. MediaWiki шулай уҡ MySQL-тап килгән [{{int:version-db-mariadb-url}} MariaDB] һәм [{{int:version-db-percona-url}} Percona Server] менән эшләй. ([http://www.php.net/manual/ru/mysql.installation.php MySQL-ярҙамында PHP туплау инструкцияһы])", + "config-dbsupport-postgres": "* [{{int:version-db-postgres-url}} PostgreSQL] — СУБД-ның популяр открыткаһы, MySQL өсөн альтернатива.\nТөҙәтелмәгән хаталар булыуы мөмкин, эш схемаһында ҡулланыу тәҡдим ителмәй. ([http://www.php.net/manual/ru/pgsql.installation.php PostgreSQL рөхсәт ителгән РНР йыйыу инструкцияһы]).", + "config-dbsupport-sqlite": "* [{{int:version-db-sqlite-url}} SQLite] — яҡшы һәм еңел мәғлүмәт базаһы системаһы. ([http://www.php.net/manual/ru/pdo.installation.php собрать PHP SQLite] PDO менән эшләй торған инструкция)", + "config-dbsupport-oracle": "* [{{int:version-db-oracle-url}} Oracle] — предприятие масштабындаға коммерция базыһы. ([http://www.php.net/manual/ru/oci8.installation.php OCI8 ярҙамындағы РНР нисек йыйырға])", + "config-dbsupport-mssql": "* [{{int:version-db-oracle-url}} Oracle] — предприятие масштабындаға Windows өсөн коммерция базыһы. ([http://www.php.net/manual/ru/oci8.installation.php OCI8 ярҙамындағы РНР нисек йыйырға])", + "config-header-mysql": "MySQL көйләү", + "config-header-postgres": "PostgreSQL көйләү", + "config-header-sqlite": "SQLite көйләү", + "config-header-oracle": "Оракул көйләү", + "config-header-mssql": "Microsoft SQL Серверенең билдәле дәүмәлдәре", + "config-invalid-db-type": "Нигеҙ тибтарының дөрөҫ булмаған күрһәткестәре", + "config-missing-db-name": "Һеҙ мәғәнәне индерергә тейешһегеҙ «{{int:config-db-name}}».", + "config-missing-db-host": "Параметр мәғәнәһен индереү мотлаҡ «{{int:config-db-host}}».", + "config-missing-db-server-oracle": "Һеҙ бында мәғәнәне индерергә тейешһегеҙ «{{int:config-db-host-oracle}}».", + "config-invalid-db-server-oracle": "«$1» мәғлүмәттәр базаһының дөрөҫ булмаған TNS.\nЙә «TNS Name», йә «Easy Connect» ([http://docs.oracle.com/cd/E11882_01/network.112/e10836/naming.htm Oracle атамалары ысулы]) ҡулланығыҙ.", + "config-invalid-db-name": "«$1» мәғлүмәттәр базаһының дөрөҫ булмаған префиксы. Тик ASCII символдарын: (a-z, A-Z) хәрефтәрен, (0-9) һандарын, (_) аҫтына һыҙыу билдәһен һәм (-)дефисты ҡулланығыҙ.", + "config-invalid-db-prefix": "«$1» мәғлүмәттәр базаһының дөрөҫ булмаған префиксы. Тик ASCII (a-z, A-Z) хәрефтәрен, (0-9) һандарын, (_) аҫтына һыҙыу билдәһен һәм (-)дефисты ҡулланығыҙ.", + "config-connection-error": "$1.\n\nХостығыҙҙы, ҡулланыусы исемен һәм паролде тикшерегеҙ ҙә яңынан инеп ҡарағыҙ.", + "config-invalid-schema": "MediaWiki «$1» өсөн схема дөрөҫ түгел.\nБары тик ASCII символдарын (a-z, A-Z), цифрҙарҙы (0-9) һәм аҫҡы һыҙыҡты (_) ғына ҡулланығыҙ.", + "config-db-sys-create-oracle": "Яңы иҫәп-хисап яҙмаһын булдырыу өсөн урынлаштырыу программаһы тик SYSDBA ҡулланыу хуплана", + "config-db-sys-user-exists-oracle": "Иҫәп яҙмаһы \"$1\". SYSDBA яңы иҫәп-хисап яҙмаһын булдырыу өсөн генә ҡулланыла", + "config-postgres-old": "PostgreSQL $1 йәки тағы ла һуңыраҡ булған версия кәрәк. Һеҙҙә PostgreSQL $2 ҡуйылған.", + "config-mssql-old": "$1 йә һуңыраҡ версиянан Microsoft SQL Server кәрәк. Һеҙҙә $2 версияһы ҡуйылған.", + "config-sqlite-name-help": "Үҙегеҙҙең вики өсөн исем-идентификатор һайлағыҙ.\nДефисы һәм буш урын ҡалдырмағыҙ.\nЬыл юл SQLite файлының исемендә ҡулланыласаҡ.", + "config-sqlite-parent-unwritable-group": "$1 мәғлүмәт директорияһын эшләп булманы, веб-серверҙың төп директорияны яҙырға хоҡуғы юҡ $2.\n\nУрынлаштырыусы ҡатнашыусының веб-серверын билдәләне.\n$3 яҙма мөмкин булған директория эшләгеҙ һәм дауам итегеҙ.\nUnix/Linux системаһында түбәндәгене башҡарығыҙ:\n\n
cd $2\nmkdir $3\nchgrp $4 $3\nchmod g+w $3
", + "config-sqlite-parent-unwritable-nogroup": "$1 мәғлүмәт директорияһын эшләп булманы, веб-серверҙың төп директорияны яҙырға хоҡуғы юҡ $2.\n\nУрынлаштырыусы ҡатнашыусының веб-серверын билдәләй алманы.\n$3 яҙма мөмкин булған директория эшләгеҙ һәм дауам итегеҙ.\nUnix/Linux системаһында түбәндәгене башҡарығыҙ:\n\n
cd $2 mkdir $3 chmod a+w $3
", + "config-sqlite-mkdir-error": "«$1» мәғлүмәттәре өсөн директорий яһауҙа хата.\nУрынлашыуын тикшерегеҙ һәм тағы ла эшләп ҡарағыҙ.", + "config-sqlite-dir-unwritable": " «$1» каталогына яҙыу булдырыу мөмкин түгел. Веб - сервер был каталогка яҙа алһын өсөн, инеү юлы көйләгесен үҙгәртегеҙ һәм тағы ла бер мәртәбә ҡабатлап ҡарағыҙ.", + "config-sqlite-connection-error": "$1.\n\nМәғлүмәт базаһының исемен һәм мәғлүмәт директорияһын тикшерегеҙ ҙә яңынан эшләп ҡарағыҙ.", + "config-sqlite-readonly": "$1 файлы яҙыу өсөн ябыҡ.", + "config-sqlite-cant-create-db": "$1 мәғлүмәт базаһы файлын яһап булмай.", + "config-sqlite-fts3-downgrade": "PHP өсөн FTS3 булышлығы юҡ — таблицаларҙы алып ташлайбыҙ", + "config-can-upgrade": "Мәғлүмәттәр базаһында MediaWiki таблицалары бар.\nУларҙы MediaWiki $1 итеп яңыртыу өсөн '''«Дауам итергә»''' төймәһенә баҫығыҙ.", + "config-upgrade-done": "Яңыртыу тамамланды.\n\nХәҙер [$1 викины ҡуллана башларға] мөмкин.\n\nӘгәр ҙә LocalSettings.php файлын яңынан яһарға теләһәгеҙ, аҫтағы төймәгә баҫығыҙ. Ҡуйғанда проблемалар булмаһа, был '''тәҡдим ителмәй'''.", + "config-upgrade-done-no-regenerate": "Яңыртыу тамамланды.\nХәҙер [$1 вики менән эш башлай] алаһығыҙ.", + "config-regenerate": "LocalSettings.php яңынан төҙөргә →", + "config-show-table-status": "«SHOW TABLE STATUS» һорауы эшләнмәне!", + "config-unknown-collation": "'''Иғтибар:''' Мәғлүмәт базаһы сортировканың танылмаған ҡағиҙәләрен ҡуллана.", + "config-db-web-account": "Веб-серверҙан мәғлүмәт базаһына инеү өсөн иҫәп яҙмаһы", + "config-db-web-help": "Викиҙың ғәҙәттәге эшендә веб - сервер файҙалана торған мәғлүмәттәр базаһының серверына тоташтырыу өсөн ҡулланыусының исемен һәм серһүҙен һайлағыҙ.", + "config-db-web-account-same": "Ҡуйыу өсөн булған иҫәп яҙмаһын ҡулланырға", + "config-db-web-create": "Иҫәп яҙмаһы булмаһа - яһарға", + "config-db-web-no-create-privs": "Ҡуйылыш өсөн күрһәтелгән иҫәп яҙмағыҙҙың уны барлыҡҡа килтереү өсөн етерлек хоҡуҡтары юҡ. \nКүрһәтелгән иҫәп яҙма бында булырға тейеш инде.", + "config-mysql-engine": "Мәғлүмәт базаһы шыуҙырмаһы", + "config-mysql-innodb": "InnoDB", + "config-mysql-myisam": "MyISAM", + "config-mysql-myisam-dep": "\"Иғтибар\" Һеҙ MySQL мәғлүмәтен һаҡлау өсөн MyISAM механизмын һайланығыҙ. Түбәндәге сәбәптәр арҡаһында уны ҡулланыу тәҡдим ителмәй:\n* параллелизмда эшләп булмай;\n* башҡа механизмдар менән сағыштырғанда мәғлүмәттәр юғала;\n* MediaWiki коды MyISAM үҙенсәләген иҫәпкә алмай.\n\nҺеҙҙең MySQL InnoDB менән яраҡлы эшләһә ошо механизмды һайларға тәҡдим итебеҙ.\n\nҺеҙҙең MySQL InnoDB менән яраҡһыҙ эшләһә механизмды яңыртырға тәҡдим итебеҙ.", + "config-mysql-only-myisam-dep": "Иҫкәртеү: MyISAM — был компьютерҙә MySQL өсөн берҙән-бер асыҡ мәғлүмәттәр һаҡлау системаһы, һәм MediaWiki менән берлектә ҡулланырға рөхсәт ителмәй,сөнки:\n* таблицаларҙы блокировкалау һөҙөмтәһендә параллелизмды көсһөҙ тота;\n* башҡа системаларға ҡарағанда, ватылыуға күберәк дусар ителгән;\n* MediaWiki код базаһы MyISAM -ды ғәҙәттәгесә эшкәртеп бөтә алмай\nҺеҙҙең MySQL InnoDB -ды тотмай, бәлки, яңыртыу ваҡыты еткәндер.", + "config-mysql-engine-help": "Параллель рәүештә яҡшыраҡ эшләгәне өсөн '''InnoDB''' өҫтөнлөрәк.\n\nБер ҡулланыусы йәки төҙәтеүҙәр әҙ булғанда вики өсөн '''MyISAM'''тың тиҙлеге шәберәк, әммә унда мәғлүмәт базаһы InnoDB-ҡа ҡарағанда йышыраҡ сафтан сыға.", + "config-mysql-charset": "Мәғлүмәт базаһын кодлау", + "config-mysql-binary": "Икеле", + "config-mysql-utf8": "UTF-8", + "config-mysql-charset-help": "'''Ике режим'''да MediaWiki UTF-8 тексын мәғлүмәт базаһының бинарныхҡырында һаҡлай.\nБыл MySQL-дың''UTF-8 режим''ына ҡарағанда һөҙөмтәлерәк һәм Unicode символдарының тулы тупланмаһын ҡулланыу мөмкинлеген бирә. \n\n'''UTF-8 режимы'''нда MySQL мәғлүмәттәрегеҙҙең ниндәй кодировкала ятҡанын беләсәк һәм уларҙы тейешенсә сағылдырасаҡ, үҙгәртәсәк, әммә был символдарҙы юғарыраҡ [//en.wikipedia.org/wiki/Mapping_of_Unicode_character_planes База күптеллелек киңлегендә] һаәлау мөмкинлеген бирәсәк.", + "config-mssql-auth": "Аутентификация төрө :", + "config-mssql-install-auth": "Ҡуйыу процесында мәғлүмәт базаһына инеү өсөн файҙаланылған төп нөсхәне тикшереү тибын һайлағыҙ. \n\nӘгәр «{{int:config-mssql-windowsauth}}» һайлаһығыҙ, ҡулланыусының веб-сервер эшләгән иҫәп яҙмаһы файҙаланыласаҡ.", + "config-mssql-web-auth": "Викиҙың ғәҙәттәге эше ваҡытында мәғлүмәттәр базаһы серверына инеү өсөн веб-сервер файҙаланған төп нөсхәне тикшереү тибын һайлағыҙ. \n\nӘгәр «{{int:config-mssql-windowsauth}}» һайлаһығыҙ, ҡулланыусының веб-сервер эшләгән иҫәп яҙмаһы файҙаланыласаҡ.", + "config-mssql-sqlauth": "SQL Server ысынлығын тикшереү", + "config-mssql-windowsauth": "Windows нөсхәһен тикшереү", + "config-site-name": "Вики атамаһы:", + "config-site-name-help": "Исеме браузерҙың баш һүҙендә һәм башҡа урындарҙа күрәнәсәк.", + "config-site-name-blank": "Сайт исемен яҙығыҙ", + "config-project-namespace": "Проекттың исемдәр арауығы:", + "config-ns-generic": "Проект", + "config-ns-site-name": "Викилағы кеүек исем: $1", + "config-ns-other": "Башҡа (күрһәтегеҙ)", + "config-ns-other-default": "MyWiki", + "config-project-namespace-help": "Вмкмпедия өлгөһөнә эйәреп, күп викиҙар үҙ ҡағиҙәләре биттәрен төп йөкмәтке битенән айырым, '''«проект атамалары киңлегендә»''' һаҡлай.\nБыл киңлектәге барлыҡ биттәр атамалары һеҙ бында һорай алған билдәле перфикстан башлана.\nҒәҙәттә, был префикс вики исеменән барлыҡҡа килә, әммә тыныш билдәләре, «#» йәки «:» символдары була алмай.", + "config-ns-invalid": "Күрһәтелгән исемдәр арауығы $1 ярамай.\nПроекттың икенсе исемдәр арауығын күрһәтергә.", + "config-ns-conflict": "Күрһәтелгән исемдәр арауығы «$1» стандарт MediaWiki исемдәр арауығы менән бәхәстә.\nПроекттың икенсе исемдәр арауығын күрһәтегеҙ.", + "config-admin-box": "Администраторҙың иҫәп яҙмаһы", + "config-admin-name": "Һеҙҙең ҡуланыусы исеме", + "config-admin-password": "Серһүҙ:", + "config-admin-password-confirm": "Серһүҙҙе ҡабатлағыҙ", + "config-admin-help": "Бында үҙегеҙҙең ҡулланыусы исемегеҙҙе яҙығыҙ, мәҫәлән, «Азат Азатов». \nБыл исем викиға инеү өсөн буласаҡ.", + "config-admin-name-blank": "Администраторҙың ҡулланыусы исемен яҙығыҙ", + "config-admin-name-invalid": "Ҡулланыусының күрһәтелгән «$1» исеме рөхсәт ителмәй. Уның икенсе исемен яҙығыҙ.", + "config-admin-password-blank": "Администраторҙың иҫәп яҙмаһы өсөн серһүҙҙе яҙығыҙ", + "config-admin-password-mismatch": "Һеҙ яҙған серһүҙҙәр тап килмәй.", + "config-admin-email": "Электрон почта адресығыҙ:", + "config-admin-email-help": "Электрон почтағыҙҙың адресын яҙығыҙ: һеҙҙең башҡа ҡулланыусыларҙан хәбәрҙәр алыу, серһүҙҙе тергеҙеү, шулай уҡ күҙәтеү исемлеге биттәрендәге үҙгәрештәр хаҡында белдереүҙәр алыу мөмкинлеге буласаҡ. Был юлды буш ҡалдырыға ла ярай.", + "config-admin-error-user": "«$1» исеме менән администраторҙың иҫәп яҙмаһы төҙөгәндә эске хата.", + "config-admin-error-password": "Хакимдың иҫәп яҙмаһы өсөн серһүҙ ҡуйғанда эске хата «$1»:
$2
", + "config-admin-error-bademail": "Электрон почта адресы дөрөҫ түгел", + "config-subscribe": "[https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki яңы версиялары барлыҡҡа килеүен таратыу яңылыҡтарына] яҙылырға.", + "config-subscribe-help": "Был хәбәрҙәре аҙ булған таратыу исемлеге хәүефһеҙлек проблемалары тураһында хәбәрҙәр һәм яғы сығарылыштар өсөн анонс булараҡ файҙаланыла. \nҺеҙгә уға яҙылырға һәм яңы версиялар сыҡҡан һайын MediaWiki-ҙы яңыртып торорға кәрәк.", + "config-subscribe-noemail": "Һеҙ яңы сығарылыштар тураһында хәбәр ебәреү исемлегенә электрон адресығыҙҙы күрһәтмәй генә яҙылырға тырыштығыҙ. \nӘгәр хәбәр ебәреү теҙмәһенә яҙылырға теләһәгеҙ,электрон адресығыҙҙы күрһәтегеҙ.", + "config-almost-done": "Һеҙ маҡсатҡа яҡын!\nҠалған көйләүҙәрҙе төшөрөп ҡалдырып, вики ҡуя алаһығыҙ.", + "config-optional-continue": "Төплөрәк көйләргә", + "config-optional-skip": "Етәр, вики ҡуйығыҙ", + "config-profile": "Ҡулланыусылар хоҡуҡтары профиле:", + "config-profile-wiki": "Асыҡ вики", + "config-profile-no-anon": "Иҫәп яҙмаһы булдырырға", + "config-profile-fishbowl": "Бары тик авторлашҡан мәхәррирҙәр өсөн", + "config-profile-private": "Ябыҡ вики", + "config-profile-help": "Ләкин, MediaWiki шыуҙырмаһын икенсе ысул менән файҙаланырға мөмкин, һәм асыҡ вики-эштең өҫтөн икәненә барыһын да ышандырып бөтөп булмай.\nҺеҙҙең һайлап алырға мөмкинселек бар.\nСайтта теркәлеү үтмәйенсә лә, модель '''«{{int:config-profile-wiki}}»''' һәр кемгә биттәрҙә үҙгәртеү эшләргә мөмкинселек бирә. Конфигурация '''{{int:config-profile-no-anon}}''' өҫтәлмә хисап тәьмин итә, ләкин осраҡлы ҡатнашыусыларҙы ябыуы ихтимал.\nСценарий '''«{{int:config-profile-fishbowl}}»''' аныҡланған ҡатнашыусыларға мөхәррирләүҙе рөхсәт итә, ләкин һәр кем алырлыҡ битте ҡарау ҡала, шул иҫәптән үҙгәртеҙәр тарихын ҡарау. '''«{{int:config-profile-private}}»''' режимында биттәрҙе ҡарарға айырым ҡулланыусыларға ғына рөхсәт ителә, ҡайһы бер өлөштәренең мөхәррирләү хоҡуҡтары булыуы мөмкин. \n[//www.mediawiki.org/wiki/Special:MyLanguage/Manual:User_rights Ярашлы ҡулланма] урынлаштырғас, хоҡуҡтарҙы сикләүсе ҡатмарлыраҡ схемаларҙы көйләргә була.", + "config-license": "Автор хоҡуҡтары һәм лицензиялар:", + "config-license-none": "Лицензияны аҫта яҙмағыҙ", + "config-license-cc-by-sa": "Creative Commons Attribution Share Alike", + "config-license-cc-by": "Ижади лицензия, атрибутикалар", + "config-license-cc-by-nc-sa": "Creative Commons Attribution Non-Commercial Share Alike", + "config-license-cc-0": "Creative Commons Zero (йәмәғәт милке)", + "config-license-gfdl": "GNU Free Documentation License 1.3 йәки яңырағы", + "config-license-pd": "Йәмәғәт милке", + "config-license-cc-choose": "Creative Commons бер лицензияны һайлағыҙ", + "config-license-help": "Күпселек дөйөм ҡулланыуҙағы викиҙар үҙ материалдарын [http://freedomdefined.org/Definition/Ru ирекле лицензия] шарттарында файҙаланыуға рөхсәт бирә.\nБыл берҙәмлек тойғоһон булдыррыға ярҙам итә, ҡатнашыу ваҡытын оҙайтыуға дәртләндерә. Әммә шәхси йәки корпоратив викиҙар өсөн бындай ихтыяж юҡ. \n\nӘгәр һеҙ Википедия текстарын файҙаланырға йәки Википедияға үҙ викиғыҙҙан текстар күсереү мөмкинлеге булыуын теләһәгеҙ, \n{{int:config-license-cc-by-sa}} һайлағыҙ.\nВикипедия элек GNU Free Documentation License лицензияһын файҙалана ине.\nGFDL файҙаланыла ала, әммә ул аңлау өсөн ҡатмарлы һәм материалдарҙы ҡабатлап ҡулланыуҙы ауырлаштыра.", + "config-email-settings": "Электрон почта көйләүҙәре", + "config-enable-email": "e-mail сығыусы почтаны рәхсәт итергә", + "config-enable-email-help": "Электрон почта эшләһен өсөн [http://www.php.net/manual/ru/mail.configuration.php PHP көйләүҙәрен] башҡарырға кәрәк.\nӘгәр электорон поста мөмкинлектәре кәрәкмәһә, һүндерергә була.", + "config-email-user": "Ҡатнашыусынан ҡатнашыусыға почтаны рөхсәт итергә", + "config-email-user-help": "Әгәр профилдә тейешле көйләү булһа, бөтә ҡатнашыусыларға электрон хат ебәрергә рөхсәт итергә.", + "config-email-usertalk": "Ҡулланыусыларҙы уларҙың фекерләшеү битендәге хәбәрҙәр хаҡында белдереүҙәрҙе файҙаланыу", + "config-email-usertalk-help": "Ҡулланыусылар үҙ көйләүҙәрендә рөхсәт бирһә, уларға фекерләү биттәрендәге үҙгәрештәр хаҡында белдереүҙәр алырға рөхсәт итеү.", + "config-email-watchlist": "Күҙәтеү исемлеген үҙгәртеү хаҡында электрон почтаға белдереү ебәрергә", + "config-email-watchlist-help": "Ҡулланыусылар үҙ көйләүҙәрендә рөхсәт бирһә, уларға фекерләү биттәрендәге үҙгәрештәр хаҡында белдереүҙәр алырға рөхсәт итеү.", + "config-email-auth": "Электрон почта аша аутентификация (ҡулланыусы тәҡдим иткән идентификаторҙы тикшереү) үткәреү", + "config-email-auth-help": "Был опция ҡабыҙырған булһа, ҡатнашыусылар үҙ адресын раҫлап e-mail адресындағы һылтанма буйынса күсергә тейеш. Электорон йәшникте алыштырған осраҡта раҫлау талап ителә.Тик почта йәшниге раҫланған ҡатнашыусылар ғына хат ала.\nБыл опцияны почтаны урынһыҙ ҡулланыуҙарҙы булдырмаҫ өсөн ҡулланырға \"тәҡдим\" ителә.", + "config-email-sender": "Электрон почта адресығыҙ", + "config-email-sender-help": "Баһалама алыу өсөн электрон почта адресын яҙығыҙ. Унда кире ҡағылған баһаламалар ебәреләсәк.Почта серверы домен исемен дөрөҫ яҙыуҙы талап ите.", + "config-upload-settings": "Рәсем-һүрәттәрҙе һәм файлдарҙы тултырыу", + "config-upload-enable": "Файл тултырырға рөхсәт биреү", + "config-upload-help": "Файлды тейәргә рөхсәт итеү серверҙың хәүефһеҙлегенә янай. Өҫтәмә мәғлүмәт алыу өсөн Ҡулланманың [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Security хәүефһеҙлек бүлеген] уҡығыҙ.", + "config-upload-deleted": "Юйылған файлдарға директория", + "config-upload-deleted-help": "Юйылған файлдар архивы һаҡланасаҡ каталогты һайлағыҙ.\nИң шәп осраҡта, интернет селтәренән был каталогҡа инеү рөхсәте булырға тейеш түгел.", + "config-logo": "Логотип URL-ы :", + "config-logo-help": "MediaWiki стантарт биҙәү темаһының ситтәге панелендә 135x160 пикселдән торған логотип урынлаштырыла. Шул ҙурлыҡтағы рәсемде тейәгеҙ, һәм URL адресын яҙығыҙ.\nЛогитип сағыштырмаса ошо юлдарҙа ятһа, $wgStylePath йәки $wgScriptPath кодын файҙалана алаһығыҙ.\nӘгәр логотип кәрәк булмаһа, был урында буш ҡалдырығыҙ.", + "config-instantcommons": "Instant Commons-ты тоҡандырырға", + "config-instantcommons-help": "[//www.mediawiki.org/wiki/InstantCommons Instant Commons] — Викимилектәге рәсем, тауыш һәм башҡа медиафайлдарҙы файҙаланыу функцияһы ([//commons.wikimedia.org/ Wikimedia Commons]).\n MediaWiki функцияһы менән эшләү өсөн интернетҡа инеү мөмкинлеге кәрәк.\n\nInstant Commons тураһында өҫтәмә мәғлүмәтте, һәм башҡа көйләүҙәрҙе [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgForeignFileRepos Ҡулланмала] табырға була.", + "config-cc-error": "Creative Commons лицензияһын һайлау механизмы нәтижә бирмәне.\nЛицензия исемен ҡулдан яҙығыҙ.", + "config-cc-again": "Ҡабаттан һайлағыҙ", + "config-cc-not-chosen": "Creative Commons лицензияһының ҡулланырға теләгәнен һайлағыҙ һәм \"proceed\" төймәһенә баҫыҡыҙ.", + "config-advanced-settings": "Өҫтәлмә көйләүҙәр", + "config-cache-options": "Объекттарҙы кэшлау параматры", + "config-cache-help": "Объекттарҙы кэшлау MediaWiki-ның тиҙлеген арттырыу өсөн ҡулланыла. Ҙур һәм уртаса сайттар өсөн кэшлау ҡәтғи тәҡдим ителә, белекәй сайттар өсөн өҫтөнлөк бирелә.", + "config-cache-none": "Кэш ҡулланмайынса (фуккция юғалмай, әммә эре вики-сайттар әкренерәк эшләйәсәк)", + "config-cache-accel": "Объекттарҙы PHP кэшлау (APC, XCache йәки WinCache)", + "config-cache-memcached": "Memcached ҡулланырға (өҫтәлмә көйләү талап итә)", + "config-memcached-servers": "Memcached серверҙары:", + "config-memcached-help": "Memcached ҡулланған IP-адрестар исемлеге.\nҺәр юлға бер генә адрес яҙып һанап сығығыҙ. \nМәҫәлән:\n\n 127.0.0.1:11211\n 192.168.1.25:1234", + "config-memcache-needservers": "Һеҙ Memcached кэшлауҙы һайланыҡыҙ, әммә сервер адресын яҙманығыҙ.", + "config-memcache-badip": "Һеҙ Memcached өсөн хата IP-адрес яҙҙығыҙ: $1.", + "config-memcache-noport": "Memcached: $1 өсөн порт күрһәтелмәгән.\nНиндәй порт икәнән белмәһәгеҙ, килешеү буйынса 11211.", + "config-memcache-badport": "Memcached порттары $1 һәм $2 араһында ярырға тейеш.", + "config-extensions": "Киңәйтеүҙәр", + "config-extensions-help": "Расширения MediaWiki, перечисленные выше, были найдены в каталоге ./extensions.\n\nОни могут потребовать дополнительные настройки, но их можно включить прямо сейчас", + "config-skins": "Биҙәлеш темалары", + "config-skins-help": "Өҫтә һаналған биҙәү темалары һеҙҙең ./skins каталогында табылды. Һеҙгә уларҙың берәүһен булһа ла эшләтергә һәм өндәшмәү буйынса ҡулланыласағын һайларға кәрәк.", + "config-skins-use-as-default": "Махсус әйтмәгәндә был биҙәлеү темаһын ҡулланырға", + "config-skins-missing": "Биҙәү темалары табылманы. Һеҙ яраҡлыһын ҡуйғансы, MediaWiki резерв теманы ҡулланасаҡ.", + "config-skins-must-enable-some": "Һеҙ иң кәмендә бер биҙәлеү темаһын эш өҫтөндә ҡалдырырға тейеш", + "config-skins-must-enable-default": "\n\nҺүҙһеҙ һайланған биҙәлеш темаһы теркәлергә тейеш.", + "config-install-alreadydone": "'''Иҫкәртеү:''' Һеҙ MediaWiki ҡуйҙығыҙ шикелле, әле быны икенсегә эшләйһегеҙ. Алдағы биткә күсегеҙ.", + "config-install-begin": "«{{int:config-continue}}» - бында баҫыу MediaWiki ҡуйыуҙы башлай.\nӘгәр һеҙ үҙгәреш индерергә теләһәгеҙ, баҫығыҙ: «{{int:config-back}}».", + "config-install-step-done": "Юҡ", + "config-install-step-failed": "килеп сыҡманы", + "config-install-extensions": "Шул иҫәптән киңәйтеүҙәр", + "config-install-database": "Мәғлүмәттәр базаһын көйләү", + "config-install-schema": "Схемаға һалыу", + "config-install-pg-schema-not-exist": "PostgreSQL схемалары юҡ", + "config-install-pg-schema-failed": "Таблица эшләп булманы. Ҡулланыусы «$1» «$2»-се схема яҙа алыуына ышанырға.", + "config-install-pg-commit": "Үҙгәртеүҙәр индереү", + "config-install-pg-plpgsql": " PL/pgSQL телен тикшереү", + "config-pg-no-plpgsql": "Һеҙгә $1 мәғлүмәт базаһы өсөн PL/pgSQL тел яҡлауын ҡуйырға кәрәк", + "config-pg-no-create-privs": "Ҡуйыу өсөн күрһәтелгән иҫәп яҙмаһының иҫәп яҙмаһы булдырыу өсөн етерлек өҫтөнлөгө юҡ.", + "config-pg-not-in-role": "Веб-ҡулланыусының күрһәтелгән иҫәп яҙмаһы инде бар. Һеҙ ҡуйыу өсөн һайлаған иҫәп яҙмаһы супер ҡулланыусы яҙмаһы түгел һәм веб-ҡулланыусы роленә инмәй; шуға ла веб-ҡулланыусыныҡы булған объекттар төҙөп булмай\n\nMediaWiki хәҙерге ваҡытта таблицалар хужаһы веб-ҡулланыусы булыуын талап итә. Зинһар, веб-ҡулланыусы иҫәп яҙмаһы өсөн башҡа исем күрһәтегеҙ йәки, «артҡа» төймәһенә баҫып, ҡуйыу өсөн етерлек хоҡуҡтары булған ҡулланыусыны күрһәтегеҙ.", + "config-install-user": "Ҡулланыусының база дәүмәлдәрен теркәү", + "config-install-user-alreadyexists": "Ҡатнашыусы $1 бар инде", + "config-install-user-create-failed": "Ҡатнашыусы «$1» эшләү килеп сыҡманы: $2", + "config-install-user-grant-failed": "Ҡатнашыусы «$1»-гә хоҡуҡ биреү хата: $2", + "config-install-user-missing": "Күрһәтелгән ҡатнашыусы «$1» юҡ.", + "config-install-user-missing-create": "Күрһәтелгән ҡатнашыусы «$1» юҡ.\nӘгәр ҙә яһарға теләгәгеҙ булһа,зинһар, аҫта «Иҫәп яҙыуы булдырырға» билдәһе ҡуйығыҙ.", + "config-install-tables": "Таблица төҙөү", + "config-install-tables-exist": "'''Иҫкәртеү''': MediaWiki таблицаларының булыуы ихтимал. Икенсегә яһауҙы булдырмау.", + "config-install-tables-failed": "'''Хата''': Хата булыу сәбәпле таблица эшләнмәне: $1", + "config-install-interwiki": "Килешеү буйынса интервики таблицаларын тултырыу", + "config-install-interwiki-list": "Файл табылманы interwiki.list.", + "config-install-interwiki-exists": "'''Киҫәтеү''': интервики-таблицала яҙма бар.\nСтандарт исемлек төҙөү төшөп ҡалды.", + "config-install-stats": "Инициализация статистикаһы", + "config-install-keys": "Серле асҡыстар төҙөү", + "config-insecure-keys": "'''Киҫәтеү''' {{PLURAL:$2|1=Ҡатнашыусы булдырған хәүефһеҙлек асҡысы $1 ышаныслы түгел}}. Асҡысты үҙгәртеү мөмкинлеген {{PLURAL:$2|1=}} ҡарағыҙ.", + "config-install-updates": "Кәрәкмәген яңыртыуҙар туҡтатылды", + "config-install-updates-failed": "Хата: Яңыртыуға асҡыс ҡуйыу түбәндәге хата менән тамамланды: $1", + "config-install-sysop": "Администратор иҫәп яҙмаһын булдырыу", + "config-install-subscribe-fail": "mediawiki-announce яҙылып булманы: $1", + "config-install-subscribe-notpossible": "cURL урынлаштырылмаған һәм опция асылмайallow_url_fopen.", + "config-install-mainpage": "Килешеү буйынса эстәлекле баш битте эшләү", + "config-install-extension-tables": "Ҡушымталар өсөн таблица эшләү", + "config-install-mainpage-failed": "Баш битте ҡуйып булмай:$1", + "config-install-done": "Ҡотлайбыҙ!\nMediaWiki уңышлы урынлаштырылды.\n\nФайл булдырылды LocalSettings.php.\nБыл файлда һеҙҙеү бөтә көәләүҙәр бар.\n\n\nАвтоматик тейәү башланмаһа йәки үҙегеҙ өҙһәгеҙ түбәндәге һылтанма буйынса тейәргә була:\n\n$3\n\nИҫкәртмә: Файлда тейәмәйенсә сыҡһағыҙ киләсәктә бына эшләй алмайһығыҙ.\n\n\nӨҫтә яҙылғандарҙы эшләгәс[$2 беҙҙеү викиҙа инегеҙ].", + "config-download-localsettings": "LocalSettings.php тейәргә", "config-help": "белешмә", + "config-help-tooltip": "асыр өсөн сиртегеҙ", + "config-nofile": "\"$1\" файлын табып булмай, ул юйылған.", + "config-extension-link": "Беҙҙең вики-проектта [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Extensions ҡушымта] барлығын беләһегеҙме??\n\n[//www.mediawiki.org/wiki/Special:MyLanguage/Category:Extensions_by_category категориялар буйынса ҡушымта] йәки [//www.mediawiki.org/wiki/Extension_Matrix матрица ҡсн ҡушымтаның] тулы исемлеген ҡарай алаһығыҙ.", "mainpagetext": "«MediaWiki» уңышлы рәүештә ҡоролдо.", "mainpagedocfooter": "Был вики менән эшләү тураһында мәғлүмәтте [//meta.wikimedia.org/wiki/Help:Contents ошонда] табып була.\n\n== Файҙалы сығанаҡтар ==\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Көйләүҙәр исемлеге (инг.)];\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ MediaWiki тураһында йыш бирелгән һорауҙар һәм яуаптар (инг.)];\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki-ның яңы версиялары тураһында хәбәрҙәр алып тороу].\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Localise MediaWiki for your language]" } diff --git a/includes/installer/i18n/be-tarask.json b/includes/installer/i18n/be-tarask.json index b68e244eee..1b42cddb90 100644 --- a/includes/installer/i18n/be-tarask.json +++ b/includes/installer/i18n/be-tarask.json @@ -68,6 +68,7 @@ "config-ctype": "'''Фатальная памылка''': PHP мусіць быць скампіляваны з падтрымкай [http://www.php.net/manual/en/ctype.installation.php пашырэньня Ctype].", "config-iconv": "Непапраўная памылка: PHP мусіць быць скампіляваны з падтрымкай [http://www.php.net/manual/en/iconv.installation.php пашырэньня iconv].", "config-json": "Крытычная памылка: PHP быў скампіляваны без падтрымкі JSON.\nВы павінныя ўсталяваць або пашырэньне PHP JSON, або пашырэньне [http://pecl.php.net/package/jsonc PECL jsonc] перад усталёўкай MediaWiki.\n* Пашырэньне PHP уваходзіць у Red Hat Enterprise Linux (CentOS) 5 і 6, пры гэтым павінна быць падключана ў /etc/php.ini або /etc/php.d/json.ini.\n* Некаторыя дыстрыбутывы Linux, выдадзеныя пасьля траўня 2013 году, ня маюць пашырэньня PHP, замест яго пакуюць пашырэньне PECL як php5-json або php-pecl-jsonc.", + "config-mbstring-absent": "Непапраўная памылка: PHP мусіць быць скампіляваны з падтрымкай [http://www.php.net/manual/en/mbstring.setup.php пашырэньня mbstring].", "config-xcache": "[http://xcache.lighttpd.net/ XCache] усталяваны", "config-apc": "[http://www.php.net/apc APC] усталяваны", "config-wincache": "[http://www.iis.net/download/WinCacheForPhp WinCache] усталяваны", @@ -315,12 +316,12 @@ "config-install-mainpage": "Стварэньне галоўнай старонкі са зьместам па змоўчваньні", "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 ўвайсьці ў Вашую вікі]'''.", + "config-install-done": "Віншуем!\nВы ўсталявалі MediaWiki.\n\nПраграма ўсталяваньня стварыла файл LocalSettings.php.\nЁн утрымлівае ўсе Вашыя налады.\n\nВам неабходна загрузіць яго і захаваць у карэнную дырэкторыю Вашай вікі (у тую ж самую дырэкторыю, дзе знаходзіцца index.php). Загрузка павінна пачацца аўтаматычна.\n\nКалі загрузка не пачалася, ці Вы яе адмянілі, Вы можаце перазапусьціць яе націснуўшы на спасылку ніжэй:\n\n$3\n\nЗаўвага: калі Вы гэтага ня зробіце зараз, то створаны файл ня будзе даступны Вам потым, калі Вы выйдзеце з праграмы ўсталяваньня безь яго загрузкі.\n\nКалі Вы гэта зробіце, Вы можаце [$2 ўвайсьці ў Вашую вікі].", "config-download-localsettings": "Загрузіць LocalSettings.php", "config-help": "дапамога", "config-help-tooltip": "націсьніце, каб разгарнуць", "config-nofile": "Файл «$1» ня знойдзены. Ці быў ён выдалены?", "config-extension-link": "Ці ведаеце вы, што вашая вікі падтрымлівае [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Extensions пашырэньні]?\n\nВы можаце праглядзець [//www.mediawiki.org/wiki/Special:MyLanguage/Category:Extensions_by_category пашырэньні паводле катэгорыяў].", - "mainpagetext": "'''MediaWiki пасьпяхова ўсталяваная.'''", + "mainpagetext": "MediaWiki была ўсталяваная.", "mainpagedocfooter": "Глядзіце [//meta.wikimedia.org/wiki/Help:Contents дапаможнік карыстальніка] для атрыманьня інфармацыі па карыстаньні вікі-праграмамі.\n\n== З чаго пачаць ==\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Сьпіс парамэтраў канфігурацыі]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ Частыя пытаньні MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Рассылка паведамленьняў пра зьяўленьне новых вэрсіяў MediaWiki]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Пераклад MediaWiki на вашую мову]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Даведайцеся, як змагацца з спамам у вашай вікі]" } diff --git a/includes/installer/i18n/bn.json b/includes/installer/i18n/bn.json index c9e96ed1e5..02e840b211 100644 --- a/includes/installer/i18n/bn.json +++ b/includes/installer/i18n/bn.json @@ -73,6 +73,7 @@ "config-missing-db-host": "আপনাকে অবশ্যই \"{{int:config-db-host}}\"-এর জন্য একটি মান প্রবেশ করাতে হবে।", "config-missing-db-server-oracle": "আপনাকে অবশ্যই \"{{int:config-db-host-oracle}}\"-এর জন্য একটি মান প্রবেশ করাতে হবে।", "config-connection-error": "$1।\n\n\nদয়া করে প্রস্তাবকারী, ব্যবহারকারী নাম ও পাসওয়ার্ড দেখুন এবং পুনরায় চেষ্টা করুন।", + "config-regenerate": "LocalSettings.php পুনরূত্পাদিত করুন →", "config-mysql-engine": "সংরক্ষণ ইঞ্জিন:", "config-mysql-innodb": "ইনোডিবি", "config-mysql-myisam": "মাইআইএসএএম", diff --git a/includes/installer/i18n/ce.json b/includes/installer/i18n/ce.json index 757e2e26fc..daaf663af0 100644 --- a/includes/installer/i18n/ce.json +++ b/includes/installer/i18n/ce.json @@ -46,7 +46,7 @@ "config-mssql-auth": "Аутентификацин тайп:", "config-site-name": "Викин цӀе:", "config-site-name-blank": "Язъе сайтан цӀе.", - "config-project-namespace": "ЦӀерийн ана проектан:", + "config-project-namespace": "Проектан цӀерийн меттиг:", "config-ns-generic": "Проект", "config-ns-other-default": "MyWiki", "config-admin-password": "Пароль:", diff --git a/includes/installer/i18n/cs.json b/includes/installer/i18n/cs.json index ddbaa19675..905e3266af 100644 --- a/includes/installer/i18n/cs.json +++ b/includes/installer/i18n/cs.json @@ -55,37 +55,38 @@ "config-env-php": "Je nainstalováno PHP $1.", "config-env-hhvm": "Je nainstalováno HHVM $1.", "config-unicode-using-intl": "Pro normalizaci Unicode se používá [http://pecl.php.net/intl PECL rozšíření intl].", - "config-unicode-pure-php-warning": "'''Upozornění''': Není dostupné [http://pecl.php.net/intl PECL rozšíření intl] pro normalizaci Unicode, bude se využívat pomalá implementace v čistém PHP.\nPokud provozujete wiki s velkou návÅ¡těvností, měli byste si přečíst něco o [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations normalizaci Unicode].", - "config-unicode-update-warning": "'''Upozornění''': Nainstalovaná verze vrstvy pro normalizaci Unicode používá starší verzi knihovny [http://site.icu-project.org/ projektu ICU].\nPokud vám aspoň trochu záleží na používání Unicode, měli byste [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations ji aktualizovat].", + "config-unicode-pure-php-warning": "Upozornění: Není dostupné [http://pecl.php.net/intl PECL rozšíření intl] pro normalizaci Unicode, bude se využívat pomalá implementace v čistém PHP.\nPokud provozujete wiki s velkou návÅ¡těvností, měli byste si přečíst něco o [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations normalizaci Unicode].", + "config-unicode-update-warning": "Upozornění: Nainstalovaná verze vrstvy pro normalizaci Unicode používá starší verzi knihovny [http://site.icu-project.org/ projektu ICU].\nPokud vám aspoň trochu záleží na používání Unicode, měli byste [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations ji aktualizovat].", "config-no-db": "Nepodařilo se nalézt vhodný databázový ovladač! Musíte nainstalovat databázový ovladač pro PHP.\n{{PLURAL:$2|Je podporován následující typ databáze|Jsou podporovány následující typy databází}}: $1.\n\nPokud jste si PHP přeložili sami, překonfigurujte ho se zapnutým databázovým klientem, například pomocí ./configure --with-mysql.\nPokud jste PHP nainstalovali z balíčku Debian či Ubuntu, potřebujete nainstalovat také modul php5-mysql.", - "config-outdated-sqlite": "'''Upozornění''': Máte SQLite $1, které je starší než minimálně vyžadovaná verze $2. SQLite nebude dostupné.", - "config-no-fts3": "'''Upozornění''': SQLite bylo přeloženo bez [//sqlite.org/fts3.html modulu FTS3], funkce pro vyhledávání zde nebudou dostupné.", - "config-mbstring": "'''Kritická chyba: Je zapnuto [http://www.php.net/manual/en/ref.mbstring.php#mbstring.overload mbstring.func_overload]!'''\nToto nastavení způsobuje chyby a může nepředvídatelně poÅ¡kozovat vstupní data.\nMediaWiki nelze nainstalovat ani používat, dokud není toto nastavení vypnuto.", + "config-outdated-sqlite": "Upozornění: Máte SQLite $1, které je starší než minimálně vyžadovaná verze $2. SQLite nebude dostupné.", + "config-no-fts3": "Upozornění: SQLite bylo přeloženo bez [//sqlite.org/fts3.html modulu FTS3], funkce pro vyhledávání zde nebudou dostupné.", + "config-mbstring": "Kritická chyba: Je zapnuto [http://www.php.net/manual/en/ref.mbstring.php#mbstring.overload mbstring.func_overload]!\nToto nastavení způsobuje chyby a může nepředvídatelně poÅ¡kozovat vstupní data.\nMediaWiki nelze nainstalovat ani používat, dokud není toto nastavení vypnuto.", "config-xml-bad": "Chybí XML modul pro PHP.\nMediaWiki potřebuje funkce v tomto modulu a v této konfiguraci nebude fungovat.\nMožná si budete muset nainstalovat RPM balíček php-xml.", - "config-pcre-old": "'''Kritická chyba:''' Je vyžadováno PCRE verze $1 nebo novější.\nVaÅ¡e binárka PHP obsahuje PCRE $2.\n[https://www.mediawiki.org/wiki/Manual:Errors_and_symptoms/PCRE Více informací.]", - "config-pcre-no-utf8": "'''Kritická chyba''': PHP modul PCRE byl zřejmě přeložen bez podpory PCRE_UTF8.\nMediaWiki vyžaduje ke správné funkci podporu UTF-8.", + "config-pcre-old": "Kritická chyba: Je vyžadováno PCRE verze $1 nebo novější.\nVaÅ¡e binárka PHP obsahuje PCRE $2.\n[https://www.mediawiki.org/wiki/Manual:Errors_and_symptoms/PCRE Více informací.]", + "config-pcre-no-utf8": "Kritická chyba: PHP modul PCRE byl zřejmě přeložen bez podpory PCRE_UTF8.\nMediaWiki vyžaduje ke správné funkci podporu UTF-8.", "config-memory-raised": "memory_limit v PHP byl nastaven na $1, zvýšen na $2.", - "config-memory-bad": "'''Upozornění:''' memory_limit je v PHP nastaven na $1.\nTo je pravděpodobně příliÅ¡ málo.\nInstalace může selhat!", - "config-ctype": "'''Kritická chyba''': PHP musí být přeloženo s podporou pro [http://www.php.net/manual/en/ctype.installation.php rozšíření Ctype].", - "config-iconv": "'''Kritická chyba''': PHP musí být přeloženo s podporou pro [http://www.php.net/manual/en/iconv.installation.php rozšíření iconv].", - "config-json": "'''Kritická chyba:''' PHP bylo přeloženo bez podpory JSON.\nPřed instalací MediaWiki musíte buď nainstalovat rozšíření PHP JSON nebo rozšíření [http://pecl.php.net/package/jsonc PECL jsonc].\n* Rozšíření PHP je součástí Red Hat Enterprise Linux (CentOS) 5 a 6, avÅ¡ak musí se povolit v /etc/php.ini nebo /etc/php.d/json.ini.\n* V některých linuxových distribucích vydaných po květnu 2013 může toto rozšíření PHP chybět a místo toho mohou používat rozšíření PECL jako php5-json nebo php-pecl-jsonc.", + "config-memory-bad": "Upozornění: memory_limit je v PHP nastaven na $1.\nTo je pravděpodobně příliÅ¡ málo.\nInstalace může selhat!", + "config-ctype": "Kritická chyba: PHP musí být přeloženo s podporou pro [http://www.php.net/manual/en/ctype.installation.php rozšíření Ctype].", + "config-iconv": "Kritická chyba: PHP musí být přeloženo s podporou pro [http://www.php.net/manual/en/iconv.installation.php rozšíření iconv].", + "config-json": "Kritická chyba: PHP bylo přeloženo bez podpory JSON.\nPřed instalací MediaWiki musíte buď nainstalovat rozšíření PHP JSON nebo rozšíření [http://pecl.php.net/package/jsonc PECL jsonc].\n* Rozšíření PHP je součástí Red Hat Enterprise Linux (CentOS) 5 a 6, avÅ¡ak musí se povolit v /etc/php.ini nebo /etc/php.d/json.ini.\n* V některých linuxových distribucích vydaných po květnu 2013 může toto rozšíření PHP chybět a místo toho mohou používat rozšíření PECL jako php5-json nebo php-pecl-jsonc.", + "config-mbstring-absent": "Kritická chyba: PHP musí být přeloženo s podporou pro [http://www.php.net/manual/en/mbstring.setup.php rozšíření mbstring].", "config-xcache": "Je nainstalována [http://xcache.lighttpd.net/ XCache]", "config-apc": "Je nainstalováno [http://www.php.net/apc APC]", "config-wincache": "Je nainstalována [http://www.iis.net/download/WinCacheForPhp WinCache]", "config-no-cache-apcu": "Upozornění: Nebylo nalezeno [http://www.php.net/apcu APCu], [http://xcache.lighttpd.net/ XCache], ani [http://www.iis.net/download/WinCacheForPhp WinCache].\nKeÅ¡ování objektů bude vypnuto.", - "config-mod-security": "'''Upozornění''': váš webový server má zapnuto [http://modsecurity.org/ mod_security]. Při chybné konfiguraci může způsobovat potíže MediaWiki či dalším programům, které umožňují ukládat libovolný obsah.\nPokud narazíte na náhodné chyby, podívejte se do [http://modsecurity.org/documentation/ dokumentace mod_security] nebo kontaktujte technickou podporu vaÅ¡eho poskytovatele.", + "config-mod-security": "Upozornění: váš webový server má zapnuto [http://modsecurity.org/ mod_security]/mod_security2. Mnoho běžných konfigurací bude způsobovat potíže MediaWiki a dalším programům, které umožňují ukládat libovolný obsah.\nPokud je to možné, mělo by se to vypnout. Jinak se v případě, že narazíte na náhodné chyby, podívejte do [http://modsecurity.org/documentation/ dokumentace mod_security] nebo kontaktujte technickou podporu vaÅ¡eho poskytovatele.", "config-diff3-bad": "Nebyl nalezen GNU diff3.", "config-git": "Nalezen software pro správu verzí Git: $1.", "config-git-bad": "Software pro správu verzí Git nebyl nalezen.", "config-imagemagick": "Nalezen ImageMagick: $1.\nPokud povolíte načítání souborů, bude zapnuto vytváření náhledů.", "config-gd": "Nalezena vestavěná grafická knihovna GD.\nPokud povolíte načítání souborů, bude zapnuto vytváření náhledů.", "config-no-scaling": "Nebyla nalezena knihovna GD ani ImageMagick.\nVytváření náhledů bude vypnuto.", - "config-no-uri": "'''Chyba:''' Nepodařilo se určit aktuální URI.\nInstalace přeruÅ¡ena.", - "config-no-cli-uri": "Upozornění: Nebylo uvedeno --scriptpath, používá se implicitní hodnota: $1.", + "config-no-uri": "Chyba: Nepodařilo se určit aktuální URI.\nInstalace přeruÅ¡ena.", + "config-no-cli-uri": "Upozornění: Nebylo uvedeno --scriptpath, používá se implicitní hodnota: $1.", "config-using-server": "Použito jméno serveru „$1“.", "config-using-uri": "Použito URL serveru „$1$2“.", - "config-uploads-not-safe": "'''Upozornění:''' Váš výchozí adresář pro načítání souborů $1 umožňuje spouÅ¡tění libovolných skriptů.\nPřestože MediaWiki vÅ¡echny načítané soubory kontroluje proti bezpečnostním hrozbám, je důrazně doporučeno [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Security#Upload_security tuto bezpečnostní díru zacelit] před povolením načítání souborů.", - "config-no-cli-uploads-check": "'''Upozornění:''' Váš výchozí adresář pro načítané soubory ($1) se při instalaci z příkazového řádku nekontroluje na bezpečnostní hrozbu provádění libovolných skriptů.", + "config-uploads-not-safe": "Upozornění: Váš výchozí adresář pro načítání souborů $1 umožňuje spouÅ¡tění libovolných skriptů.\nPřestože MediaWiki vÅ¡echny načítané soubory kontroluje proti bezpečnostním hrozbám, je důrazně doporučeno [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Security#Upload_security tuto bezpečnostní díru zacelit] před povolením načítání souborů.", + "config-no-cli-uploads-check": "Upozornění: Váš výchozí adresář pro načítané soubory ($1) se při instalaci z příkazového řádku nekontroluje na bezpečnostní hrozbu provádění libovolných skriptů.", "config-brokenlibxml": "Váš systém obsahuje kombinaci verzí PHP a libxml2, která je chybná a může v MediaWiki a dalších webových aplikacích způsobovat skryté poÅ¡kozování dat.\nAktualizujte na libxml2 2.7.3 nebo novější ([https://bugs.php.net/bug.php?id=45996 chyba evidovaná u PHP]).\nInstalace přeruÅ¡ena.", "config-suhosin-max-value-length": "Je nainstalován Suhosin, který omezuje délku parametrů GET na $1 bajtů.\nKomponenta ResourceLoader z MediaWiki dokáže s tímto omezením pracovat, ale sníží to výkon.\nPokud to je alespoň trochu možné, měli byste v php.ini nastavit suhosin.get.max_value_length na 1024 nebo vyšší a na stejnou hodnotu nastavit v LocalSettings.php proměnnou $wgResourceLoaderMaxQueryLength.", "config-db-type": "Typ databáze:", @@ -113,8 +114,8 @@ "config-charset-mysql5-binary": "MySQL 4.1/5.0 binární", "config-charset-mysql5": "MySQL 4.1/5.0 UTF-8", "config-charset-mysql4": "MySQL 4.0 zpětně kompatibilní UTF-8", - "config-charset-help": "'''Upozornění:''' Pokud použijete '''zpětně kompatibilní UTF-8''' na MySQL 4.1+ a následně zazálohujete databázi pomocí mysqldump, může to zničit vÅ¡echny ne-ASCII znaky, což nevratně poÅ¡kodí vaÅ¡e zálohy!\n\nV '''binárním režimu''' ukládá MediaWiki text v UTF-8 do databáze v binárních sloupcích.\nTo je výkonnější než UTF-8 režim MySQL a umožňuje využít plný rozsah znaků Unicode.\nV '''režimu UTF-8''' bude MySQL znát znakovou sadu vaÅ¡ich dat a může je přísluÅ¡ně zobrazovat a převádět,\nale neumožní vám uložit znaky mimo [//en.wikipedia.org/wiki/Mapping_of_Unicode_character_planes Basic Multilingual Plane].", - "config-mysql-old": "Je vyžadováno MySQL $1 nebo novější, vy máte $2.", + "config-charset-help": "Upozornění: Pokud použijete zpětně kompatibilní UTF-8 na MySQL 4.1+ a následně zazálohujete databázi pomocí mysqldump, může to zničit vÅ¡echny ne-ASCII znaky, což nevratně poÅ¡kodí vaÅ¡e zálohy!\n\nV binárním režimu ukládá MediaWiki text v UTF-8 do databáze v binárních sloupcích.\nTo je výkonnější než UTF-8 režim MySQL a umožňuje využít plný rozsah znaků Unicode.\nV režimu UTF-8 bude MySQL znát znakovou sadu vaÅ¡ich dat a může je přísluÅ¡ně zobrazovat a převádět,\nale neumožní vám uložit znaky mimo [//en.wikipedia.org/wiki/Mapping_of_Unicode_character_planes Basic Multilingual Plane].", + "config-mysql-old": "Je vyžadováno MySQL $1 nebo novější. Vy máte $2.", "config-db-port": "Databázový port:", "config-db-schema": "Schéma pro MediaWiki:", "config-db-schema-help": "Toto schéma zpravidla stačí.\nMěňte ho, jen pokud víte, že je to potřeba.", @@ -166,7 +167,7 @@ "config-upgrade-done-no-regenerate": "Aktualizace byla dokončena.\n\nSvou wiki teď můžete [$1 začít používat].", "config-regenerate": "Přegenerovat LocalSettings.php →", "config-show-table-status": "Dotaz SHOW TABLE STATUS se nezdařil!", - "config-unknown-collation": "'''Upozornění:''' Databáze používá nerozpoznané řazení.", + "config-unknown-collation": "Upozornění: Databáze používá nerozpoznané řazení.", "config-db-web-account": "Databázový účet pro webový přístup", "config-db-web-help": "Zvolte uživatelské jméno a heslo, které bude webový server používat pro připojení k databázovému serveru při běžném provozu wiki.", "config-db-web-account-same": "Použít stejný účet jako pro instalaci", @@ -175,8 +176,8 @@ "config-mysql-engine": "Typ úložiÅ¡tě:", "config-mysql-innodb": "InnoDB", "config-mysql-myisam": "MyISAM", - "config-mysql-myisam-dep": "'''Upozornění''': Jako typ úložiÅ¡tě pro MySQL jste zvolili MyISAM, které není pro použití v MediaWiki doporučeno, neboÅ¥:\n* stěží podporuje současný přístup kvůli zamykání tabulek,\n* je náchylnější na poÅ¡kození dat než jiná úložiÅ¡tě,\n* kód MediaWiki nepodporuje MyISAM vždy tak dobře, jak by měl.\n\nPokud vaÅ¡e instalace MySQL podporuje InnoDB, důrazně doporučujeme použít spíše to.\nPokud vaÅ¡e instalace MySQL InnoDB nepodporuje, možná je čas na aktualizaci.", - "config-mysql-only-myisam-dep": "'''Upozornění:''' Jediným dostupným úložiÅ¡těm dat pro MySQL je MyISAM, který se k užití s MediaWiki nedoporučuje, neboÅ¥:\n* téměř nepodporuje paralelní přístup kvůli zamykání tabulek,\n* oproti jiným formátům je náchylnější k poÅ¡kození,\n* MediaWiki nepodporuje MyISAM tak dobře, jak by bylo třeba.\n\nVaÅ¡e instalace MySQL nepodporuje InnoDB, možná je na čase upgradovat.", + "config-mysql-myisam-dep": "Upozornění: Jako typ úložiÅ¡tě pro MySQL jste zvolili MyISAM, které není pro použití v MediaWiki doporučeno, neboÅ¥:\n* stěží podporuje současný přístup kvůli zamykání tabulek,\n* je náchylnější na poÅ¡kození dat než jiná úložiÅ¡tě,\n* kód MediaWiki nepodporuje MyISAM vždy tak dobře, jak by měl.\n\nPokud vaÅ¡e instalace MySQL podporuje InnoDB, důrazně doporučujeme použít spíše to.\nPokud vaÅ¡e instalace MySQL InnoDB nepodporuje, možná je čas na aktualizaci.", + "config-mysql-only-myisam-dep": "Upozornění: Jediným dostupným úložiÅ¡těm dat pro MySQL je MyISAM, který se k užití s MediaWiki nedoporučuje, neboÅ¥:\n* téměř nepodporuje paralelní přístup kvůli zamykání tabulek,\n* oproti jiným formátům je náchylnější k poÅ¡kození,\n* MediaWiki nepodporuje MyISAM tak dobře, jak by bylo třeba.\n\nVaÅ¡e instalace MySQL nepodporuje InnoDB, možná je na čase upgradovat.", "config-mysql-engine-help": "'''InnoDB''' je téměř vždy nejlepší volba, neboÅ¥ má dobrou podporu současného přístupu.\n\n'''MyISAM''' může být rychlejší u instalací pro jednoho uživatele nebo jen pro čtení.\nDatabáze MyISAM bývají poÅ¡kozeny častěji než databáze InnoDB.", "config-mysql-charset": "Znaková sada databáze:", "config-mysql-binary": "Binární", diff --git a/includes/installer/i18n/de.json b/includes/installer/i18n/de.json index 2516a16e2d..5a1e1c42fa 100644 --- a/includes/installer/i18n/de.json +++ b/includes/installer/i18n/de.json @@ -76,6 +76,7 @@ "config-ctype": "'''Fataler Fehler:''' PHP muss mit Unterstützung für das [http://www.php.net/manual/de/ctype.installation.php Modul ctype] kompiliert werden.", "config-iconv": "Fatal: PHP muss mit Support für die [http://www.php.net/manual/en/iconv.installation.php iconv-Erweiterung] kompiliert werden.", "config-json": "Fataler Fehler: PHP wurde ohne Unterstützung für JSON kompiliert.\nVor der Installation von MediaWiki muss entweder die PHP-JSON- oder die [http://pecl.php.net/package/jsonc PECL-jsonc]-Erweiterung installieren werden.\n* Die PHP-Erweiterung ist in Red Hat Enterprise Linux (CentOS) 5 und 6 enthalten, muss jedoch in /etc/php.ini oder /etc/php.d/json.ini aktiviert werden.\n* Einige Linux-Distributionen, die nach Mai 2013 veröffentlicht wurden, nutzen nicht mehr die PHP-Erweiterung, sondern stattdessen die PECL-Erweiterung als php5-json oder php-pecl-jsonc.", + "config-mbstring-absent": "Fatal: PHP muss mit Unterstützung für die [http://www.php.net/manual/de/mbstring.setup.php mbstring-Erweiterung] kompiliert werden.", "config-xcache": "[http://xcache.lighttpd.net/ XCache] ist installiert", "config-apc": "[http://www.php.net/apc APC] ist installiert", "config-wincache": "[http://www.iis.net/download/WinCacheForPhp WinCache] ist installiert", diff --git a/includes/installer/i18n/en.json b/includes/installer/i18n/en.json index 6fa59306b4..b97cc961db 100644 --- a/includes/installer/i18n/en.json +++ b/includes/installer/i18n/en.json @@ -60,6 +60,7 @@ "config-ctype": "Fatal: PHP must be compiled with support for the [http://www.php.net/manual/en/ctype.installation.php Ctype extension].", "config-iconv": "Fatal: PHP must be compiled with support for the [http://www.php.net/manual/en/iconv.installation.php iconv extension].", "config-json": "Fatal: PHP was compiled without JSON support.\nYou must install either the PHP JSON extension or the [http://pecl.php.net/package/jsonc PECL jsonc] extension before installing MediaWiki.\n* The PHP extension is included in Red Hat Enterprise Linux (CentOS) 5 and 6, though must be enabled in /etc/php.ini or /etc/php.d/json.ini.\n* Some Linux distributions released after May 2013 omit the PHP extension, instead packaging the PECL extension as php5-json or php-pecl-jsonc.", + "config-mbstring-absent": "Fatal: PHP must be compiled with support for the [http://www.php.net/manual/en/mbstring.setup.php mbstring extension].", "config-xcache": "[http://xcache.lighttpd.net/ XCache] is installed", "config-apc": "[http://www.php.net/apc APC] is installed", "config-wincache": "[http://www.iis.net/download/WinCacheForPhp WinCache] is installed", diff --git a/includes/installer/i18n/eo.json b/includes/installer/i18n/eo.json index 0653a72d00..d70571d808 100644 --- a/includes/installer/i18n/eo.json +++ b/includes/installer/i18n/eo.json @@ -6,7 +6,8 @@ "KuboF", "Fitoschido", "Ochilov", - "Tlustulimu" + "Tlustulimu", + "Robin van der Vliet" ] }, "config-desc": "Instalilo de MediaWiki", @@ -45,6 +46,12 @@ "config-db-name": "Nomo de datumbazo:", "config-charset-mysql5": "MySQL 4.1/5.0 UTF-8", "config-type-mysql": "MySQL (aÅ­ kongrua)", + "config-header-mysql": "MySQL-agordoj", + "config-header-postgres": "PostgreSQL-agordoj", + "config-header-sqlite": "SQLite-agordoj", + "config-header-oracle": "Oracle-agordoj", + "config-header-mssql": "Microsoft SQL Server-agordoj", + "config-mysql-binary": "Duuma", "config-mysql-utf8": "UTF-8", "config-site-name": "Nomo de vikio:", "config-ns-generic": "Projekto", diff --git a/includes/installer/i18n/es.json b/includes/installer/i18n/es.json index 5b36510859..9ea112be57 100644 --- a/includes/installer/i18n/es.json +++ b/includes/installer/i18n/es.json @@ -26,7 +26,9 @@ "Macofe", "AVIADOR", "FuzzyDice", - "Legoktm" + "Legoktm", + "Matiia", + "AlvaroMolina" ] }, "config-desc": "El instalador de MediaWiki", @@ -87,6 +89,7 @@ "config-ctype": "'''Fatal''': Se necesita compilar PHP con compatibilidad para la [http://www.php.net/manual/en/ctype.installation.php extensión Ctype].", "config-iconv": "Fatal: PHP debe ser compilado con soporte para la [http://www.php.net/manual/en/iconv.installation.php extensión iconv].", "config-json": "'''Fatal:''' PHP fue compilado sin soporte para JSON.\nDebes instalar la extensión JSON o la extensión [http://pecl.php.net/package/jsonc PECL jsonc] antes de instalar MediaWiki.\n* La extensión PHP se incluye en Red Hat Enterprise Linux (CentOS) 5 y 6, aunque debe habilitarse en /etc/php.ini o /etc/php.d/json.ini.\n* Algunas distribuciones Linux liberadas después de mayo del 2013 omiten la extensión PHP, y en su lugar disponen de la extensión PECL en el paquete php5-json o php-pecl-jsonc.", + "config-mbstring-absent": "'''Fatal''': Se necesita compilar PHP con compatibilidad para la [http://www.php.net/manual/en/ctype.installation.php extensión Ctype].", "config-xcache": "[http://xcache.lighttpd.net/ XCache] está instalado", "config-apc": "[http://www.php.net/apc APC] está instalado", "config-wincache": "[http://www.iis.net/download/WinCacheForPhp WinCache] está instalado", @@ -204,7 +207,7 @@ "config-mssql-install-auth": "Selecciona el tipo de autenticación que se utilizará para conectarse a la base de datos durante el proceso de instalación.\nSi seleccionas \"{{int:config-mssql-windowsauth}}\", se usarán las credenciales del usuario con el que se ejecuta el servidor web.", "config-mssql-web-auth": "Selecciona el tipo de autenticación que utilizará el servidor web para conectarse al servidor de base de datos, durante el funcionamiento normal de la wiki.\nSi seleccionas \"{{int:config-mssql-windowsauth}}\", se usarán las credenciales del usuario con el cual se ejecuta el servidor web.", "config-mssql-sqlauth": "Autenticación de SQL Server", - "config-mssql-windowsauth": "Autentificación de Windows", + "config-mssql-windowsauth": "Autenticación de Windows", "config-site-name": "Nombre del wiki:", "config-site-name-help": "Esto aparecerá en la barra de título del navegador y en varios otros lugares.", "config-site-name-blank": "Escribe un nombre de sitio.", @@ -241,7 +244,7 @@ "config-profile-no-anon": "Creación de cuenta requerida", "config-profile-fishbowl": "Sólo editores autorizados", "config-profile-private": "Wiki privado", - "config-profile-help": "Los wikis funcionan mejor cuando dejas que los edite tanta gente como sea posible.\nEn MediaWiki, es fácil revisar los cambios recientes y revertir los daños realizados por usuarios malintencionados o novatos.\nSin embargo, muchos han encontrado que MediaWiki es útil para una amplia variedad de funciones, y a veces no es fácil convencer a todos de los beneficios de la forma wiki.\nPor lo tanto tienes la elección.\n\nEl modelo '''{{int:config-profile-wiki}}''' permite que cualquiera pueda editar, sin siquiera iniciar sesión.\nUn wiki con '''{{int:config-profile-no-anon}}''' ofrece rendición de cuentas adicional, pero puede disuadir a colaboradores.\n\nEl modelo '''{{int:config-profile-fishbowl}}''' permite editar a los usuarios autorizados, pero el público puede ver las páginas, incluyendo el historial.\nUn '''{{int:config-profile-private}}''' sólo permite ver páginas a los usuarios autorizados, el mismo grupo al que le está permitido editar.\n\nConfiguraciones más complejas de derechos de usuario están disponibles después de la instalación, consulte [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:User_rights esta entrada en el manual].", + "config-profile-help": "Los wikis funcionan mejor cuando dejas que los edite tanta gente como sea posible.\nEn MediaWiki, es fácil revisar los cambios recientes y revertir los daños realizados por usuarios malintencionados o novatos.\nSin embargo, muchos han encontrado que MediaWiki es útil para una amplia variedad de funciones, y a veces no es fácil convencer a todos de los beneficios de la forma wiki.\nPor lo tanto tienes la elección.\n\nEl modelo {{int:config-profile-wiki}} permite que cualquiera pueda editar, sin siquiera iniciar sesión.\nUn wiki con {{int:config-profile-no-anon}} ofrece rendición de cuentas adicional, pero puede disuadir a colaboradores casuales.\n\nEl modelo {{int:config-profile-fishbowl}} permite editar a los usuarios autorizados, pero el público puede ver las páginas, incluyendo el historial.\nUn {{int:config-profile-private}} sólo permite ver páginas a los usuarios autorizados, el mismo grupo al que le está permitido editar.\n\nConfiguraciones más complejas de permisos de usuario están disponibles después de la instalación. Consulta [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:User_rights la entrada correspondiente del manual].", "config-license": "Derechos de autor y licencia:", "config-license-none": "Pie sin licencia", "config-license-cc-by-sa": "Creative Commons Atribución-CompartirIgual", @@ -334,12 +337,12 @@ "config-install-mainpage": "Creando página principal con contenido predeterminado", "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 correctamente.\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].", + "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].", "config-download-localsettings": "Descargar LocalSettings.php", "config-help": "ayuda", "config-help-tooltip": "haz clic para ampliar", "config-nofile": "El archivo \"$1\" no se pudo encontrar. ¿Se ha eliminado?", "config-extension-link": "¿Sabías que tu wiki admite [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Extensions extensiones]?\n\nPuedes navegar por las [//www.mediawiki.org/wiki/Special:MyLanguage/Category:Extensions_by_category categorías] o visitar el [//www.mediawiki.org/wiki/Extension_Matrix centro de extensiones] para ver una lista completa.", - "mainpagetext": "MediaWiki se ha instalado con éxito.", + "mainpagetext": "MediaWiki se ha instalado.", "mainpagedocfooter": "Consulta la [//meta.wikimedia.org/wiki/Help:Contents/es guía del usuario] para obtener información sobre el uso del software wiki.\n\n== Primeros pasos ==\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Lista de ajustes de configuración]\n* [//www.mediawiki.org/wiki/Manual:FAQ/es Preguntas frecuentes sobre MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Lista de correo de anuncios de publicación de MediaWiki]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Traducir MediaWiki en tu idioma]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Aprende cómo combatir el spam en tu wiki]" } diff --git a/includes/installer/i18n/fa.json b/includes/installer/i18n/fa.json index b5ed996c3b..7d756eae1f 100644 --- a/includes/installer/i18n/fa.json +++ b/includes/installer/i18n/fa.json @@ -11,7 +11,9 @@ "Danialbehzadi", "Leyth", "Huji", - "Macofe" + "Macofe", + "درفش کاویانی", + "Hamisun" ] }, "config-desc": "نصب کنندهٔ ویکی‌مدیا", @@ -72,10 +74,10 @@ "config-ctype": "'''مخرب:''' پی‌اچ‌پی باید با پشتیبانی برای [http://www.php.net/manual/en/ctype.installation.php Ctype extension] تهیه شده‌باشد.", "config-iconv": "خطای اساسی: پی‌اچ‌پی باید کامپایل‌شده باشد برای پشتیبانی از [http://www.php.net/manual/en/iconv.installation.php افزونهٔ iconv].", "config-json": "'''مخرب:''' پی‌اچ‌پی بدون پشتیبانی جِی‌اس‌اُ‌ان تهیه شده‌بود.\nشما باید قبل از نصب مدیاویکی یا بسط جِی‌اس‌اُ‌ان پی‌اچ‌پی یا بسط [http://pecl.php.net/package/jsonc PECL jsonc] را نصب کنید.\n* بسط پی‌اچ‌پی شامل لینوکس اینترپرایز رد هت (سِنت‌اُاِس) 5 یا 6 است، هرچند باید در /etc/php.ini یا /etc/php.d/json.ini فعال باشد.\n* به‌جای بسته‌بندی کردن بسط پی‌ایی‌سی‌اِل مانند php5-json یا php-pecl-jsonc، توزیع‌های برخی لینوکس پس از ماه می Û²Û°Û±Û³ با حذف بسط پی‌اچ‌پی افزایش پیدا کرد.", + "config-mbstring-absent": "خطای اساسی: پی‌اچ‌پی باید با پشتیبانی [http://www.php.net/manual/en/mbstring.setup.php mbstring extension] تهیه شده باشد.", "config-xcache": "[http://xcache.lighttpd.net/ XCache] نصب شده‌است.", "config-apc": "[http://www.php.net/apc APC] نصب شده‌است.", "config-wincache": "[http://www.iis.net/download/WinCacheForPhp WinCache] نصب شده‌است.", - "config-no-cache": "'''هشدار:''' [http://www.php.net/apc APC],[http://xcache.lighttpd.net/ XCache] یا [http://www.iis.net/download/WinCacheForPhp WinCache] را نتوانست پیدا کند.\nذخیره شی فعال نیست.", "config-no-cache-apcu": "هشدار: پیوند [http://www.php.net/apcu APCu]، [http://xcache.lighttpd.net/ XCache] یا [http://www.iis.net/download/WinCacheForPhp WinCache] یافت نشد. ذخیره شی فعال نیست.", "config-mod-security": "'''هشدار:''' وب سرور شما [http://modsecurity.org/ mod_security] فعال است.اگر اشتباه پیکربندی شده‌‌ باشد،می تواند باعث ایجاد مشکلاتی برای مدیاویکی یا دیگر نرم‌افزاری شود که به کاربران اجازه می‌دهد پیام دلخواه ارسال کنند.\nبه [http://modsecurity.org/documentation/ mod_security documentation] مراجعه کنید یا اگر با خطاهای اتفاقی مواجه شدید با پشتیبانی میزبان خود در تماس باشید.", "config-diff3-bad": "جی‌ان‌یو دیف۳ پیدا نشد.", @@ -323,6 +325,6 @@ "config-help-tooltip": "برای گسترش کلیک کنید", "config-nofile": "پروندهٔ «$1» یافت نشد. آیا حذف شده‌است؟", "config-extension-link": "آیا می‌دانستید که ویکی شما [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Extensions extensions] را پشتیبانی می‌کند؟\nشما می‌توانید [//www.mediawiki.org/wiki/Special:MyLanguage/Category:Extensions_by_category extensions by category]", - "mainpagetext": "'''نرم‌افزار ویکی با موفقیت نصب شد.'''", + "mainpagetext": "'''مدیاویکی با موفقیت نصب شد.'''", "mainpagedocfooter": "از [//meta.wikimedia.org/wiki/Help:Contents راهنمای کاربران]\nبرای استفاده از نرم‌افزار ویکی کمک بگیرید.\n\n== آغاز به کار ==\n\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings تنظیم پیکربندی]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ MediaWiki پرسش‌های متداول]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce فهرست ارسال نسخه‌های مدیاویکی]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Localise مدیاویکی برای زبان شما]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam آموزش مقابله به هرزنگاری در ویکی شما]" } diff --git a/includes/installer/i18n/fi.json b/includes/installer/i18n/fi.json index a083210f31..f99ca2f2a4 100644 --- a/includes/installer/i18n/fi.json +++ b/includes/installer/i18n/fi.json @@ -18,7 +18,8 @@ "SuperPete", "McSalama", "Jaakkoh", - "Mikahama" + "Mikahama", + "Olimar" ] }, "config-desc": "MediaWiki-asennin", @@ -273,6 +274,6 @@ "config-help-tooltip": "Klikkaa laajentaaksesi", "config-nofile": "Tiedostoa \"$1\" ei löytynyt. Onko se poistettu?", "config-extension-link": "Tiesitkö että wiki tukee [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Extensions laajennuksia]?\n\nLaajennuksia voi hakea myös [//www.mediawiki.org/wiki/Special:MyLanguage/Category:Extensions_by_category luokittain].", - "mainpagetext": "'''MediaWiki on onnistuneesti asennettu.'''", + "mainpagetext": "MediaWiki on onnistuneesti asennettu.", "mainpagedocfooter": "Lisätietoja käytöstä on sivulla [//meta.wikimedia.org/wiki/Help:Contents User's Guide].\n\n=== Lisäohjeita ===\n\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Asetusten teko-ohjeita]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ MediaWikin FAQ]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Sähköpostilista, jolla tiedotetaan MediaWikin uusista versioista]\n\n=== Asetukset ===\n\nTarkista, että alla olevat taivutusmuodot ovat oikein. Jos eivät, tee tarvittavat muutokset tiedostoon LocalSettings.php seuraavasti:\n $wgGrammarForms['fi']['genitive']['{{SITENAME}}'] = '...';\n $wgGrammarForms['fi']['partitive']['{{SITENAME}}'] = '...';\n $wgGrammarForms['fi']['elative']['{{SITENAME}}'] = '...';\n $wgGrammarForms['fi']['inessive']['{{SITENAME}}'] = '...';\n $wgGrammarForms['fi']['illative']['{{SITENAME}}'] = '...';\nTaivutusmuodot: {{GRAMMAR:genitive|{{SITENAME}}}} (yön) – {{GRAMMAR:partitive|{{SITENAME}}}} (yötä) – {{GRAMMAR:elative|{{SITENAME}}}} (yöstä) – {{GRAMMAR:inessive|{{SITENAME}}}} (yössä) – {{GRAMMAR:illative|{{SITENAME}}}} (yöhön)." } diff --git a/includes/installer/i18n/fr.json b/includes/installer/i18n/fr.json index d7b279f751..70ceed1509 100644 --- a/includes/installer/i18n/fr.json +++ b/includes/installer/i18n/fr.json @@ -25,7 +25,8 @@ "Linedwell", "Orlodrim", "Cl3m3n7", - "C13m3n7" + "C13m3n7", + "The RedBurn" ] }, "config-desc": "Le programme d’installation de MediaWiki", @@ -86,6 +87,7 @@ "config-ctype": "'''Fatal ''': PHP doit être compilé avec le support pour l'[http://www.php.net/manual/en/ctype.installation.php extension Ctype].", "config-iconv": "Erreur critique : PHP doit être compilé avec le support de l’[http://www.php.net/manual/en/iconv.installation.php extension iconv].", "config-json": "'''Erreur fatale :''' PHP a été compilé sans le support de JSON.\nVous devez soit installez l’extension JSON de PHP ou l’extension [http://pecl.php.net/package/jsonc PECL jsonc] avant d’installer MediaWiki.\n* L’extension PHP est comprise dans Red Hat Enterprise Linux (CentOS) 5 et 6, mais doit être activée dans /etc/php.ini ou /etc/php.d/json.ini.\n* Certaines distributions Linux après mai 2013 ne comprennent pas l’extension PHP, mais ont mis à la place l’extension PECL sous la forme php5-json ou php-pecl-jsonc.", + "config-mbstring-absent": "Fatal : PHP doit être compilé avec la prise en charge de [http://www.php.net/manual/en/mbstring.setup.php l’extension mbstring].", "config-xcache": "[http://xcache.lighttpd.net/ XCache] est installé", "config-apc": "[http://www.php.net/apc APC] est installé", "config-wincache": "[http://www.iis.net/download/WinCacheForPhp WinCache] est installé", @@ -298,7 +300,7 @@ "config-skins-must-enable-default": "L’habillage choisi par défaut doit être activé.", "config-install-alreadydone": "'''Attention''': Vous semblez avoir déjà installé MediaWiki et tentez de l'installer à nouveau.\nS'il vous plaît, allez à la page suivante.", "config-install-begin": "En appuyant sur {{int:config-continue}}, vous commencerez l'installation de MediaWiki.\nSi vous voulez encore apporter des modifications, appuyez sur \"{{int:config-back}}\".", - "config-install-step-done": "fait", + "config-install-step-done": "terminé", "config-install-step-failed": "échec", "config-install-extensions": "Inclusion des extensions", "config-install-database": "Création de la base de données", diff --git a/includes/installer/i18n/gl.json b/includes/installer/i18n/gl.json index 7b9abdbc01..a1e97308f2 100644 --- a/includes/installer/i18n/gl.json +++ b/includes/installer/i18n/gl.json @@ -52,7 +52,7 @@ "config-env-php": "Está instalado o PHP $1.", "config-env-hhvm": "Está instalado o HHVM $1.", "config-unicode-using-intl": "Usando a [http://pecl.php.net/intl extensión intl PECL] para a normalización Unicode.", - "config-unicode-pure-php-warning": "Atención: A [http://pecl.php.net/intl extensión intl PECL] non está dispoñible para manexar a normalización Unicode; volvendo á implementación lenta de PHP puro.\nSe o seu sitio posúe un alto tráfico de visitantes, debería ler un chisco sobre a [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations normalización Unicode].", + "config-unicode-pure-php-warning": "Atención: A [http://pecl.php.net/intl extensión intl PECL] non está dispoñible para manexar a normalización Unicode; volvendo á execución lenta de PHP puro.\nSe o seu sitio posúe un alto tráfico de visitantes, debería ler un chisco sobre a [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations normalización Unicode].", "config-unicode-update-warning": "Atención: A versión instalada da envoltura de normalización Unicode emprega unha versión vella da biblioteca [http://site.icu-project.org/ do proxecto ICU].\nDebería [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations actualizar] se o uso de Unicode é importante para vostede.", "config-no-db": "Non se puido atopar un controlador axeitado para a base de datos! Necesita instalar un controlador de base de datos para PHP.\n{{PLURAL:$2|Acéptase o seguinte tipo|Acéptanse os seguintes tipos}} de base de datos: $1.\n\nSe compilou o PHP vostede mesmo, reconfigúreo activando un cliente de base de datos, por exemplo, usando ./configure --with-mysql.\nSe instalou o PHP desde un paquete Debian ou Ubuntu, entón tamén necesita instalar, por exemplo, o módulo php5-mysql.", "config-outdated-sqlite": "Atención: Ten o SQLite $1, que é inferior á versión mínima necesaria: $2. O SQLite non estará dispoñible.", @@ -66,6 +66,7 @@ "config-ctype": "Erro fatal: O PHP debe compilarse co soporte para a [http://www.php.net/manual/en/ctype.installation.php extensión Ctype].", "config-iconv": "Erro fatal: O PHP debe compilarse co soporte para a [http://www.php.net/manual/en/iconv.installation.php extensión iconv].", "config-json": "Erro fatal: O PHP compilouse sen o soporte de JSON.\nDebe instalar ben a extensión JSON do PHP ou a extensión [http://pecl.php.net/package/jsonc PECL jsonc] antes de instalar MediaWiki.\n* A extensión do PHP está incluída en Red Hat Enterprise Linux (CentOS) 5 e 6, mais debe activarse /etc/php.ini ou /etc/php.d/json.ini.\n* Algunhas distribucións do Linux lanzadas despois de maio de 2013 omiten a extensión do PHP, pero inclúen a extensión PECL como php5-json ou php-pecl-jsonc.", + "config-mbstring-absent": "Erro fatal: O PHP debe compilarse co soporte para a [http://www.php.net/manual/en/mbstring.setup.php extensión mbstring].", "config-xcache": "[http://xcache.lighttpd.net/ XCache] está instalado", "config-apc": "[http://www.php.net/apc APC] está instalado", "config-wincache": "[http://www.iis.net/download/WinCacheForPhp WinCache] está instalado", diff --git a/includes/installer/i18n/he.json b/includes/installer/i18n/he.json index 1c9fe792f9..6bc3fd905d 100644 --- a/includes/installer/i18n/he.json +++ b/includes/installer/i18n/he.json @@ -59,20 +59,20 @@ "config-unicode-update-warning": "'''אזהרה''': הגרסה המותקנת של מעטפת נרמול יוניקוד משתמשת בגרסה ישנה של הספרייה של [http://site.icu-project.org/ פרויקט ICU].\nכדאי [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations לעדכן] אם הטיפול ביוניקוד חשוב לך.", "config-no-db": "לא נמצא דרייבר מסד נתונים מתאים. יש להתקין דרייבר מסד נתונים ל־PHP.\n{{PLURAL:$2|נתמך הסוג הבא של מסד נתונים|נתמכים הסוגים הבאים של מסדי נתונים}}: $1.\n\nאם קִמפלת את PHP בעצמך, יש להגדיר אותו מחדש ולהפעיל את לקוח מסד נתונים, למשל באמצעות ./configure --with-mysqli.\nאם התקנת את PHP מחבילה של דביאן או של אובונטו, יש להתקין, למשל, גם את המודול php5-mysql.", "config-outdated-sqlite": "'''אזהרה''': במערכת מתוקן SQLite $1. גרסה זו לא נתמכת ולשימוש ב־SQLite נדרשת גרסה $2 לפחות. SQLlite לא יהיה זמין.", - "config-no-fts3": "'''אזהרה''': SQLite מקומפל ללא [//sqlite.org/fts3.html מודול FTS]. יכולות חיפוש לא יהיו זמינות בהתקנה הזאת.", + "config-no-fts3": "'''אזהרה''': SQLite מהודר ללא [//sqlite.org/fts3.html מודול FTS]. יכולות חיפוש לא יהיו זמינות בהתקנה הזאת.", "config-mbstring": "'''שגיאה סופנית''': האפשרות [http://www.php.net/manual/en/ref.mbstring.php#mbstring.overload mbstring.func_overload] פעילה!'''\nהאפשרות הזאת גורמת לשגיאות ומעוותת את נתוני הקלט באופן בלתי־צפוי.\nלא ניתן להתקין את מדיה־ויקי או להשתמש בה אלא אם האפשרות הזאת תכובה.", "config-xml-bad": "מודול XML של PHP חסר.\nמדיה־ויקי דורשת פונקציות של המודול ולא תעבוד עם הגדרות כאלו.\nייתכן שצריך להתקין באמצעות RPM את חבילת php-xml.", "config-pcre-old": "שגיאה סופנית: חובה להתקין PCRE מגרסה $1 או גרסה חדשה יותר.\nקובץ הרצת ה־PHP שלך מקושר עם PCRE מגרסה $2.\n[https://www.mediawiki.org/wiki/Manual:Errors_and_symptoms/PCRE מידע נוסף].", - "config-pcre-no-utf8": "'''שגיאה סופנית''': נראה שמודול PCRE של PHP מקומפל ללא תמיכה ב־PCRE_UTF8.\nמדיה־ויקי דורשת תמיכה ב־UTF-8 לפעילות נכונה.", + "config-pcre-no-utf8": "שגיאה סופנית: נראה שמודול PCRE של PHP מהודר ללא תמיכה ב־PCRE_UTF8.\nמדיה־ויקי דורשת תמיכה ב־UTF-8 לפעילות נכונה.", "config-memory-raised": "ערך האפשרות memory_limit של PHP הוא $1, הועלה ל־$2.", "config-memory-bad": "'''אזהרה:''' ערך האפשרות memory_limit של PHP הוא $1.\nזה כנראה נמוך מדי.\nההתקנה עשויה להיכשל!", "config-ctype": "שגיאה סופנית: נדרשת גרסת PHP שתומכת בהרחבה [http://www.php.net/manual/en/ctype.installation.php Ctype].", - "config-iconv": "סופני: חובה לקמפל את PHP עם תמיכה ב[הרחבה http://www.php.net/manual/en/iconv.installation.php iconv].", + "config-iconv": "סופני: חובה להדר את PHP עם תמיכה ב[הרחבה http://www.php.net/manual/en/iconv.installation.php iconv].", "config-json": "'''שגיאה סופנית:''' PHP קומפל ללא תמיכה ב־JSON.\nיש להתקין את ההרחהב JSON ב־PHP או את ההרחבה [http://pecl.php.net/package/jsonc PECL jsonc] לפני התקנת מדיה־ויקי.\n* ההרחבה ל־PHP כלולה ב־Red Hat Enterprise Linux (ו־CentOS), אך יש להפעיל אותה ב־/etc/php.ini או ב־/etc/php.d/json.ini.", + "config-mbstring-absent": "סופני: חובה להדר את PHP עם תמיכה ב[הרחבה http://www.php.net/manual/en/mbstring.setup.php mbstring].", "config-xcache": "[http://xcache.lighttpd.net/ XCache] מותקן", "config-apc": "[http://www.php.net/apc APC] מותקן", "config-wincache": "[http://www.iis.net/download/WinCacheForPhp WinCache] מותקן", - "config-no-cache": "'''אזהרה:''' אחת מהתוכנות הבאות לא נמצאה: [http://www.php.net/apc APC]‏, [http://xcache.lighttpd.net/ XCache] או [http://www.iis.net/download/WinCacheForPhp WinCache].\nמטמון עצמים לא מופעל.", "config-no-cache-apcu": "אזהרה: לא נמצא [http://www.php.net/apcu APCu]‏, [http://xcache.lighttpd.net/ XCache] או [http://www.iis.net/download/WinCacheForPhp WinCache].\nמטמון עצמים לא מופעל.", "config-mod-security": "'''אזהרה''': בשרת הווב שלך מופעל [http://modsecurity.org/ mod_security]. אם הוא לא מוגדר טוב, זה יכול לגרום לבעיות במדיה־ויקי ובתכנה אחרת שמאפשרת למשתמשים לשלוח תוכן שרירותי.\nיש לקרוא את [http://modsecurity.org/documentation/ התיעוד של mod_security] או ליצור קשר עם אנשי התמיכה של שירותי האירוח שלכם אם מופיעות לך שגיאות אקראיות.", "config-diff3-bad": "GNU diff3 לא נמצא.", @@ -193,7 +193,7 @@ "config-ns-site-name": "זהה לשם הוויקי: $1", "config-ns-other": "אחר (לציין)", "config-ns-other-default": "הוויקי שלי", - "config-project-namespace-help": "בהתאם לדוגמה של ויקיפדיה, אתרי ויקי רבים שומרים על דפי המדיניות שלהם בנפרד מדפי התוכן שלהם ב\"'''מרחב השמות של המיזם'''\" (\"'''project namespace'''\").\nכל שמות הדפים במרחב השמות הזה מתחילים בתחילית מסוימת שאפשר להגדיר כאן.\nבדרך כלל התחילית הזאת מבוססת על שם הוויקי, והיא אינה יכולה להכיל תווי פיסוק כגון \"#\" או \":\".", + "config-project-namespace-help": "בהתאם לדוגמה של ויקיפדיה, אתרי ויקי רבים שומרים על דפי המדיניות שלהם בנפרד מדפי התוכן שלהם ב'''מרחב השמות של המיזם''' (באנגלית: '''project namespace''').\nכל שמות הדפים במרחב השמות הזה מתחילים בתחילית מסוימת שאפשר להגדיר כאן.\nבדרך כלל התחילית הזאת מבוססת על שם הוויקי, והיא אינה יכולה להכיל תווי פיסוק כגון \"#\" או \":\".", "config-ns-invalid": "מרחב השמות \"$1\" אינו תקין.\nיש להקליד שם אחר למרחב השמות של המיזם.", "config-ns-conflict": "מרחב השמות שהגדרת \"$1\" מתנגש עם מרחב שמות מובנה של מדיה־ויקי.\nהגדירו מרחב שמות מיזם שונה.", "config-admin-box": "חשבון מפעיל", @@ -314,12 +314,12 @@ "config-install-mainpage": "יצירת דף ראשי עם תוכן התחלתי", "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 להיכנס לוויקי שלכם]'''.", + "config-install-done": "מזל טוב!\nהתקנתם בהצלחה את מדיה־ויקי.\n\nתוכנת ההתקנה יצרה את הקובץ LocalSettings.php.\nהוא מכיל את כל ההגדרות שלכם.\n\nתצטרכו להוריד אותו ולשים אותו בבסיס ההתקנה של הוויקי שלכם (אותה התיקייה שבה נמצא הקובץ index.php). ההורדה הייתה אמורה להתחיל באופן אוטומטי.\n\nאם ההורדה לא התחילה, או אם ביטלתם אותה, אפשר להתחיל אותה מחדש בלחיצה על הקישור הבא:\n\n$3\n\nשימו לב: אם לא תעשו זאת עכשיו, קובץ ההגדרות המחוּלל לא יהיה זמין לכם שוב.\n\nאחרי שתעשו את זה, תוכלו [$2 להיכנס לוויקי שלכם].", "config-download-localsettings": "הורדת LocalSettings.php", "config-help": "עזרה", "config-help-tooltip": "להרחיב", "config-nofile": "הקובץ \"$1\" לא נמצא. האם הוא נמחק?", "config-extension-link": "הידעת שמדיה־ויקי תומכת ב־[//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Extensions הרחבות]?\n\nבאפשרותך לעיין ב־[//www.mediawiki.org/wiki/Special:MyLanguage/Category:Extensions_by_category הרחבות לפי קטגוריה].", - "mainpagetext": "'''תוכנת מדיה־ויקי הותקנה בהצלחה.'''", + "mainpagetext": "תוכנת מדיה־ויקי הותקנה בהצלחה.", "mainpagedocfooter": "היעזרו ב[//meta.wikimedia.org/wiki/Help:Contents מדריך למשתמש] למידע על שימוש בתוכנת הוויקי.\n\n== קישורים שימושיים ==\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings רשימת ההגדרות]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ שאלות ותשובות על מדיה־ויקי]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce רשימת התפוצה על השקת גרסאות]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources תרגום מדיה־ויקי לשפה שלך]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam איך להיאבק נגד ספאם באתר הוויקי שלך]" } diff --git a/includes/installer/i18n/inh.json b/includes/installer/i18n/inh.json new file mode 100644 index 0000000000..abc7fbf64d --- /dev/null +++ b/includes/installer/i18n/inh.json @@ -0,0 +1,8 @@ +{ + "@metadata": { + "authors": [ + "Умар" + ] + }, + "config-help": "гӀо" +} diff --git a/includes/installer/i18n/is.json b/includes/installer/i18n/is.json index 7c071bf894..50cbc32308 100644 --- a/includes/installer/i18n/is.json +++ b/includes/installer/i18n/is.json @@ -5,14 +5,21 @@ "Sveinn í Felli" ] }, + "config-desc": "Uppsetningarforrit fyrir MediaWiki", + "config-title": "MediaWiki $1 uppsetning", "config-information": "Upplýsingar", + "config-localsettings-key": "Uppfærslulykill:", + "config-session-error": "Villa við að ræsa setu: $1", "config-your-language": "Tungumálið þitt:", "config-your-language-help": "Veldu tungumál að nota við uppsetninguna.", + "config-wiki-language": "Tungumál á wiki:", "config-back": "← Til baka", "config-continue": "Halda áfram →", "config-page-language": "Tungumál", "config-page-welcome": "Velkomin í MediaWiki!", "config-page-dbconnect": "Tengjast gagnagrunni", + "config-page-upgrade": "Uppfæra núverandi kerfi", + "config-page-dbsettings": "Gagnagrunnsstillingar", "config-page-name": "Heiti", "config-page-options": "Valkostir", "config-page-install": "Setja upp", @@ -24,20 +31,35 @@ "config-page-upgradedoc": "Uppfærsla", "config-page-existingwiki": "Fyrirliggjandi wiki", "config-restart": "Já, endurræsa", + "config-copyright": "=== Höfundarréttur og skilmálar ===\n\n$1\n\nÞetta er frjáls hugbúnaður; þú mátt dreifa honum og/eða breyta samkvæmt skilmálum í almenna GNU GPL notkunarleyfinu eins og það er gefið út af Frjálsu hugbúnaðarstofnuninni; annaðhvort útgáfu 2 af GPL-leyfinu, eða (ef þér sýnist svo) einhverri nýrri útgáfu leyfisins.\n\nHugbúnaði þessum er dreift í þeirri von að hann geti verið gagnlegur, en ÁN ALLRAR ÁBYRGÐAR; einnig án þeirrar ábyrgðar sem gefin er í skyn með SELJANLEIKA eða EIGINLEIKUM TIL TILTEKINNA NOTA. Sjá almenna GNU GPL notkunarleyfið fyrir nánari upplýsingar.\n\nÞað ætti að hafa fylgt afrit af almenna GNU GPL notkunarleyfinu með forritinu; ef ekki skrifið þá Fjálsu hugbúnarstofnuninni: Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA, eða [http://www.gnu.org/copyleft/gpl.html lestu það á netinu].", "config-env-php": "PHP $1 er uppsett.", "config-env-hhvm": "HHVM $1 er uppsett.", + "config-xcache": "[http://xcache.lighttpd.net/ XCache] er uppsett", + "config-apc": "[http://www.php.net/apc APC] er uppsett", + "config-wincache": "[http://www.iis.net/download/WinCacheForPhp WinCache] er uppsett", "config-diff3-bad": "GNU diff3 fannst ekki.", + "config-using-server": "Nota \"$1\" sem heiti á þjóni.", + "config-using-uri": "Nota \"$1$2\" sem slóð á þjón.", "config-db-type": "Tegund gagnagrunns:", "config-db-host": "Netþjónn gagnagrunns:", "config-db-name": "Heiti gagnagrunns:", "config-db-name-oracle": "Gagnagrunnsskema:", "config-db-username": "Notandanafn á gagnagrunni:", "config-db-password": "Lykilorð gagnagrunns:", + "config-charset-mysql5-binary": "MySQL 4.1/5.0 keyrsluskrá", + "config-charset-mysql5": "MySQL 4.1/5.0 UTF-8", + "config-db-port": "Gátt gagnagrunns:", + "config-sqlite-dir": "Gagnamappa SQLite:", "config-type-mysql": "MySQL (eða samhæft)", "config-type-postgres": "PostgreSQL", "config-type-sqlite": "SQLite", "config-type-oracle": "Oracle", "config-type-mssql": "Microsoft SQL Server", + "config-header-mysql": "Stillingar MySQL", + "config-header-postgres": "Stillingar PostgreSQL", + "config-header-sqlite": "Stillingar SQLite", + "config-header-oracle": "Stillingar Oracle", + "config-header-mssql": "Stillingar Microsoft SQL Server", "config-regenerate": "Endurgera LocalSettings.php →", "config-show-table-status": "SHOW TABLE STATUS beiðni mistókst!", "config-db-web-account": "Gagnagrunnsreikningur fyrir vefaðgang", @@ -55,14 +77,29 @@ "config-admin-password": "Lykilorð:", "config-admin-password-confirm": "Lykilorðið aftur:", "config-admin-email": "Tölvupóstfang:", + "config-profile": "Snið notandaréttinda:", + "config-profile-wiki": "Opið wiki", + "config-profile-no-anon": "Stofnun aðgangs krafist", + "config-profile-fishbowl": "Aðeins auðkenndir ritstjórar", + "config-profile-private": "Einkawiki", "config-license": "Höfundaréttur og notkunarleyfi:", - "config-license-pd": "Almenningseign", + "config-license-none": "Ekki síðufótur með notkunarleyfi", + "config-license-cc-by-sa": "Creative Commons: Höfundar getið - Deilist áfram", + "config-license-cc-by": "Creative Commons: Höfundar getið", + "config-license-cc-by-nc-sa": "Creative Commons: Höfundar getið - Ekki í ágóðaskyni - Deilist áfram", + "config-license-cc-0": "Creative Commons Zero leyfi (almenningseign)", + "config-license-gfdl": "Frjálsa GNU-handbókarleyfið, útgáfa 1.3 eða nýrri", + "config-license-pd": "Almenningseign (Public Domain)", + "config-license-cc-choose": "Veldu sérsniðið Creative Commons notkunarleyfi", "config-extensions": "Viðbætur", "config-skins": "Skinn", "config-install-step-done": "lokið", "config-install-step-failed": "mistókst", "config-install-pg-commit": "Virkja breytingar", + "config-install-tables": "Töflur búnar til", + "config-download-localsettings": "Ná í LocalSettings.php", "config-help": "hjálp", - "mainpagetext": "MediaWiki var sett upp.", + "config-help-tooltip": "Smella til að þenja út", + "mainpagetext": "'''Uppsetning á MediaWiki heppnaðist.'''", "mainpagedocfooter": "Ráðfærðu þig við [//meta.wikimedia.org/wiki/Help:Contents Notandahandbókina] fyrir frekari upplýsingar um notkun wiki-hugbúnaðarins.\n\n== Fyrir byrjendur ==\n\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Listi yfir uppsetningarstillingar]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ MediaWiki Algengar spurningar MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Póstlisti MediaWiki-útgáfa]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Læra hvernig á að berjast við amapóst á þínum wiki]" } diff --git a/includes/installer/i18n/it.json b/includes/installer/i18n/it.json index 79a1f56c66..42159bccc0 100644 --- a/includes/installer/i18n/it.json +++ b/includes/installer/i18n/it.json @@ -74,9 +74,10 @@ "config-pcre-no-utf8": "'''Errore''': Il modulo PCRE di PHP sembra essere stato compilato senza il supporto PCRE_UTF8, ma MediaWiki lo richiede per funzionare correttamente.", "config-memory-raised": "Il valore memory_limit di PHP è $1, aumentato a $2.", "config-memory-bad": "''Attenzione:''' Il valore di memory_limit di PHP è $1.\nProbabilmente è troppo basso.\nL'installazione potrebbe non riuscire!", - "config-ctype": "'''Errore''': PHP deve essere compilato con il supporto per l'[http://www.php.net/manual/it/ctype.installation.php estensione Ctype].", + "config-ctype": "Fatale: PHP deve essere compilato con il supporto per l'[http://www.php.net/manual/it/ctype.installation.php estensione Ctype].", "config-iconv": "Fatale: PHP deve essere compilato con il supporto per l'[http://www.php.net/manual/en/iconv.installation.php estensione iconv].", "config-json": "'''Errore:''' PHP è stato compilato senza il supporto per JSON. E' necessario installare l'estensione PHP per JSON o l'estensione [http://pecl.php.net/package/jsonc PECL jsonc] prima di installare MediaWiki.\n* L'estensione PHP è inclusa in Red Hat Enterprise Linux (CentOS) 5 e 6, ma deve essere abilitata in /etc/php.ini o /etc/php.d/json.ini.\n* Alcune distribuzioni di Linux pubblicate dopo il maggio 2013 omettono l'estensione PHP, e al posto utilizzano l'estensione PECL come php5-json o php-pecl-jsonc", + "config-mbstring-absent": "Fatale: PHP deve essere compilato con il supporto per l'[http://www.php.net/manual/en/mbstring.setup.php estensione mbstring].", "config-xcache": "[http://xcache.lighttpd.net/ XCache] è installato", "config-apc": "[http://www.php.net/apc APC] è installato", "config-wincache": "[http://www.iis.net/download/WinCacheForPhp WinCache] è installato", diff --git a/includes/installer/i18n/ja.json b/includes/installer/i18n/ja.json index b3fc4ed602..5a79940e23 100644 --- a/includes/installer/i18n/ja.json +++ b/includes/installer/i18n/ja.json @@ -79,6 +79,7 @@ "config-ctype": "致命的エラー: PHP は [http://www.php.net/manual/en/ctype.installation.php Ctype 拡張モジュール]のサポート付きでコンパイルされている必要があります。", "config-iconv": "致命的なエラー: PHPは[http://www.php.net/manual/en/iconv.installation.php iconv 拡張機能]のサポートを有効にしてコンパイルされている必要があります。", "config-json": "致命的エラー: PHP は JSON サポートなしでコンパイルされています。\nPHP に JSON 拡張モジュールまたは [http://pecl.php.net/package/jsonc PECL jsonc] 拡張モジュールをインストールしてから、MediaWiki をインストールしてください。\n* Red Hat Enterprise Linux (CentOS) 5 および 6には PHP の拡張機能が含まれているため、/etc/php.ini または /etc/php.d/json.ini から有効にしてください。\n* 2013å¹´5月以降にリリースされた一部の Linux ディストリビューションでは、PHP 拡張モジュールの代わりに、php5-json または php-pecl-jsonc として PECL が同梱されています。", + "config-mbstring-absent": "致命的エラー: PHP は [http://www.php.net/manual/en/mbstring.setup.php mbstring 拡張モジュール]のサポートを有効にしてコンパイルされている必要があります。", "config-xcache": "[http://xcache.lighttpd.net/ XCache] がインストール済み", "config-apc": "[http://www.php.net/apc APC] がインストール済み", "config-wincache": "[http://www.iis.net/download/WinCacheForPhp WinCache] がインストール済み", @@ -332,6 +333,6 @@ "config-help-tooltip": "クリックで展開", "config-nofile": "ファイル「$1」が見つかりませんでした。削除された可能性があります。", "config-extension-link": "あなたのウィキは[//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Extensions 拡張機能]をサポートしていることをご存知ですか?\n\n[//www.mediawiki.org/wiki/Special:MyLanguage/Category:Extensions_by_category カテゴリ別で拡張機能を見る]か[//www.mediawiki.org/wiki/Extension_Matrix 拡張機能のマトリックス]で拡張機能すべてのリストをご覧になれます。", - "mainpagetext": "MediaWiki のインストールに成功しました。", + "mainpagetext": "MediaWiki はインストール済みです。", "mainpagedocfooter": "ウィキソフトウェアの使い方に関する情報は[//meta.wikimedia.org/wiki/Help:Contents 利用者案内]を参照してください。\n\n== はじめましょう ==\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings/ja 設定の一覧]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ/ja MediaWiki よくある質問と回答]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki リリース情報メーリングリスト]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Localisation/ja MediaWiki のあなたの言語へのローカライズ]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Learn how to combat spam on your wiki]" } diff --git a/includes/installer/i18n/ko.json b/includes/installer/i18n/ko.json index d9118983c7..f621fe481d 100644 --- a/includes/installer/i18n/ko.json +++ b/includes/installer/i18n/ko.json @@ -213,7 +213,7 @@ "config-admin-error-password": "\"$1\" 관리자의 비밀번호를 설정하는 중 내부 오류가 발생했습니다:
$2
", "config-admin-error-bademail": "이메일 주소를 잘못 입력하였습니다.", "config-subscribe": "[https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce 릴리스 발표 메일링 리스트]를 구독합니다.", - "config-subscribe-help": "중요한 보안 알림을 포함한 릴리스 알림에 사용되는 저용량 메일링 리스트입니다.\n이 리스트를 구독하고 새 버전이 나올 때 미디어위키 설치를 업데이트해야 합니다.", + "config-subscribe-help": "중요한 보안 발표를 포함한 배포판 발표에 사용되는 저용량 메일링 리스트입니다.\n이 리스트를 구독하고 새 버전이 나올 때 미디어위키 설치를 업데이트해야 합니다.", "config-subscribe-noemail": "이메일 주소를 입력하지 않고 릴리스 발표 메일링 리스트에 가입하려 합니다.\n메일링 리스트에 가입하고자 할 경우 이메일 주소를 입력하세요.", "config-almost-done": "거의 다 완료했습니다!\n이제 남은 설정을 생략하고 지금 바로 위키를 설치할 수 있습니다.", "config-optional-continue": "더 많은 질문을 물어보세요.", @@ -316,12 +316,12 @@ "config-install-mainpage": "기본 내용으로 대문을 만드는 중", "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 위키에 들어갈 수 있습니다].", + "config-install-done": "축하합니다!\n미디어위키를 설치했습니다.\n\n설치 관리자가 LocalSettings.php 파일을 만들었습니다.\n여기에 모든 설정이 포함되어 있습니다.\n\n파일을 다운로드하여 위키 설치의 거점에 넣어야 합니다. (index.php와 같은 디렉터리) 다운로드가 자동으로 시작됩니다.\n\n다운로드가 제공되지 않을 경우나 그것을 취소한 경우에는 아래의 링크를 클릭하여 다운로드를 다시 시작할 수 있습니다:\n\n$3\n\n참고: 이 생성한 설정 파일을 다운로드하지 않고 설치를 끝내면 이 파일은 나중에 사용할 수 없습니다.\n\n완료되었으면 [$2 위키에 들어갈 수 있습니다].", "config-download-localsettings": "LocalSettings.php 다운로드", "config-help": "도움말", "config-help-tooltip": "확장하려면 클릭", "config-nofile": "\"$1\" 파일을 찾을 수 없습니다. 이미 삭제되었나요?", "config-extension-link": "당신의 위키가 [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Extensions 확장 기능]을 지원한다는 것을 알고 계십니까?\n\n[//www.mediawiki.org/wiki/Special:MyLanguage/Category:Extensions_by_category 분류별 확장 기능]을 찾아보실 수 있습니다.", - "mainpagetext": "미디어위키가 성공적으로 설치되었습니다.", + "mainpagetext": "미디어위키가 설치되었습니다.", "mainpagedocfooter": "[//meta.wikimedia.org/wiki/Help:Contents 이곳]에서 위키 소프트웨어에 대한 정보를 얻을 수 있습니다.\n\n== 시작하기 ==\n\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings 설정하기 목록]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ 미디어위키 FAQ]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce 미디어위키 릴리스 메일링 리스트]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources 내 언어로 미디어위키 지역화]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam 당신의 위키에서 스팸에 대처하는 법을 배우세요]" } diff --git a/includes/installer/i18n/lt.json b/includes/installer/i18n/lt.json index e7bed0e662..9a301393d2 100644 --- a/includes/installer/i18n/lt.json +++ b/includes/installer/i18n/lt.json @@ -43,6 +43,7 @@ "config-page-existingwiki": "Esamas viki", "config-help-restart": "Ar norite ištrinti visus išsaugotus duomenis, kuriuos jūs įvedėte ir iš naujo paleisti diegimo procesą?", "config-restart": "Taip, paleiskite jį iš naujo", + "config-welcome": "== Aplinkos patikrinimas ==\nDabar bus atlikti pagrindiniai patikrinimai, po kurių paaiškės, ar ši aplinka yra tinkama MediaWiki įrangai.\nNepamirškite įtraukti šią informaciją, jeigu norite gauti pagalbos, kaip užbaigti įdiegimą.", "config-sidebar": "* [//www.mediawiki.org MediaWiki namų tinklalapis]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Help:Contents Vartotojo gidas]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Contents Administratoriaus gidas]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ DUK]\n----\n* Skaityk mane\n* Leidimo pastabos\n* Kopijavimas\n* Atnaujinimas", "config-env-good": "Aplinka buvo patikrinta.\nJūs galite įdiegti MediaWiki.", "config-env-bad": "Aplinka buvo patikrinta.\nJūs negalite įdiegti MediaWiki.", @@ -53,8 +54,11 @@ "config-xcache": "[http://xcache.lighttpd.net/ XCache] yra įdiegtas", "config-apc": "[http://www.php.net/apc APC] yra įdiegtas", "config-wincache": "[http://www.iis.net/download/WinCacheForPhp WinCache] yra įdiegtas", + "config-no-cache-apcu": "Įspėjimas: Nepavyko rasti [http://www.php.net/apcu APCu], [http://xcache.lighttpd.net/ XCache] or [http://www.iis.net/download/WinCacheForPhp WinCache].\nObjekto spartinimas neįjungtas.", "config-diff3-bad": "GNU diff3 nerastas.", - "config-using-server": "Naudojant serverio pavadinimas „$1“.", + "config-git": "Rasta Git versijų kontrolės sistema: $1.", + "config-imagemagick": "Rastas „ImageMagick“: $1.\nPaveikslėlių miniatiūrizavimas bus įjungtas, jeigu įgalinsite vaizdų įkėlimą.", + "config-using-server": "Naudojamas serverio pavadinimas „$1“.", "config-using-uri": "Naudojamas serverio URL „$1$2“.", "config-db-type": "Duomenų bazės tipas:", "config-db-host": "Duomenų bazės serveris:", diff --git a/includes/installer/i18n/lv.json b/includes/installer/i18n/lv.json index 69bbc835a6..b3aaef1a62 100644 --- a/includes/installer/i18n/lv.json +++ b/includes/installer/i18n/lv.json @@ -27,6 +27,7 @@ "config-restart": "Jā, restartēt", "config-env-php": "PHP $1 ir uzstādīts.", "config-diff3-bad": "GNU diff3 nav atrasts.", + "config-db-name": "Datubāzes nosaukums:", "config-db-username": "Datubāzes lietotājvārds:", "config-db-password": "Datubāzes parole:", "config-db-charset": "Datubāzes rakstzīmju kopa", @@ -44,15 +45,23 @@ "config-header-mssql": "Microsoft SQL servera iestatījumi", "config-mysql-innodb": "InnoDB", "config-mysql-myisam": "MyISAM", + "config-mysql-utf8": "UTF-8", + "config-ns-generic": "Projekts", + "config-ns-site-name": "Tāds pats kā viki nosaukums: $1", + "config-ns-other": "Cits (jānorāda)", + "config-ns-other-default": "MansViki", + "config-admin-box": "Administratora konts", "config-admin-name": "Tavs lietotājvārds:", "config-admin-password": "Parole:", "config-admin-password-confirm": "Parole vēlreiz:", "config-admin-name-blank": "Ievadiet administratora lietotājvārdu.", "config-admin-email": "E-pasta adrese:", + "config-logo": "Logo URL:", "config-cc-again": "Izvēlies vēlreiz...", + "config-extensions": "Paplašinājumi", "config-install-step-done": "Gatavs", "config-help": "palīdzība", "config-help-tooltip": "uzspiediet, lai izvērstu", - "mainpagetext": "'''MediaWiki veiksmīgi ieinstalēts'''", + "mainpagetext": "MediaWiki veiksmīgi instalēts.", "mainpagedocfooter": "Izlasi [//meta.wikimedia.org/wiki/Help:Contents Lietotāja pamācību], lai iegūtu vairāk informācijas par Wiki programmatūras lietošanu.\n\n== Pirmie soļi ==\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Konfigurācijas iespēju saraksts]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ MediaWiki J&A]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Parakstīties uz paziņojumiem par jaunām MediaWiki versijām]" } diff --git a/includes/installer/i18n/mai.json b/includes/installer/i18n/mai.json index 8c6cb8bafc..e3f800ecbf 100644 --- a/includes/installer/i18n/mai.json +++ b/includes/installer/i18n/mai.json @@ -3,7 +3,8 @@ "authors": [ "Umeshberma", "बिप्लब आनन्द", - "Bijay chaurasia" + "Bijay chaurasia", + "Tulsi Bhagat" ] }, "config-desc": "मेडिया-विकी के लेल इंस्टॉलर", @@ -24,8 +25,15 @@ "config-page-complete": "पूर्ण!", "config-page-restart": "स्थापनाके पुनारम्भ करु", "config-page-readme": "पढू", + "config-page-releasenotes": "रिलीज नोट्स", + "config-page-copying": "अनुकरण", + "config-page-upgradedoc": "उपारोपण भऽ रहल अछि।", "config-page-existingwiki": "रहल विकी", "config-restart": "हँ, एकरा पुन: सुरु कएल जाए", + "config-sidebar": "* [//www.mediawiki.org MediaWiki home]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Help:Contents User's Guide]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Contents Administrator's Guide]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ FAQ]\n----\n* Read me\n* Release notes\n* Copying\n* Upgrading", + "config-env-good": "पर्यावरण क जाँच कएल गेल अछि।\nआहाँ मीडियाविकि स्थापित कर सकै चिए।", + "config-env-bad": "पर्यावरण क जाँच कएल गेल अछि।\nआहाँ मीडियाविकि स्थापित नै कर सकै चिए।", + "config-env-php": "PHP $1 स्थापित कएल ग्याल अछि।", "mainpagetext": "'''मेडियाविकी नीक जकाँ प्रस्थापित भेल।'''", "mainpagedocfooter": "सम्पर्क करू [//meta.wikimedia.org/wiki/Help:Contents User's Guide] विकि तंत्रांशक प्रयोगक जानकारी लेल।\n\n==प्रारम्भ कोना करी==\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Configuration settings list]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ MediaWiki FAQ]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki release mailing list]" } diff --git a/includes/installer/i18n/mk.json b/includes/installer/i18n/mk.json index 3377afb8fe..7deead3b53 100644 --- a/includes/installer/i18n/mk.json +++ b/includes/installer/i18n/mk.json @@ -55,24 +55,19 @@ "config-no-db": "Не можев да најдам соодветен двигател за базата на податоци! Ќе треба да воспоставите двигател за PHP-база.\n{{PLURAL:$2|Поддржан се следниов вид|Поддржани се следниве видови}} бази: $1.\n\nДоколку самите го срочивте овој PHP, овозможете го базниот клиент во поставките — на пр. со ./configure --with-mysqli.\nАко овој PHP го воспоставите од пакет на Debian или Ubuntu, тогаш ќе треба исто така да го воспоставите, на пр., пакетот php5-mysql.", "config-outdated-sqlite": "'''Предупредување''': имате SQLite $1. Најстарата допуштена верзија е $2. Затоа, SQLite ќе биде недостапен.", "config-no-fts3": "'''Предупредување''': SQLite iе составен без модулот [//sqlite.org/fts3.html FTS3] - за оваа база нема да има можност за пребарување.", - "config-register-globals-error": "Грешка: Вклучена е можноста [http://php.net/register_globals register_globals] за PHP.\nМора да се исклучи за да продолжите со воспоставката.\nКако да го направите тоа можете да прочитате на [https://www.mediawiki.org/wiki/register_globals https://www.mediawiki.org/wiki/register_globals].", - "config-magic-quotes-gpc": "Кобно: [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-gpc magic_quotes_gpc] е ективно!\nОваа можност непредвидливо го расипува вносот на податоци.\nОваа можност мора да е исклучена. Во спротивно нема да можете да го воспоставите и користите МедијаВики.", - "config-magic-quotes-runtime": "'''Кобно: [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-runtime magic_quotes_runtime] е активно!'''\nОваа можност непредвидливо го расипува вносот на податоци.\nОваа можност мора да е исклучена. Во спротивно нема да можете да го воспоставите и користите МедијаВики.", - "config-magic-quotes-sybase": "'''Кобно: [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-sybase magic_quotes_sybase] е активно!'''\nОваа можност непредвидливо го расипува вносот на податоци.\nОваа можност мора да е исклучена. Во спротивно нема да можете да го воспоставите и користите МедијаВики.", "config-mbstring": "'''Кобно: [http://www.php.net/manual/en/ref.mbstring.php#mbstring.overload mbstring.func_overload] е активно!'''\nОваа можност предизвикува грешки и може непредвидиво да го расипува вносот на податоци.\nОваа можност мора да е исклучена. Во спротивно нема да можете да го воспоставите и користите МедијаВики.", - "config-safe-mode": "'''Предупредување:''' [http://www.php.net/features.safe-mode безбедниот режим] на PHP е активен.\nОва може да предизвика проблеми, особено ако користите подигања и поддршка за math.", "config-xml-bad": "XML-модулот за PHP недостасува.\nМедијаВики има потреба од функции во овој модул и нема да работи со овие поставки.\nМоже да треба да го воспоставите RPM-пакетот „php-xml“.", "config-pcre-old": "'''Кобно:''' Се бара PCRE $1 или понова верзија.\nВашиот PHP-бинарен е сврзан со PCRE $2.\n[https://www.mediawiki.org/wiki/Manual:Errors_and_symptoms/PCRE Повеќе информации].", - "config-pcre-no-utf8": "'''Фатално''': PCRE-модулот на PHP е составен без поддршка за PCRE_UTF8.\nМедијаВики бара поддршка за UTF-8 за да може да работи правилно.", + "config-pcre-no-utf8": "Кобно: PCRE-модулот на PHP е срочен без поддршка за PCRE_UTF8.\nМедијаВики бара поддршка за UTF-8 за да може да работи правилно.", "config-memory-raised": "memory_limit за PHP изнесува $1, зголемен на $2.", "config-memory-bad": "'''Предупредување:''' memory_limit за PHP изнесува $1.\nОва е веројатно премалку.\nВоспоставката може да не успее!", - "config-ctype": "'''Фатална грешка''': PHP мора да се состави со поддршка за [http://www.php.net/manual/en/ctype.installation.php додатокот Ctype].", + "config-ctype": "Кобно: PHP мора да се срочи со поддршка за додатокот [http://www.php.net/manual/en/ctype.installation.php Ctype].", "config-iconv": "Кобно: PHP мора да се срочува со поддршка за [http://www.php.net/manual/en/iconv.installation.php додатокот iconv].", "config-json": "'''Кобно:''' PHP беше срочен без поддршка од JSON.\nЌе мора да го воспоставите додатокот за JSON во PHP, или додатокот [http://pecl.php.net/package/jsonc PECL jsonc] пред да го воспоставите МедијаВики.\n* Додатокот за PHP е вклучен во верзиите 5 и 6 на Linux (од Red Hat Enterprise) (CentOS), но мора да се активира во /etc/php.ini или /etc/php.d/json.ini.\n* Некои варијанти на Linux излезени по мај 2013 г. не го содржат додатокот за PHP, туку го пакуваат додатокот PECL како php5-json или php-pecl-jsonc.", + "config-mbstring-absent": "Кобно: PHP мора да се срочува со поддршка за додатокот [http://www.php.net/manual/en/mbstring.setup.php mbstring].", "config-xcache": "[http://xcache.lighttpd.net/ XCache] е воспоставен", "config-apc": "[http://www.php.net/apc APC] е воспоставен", "config-wincache": "[http://www.iis.net/download/WinCacheForPhp WinCache] е воспоставен", - "config-no-cache": "Предупредување: Не можев да го најдам [http://www.php.net/apc APC], [http://xcache.lighttpd.net/ XCache] или [http://www.iis.net/download/WinCacheForPhp WinCache].\nМеѓускладирањето на објекти не е овозможено.", "config-no-cache-apcu": "Предупредување: Не можев да го најдам [http://www.php.net/apcu APCu], [http://xcache.lighttpd.net/ XCache] или [http://www.iis.net/download/WinCacheForPhp WinCache].\nМеѓускладирањето на објекти не е овозможено", "config-mod-security": "'''Предупредување''': на вашиот опслужувач има овозможено [http://modsecurity.org/ mod_security]. Ако не е поставено како што треба, ова може да предизвика проблеми кај МедијаВики и други програми што им овозможуваат на корисниците да објавуваат произволни содржини.\nПогледнете ја [http://modsecurity.org/documentation/ mod_security документацијата] или обратете се кај домаќинот ако наидете на случајни грешки.", "config-diff3-bad": "GNU diff3 не е пронајден.", @@ -317,12 +312,12 @@ "config-install-mainpage": "Создавам главна страница со стандардна содржина", "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 влезете на вашето вики]'''.", + "config-install-done": "Честитаме!\nУспешно го воспоставивте МедијаВики.\n\nВоспоставувачот создаде податотека LocalSettings.php.\nТаму се содржат сите ваши нагодувања.\n\nЌе треба да ја преземете и да ја ставите во основата на воспоставката (истата папка во која се наоѓа index.php). Преземањето треба да е започнато автоматски.\n\nАко не ви е понудено преземање, или пак ако сте го откажале, можете да го почнете одново стискајќи на следнава врска:\n\n$3\n\nНапомена: Ако ова не го направите сега, податотеката со поставки повеќе нема да биде на достапна.\n\nОткога ќе завршите со тоа, можете да [$2 влезете на вашето вики].", "config-download-localsettings": "Преземи го LocalSettings.php", "config-help": "помош", "config-help-tooltip": "стиснете да расклопите", "config-nofile": "Податотеката „$1“ не е пронајдена. Да не е избришана?", "config-extension-link": "Дали сте знаеле дека вашето вики поддржува [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Extensions додатоци]?\n\nМожете да ги прелистате [//www.mediawiki.org/wiki/Special:MyLanguage/Category:Extensions_by_category по категории]", - "mainpagetext": "'''МедијаВики е успешно воспоставен.'''", + "mainpagetext": "МедијаВики е успешно воспоставен.", "mainpagedocfooter": "Погледнете го [//meta.wikimedia.org/wiki/Help:Contents Упатството за корисници] за подетални иформации како се користи вики-програмот.\n\n==Од каде да почнете==\n* [//meta.wikimedia.org/wiki/Manual:Configuration_settings Список на нагодувања]\n* [//meta.wikimedia.org/wiki/Manual:FAQ ЧПП (често поставувани прашања) за МедијаВики].\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Поштенски список на МедијаВики за нови верзии]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Локализирајте го МедијаВики на вашиот јазик]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Дознајте како да се борите против спам на вашето вики]" } diff --git a/includes/installer/i18n/pl.json b/includes/installer/i18n/pl.json index 6251c03eb2..7422a66985 100644 --- a/includes/installer/i18n/pl.json +++ b/includes/installer/i18n/pl.json @@ -20,7 +20,8 @@ "Pio387", "Darellur", "The Polish", - "Macofe" + "Macofe", + "Sethakill" ] }, "config-desc": "Instalator MediaWiki", @@ -30,9 +31,9 @@ "config-localsettings-cli-upgrade": "Wykryto obecność pliku LocalSettings.php.\nAktualizację należy wykonać poprzez uruchomienie update.php", "config-localsettings-key": "Klucz aktualizacji:", "config-localsettings-badkey": "Podany klucz aktualizacji jest nieprawidłowy.", - "config-upgrade-key-missing": "Wykryto zainstalowane wcześniej MediaWiki.\nJeśli chcesz je zaktualizować dodaj na koniec pliku LocalSettings.php poniższą linię tekstu.\n\n$1", + "config-upgrade-key-missing": "Wykryto zainstalowane wcześniej MediaWiki.\nJeśli chcesz je zaktualizować, dodaj na koniec pliku LocalSettings.php poniższą linię tekstu:\n\n$1", "config-localsettings-incomplete": "Istniejący plik LocalSettings.php wygląda na niekompletny.\nBrak wartości zmiennej $1.\nZmień plik LocalSettings.php, tak by zawierał deklarację wartości tej zmiennej, a następnie kliknij „{{int:Config-continue}}”.", - "config-localsettings-connection-error": "Wystąpił błąd podczas łączenia z bazą danych używając ustawień podanych w LocalSettings.php\nNapraw te ustawienia i spróbuj ponownie.\n\n$1", + "config-localsettings-connection-error": "Wystąpił błąd podczas łączenia z bazą danych używając ustawień podanych w LocalSettings.php.\nNapraw te ustawienia i spróbuj ponownie.\n\n$1", "config-session-error": "Błąd uruchomienia sesji – $1", "config-session-expired": "Wygląda na to, że Twoja sesja wygasła.\nCzas życia sesji został skonfigurowany na $1.\nMożesz go wydłużyć zmieniając session.gc_maxlifetime w pliku php.ini.\nUruchom ponownie proces instalacji.", "config-no-session": "Dane sesji zostały utracone.\nSprawdź plik php.ini i upewnij się, że session.save_path wskazuje na odpowiedni katalog.", @@ -81,9 +82,11 @@ "config-ctype": "''' Krytyczny ''': PHP musi być skompilowany z obsługą [http://www.php.net/manual/en/ctype.installation.php rozszerzenia Ctype].", "config-iconv": "Błąd krytyczny: PHP musi być skompilowane z obsługą [http://www.php.net/manual/en/iconv.installation.php rozszerzenia iconv].", "config-json": "'''Błąd krytyczny:''' PHP skompilowano bez obsługa JSON.\nPrzed zainstalowaniem oprogramowania MediaWiki musisz zainstalować rozszerzenie PHP JSON albo rozszerzenie [http://pecl.php.net/package/jsonc PECL jsonc].\n* Rozszerzenie PHP jest zawarte w Red Hat Enterprise Linux (CentOS) 5 i 6, jednak musi zostać włączone w /etc/php.ini or /etc/php.d/json.ini.\n* Niektóre dystrybucje Linuksa, wydane po maju 2013, nie używają rozszerzenia PHP, lecz rozszerzenie PECL, jako php5-json lub php-pecl-jsonc.", + "config-mbstring-absent": "Błąd krytyczny: PHP musi być skompilowany z obsługą [http://www.php.net/manual/en/mbstring.setup.php rozszerzenia mbstring].", "config-xcache": "[Http://trac.lighttpd.net/xcache/ XCache] jest zainstalowany", "config-apc": "[Http://www.php.net/apc APC] jest zainstalowany", "config-wincache": "[http://www.iis.net/download/WinCacheForPhp WinCache] jest zainstalowany", + "config-no-cache-apcu": "Ostrzeżenie: Nie można znaleźć [http://www.php.net/apcu APCu], [http://xcache.lighttpd.net/ XCache] lub [http://www.iis.net/download/WinCacheForPhp WinCache].\nPamięć podręczna obiektów nie zostanie włączona.", "config-mod-security": "''' Ostrzeżenie ''': Serwer sieci web ma włączone [http://modsecurity.org/ mod_security]. Jeśli jest niepoprawnie skonfigurowane, może być przyczyną problemów MediaWiki lub innego oprogramowania, które pozwala użytkownikom na wysyłanie dowolnej zawartości.\nSprawdź w [http://modsecurity.org/documentation/ dokumentacji mod_security] lub skontaktuj się z obsługa hosta, jeśli wystąpią losowe błędy.", "config-diff3-bad": "Nie znaleziono GNU diff3.", "config-git": "Znaleziono oprogramowanie kontroli wersji Git: $1.", @@ -203,7 +206,7 @@ "config-ns-site-name": "Taka sama jak nazwa wiki: $1", "config-ns-other": "Inna (należy określić)", "config-ns-other-default": "MojaWiki", - "config-project-namespace-help": "Według przykładu Wikipedii wiele wiki przechowuje swoje strony zasad oddzielnie od stron z zawartością, w \"'''przestrzeni nazw projektu'''\".\nWszystkie tytuły stron w tej przestrzeni nazw zaczynają się od pewnego przedrostka, który można tutaj określić.\nTradycyjnie ten przedrostek wywodzi się od nazwy wiki, ale nie może zawierać pewnych znaków przestankowych takich jak \"#\" lub \":\".", + "config-project-namespace-help": "Według przykładu Wikipedii wiele wiki przechowuje swoje strony zasad oddzielnie od stron z zawartością, w '''przestrzeni nazw projektu'''.\nWszystkie tytuły stron w tej przestrzeni nazw zaczynają się od pewnego przedrostka, który można tutaj określić.\nZazwyczaj ten przedrostek wywodzi się od nazwy wiki, ale nie może zawierać pewnych znaków przestankowych takich jak \"#\" lub \":\".", "config-ns-invalid": "Podana przestrzeń nazw „$1” jest nieprawidłowa.\nPodaj inną przestrzeń nazw projektu.", "config-ns-conflict": "Określona przestrzeń nazw \"$1\" powoduje konflikt z domyślną przestrzenią nazw MediaWiki.\nWskaż inną przestrzeń nazw projektu.", "config-admin-box": "Konto administratora", @@ -324,7 +327,7 @@ "config-install-mainpage": "Tworzenie strony głównej z domyślną zawartością", "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\n'''Uwaga''': 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]'''.", + "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].", "config-download-localsettings": "Pobierz LocalSettings.php", "config-help": "pomoc", "config-help-tooltip": "kliknij, aby rozwinąć", diff --git a/includes/installer/i18n/ps.json b/includes/installer/i18n/ps.json index 4a6526c8a4..35835d2916 100644 --- a/includes/installer/i18n/ps.json +++ b/includes/installer/i18n/ps.json @@ -90,6 +90,6 @@ "config-install-tables": "لښتيالونه جوړول", "config-download-localsettings": "ښکته کول LocalSettings.php", "config-help": "لارښود", - "mainpagetext": "'''MediaWiki په برياليتوب سره نصب شو.'''", + "mainpagetext": "MediaWiki نصب شو.", "mainpagedocfooter": "د ويکي ساوترې د کارولو د مالوماتو په اړه [//meta.wikimedia.org/wiki/Help:Contents د کارن لارښود] سره سلا وکړۍ.\n\n== پيلول ==\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings د امستنو د سازونې لړليک]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ د ميډياويکي ډېرځليزې پوښتنې]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce د مېډياويکي د برېښليکونو لړليک]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources خپلې ژبې لپاره MediaWiki ځايتابول]" } diff --git a/includes/installer/i18n/pt-br.json b/includes/installer/i18n/pt-br.json index e41c1f77f1..677908bcfa 100644 --- a/includes/installer/i18n/pt-br.json +++ b/includes/installer/i18n/pt-br.json @@ -18,7 +18,8 @@ "TheEduGobi", "Dianakc", "Walesson", - "Almondega" + "Almondega", + "Luk3" ] }, "config-desc": "O instalador do MediaWiki", @@ -27,7 +28,7 @@ "config-localsettings-upgrade": "Foi detectada a existência do arquivo LocalSettings.php.\nPara atualizar esta instalação, insira na caixa abaixo o valor de $wgUpgradeKey.\nEssa informação pode ser encontrada no arquivo LocalSettings.php", "config-localsettings-cli-upgrade": "Foi detectada a existência do arquivo LocalSettings.php.\nAtualize esta instalação executando o arquivo update.php", "config-localsettings-key": "Chave de atualização:", - "config-localsettings-badkey": "A chave fornecida está incorreta.", + "config-localsettings-badkey": "A chave de atualização que você forneceu está incorreta.", "config-upgrade-key-missing": "Foi detectada uma instalação existente do MediaWiki.\nPara atualizar esta instalação, insira a seguinte linha ao final do seu LocalSettings.php:\n\n$1", "config-localsettings-incomplete": "O arquivo LocalSettings.php parece incompleto.\nA variável $1 não está definida.\nPor favor, altere seu LocalSettings.php e defina esta variável e clique em \"{{int:Config-continue}}\".", "config-localsettings-connection-error": "Ocorreu um erro ao conectar ao banco de dados através das configurações presentes no arquivo LocalSettings.php. Por favor, corrija essas configurações e tente novamente.\n\n$1", @@ -70,12 +71,7 @@ "config-no-db": "Não foi possível encontrar um driver apropriado para a banco de dados! Você precisa instalar um driver de banco de dados para PHP. {{PLURAL:$2|É aceite o seguinte tipo|São aceites os seguintes tipos}} de banco de dados: $1.\n\nSe compilou o PHP você mesmo, reconfigure-o com um cliente de banco de dados ativado, por exemplo, usando ./configure --with-mysqli.\nSe instalou o PHP a partir de um pacote Debian ou Ubuntu, então também precisa instalar, por exemplo, o pacote php5-mysql.", "config-outdated-sqlite": "Aviso: você tem o SQLite versão $1, que é menor do que a versão mínima necessária $2. O SQLite não estará disponível.", "config-no-fts3": "Aviso O SQLite foi compilado sem o [//sqlite.org/fts3.html módulo FTS3], as funcionalidades de pesquisa não estarão disponíveis nesta instalação.", - "config-register-globals-error": "Erro: a opção [http://php.net/register_globals register_globals] do PHP está ativada.\nA mesma deve ser desativada para continuar a instalação.\nVeja [https://www.mediawiki.org/wiki/register_globals https://www.mediawiki.org/wiki/register_globals] para obter ajuda com isto.", - "config-magic-quotes-gpc": "Fatal: [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-gpc magic_quotes_gpc] está ativa!\nEsta opção corrompe a entrada de dados imprevisivelmente.\nVocê não pode instalar ou usar a MediaWiki a menos que esta opção seja desativada.", - "config-magic-quotes-runtime": "Erro fatal: A opção [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-runtime magic_quotes_runtime] está ativada!\nEsta opção causa corrupção dos dados de entrada de forma imprevisível.\nVocê não pode instalar ou utilizar o MediaWiki a menos que esta opção seja desativada.", - "config-magic-quotes-sybase": "Erro fatal: A opção [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-sybase magic_quotes_sybase] está ativada!\nEsta opção corrompe os dados de entrada de forma imprevisível.\nVocê não pode instalar ou utilizar o MediaWiki a menos que esta opção seja desativada.", "config-mbstring": "Erro fatal: A opção [http://www.php.net/manual/en/ref.mbstring.php#mbstring.overload mbstring.func_overload] está ativada!\nEsta opção causa erros e pode corromper os dados de forma imprevisível.\nVocê não pode instalar ou utilizar o MediaWiki a menos que esta opção seja desativada.", - "config-safe-mode": "Aviso: O [http://www.php.net/features.safe-mode safe mode] do PHP está ativado.\nEste modo pode causar problemas, especialmente no upload de arquivos e no suporte a math.", "config-xml-bad": "Falta o módulo XML do PHP.\nO MediaWiki necessita de funções deste módulo e não funcionará com esta configuração.\nPode precisar de instalar o pacote RPM chamado php-xml.", "config-pcre-old": "Erro fatal: É necessário o PCRE $1 ou versão posterior.\nO binário do seu PHP foi vinculado com o PCRE $2.\n[https://www.mediawiki.org/wiki/Manual:Errors_and_symptoms/PCRE Mais informações].", "config-pcre-no-utf8": "Erro fatal: O módulo PCRE do PHP parece ser compilado sem suporte a PCRE_UTF8.\nO MediaWiki requer suporte a UTF-8 para funcionar corretamente.", @@ -87,7 +83,7 @@ "config-xcache": "[http://xcache.lighttpd.net/ XCache] está instalado", "config-apc": "[http://www.php.net/apc APC] está instalado", "config-wincache": "[http://www.iis.net/download/WinCacheForPhp WinCache] está instalado", - "config-no-cache": "Aviso: Não foi possível encontrar o [http://www.php.net/apc APC], [http://xcache.lighttpd.net/ XCache] ou [http://www.iis.net/download/WinCacheForPhp WinCache].\nO cache de objetos não está habilitado.", + "config-no-cache-apcu": "Aviso: Não se pode encontrar [http://www.php.net/apcu APCu], [http://xcache.lighttpd.net/ XCache] ou [http://www.iis.net/download/WinCacheForPhp WinCache].\nO caching de objetos não foi ativado.", "config-mod-security": "Aviso: Seu servidor web tem [http://modsecurity.org/ mod_security] habilitado. Se configurado incorretamente, pode causar problemas para o MediaWiki ou outro software que permite aos usuários postar conteúdo arbitrário.\nConsulte a [http://modsecurity.org/documentation/ documentação do mod_security] ou entre em contato com o suporte do seu host se você encontrar erros aleatórios.", "config-diff3-bad": "O GNU diff3 não foi encontrado.", "config-git": "Foi encontrado o software de controle de versão Git: $1.", diff --git a/includes/installer/i18n/pt.json b/includes/installer/i18n/pt.json index 39ce4b16b5..e0affaf3d0 100644 --- a/includes/installer/i18n/pt.json +++ b/includes/installer/i18n/pt.json @@ -15,7 +15,8 @@ "Imperadeiro98", "Cainamarques", "Vitorvicentevalente", - "Macofe" + "Macofe", + "Diniscoelho" ] }, "config-desc": "O instalador do MediaWiki", @@ -326,5 +327,5 @@ "config-nofile": "Não foi possível encontrar o ficheiro \"$1\". Terá sido apagado?", "config-extension-link": "Sabia que a sua wiki suporta [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Extensions extensões]?\n\nPode procurar [//www.mediawiki.org/wiki/Special:MyLanguage/Category:Extensions_by_category extensões por categoria].", "mainpagetext": "MediaWiki instalado.", - "mainpagedocfooter": "Consulte o [//meta.wikimedia.org/wiki/Help:Contents Guia de Utilizadores] para informações sobre o uso do software wiki.\n\n== Onde começar ==\n\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Lista de opções de configuração]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ Perguntas e respostas frequentes sobre o MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Subscreva a lista de divulgação de novas versões do MediaWiki]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Regionalize MediaWiki para seu idioma]" + "mainpagedocfooter": "Consulte o [//meta.wikimedia.org/wiki/Help:Contents Guia de Utilizadores] para informações sobre o uso do software wiki.\n\n== Onde começar ==\n\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Lista de opções de configuração]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ Perguntas e respostas frequentes sobre o MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Subscreva a lista de divulgação de novas versões do MediaWiki]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Regionalize o MediaWiki para seu idioma]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Aprenda a combater spam na sua wiki]" } diff --git a/includes/installer/i18n/qqq.json b/includes/installer/i18n/qqq.json index e73480134d..7010be0383 100644 --- a/includes/installer/i18n/qqq.json +++ b/includes/installer/i18n/qqq.json @@ -78,6 +78,7 @@ "config-ctype": "Message if support for [http://www.php.net/manual/en/ctype.installation.php Ctype] is missing from PHP.\n{{Related|Config-fatal}}", "config-iconv": "Message if support for [http://www.php.net/manual/en/iconv.installation.php iconv] is missing from PHP.\n{{Related|Config-fatal}}", "config-json": "Message if support for [[wikipedia:JSON|JSON]] is missing from PHP.\n* \"[[wikipedia:Red Hat Enterprise Linux|Red Hat Enterprise Linux]]\" (RHEL) and \"[[wikipedia:CentOS|CentOS]]\" refer to two almost-identical Linux distributions. \"5 and 6\" refers to version 5 or 6 of either distribution. Because RHEL 7 likely will not include the PHP extension, do not translate as \"5 or newer\".\n* \"The [http://www.php.net/json PHP extension]\" is the JSON extension included with PHP 5.2 and newer.\n* \"The [http://pecl.php.net/package/jsonc PECL extension]\" is based on the PHP extension, though excludes code some distributions have found unacceptable (see [[phab:T49431]]).\n{{Related|Config-fatal}}", + "config-mbstring-absent": "Message if support for [http://www.php.net/manual/en/mbstring.installation.php mbstring] is missing from PHP.\n{{Related|Config-fatal}}", "config-xcache": "Message indicates if this program is available", "config-apc": "Message indicates if this program is available", "config-wincache": "Message indicates if this program is available", diff --git a/includes/installer/i18n/ru.json b/includes/installer/i18n/ru.json index f966b443d7..21f0cb0239 100644 --- a/includes/installer/i18n/ru.json +++ b/includes/installer/i18n/ru.json @@ -81,6 +81,7 @@ "config-ctype": "'''Фатальная ошибка:''' PHP должен быть скомпилирован с поддержкой [http://www.php.net/manual/ru/ctype.installation.php расширения Ctype].", "config-iconv": "Фатальная ошибка: PHP должен быть скомпилирован с поддержкой [http://www.php.net/manual/en/iconv.installation.php расширения iconv].", "config-json": "'''Фатальная ошибка:''' PHP был скомпилирован без поддержка JSON.\nВам необходимо установить либо расширение PHP JSON, либо расширение [http://pecl.php.net/package/jsonc PECL jsonc] перед установкой MediaWiki.\n* PHP-расширение входит в состав Red Hat Enterprise Linux (CentOS) 5 и 6, хотя должна быть включено в /etc/php.ini или /etc/php.d/json.ini.\n* Некоторые дистрибутивы Linux, выпущенные после мая 2013 года, не включают расширение PHP, вместо того, чтобы упаковывать расширение PECL как php5-json или php-pecl-jsonc.", + "config-mbstring-absent": "Фатальная ошибка: PHP должен быть скомпилирован с поддержкой [http://www.php.net/manual/en/mbstring.setup.php расширения mbstring].", "config-xcache": "[http://xcache.lighttpd.net/ XCache] установлен", "config-apc": "[http://www.php.net/apc APC] установлен", "config-wincache": "[http://www.iis.net/download/WinCacheForPhp WinCache] установлен", diff --git a/includes/installer/i18n/sr-ec.json b/includes/installer/i18n/sr-ec.json index 5ba505e72a..fc6997da52 100644 --- a/includes/installer/i18n/sr-ec.json +++ b/includes/installer/i18n/sr-ec.json @@ -84,6 +84,6 @@ "config-install-step-failed": "није успело", "config-help": "помоћ", "config-help-tooltip": "кликните да проширите", - "mainpagetext": "'''Медијавики је успешно инсталиран.'''", + "mainpagetext": "Медијавики је успешно инсталиран.", "mainpagedocfooter": "Погледајте [//meta.wikimedia.org/wiki/Help:Contents кориснички водич] за коришћење програма.\n\n== Увод ==\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Помоћ у вези са подешавањима]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ Често постављена питања]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Дописна листа о издањима Медијавикија]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Научите како да се борете против спама на Вашој вики]" } diff --git a/includes/installer/i18n/sr-el.json b/includes/installer/i18n/sr-el.json index b1a97e9bb6..3e1faf9f52 100644 --- a/includes/installer/i18n/sr-el.json +++ b/includes/installer/i18n/sr-el.json @@ -35,6 +35,6 @@ "config-site-name": "Ime vikija:", "config-license-cc-0": "Creative Commons Zero (javno vlasništvo)", "config-skins": "Teme", - "mainpagetext": "'''MedijaViki je uspešno instaliran.'''", + "mainpagetext": "Medijaviki je uspešno instaliran.", "mainpagedocfooter": "Molimo vidite [//meta.wikimedia.org/wiki/Help:Contents korisnički vodič] za informacije o upotrebi viki softvera.\n\n== Za početak ==\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Pomoć u vezi sa podešavanjima]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ Najčešće postavljena pitanja]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Mejling lista o izdanjima MedijaVikija]" } diff --git a/includes/installer/i18n/sv.json b/includes/installer/i18n/sv.json index b54c65a436..3ab0c806d5 100644 --- a/includes/installer/i18n/sv.json +++ b/includes/installer/i18n/sv.json @@ -61,12 +61,7 @@ "config-no-db": "Kunde inte hitta en lämplig databasdrivrutin! Du måste installera en databasdrivrutin för PHP.\nFöljande databas{{PLURAL:$2|typ |typer}} stöds: $1.\n\nI du själv kompilerat din PHP, konfigurera den med en databasklient aktiverad genom att t.ex. använda ./configure --with-mysqli.\nOm du installerade PHP från ett Debian- eller Ubuntupaket måste du även installera, t.ex. php5-mysql-paketet.", "config-outdated-sqlite": "'''Varning:''' du har SQLite $1, vilket är lägre än minimikravet version $2. SQLite kommer inte att vara tillgänglig.", "config-no-fts3": "'''Varning:''' SQLite kompileras utan [//sqlite.org/fts3.html FTS3-modulen], sökfunktioner kommer att vara otillgängliga på denna backend.", - "config-register-globals-error": "Fel: PHP-alternativet [http://php.net/register_globals register_globals] är aktiverad.\nDen måste vara inaktiverad för att fortsätta med installationen.\nSe [https://www.mediawiki.org/wiki/register_globals https://www.mediawiki.org/wiki/register_globals] för hjälp om hur man gör så.", - "config-magic-quotes-gpc": "Kritiskt: [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-sybase magic_quotes_gpc är aktiv!\nDetta alternativ korrumperar inmatad data oförutsägbart.\nDu kan inte installera eller använda MediaWiki om detta alternativ är aktiverat.", - "config-magic-quotes-runtime": "'''Kritiskt: [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-runtime magic_quotes_runtime] är aktiv!'''\nDetta alternativ korrumperar inmatad data oförutsägbart.\nDu kan inte installera eller använda MediaWiki om detta alternativ är aktiverat.", - "config-magic-quotes-sybase": "'''Kritiskt: [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-sybase magic_quotes_sybase] är aktiv!'''\nDetta alternativ korrumperar inmatad data oförutsägbart.\nDu kan inte installera eller använda MediaWiki om detta alternativ är aktiverat.", "config-mbstring": "'''Kritiskt: [http://www.php.net/manual/en/ref.mbstring.php#mbstring.overload mbstring.func_overload] är aktiv!'''\nDetta alternativ orsakar fel och kan korrumpera data oförutsägbart.\nDu kan inte installera eller använda MediaWiki om detta alternativ är aktiverat.", - "config-safe-mode": "''' Varning:''' PHP:s [http://www.php.net/features.safe-mode felsäkra läge] är aktivt.\nDet kan orsaka problem, särskilt om du använder filuppladdningar och math-stöd.", "config-xml-bad": "PHP:s XML-modul saknas.\nMediaWiki kräver funktioner i denna modul och kommer inte att fungera i den här konfigurationen.\nDu kan behöva installera RPM-paketet för php-xml.", "config-pcre-old": "'''Kritiskt:''' PCRE $1 eller senare krävs.\nDin PHP-binär är länkad till PCRE $2.\n[https://www.mediawiki.org/wiki/Manual:Errors_and_symptoms/PCRE Mer information].", "config-pcre-no-utf8": "'''Kritiskt:''' PHP:s PCRE-modul verkar vara kompilerat utan PCRE_UTF8-stöd.\nMediaWiki kräver stöd för UTF-8 för att fungera korrekt.", @@ -75,10 +70,10 @@ "config-ctype": "'''Kritiskt:''' PHP måste kompileras med stöd för [http://www.php.net/manual/en/ctype.installation.php Ctype-tillägget].", "config-iconv": "Kritiskt: PHP måste kompileras med stöd för [http://www.php.net/manual/en/iconv.installation.php iconv-tillägget].", "config-json": "'''Varning:''' PHP kompilerades utan JSON-stöd.\nDu måste antingen installera PHP JSON-tillägget eller [http://pecl.php.net/package/jsonc PECL jsonc]-tillägget före installationen av MediaWiki.\n* PHP-tillägget är inkluderat i Red Hat Enterprise Linux (CentOS) 5 och 6, men måste aktiveras i /etc/php.ini eller /etc/php.d/json.ini.\n* Vissa Linux-distributioner släppta efter maj 2013 har utelämnat PHP-tillägget och har istället inkluderat PECL-tillägget som php5-json eller php-pecl-jsonc.", + "config-mbstring-absent": "'''Kritiskt:''' PHP måste kompileras med stöd för tillägget [http://www.php.net/manual/en/mbstring.setup.php mbstring mbstring].", "config-xcache": "[http://xcache.lighttpd.net/ XCache] är installerat", "config-apc": "[http://www.php.net/apc APC] är installerat", "config-wincache": "[http://www.iis.net/download/WinCacheForPhp WinCache] är installerat", - "config-no-cache": "'''Varning:''' Kunde inte hitta [http://www.php.net/apc APC], [http://xcache.lighttpd.net/ XCache] eller [http://www.iis.net/download/WinCacheForPhp WinCache].\nCachelagring av objekt är inte aktiverat.", "config-no-cache-apcu": "'''Varning:''' Kunde inte hitta [http://www.php.net/apcu APCu], [http://xcache.lighttpd.net/ XCache] eller [http://www.iis.net/download/WinCacheForPhp WinCache].\nCachelagring av objekt är inte aktiverat.", "config-mod-security": "'''Varning:''' Din webbserver har [http://modsecurity.org/ mod_security] aktiverat. Om felaktigt konfigurerat kan den skapa problem för MediaWiki eller annan programvara som tillåter användaren att posta godtyckligt innehåll.\nTitta på [http://modsecurity.org/documentation/ mod_security-dokumentationen] eller kontakta din värd om du påträffar slumpmässiga fel.", "config-diff3-bad": "GNU diff3 hittades inte.", @@ -199,7 +194,7 @@ "config-ns-site-name": "Samma som wikinamnet: $1", "config-ns-other": "Annan (specificera)", "config-ns-other-default": "MinWiki", - "config-project-namespace-help": "Per Wikipedias exempel håller många wikis sina policy-sidor separata från innehållssidorna i en \"'''projektnamnrymd'''\".\nAlla sidtitlar i denna namnrymd startar med ett visst prefix vilket du specificerar här.\nVanligtvis kan detta namn härledas från namnet på wikin, men den får inte innehålla interpunktionstecken som exempelvis \"#\" eller \":\".", + "config-project-namespace-help": "Per Wikipedias exempel håller många wikis sina policy-sidor separata från innehållssidorna i en '''projektnamnrymd'''.\nAlla sidtitlar i denna namnrymd startar med ett visst prefix vilket du specificerar här.\nVanligtvis kan detta namn härledas från namnet på wikin, men den får inte innehålla interpunktionstecken som exempelvis \"#\" eller \":\".", "config-ns-invalid": "Den angivna namnrymden \"$1\" är ogiltig.\nAnge en annan namnrymd för projektet.", "config-ns-conflict": "Den angivna namnrymden \"$1\" står i konflikt med en standardnamnrymd för MediaWiki.\nAnge en annan namnrymd för projektet.", "config-admin-box": "Administratörskonto", @@ -320,12 +315,12 @@ "config-install-mainpage": "Skapa huvudsida med standardinnehåll", "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\n'''OBS''': 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]'''.", + "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]", "config-download-localsettings": "Ladda ner LocalSettings.php", "config-help": "hjälp", "config-help-tooltip": "klicka för att expandera", "config-nofile": "Filen \"$1\" kunde inte hittas. Har den raderats?", "config-extension-link": "Visste du att din wiki stödjer [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Extensions tillägg]?\n\nDu kan bläddra [//www.mediawiki.org/wiki/Special:MyLanguage/Category:Extensions_by_category tillägg efter kategori].", - "mainpagetext": "'''MediaWiki har installerats utan problem.'''", + "mainpagetext": "MediaWiki har installerats utan problem.", "mainpagedocfooter": "Information om hur wiki-programvaran används finns i [//meta.wikimedia.org/wiki/Help:Contents användarguiden].\n\n== Att komma igång ==\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Lista över konfigurationsinställningar]\n* [//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* [//www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Lokalisera MediaWiki för ditt språk]\n* [//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/uk.json b/includes/installer/i18n/uk.json index 07939189e9..991e7c3a2e 100644 --- a/includes/installer/i18n/uk.json +++ b/includes/installer/i18n/uk.json @@ -73,6 +73,7 @@ "config-ctype": "'''Помилка''': PHP має бути зібраним з підтримкою [http://www.php.net/manual/en/ctype.installation.php розширення Ctype].", "config-iconv": "'''Фатальна помилка''': PHP має бути зібраним з підтримкою [http://www.php.net/manual/en/iconv.installation.php розширення iconv].", "config-json": "'''Fatal:''' PHP був скомпільований без підтримки JSON.\nВам потрібно встановити або розширення PHP JSON або розширення[http://pecl.php.net/package/jsonc PECL jsonc] перед встановлення Медіавікі.\n* Розширення PHP включено у Red Hat Enterprise Linux (CentOS) 5 та 6, хоча має бути доступним у /etc/php.ini або /etc/php.d/json.ini.\n* Деякі дистрибутиви Лінукса, випущені після травня 2013, пропустили розширення PHP, натомість упакували розширення PECL як php5-json або php-pecl-jsonc.", + "config-mbstring-absent": "Фатальна помилка: PHP має бути скомпільовано з підтримкою [http://www.php.net/manual/en/mbstring.setup.php розширення mbstring].", "config-xcache": "[http://xcache.lighttpd.net/ XCache] встановлено", "config-apc": "[http://www.php.net/apc APC] встановлено", "config-wincache": "[http://www.iis.net/download/WinCacheForPhp WinCache] встановлено", @@ -205,7 +206,7 @@ "config-admin-password-confirm": "Пароль ще раз:", "config-admin-help": "Введіть бажане ім'я користувача тут, наприклад \"Павло НЛО\".\nЦе ім'я ви будете використовувати про вході у вікі.", "config-admin-name-blank": "Введіть ім'я користувача адміністратора.", - "config-admin-name-invalid": "Вказане ім'я користувача \"$1\" не припустиме.\nВкажіть інше ім'я користувача.", + "config-admin-name-invalid": "Вказане ім'я користувача «$1» не припустиме.\nВкажіть інше ім'я користувача.", "config-admin-password-blank": "Введіть пароль до облікового запису адміністратора.", "config-admin-password-mismatch": "Два введені вами паролі не збігаються.", "config-admin-email": "Адреса електронної пошти:", diff --git a/includes/installer/i18n/vi.json b/includes/installer/i18n/vi.json index 57c479037f..2644f3fd8e 100644 --- a/includes/installer/i18n/vi.json +++ b/includes/installer/i18n/vi.json @@ -15,7 +15,7 @@ "config-localsettings-upgrade": "Một tập tin LocalSettings.php đã được phát hiện.\nĐể nâng cấp bản cài đặt này, xin nhập giá trị của $wgUpgradeKey trong hộp thoại bên dưới đây.\nBạn sẽ tìm thấy nó trong LocalSettings.php.", "config-localsettings-cli-upgrade": "Một tập tin LocalSettings.php đã được phát hiện.\nĐể nâng cấp bản cài đặt này, hãy chạy update.php thay thế.", "config-localsettings-key": "Chìa khóa nâng cấp:", - "config-localsettings-badkey": "Bạn đã cung cấp một chìa khóa sai.", + "config-localsettings-badkey": "Bạn đã cung cấp một chìa khóa nâng cấp sai.", "config-upgrade-key-missing": "Một bản cài đặt MediaWiki sẵn đã được phát hiện.\nĐể nâng cấp bản cài đặt này, hãy thêm dòng sau vào cuối LocalSettings.php:\n\n$1", "config-localsettings-incomplete": "Tập tin LocalSettings.php đã tồn tại hình như không hoàn chỉnh.\nBiến $1 chưa được đặt.\nXin hãy thay đổi LocalSettings.php để đặt biến này, rồi bấm “{{int:Config-continue}}”.", "config-localsettings-connection-error": "Đã xuất hiện lỗi khi kết nối với cơ sở dữ liệu dùng cấu hình trong LocalSettings.php. Xin hãy sửa lại cấu hình và thử lại.\n\n$1", @@ -58,12 +58,7 @@ "config-no-db": "Không tìm thấy một trình điều khiển cơ sở dữ liệu phù hợp! Bạn cần phải cài một trình điều khiển cơ sở dữ liệu cho PHP.\n{{PLURAL:$2|Loại|Các loại}} cơ sở dữ liệu sau đây được hỗ trợ: $1.\n\nNếu bạn đã biên dịch PHP lấy, cấu hình lại nó mà kích hoạt một trình khách cơ sở dữ liệu, ví dụ bằng lệnh ./configure --with-mysqli.\nNếu bạn đã cài PHP từ một gói Debian hoặc Ubuntu, thì bạn cũng cần phải cài ví dụ gói php5-mysql.", "config-outdated-sqlite": "Chú ý: Bạn có SQLite $1, phiên bản này thấp hơn phiên bản yêu câu tối thiểu $2. SQLite sẽ không có tác dụng.", "config-no-fts3": "Chú ý: SQLite được biên dịch mà không có [//sqlite.org/fts3.html mô đun FTS3], nên các chức năng tìm kiếm sẽ bị vô hiệu trên hệ thống phía sau này.", - "config-register-globals-error": "Lỗi: Tùy chọn [http://php.net/register_globals register_globals] của PHP đã được kích hoạt.\nNó phải bị vô hiệu để tiếp tục quá trình cài đặt.\nXem [https://www.mediawiki.org/wiki/register_globals https://www.mediawiki.org/wiki/register_globals] để biết cách thực hiện.", - "config-magic-quotes-gpc": "Lỗi chí tử: [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-gpc magic_quotes_gpc] đang hoạt động!\nTùy chọn này sẽ làm hỏng dữ liệu nhập một cách không thể đoán trước.\nBạn không thể cài đặt hoặc sử dụng MediaWiki trừ phi tùy chọn này bị vô hiệu.", - "config-magic-quotes-runtime": "Lỗi chí tử: [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-runtime magic_quotes_runtime] đang hoạt động!\nTùy chọn này sẽ làm hỏng dữ liệu nhập một cách không thể đoán trước.\nBạn không thể cài đặt hoặc sử dụng MediaWiki trừ phi tùy chọn này bị vô hiệu.", - "config-magic-quotes-sybase": "Lỗi chí tử: [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-sybase magic_quotes_sybase] đang hoạt động!\nTùy chọn này sẽ làm hỏng dữ liệu nhập một cách không thể đoán trước.\nBạn không thể cài đặt hoặc sử dụng MediaWiki trừ phi tùy chọn này bị vô hiệu.", "config-mbstring": "Lỗi chí tử: [http://www.php.net/manual/en/ref.mbstring.php#mbstring.overload mbstring.func_overload] được kích hoạt!\nTùy chọn này gây lỗi và có thể làm hỏng dữ liệu một cách không thể đoán trước.\nBạn không thể cài đặt hoặc sử dụng MediaWiki trừ phi tùy chọn này bị vô hiệu.", - "config-safe-mode": "Cảnh báo: [http://www.php.net/features.safe-mode Chế độ an toàn] của PHP đang được kích hoạt.\nNó có thể gây vấn đề, nhất là nếu dùng các chức năng tải lên tập tin và math.", "config-xml-bad": "Mô đun XML của PHP đang bị thiếu.\nMediaWiki yêu cầu các hàm trong mô đun này và sẽ không hoạt động trong cấu hình này.\nBạn có thể cần cài đặt gói RPM php-xml.", "config-pcre-old": "Lỗi chí tử: PCRE $1 trở lên được yêu cầu phải có.\nBản nhị phân PHP của bạn dang được liên kết với PCRE $2.\n[https://www.mediawiki.org/wiki/Manual:Errors_and_symptoms/PCRE Thông tin bổ sung].", "config-pcre-no-utf8": "Lỗi chí tử: Mô đun PCRE của PHP dường như được biên dịch mà không có hỗ trợ PCRE_UTF8.\nMediaWiki yêu cầu phải có hỗ trợ UTF-8 để hoạt động chính xác.", @@ -75,7 +70,7 @@ "config-xcache": "[http://xcache.lighttpd.net/ XCache] đã được cài đặt", "config-apc": "[http://www.php.net/apc APC] đã được cài đặt", "config-wincache": "[http://www.iis.net/download/WinCacheForPhp WinCache] đã được cài đặt", - "config-no-cache": "Cảnh báo: Không tìm thấy [http://www.php.net/apc APC], [http://xcache.lighttpd.net/ XCache] hoặc [http://www.iis.net/download/WinCacheForPhp WinCache].\nVùng nhớ đệm đối tượng không được kích hoạt.", + "config-no-cache-apcu": "Cảnh báo: Không tìm thấy [http://www.php.net/apcu APCu], [http://xcache.lighttpd.net/ XCache], hoặc [http://www.iis.net/download/WinCacheForPhp WinCache].\nVùng nhớ đệm đối tượng không được kích hoạt.", "config-mod-security": "Cảnh báo: [http://modsecurity.org/ mod_security]/mod_security2 đã được kích hoạt trên máy chủ Web của bạn. Nhiều cấu hình phổ biến của phần mềm này sẽ gây vấn đề cho MediaWiki và những phần mềm khác cho phép người dùng đăng các nội dung tùy tiện.\nNếu có thể, bạn nên vô hiệu nó. Còn không, tra cứu [http://modsecurity.org/documentation/ tài liệu mod_security] hoặc liên hệ với nhà cung cấp hỗ trợ cho máy chủ nếu bạn gặp những lỗi ngẫu nhiên nào đó.", "config-diff3-bad": "Không tìm thấy GNU diff3.", "config-git": "Đã tìm thấy phần mềm điều khiển phiên bản Git: $1.", @@ -195,7 +190,7 @@ "config-ns-site-name": "Cùng với tên wiki: $1", "config-ns-other": "Khác (định rõ)", "config-ns-other-default": "WikiTôi", - "config-project-namespace-help": "Ví dụ sau đây của Wikipedia, nhiều wiki tách các trang sách họ với các trang nội dung, trong một \"''' không gian tên dự án'''\".\nTất cả các tiêu đề trang trong không gian tên này bắt đầu với một tiền tố nhất định, bạn có thể xác định ở đây.\nThông thường, tiền tố này được bắt nguồn từ tên của wiki, nhưng nó không thể chứa các ký tự đặc biệt như \"#\" hoặc \":\".", + "config-project-namespace-help": "Nhiều wiki bắt chước Wikipedia bằng cách tách các trang quy định ra khỏi các trang nội dung trong một '''không gian tên dự án'''.\nTất cả các tên trang trong không gian tên này bắt đầu với một tiền tố cụ thể, bạn có thể xác định ở đây.\nThông thường, tiền tố này bắt nguồn từ tên của wiki, nhưng nó không thể chứa các ký tự đặc biệt như “#” hoặc “:”.", "config-ns-invalid": "Không gian tên cụ thể \"$1\" không hợp lệ.\nXác định một không gian tên dự án khác.", "config-ns-conflict": "Không gian tên cụ thể \"$1\" xung đột với một không gian tên MediaWiki mặc định.\nXác định một không gian tên dự án khác.", "config-admin-box": "Tài khoản bảo quản viên", @@ -316,12 +311,12 @@ "config-install-mainpage": "Đang tạo trang đầu với nội dung mặc định", "config-install-extension-tables": "Đang tạo bảng cho các phần mở rộng được kích hoạt", "config-install-mainpage-failed": "Không thể chèn trang đầu: $1", - "config-install-done": "Xin chúc mừng!\nBạn đã cài đặt thành công MediaWiki.\n\nBộ cài đặt đã tạo ra một tập tin LocalSettings.php.\nTập tin này chứa tất cả các cấu hình của bạn.\n\nBạn sẽ cần phải tải nó về và đặt nó trong thư mục cài đặt wiki của bạn (cùng thư mục với index.php). Việc tải về có lẽ sẽ được khởi động tự động.\n\nNếu bản tải về không được cung cấp, hoặc nếu bạn hủy bỏ nó, bạn có thể khởi động lại tải về bằng cách nhấn vào liên kết dưới đây:\n\n$3\n\nLưu ý: Nếu bạn không làm điều này ngay bây giờ, điều này sẽ tạo ra tập tin cấu hình sẽ không có giá trị cho bạn sau này nếu bạn thoát khỏi trình cài đặt mà không tải nó về.\n\nKhi đã việc tải về đã hoàn thành, bạn có thể [$2 truy cập trang wiki của bạn].", + "config-install-done": "Xin chúc mừng!\nBạn đã cài đặt MediaWiki.\n\nBộ cài đặt đã tạo ra một tập tin LocalSettings.php.\nTập tin này chứa tất cả các cấu hình của bạn.\n\nBạn sẽ cần phải tải nó về và đặt nó trong thư mục cài đặt wiki của bạn (cùng thư mục với index.php). Việc tải về có lẽ sẽ được khởi động tự động.\n\nNếu bản tải về không được cung cấp, hoặc nếu bạn hủy bỏ nó, bạn có thể khởi động lại tải về bằng cách nhấn vào liên kết dưới đây:\n\n$3\n\nLưu ý: Nếu bạn không làm điều này ngay bây giờ, điều này sẽ tạo ra tập tin cấu hình sẽ không có giá trị cho bạn sau này nếu bạn thoát khỏi trình cài đặt mà không tải nó về.\n\nKhi đã việc tải về đã hoàn thành, bạn có thể [$2 truy cập trang wiki của bạn].", "config-download-localsettings": "Tải về LocalSettings.php", "config-help": "Trợ giúp", "config-help-tooltip": "nhấn chuột để mở rộng", "config-nofile": "Không tìm thấy tập tin “$1”. Nó có phải bị xóa không?", "config-extension-link": "Bạn có biết rằng wiki của bạn có hỗ trợ [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Extensions mở rộng]?\n\nBạn có thể truy cập [//www.mediawiki.org/wiki/Special:MyLanguage/Category:Extensions_by_category phần mở rộng theo thể loại] hoặc [//www.mediawiki.org/wiki/Extension_Matrix Ma trận Mở rộng] để xem danh sách đầy đủ các phần mở rộng.", - "mainpagetext": "'''MediaWiki đã được cài đặt thành công.'''", + "mainpagetext": "'''MediaWiki đã được cài đặt.'''", "mainpagedocfooter": "Xin đọc [//meta.wikimedia.org/wiki/Help:Contents Hướng dẫn sử dụng] để biết thêm thông tin về cách sử dụng phần mềm wiki.\n\n== Để bắt đầu ==\n\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Danh sách các thiết lập cấu hình]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ Các câu hỏi thường gặp MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Danh sách gửi thư về việc phát hành MediaWiki]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Tìm hiểu cách chống spam tại wiki của bạn]" } diff --git a/includes/installer/i18n/zh-hans.json b/includes/installer/i18n/zh-hans.json index 8c6988b757..7d2926ca09 100644 --- a/includes/installer/i18n/zh-hans.json +++ b/includes/installer/i18n/zh-hans.json @@ -83,6 +83,7 @@ "config-ctype": "致命错误:PHP必须有[http://www.php.net/manual/en/ctype.installation.php Ctype 扩展]来支持编译。", "config-iconv": "致命错误:PHP必须编译支持[http://www.php.net/manual/en/iconv.installation.php iconv拓展]。", "config-json": "致命错误:PHP编译没有附带JSON支持。\n在安装MediaWiki前,你必须安装PHP JSON扩展或者[http://pecl.php.net/package/jsonc PECL jsonc]扩展。\n* PHP扩展已包含在Red Hat Enterprise Linux (CentOS) 5和6中,但必须在/etc/php.ini或/etc/php.d/json.ini中启用。\n* 部分在2013年5月后发行的Linux发行版省略了PHP扩展,而将PECL扩展打包成了php5-json或php-pecl-jsonc。", + "config-mbstring-absent": "致命错误:PHP必须有[http://www.php.net/manual/en/mbstring.setup.php mbstring扩展]来支持编译。", "config-xcache": "[http://xcache.lighttpd.net/ XCache]已安装", "config-apc": "[http://www.php.net/apc APC]已安装", "config-wincache": "[http://www.iis.net/download/WinCacheForPhp WinCache]已安装", @@ -219,7 +220,7 @@ "config-admin-password-blank": "输入管理员帐号的密码。", "config-admin-password-mismatch": "两次输入的密码并不相同。", "config-admin-email": "电子邮件地址:", - "config-admin-email-help": "在这里输入电子邮件地址可以允许你收到来自本wiki其他用户的电子邮件,重置你的密码和收到你的监视列表中的页面的更改通知。你可以将该字段留空。", + "config-admin-email-help": "在这里输入电子邮件地址可以允许您收到来自本wiki其他用户的电子邮件,重置您的密码和收到您的监视列表中的页面的更改通知。您可以将该字段留空。", "config-admin-error-user": "在创建用户名为“$1”的管理员帐号时发生内部错误。", "config-admin-error-password": "在为管理员“$1”设置密码时发生内部错误:
$2
", "config-admin-error-bademail": "您输入了无效的电子邮件地址。", @@ -234,7 +235,7 @@ "config-profile-no-anon": "需要注册帐号", "config-profile-fishbowl": "编辑受限", "config-profile-private": "非公开wiki", - "config-profile-help": "如果您允许尽量多的人编写wiki,网站上的内容会更加丰富。在MediaWiki中,您可以轻松地审查最近更改,并轻易回退掉新手或破坏者造成的损害。\n\n然而,许多人觉得让MediaWiki存在多种角色将更加好用;同时,要说服所有人都愿以wiki的方式作贡献并非一件易事。因此,您可以有以下选择:\n\n'''{{int:config-profile-wiki}}'''允许包括未登录用户在内的所有人编辑。'''{{int:config-profile-no-anon}}'''的wiki需要额外的注册流程,这有可能会阻碍随意贡献者。\n\n'''{{int:config-profile-fishbowl}}'''模式只允许获批准的用户编辑,但对公众开放页面浏览(包括历史记录)。'''{{int:config-profile-private}}'''则只允许获批准的用户浏览、编辑页面。\n\n安装完成后,您还可以对用户权限进行更多、更复杂的配置,参见[//www.mediawiki.org/wiki/Special:MyLanguage/Manual:User_rights 相关的使用手册]。", + "config-profile-help": "如果您允许尽量多的人编写wiki,网站上的内容会更加丰富。在MediaWiki中,您可以轻松地审查最近更改,并轻易回退掉新手或破坏者造成的损害。\n\n然而,许多人觉得让MediaWiki存在多种角色将更加好用;同时,要说服所有人都愿以wiki的方式作贡献并非一件易事。因此,您可以有以下选择:\n\n{{int:config-profile-wiki}}模式允许包括未登录用户在内的所有人编辑。{{int:config-profile-no-anon}}的wiki需要额外的注册流程,这有可能会阻碍随意贡献者。\n\n{{int:config-profile-fishbowl}}方案只允许获批准的用户编辑,但对公众开放页面浏览(包括历史记录)。{{int:config-profile-private}}则只允许获批准的用户浏览、编辑页面。\n\n安装完成后,您还可以对用户权限进行更多、更复杂的配置,参见[//www.mediawiki.org/wiki/Special:MyLanguage/Manual:User_rights 相关的使用手册]。", "config-license": "版权和许可证:", "config-license-none": "页脚无许可证", "config-license-cc-by-sa": "知识共享“署名-相同方式共享”", diff --git a/includes/installer/i18n/zh-hant.json b/includes/installer/i18n/zh-hant.json index 1f319d376f..4f57b1f228 100644 --- a/includes/installer/i18n/zh-hant.json +++ b/includes/installer/i18n/zh-hant.json @@ -66,12 +66,7 @@ "config-no-db": "找不到合適的資料庫驅動程式!您需要安裝 PHP 資料庫驅動程式。\n目前支援以下{{PLURAL:$2|類型|類型}}的資料庫: $1 。\n\n如果您是自行編譯 PHP,您必須重新設定並開啟資料庫客戶端,例:使用 ./configure --with-mysqli 指令參數。\n如果您是使用 Debian 或 Ubuntu 的套件安裝 PHP ,您則需要額外安裝,例:php5-mysql 套件。", "config-outdated-sqlite": "警告:您已安裝 SQLite $1,但是它的版本低於最低需求版本 $2。 因此您無法使用 SQLite。", "config-no-fts3": "警告: SQLite 編譯時未包含 [//sqlite.org/fts3.html FTS3 模組],後台搜尋功能將無法使用。", - "config-register-globals-error": "錯誤:PHP 的 [http://php.net/register_globals register_globals] 選項已開啟。\n要繼續安裝程序必須關閉該選項。\n請參考 [https://www.mediawiki.org/wiki/register_globals https://www.mediawiki.org/wiki/register_globals] 以取得操作說明。", - "config-magic-quotes-gpc": "嚴重:[http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-gpc magic_quotes_gpc] 已開啟!\n此選項會在無法預期的情況下損壞資料。\n除非您將該選項關閉,否鄍您無法安裝或使用 MediaWiki。", - "config-magic-quotes-runtime": "嚴重:[http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-runtime magic_quotes_runtime] 選項被開啟!\n此選項會導致資料在無法預測的情況下損壞。\n您必須將開選項關閉方可繼續安裝 MediaWiki。", - "config-magic-quotes-sybase": "嚴重:[http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-sybase magic_quotes_sybase] 選項被開啟!\n此選項會導致資料在無法預測的情況下損壞。\n您必須將開選項關閉方可繼續安裝 MediaWiki。", "config-mbstring": "嚴重:[http://www.php.net/manual/en/ref.mbstring.php#mbstring.overload mbstring.func_overload] 選項被開啟!\n此選項會導致資料在無法預測的情況下損壞。\n您必須將開選項關閉方可繼續安裝 MediaWiki。", - "config-safe-mode": "警告:PHP 的 [http://www.php.net/features.safe-mode 安全模式] 選項被開啟。它可能會導致檔案上傳與數學函數 math 的問題。", "config-xml-bad": "PHP 缺少的 XML 模組。\nMediaWiki 需要使用此模組中所提供的函數,且在目前的設定下將無法繼續作業。\n您可能需要安裝 php-xml RPM 套件。", "config-pcre-old": "嚴重: 需要使用 PCRE $1 或更新的版本。\n您的 PHP 執行檔使用的是 PCRE $2。\n[https://www.mediawiki.org/wiki/Manual:Errors_and_symptoms/PCRE 詳細資訊]。", "config-pcre-no-utf8": "嚴重: PHP 的 PCRE 模組在編譯時未包含 PCRE_UTF8 支援。\nMediaWiki 需要支援 UTF-8 才可正常運作。", @@ -83,7 +78,6 @@ "config-xcache": "[http://xcache.lighttpd.net/ XCache] 已安裝", "config-apc": "[http://www.php.net/apc APC] 已安裝", "config-wincache": "[http://www.iis.net/download/WinCacheForPhp WinCache] 已安裝", - "config-no-cache": "警告: 找不到 [http://www.php.net/apc APC]、[http://xcache.lighttpd.net/ XCache] 或 [http://www.iis.net/download/WinCacheForPhp WinCache]。\n無法開啟物件快取功能。", "config-mod-security": "警告:您的網頁伺服器已開啟 [http://modsecurity.org/ mod_security] 模組,如果設定不恰當會導致使用者可在 MediaWiki 或其他應用程式發佈任意的內容。\n若您遇到任何問題,請參考 [http://modsecurity.org/documentation/ mod_security 文件] 或聯繫您的伺服器技術支援人員。", "config-diff3-bad": "找不到 GNU diff3。", "config-git": "找到 Git 版本控制軟體:$1。", @@ -202,7 +196,7 @@ "config-ns-generic": "專案", "config-ns-site-name": "同 Wiki 名稱:$1", "config-ns-other": "其他 (請註明)", - "config-ns-other-default": "我的 Wiki", + "config-ns-other-default": "我的 wiki", "config-project-namespace-help": "許多 Wiki 以維基百科(Wikipedia)做為範例將政策頁面從內容頁面抽離,放置在 \"'''專案命名空間'''\" 中。\n所有在此命名空間裡的頁面都會有特定的字首,您可以在此處設定。\n通常這些字首是由該 Wiki 的名稱所衍伸出來,但無法使用標點符號,如 \"#\" 或 \":\"。", "config-ns-invalid": "您指定的命名空間 \"$1\" 無效,\n請指定另一個專案命名空間。", "config-ns-conflict": "您指定的命名空間 \"$1\" 與 MediaWiki 預設的命名空間衝突。\n請指定另一個專案命名空間。", @@ -230,7 +224,7 @@ "config-profile-wiki": "開放式 Wiki", "config-profile-no-anon": "需要註冊帳號", "config-profile-fishbowl": "僅授權的編輯者", - "config-profile-private": "封閉式 Wiki", + "config-profile-private": "私人 wiki", "config-profile-help": "Wiki 最佳的運作方式是盡可能讓大家都可以編輯文件。\n在 MediaWiki,可以很輕易的審查最近做的所有變更動作,並且可以還原由新手或惡意使用者造成的損害。\n\n不論如何,很多人發現 MediaWiki 可以廣泛的運用在各種地方,但並不是很容易可以說服每個人都遵守對 Wiki 有益的方式。\n所以您必須做出以下選擇。\n\n使用 {{int:config-profile-wiki}} 模式,允許所有人編輯文章,包含未匿名使用者。\n使用 {{int:config-profile-no-anon}} 模式,允許所有人編輯文章,不包含未登入的使用者。此模式較能管理所有使用者的言論,但會扼殺臨時使用者的貢獻機會。\n\n使用 {{int:config-profile-fishbowl}} 模式,僅經核准的使用者可以編輯,所有人可以檢視頁面,包含修訂的記錄。\n使用 {{int:config-profile-private}} 模式,僅經核准的使用者可以編輯、檢視頁面。\n\n有關更多複雜的使用者權限設定可在安裝程序結束後設定,請參考 [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:User_rights 相關文件說明]。", "config-license": "版權聲明與授權條款:", "config-license-none": "無授權條款頁腳", diff --git a/includes/jobqueue/Job.php b/includes/jobqueue/Job.php index 48d38d9c49..bbd0ddb5f8 100644 --- a/includes/jobqueue/Job.php +++ b/includes/jobqueue/Job.php @@ -92,6 +92,10 @@ abstract class Job implements IJobSpecification { // expensive jobs may set this to true $this->removeDuplicates = false; + + if ( !isset( $this->params['requestId'] ) ) { + $this->params['requestId'] = WebRequest::getRequestId(); + } } /** @@ -152,6 +156,18 @@ abstract class Job implements IJobSpecification { : null; } + /** + * @return string|null Id of the request that created this job. Follows + * jobs recursively, allowing to track the id of the request that started a + * job when jobs insert jobs which insert other jobs. + * @since 1.27 + */ + public function getRequestId() { + return isset( $this->params['requestId'] ) + ? $this->params['requestId'] + : null; + } + /** * @return int|null UNIX timestamp of when the job was runnable, or null * @since 1.26 @@ -214,6 +230,8 @@ abstract class Job implements IJobSpecification { unset( $info['params']['rootJobTimestamp'] ); // Likewise for jobs with different delay times unset( $info['params']['jobReleaseTimestamp'] ); + // Identical jobs from different requests should count as duplicates + unset( $info['params']['requestId'] ); // Queues pack and hash this array, so normalize the order ksort( $info['params'] ); } @@ -315,14 +333,6 @@ abstract class Job implements IJobSpecification { * @return string */ public function toString() { - $truncFunc = function ( $value ) { - $value = (string)$value; - if ( mb_strlen( $value ) > 1024 ) { - $value = "string(" . mb_strlen( $value ) . ")"; - } - return $value; - }; - $paramString = ''; if ( $this->params ) { foreach ( $this->params as $key => $value ) { @@ -332,14 +342,14 @@ abstract class Job implements IJobSpecification { if ( is_array( $value ) ) { $filteredValue = []; foreach ( $value as $k => $v ) { - if ( is_scalar( $v ) ) { - $filteredValue[$k] = $truncFunc( $v ); + $json = FormatJson::encode( $v ); + if ( $json === false || mb_strlen( $json ) > 512 ) { + $filteredValue[$k] = gettype( $v ) . '(...)'; } else { - $filteredValue = null; - break; + $filteredValue[$k] = $v; } } - if ( $filteredValue && count( $filteredValue ) < 10 ) { + if ( count( $filteredValue ) <= 10 ) { $value = FormatJson::encode( $filteredValue ); } else { $value = "array(" . count( $value ) . ")"; @@ -348,7 +358,12 @@ abstract class Job implements IJobSpecification { $value = "object(" . get_class( $value ) . ")"; } - $paramString .= "$key={$truncFunc( $value )}"; + $flatValue = (string)$value; + if ( mb_strlen( $value ) > 1024 ) { + $flatValue = "string(" . mb_strlen( $value ) . ")"; + } + + $paramString .= "$key={$flatValue}"; } } diff --git a/includes/jobqueue/JobQueue.php b/includes/jobqueue/JobQueue.php index 5b7193856d..d64be3c409 100644 --- a/includes/jobqueue/JobQueue.php +++ b/includes/jobqueue/JobQueue.php @@ -31,18 +31,16 @@ abstract class JobQueue { /** @var string Wiki ID */ protected $wiki; - /** @var string Job type */ protected $type; - /** @var string Job priority for pop() */ protected $order; - /** @var int Time to live in seconds */ protected $claimTTL; - /** @var int Maximum number of times to try a job */ protected $maxTries; + /** @var string|bool Read only rationale (or false if r/w) */ + protected $readOnlyReason; /** @var BagOStuff */ protected $dupCache; @@ -74,6 +72,9 @@ abstract class JobQueue { $this->aggr = isset( $params['aggregator'] ) ? $params['aggregator'] : new JobQueueAggregatorNull( [] ); + $this->readOnlyReason = isset( $params['readOnlyReason'] ) + ? $params['readOnlyReason'] + : false; } /** @@ -96,6 +97,7 @@ abstract class JobQueue { * but not acknowledged as completed after this many seconds. Recycling * of jobs simply means re-inserting them into the queue. Jobs can be * attempted up to three times before being discarded. + * - readOnlyReason : Set this to a string to make the queue read-only. * * Queue classes should throw an exception if they do not support the options given. * @@ -168,6 +170,14 @@ abstract class JobQueue { return $this->supportsDelayedJobs(); } + /** + * @return string|bool Read-only rational or false if r/w + * @since 1.27 + */ + public function getReadOnlyReason() { + return $this->readOnlyReason; + } + /** * Quickly check if the queue has no available (unacquired, non-delayed) jobs. * Queue classes should use caching if they are any slower without memcached. @@ -307,6 +317,8 @@ abstract class JobQueue { * @throws MWException */ final public function batchPush( array $jobs, $flags = 0 ) { + $this->assertNotReadOnly(); + if ( !count( $jobs ) ) { return; // nothing to do } @@ -349,6 +361,7 @@ abstract class JobQueue { final public function pop() { global $wgJobClasses; + $this->assertNotReadOnly(); if ( $this->wiki !== wfWikiID() ) { throw new MWException( "Cannot pop '{$this->type}' job off foreign wiki queue." ); } elseif ( !isset( $wgJobClasses[$this->type] ) ) { @@ -392,9 +405,11 @@ abstract class JobQueue { * @throws MWException */ final public function ack( Job $job ) { + $this->assertNotReadOnly(); if ( $job->getType() !== $this->type ) { throw new MWException( "Got '{$job->getType()}' job; expected '{$this->type}'." ); } + $this->doAck( $job ); } @@ -436,12 +451,12 @@ abstract class JobQueue { * @return bool */ final public function deduplicateRootJob( IJobSpecification $job ) { + $this->assertNotReadOnly(); if ( $job->getType() !== $this->type ) { throw new MWException( "Got '{$job->getType()}' job; expected '{$this->type}'." ); } - $ok = $this->doDeduplicateRootJob( $job ); - return $ok; + return $this->doDeduplicateRootJob( $job ); } /** @@ -524,6 +539,8 @@ abstract class JobQueue { * @return void */ final public function delete() { + $this->assertNotReadOnly(); + $this->doDelete(); } @@ -672,6 +689,15 @@ abstract class JobQueue { return null; // not supported } + /** + * @throws JobQueueReadOnlyError + */ + protected function assertNotReadOnly() { + if ( $this->readOnlyReason !== false ) { + throw new JobQueueReadOnlyError( "Job queue is read-only: {$this->readOnlyReason}" ); + } + } + /** * Call wfIncrStats() for the queue overall and for the queue type * @@ -699,3 +725,7 @@ class JobQueueError extends MWException { class JobQueueConnectionError extends JobQueueError { } + +class JobQueueReadOnlyError extends JobQueueError { + +} diff --git a/includes/jobqueue/JobQueueGroup.php b/includes/jobqueue/JobQueueGroup.php index 8b6c7f08f2..982a3a0a87 100644 --- a/includes/jobqueue/JobQueueGroup.php +++ b/includes/jobqueue/JobQueueGroup.php @@ -36,6 +36,8 @@ class JobQueueGroup { /** @var string Wiki ID */ protected $wiki; + /** @var string|bool Read only rationale (or false if r/w) */ + protected $readOnlyReason; /** @var array Map of (bucket => (queue => JobQueue, types => list of types) */ protected $coalescedQueues; @@ -54,9 +56,11 @@ class JobQueueGroup { /** * @param string $wiki Wiki ID + * @param string|bool $readOnlyReason Read-only reason or false */ - protected function __construct( $wiki ) { + protected function __construct( $wiki, $readOnlyReason ) { $this->wiki = $wiki; + $this->readOnlyReason = $readOnlyReason; $this->cache = new ProcessCacheLRU( 10 ); } @@ -67,7 +71,7 @@ class JobQueueGroup { public static function singleton( $wiki = false ) { $wiki = ( $wiki === false ) ? wfWikiID() : $wiki; if ( !isset( self::$instances[$wiki] ) ) { - self::$instances[$wiki] = new self( $wiki ); + self::$instances[$wiki] = new self( $wiki, wfConfiguredReadOnlyReason() ); } return self::$instances[$wiki]; @@ -98,6 +102,9 @@ class JobQueueGroup { $conf = $conf + $wgJobTypeConf['default']; } $conf['aggregator'] = JobQueueAggregator::singleton(); + if ( $this->readOnlyReason !== false ) { + $conf['readOnlyReason'] = $this->readOnlyReason; + } return JobQueue::factory( $conf ); } diff --git a/includes/jobqueue/JobRunner.php b/includes/jobqueue/JobRunner.php index ef3d61d96e..a2f55b9e04 100644 --- a/includes/jobqueue/JobRunner.php +++ b/includes/jobqueue/JobRunner.php @@ -163,6 +163,8 @@ class JobRunner implements LoggerAwareInterface { $popTime = time(); $jType = $job->getType(); + WebRequest::overrideRequestId( $job->getRequestId() ); + // Back off of certain jobs for a while (for throttling and for errors) $ttw = $this->getBackoffTimeToWait( $job ); if ( $ttw > 0 ) { @@ -506,7 +508,7 @@ class JobRunner implements LoggerAwareInterface { $ms = intval( 1000 * $dbwSerial->pendingWriteQueryDuration() ); $msg = $job->toString() . " COMMIT ENQUEUED [{$ms}ms of writes]"; - $this->logger->warning( $msg ); + $this->logger->info( $msg ); $this->debugCallback( $msg ); // Wait for an exclusive lock to commit diff --git a/includes/jobqueue/JobSpecification.php b/includes/jobqueue/JobSpecification.php index 616c6d6ab9..d636dc6516 100644 --- a/includes/jobqueue/JobSpecification.php +++ b/includes/jobqueue/JobSpecification.php @@ -216,7 +216,7 @@ class JobSpecification implements IJobSpecification { 'opts' => $this->opts, 'title' => [ 'ns' => $this->title->getNamespace(), - 'key' => $this->title->getDbKey() + 'key' => $this->title->getDBkey() ] ]; } diff --git a/includes/jobqueue/jobs/AssembleUploadChunksJob.php b/includes/jobqueue/jobs/AssembleUploadChunksJob.php index bc2f7c458a..16e35f1eab 100644 --- a/includes/jobqueue/jobs/AssembleUploadChunksJob.php +++ b/includes/jobqueue/jobs/AssembleUploadChunksJob.php @@ -69,7 +69,7 @@ class AssembleUploadChunksJob extends Job { $this->params['filekey'], [ 'result' => 'Failure', 'stage' => 'assembling', 'status' => $status ] ); - $this->setLastError( $status->getWikiText() ); + $this->setLastError( $status->getWikiText( false, false, 'en' ) ); return false; } diff --git a/includes/jobqueue/jobs/PublishStashedFileJob.php b/includes/jobqueue/jobs/PublishStashedFileJob.php index a6d2f70f4d..d2825a8b91 100644 --- a/includes/jobqueue/jobs/PublishStashedFileJob.php +++ b/includes/jobqueue/jobs/PublishStashedFileJob.php @@ -92,7 +92,7 @@ class PublishStashedFileJob extends Job { $this->params['filekey'], [ 'result' => 'Failure', 'stage' => 'publish', 'status' => $status ] ); - $this->setLastError( $status->getWikiText() ); + $this->setLastError( $status->getWikiText( false, false, 'en' ) ); return false; } diff --git a/includes/jobqueue/utils/BacklinkJobUtils.php b/includes/jobqueue/utils/BacklinkJobUtils.php index a81cadefc6..7f500554bd 100644 --- a/includes/jobqueue/utils/BacklinkJobUtils.php +++ b/includes/jobqueue/utils/BacklinkJobUtils.php @@ -116,7 +116,7 @@ class BacklinkJobUtils { foreach ( array_chunk( $titles, $cSize ) as $titleBatch ) { $pages = []; foreach ( $titleBatch as $tl ) { - $pages[$tl->getArticleId()] = [ $tl->getNamespace(), $tl->getDBKey() ]; + $pages[$tl->getArticleID()] = [ $tl->getNamespace(), $tl->getDBkey() ]; } $jobs[] = new $class( $title, // maintain parent job title diff --git a/includes/libs/ArrayUtils.php b/includes/libs/ArrayUtils.php index fb35801130..2156bd7f1d 100644 --- a/includes/libs/ArrayUtils.php +++ b/includes/libs/ArrayUtils.php @@ -28,7 +28,7 @@ class ArrayUtils { /** * Sort the given array in a pseudo-random order which depends only on the - * given key and each element value. This is typically used for load + * given key and each element value in $array. This is typically used for load * balancing between servers each with a local cache. * * Keys are preserved. The input array is modified in place. diff --git a/includes/libs/BufferingStatsdDataFactory.php b/includes/libs/BufferingStatsdDataFactory.php deleted file mode 100644 index 9c18b10f10..0000000000 --- a/includes/libs/BufferingStatsdDataFactory.php +++ /dev/null @@ -1,87 +0,0 @@ -prefix = $prefix; - } - - /** - * Normalize a metric key for StatsD - * - * Replace occurences of '::' with dots and any other non-alphanumeric - * characters with underscores. Combine runs of dots or underscores. - * Then trim leading or trailing dots or underscores. - * - * @param string $key - * @since 1.26 - */ - private static function normalizeMetricKey( $key ) { - $key = preg_replace( '/[:.]+/', '.', $key ); - $key = preg_replace( '/[^a-z0-9.]+/i', '_', $key ); - $key = trim( $key, '_.' ); - return str_replace( [ '._', '_.' ], '.', $key ); - } - - public function produceStatsdData( - $key, $value = 1, $metric = StatsdDataInterface::STATSD_METRIC_COUNT - ) { - $entity = $this->produceStatsdDataEntity(); - if ( $key !== null ) { - $key = self::normalizeMetricKey( "{$this->prefix}.{$key}" ); - $entity->setKey( $key ); - } - if ( $value !== null ) { - $entity->setValue( $value ); - } - if ( $metric !== null ) { - $entity->setMetric( $metric ); - } - // Don't bother buffering a counter update with a delta of zero. - if ( !( $metric === StatsdDataInterface::STATSD_METRIC_COUNT && !$value ) ) { - $this->buffer[] = $entity; - } - return $entity; - } - - /** - * @return StatsdData[] - */ - public function getBuffer() { - return $this->buffer; - } -} diff --git a/includes/libs/Cookie.php b/includes/libs/Cookie.php index cc236e289c..a67b919f47 100644 --- a/includes/libs/Cookie.php +++ b/includes/libs/Cookie.php @@ -206,86 +206,3 @@ class Cookie { return $this->isSessionKey || $this->expires > time(); } } - -class CookieJar { - private $cookie = []; - - /** - * Set a cookie in the cookie jar. Make sure only one cookie per-name exists. - * @see Cookie::set() - * @param string $name - * @param string $value - * @param array $attr - */ - public function setCookie( $name, $value, $attr ) { - /* cookies: case insensitive, so this should work. - * We'll still send the cookies back in the same case we got them, though. - */ - $index = strtoupper( $name ); - - if ( isset( $this->cookie[$index] ) ) { - $this->cookie[$index]->set( $value, $attr ); - } else { - $this->cookie[$index] = new Cookie( $name, $value, $attr ); - } - } - - /** - * @see Cookie::serializeToHttpRequest - * @param string $path - * @param string $domain - * @return string - */ - public function serializeToHttpRequest( $path, $domain ) { - $cookies = []; - - foreach ( $this->cookie as $c ) { - $serialized = $c->serializeToHttpRequest( $path, $domain ); - - if ( $serialized ) { - $cookies[] = $serialized; - } - } - - return implode( '; ', $cookies ); - } - - /** - * Parse the content of an Set-Cookie HTTP Response header. - * - * @param string $cookie - * @param string $domain Cookie's domain - * @return null - */ - public function parseCookieResponseHeader( $cookie, $domain ) { - $len = strlen( 'Set-Cookie:' ); - - if ( substr_compare( 'Set-Cookie:', $cookie, 0, $len, true ) === 0 ) { - $cookie = substr( $cookie, $len ); - } - - $bit = array_map( 'trim', explode( ';', $cookie ) ); - - if ( count( $bit ) >= 1 ) { - list( $name, $value ) = explode( '=', array_shift( $bit ), 2 ); - $attr = []; - - foreach ( $bit as $piece ) { - $parts = explode( '=', $piece ); - if ( count( $parts ) > 1 ) { - $attr[strtolower( $parts[0] )] = $parts[1]; - } else { - $attr[strtolower( $parts[0] )] = true; - } - } - - if ( !isset( $attr['domain'] ) ) { - $attr['domain'] = $domain; - } elseif ( !Cookie::validateCookieDomain( $attr['domain'], $domain ) ) { - return null; - } - - $this->setCookie( $name, $value, $attr ); - } - } -} diff --git a/includes/libs/CookieJar.php b/includes/libs/CookieJar.php new file mode 100644 index 0000000000..910a7ca82d --- /dev/null +++ b/includes/libs/CookieJar.php @@ -0,0 +1,103 @@ +cookie[$index] ) ) { + $this->cookie[$index]->set( $value, $attr ); + } else { + $this->cookie[$index] = new Cookie( $name, $value, $attr ); + } + } + + /** + * @see Cookie::serializeToHttpRequest + * @param string $path + * @param string $domain + * @return string + */ + public function serializeToHttpRequest( $path, $domain ) { + $cookies = []; + + foreach ( $this->cookie as $c ) { + $serialized = $c->serializeToHttpRequest( $path, $domain ); + + if ( $serialized ) { + $cookies[] = $serialized; + } + } + + return implode( '; ', $cookies ); + } + + /** + * Parse the content of an Set-Cookie HTTP Response header. + * + * @param string $cookie + * @param string $domain Cookie's domain + * @return null + */ + public function parseCookieResponseHeader( $cookie, $domain ) { + $len = strlen( 'Set-Cookie:' ); + + if ( substr_compare( 'Set-Cookie:', $cookie, 0, $len, true ) === 0 ) { + $cookie = substr( $cookie, $len ); + } + + $bit = array_map( 'trim', explode( ';', $cookie ) ); + + if ( count( $bit ) >= 1 ) { + list( $name, $value ) = explode( '=', array_shift( $bit ), 2 ); + $attr = []; + + foreach ( $bit as $piece ) { + $parts = explode( '=', $piece ); + if ( count( $parts ) > 1 ) { + $attr[strtolower( $parts[0] )] = $parts[1]; + } else { + $attr[strtolower( $parts[0] )] = true; + } + } + + if ( !isset( $attr['domain'] ) ) { + $attr['domain'] = $domain; + } elseif ( !Cookie::validateCookieDomain( $attr['domain'], $domain ) ) { + return null; + } + + $this->setCookie( $name, $value, $attr ); + } + } +} diff --git a/includes/libs/MWMessagePack.php b/includes/libs/MWMessagePack.php index cd9aad8fe4..a9da3660b0 100644 --- a/includes/libs/MWMessagePack.php +++ b/includes/libs/MWMessagePack.php @@ -33,7 +33,7 @@ * @file */ class MWMessagePack { - /** @var boolean|null Whether current system is bigendian. **/ + /** @var bool|null Whether current system is bigendian. **/ public static $bigendian = null; /** diff --git a/includes/libs/StatusValue.php b/includes/libs/StatusValue.php index b4206a21fc..10d4c7135b 100644 --- a/includes/libs/StatusValue.php +++ b/includes/libs/StatusValue.php @@ -58,7 +58,7 @@ class StatusValue { * Factory function for fatal errors * * @param string|MessageSpecifier $message Message key or object - * @return Status + * @return StatusValue */ public static function newFatal( $message /*, parameters...*/ ) { $params = func_get_args(); @@ -71,7 +71,7 @@ class StatusValue { * Factory function for good results * * @param mixed $value - * @return Status + * @return StatusValue */ public static function newGood( $value = null ) { $result = new static(); diff --git a/includes/libs/StringUtils.php b/includes/libs/StringUtils.php index d2226b6daa..6b10c0998b 100644 --- a/includes/libs/StringUtils.php +++ b/includes/libs/StringUtils.php @@ -30,83 +30,28 @@ class StringUtils { * The function check for invalid byte sequences, overlong encoding but * not for different normalisations. * - * This relies internally on the mbstring function mb_check_encoding() - * hardcoded to check against UTF-8. Whenever the function is not available - * we fallback to a pure PHP implementation. Setting $disableMbstring to - * true will skip the use of mb_check_encoding, this is mostly intended for - * unit testing our internal implementation. - * * @note In MediaWiki 1.21, this function did not provide proper UTF-8 validation. * In particular, the pure PHP code path did not in fact check for overlong forms. * Beware of this when backporting code to that version of MediaWiki. * * @since 1.21 * @param string $value String to check - * @param bool $disableMbstring Whether to use the pure PHP - * implementation instead of trying mb_check_encoding. Intended for unit - * testing. Default: false * @return bool Whether the given $value is a valid UTF-8 encoded string */ - static function isUtf8( $value, $disableMbstring = false ) { + static function isUtf8( $value ) { $value = (string)$value; - // If the mbstring extension is loaded, use it. However, before PHP 5.4, values above - // U+10FFFF are incorrectly allowed, so we have to check for them separately. - if ( !$disableMbstring && function_exists( 'mb_check_encoding' ) ) { - static $newPHP; - if ( $newPHP === null ) { - $newPHP = !mb_check_encoding( "\xf4\x90\x80\x80", 'UTF-8' ); - } - - return mb_check_encoding( $value, 'UTF-8' ) && - ( $newPHP || preg_match( "/\xf4[\x90-\xbf]|[\xf5-\xff]/S", $value ) === 0 ); - } - - if ( preg_match( "/[\x80-\xff]/S", $value ) === 0 ) { - // String contains only ASCII characters, has to be valid - return true; + // HHVM 3.4 and older come with an outdated version of libmbfl that + // incorrectly allows values above U+10FFFF, so we have to check + // for them separately. (This issue also exists in PHP 5.3 and + // older, which are no longer supported.) + static $newPHP; + if ( $newPHP === null ) { + $newPHP = !mb_check_encoding( "\xf4\x90\x80\x80", 'UTF-8' ); } - // PCRE implements repetition using recursion; to avoid a stack overflow (and segfault) - // for large input, we check for invalid sequences (<= 5 bytes) rather than valid - // sequences, which can be as long as the input string is. Multiple short regexes are - // used rather than a single long regex for performance. - static $regexes; - if ( $regexes === null ) { - $cont = "[\x80-\xbf]"; - $after = "(?!$cont)"; // "(?:[^\x80-\xbf]|$)" would work here - $regexes = [ - // Continuation byte at the start - "/^$cont/", - - // ASCII byte followed by a continuation byte - "/[\\x00-\x7f]$cont/S", - - // Illegal byte - "/[\xc0\xc1\xf5-\xff]/S", - - // Invalid 2-byte sequence, or valid one then an extra continuation byte - "/[\xc2-\xdf](?!$cont$after)/S", - - // Invalid 3-byte sequence, or valid one then an extra continuation byte - "/\xe0(?![\xa0-\xbf]$cont$after)/", - "/[\xe1-\xec\xee\xef](?!$cont{2}$after)/S", - "/\xed(?![\x80-\x9f]$cont$after)/", - - // Invalid 4-byte sequence, or valid one then an extra continuation byte - "/\xf0(?![\x90-\xbf]$cont{2}$after)/", - "/[\xf1-\xf3](?!$cont{3}$after)/S", - "/\xf4(?![\x80-\x8f]$cont{2}$after)/", - ]; - } - - foreach ( $regexes as $regex ) { - if ( preg_match( $regex, $value ) !== 0 ) { - return false; - } - } - - return true; + return mb_check_encoding( $value, 'UTF-8' ) && + ( $newPHP || preg_match( "/\xf4[\x90-\xbf]|[\xf5-\xff]/S", $value ) === 0 ); } /** @@ -288,6 +233,31 @@ class StringUtils { return $items; } + /** + * More or less "markup-safe" str_replace() + * Ignores any instances of the separator inside `<...>` + * @param string $search + * @param string $replace + * @param string $text + * @return string + */ + static function replaceMarkup( $search, $replace, $text ) { + $placeholder = "\x00"; + + // Remove placeholder instances + $text = str_replace( $placeholder, '', $text ); + + // Replace instances of the separator inside HTML-like tags with the placeholder + $replacer = new DoubleReplacer( $search, $placeholder ); + $cleaned = StringUtils::delimiterReplaceCallback( '<', '>', $replacer->cb(), $text ); + + // Explode, then put the replaced separators back in + $cleaned = str_replace( $search, $replace, $cleaned ); + $text = str_replace( $placeholder, $search, $cleaned ); + + return $text; + } + /** * Escape a string to make it suitable for inclusion in a preg_replace() * replacement parameter. diff --git a/includes/libs/eventrelayer/EventRelayer.php b/includes/libs/eventrelayer/EventRelayer.php index c385c38dfb..b61cae77b7 100644 --- a/includes/libs/eventrelayer/EventRelayer.php +++ b/includes/libs/eventrelayer/EventRelayer.php @@ -55,11 +55,3 @@ abstract class EventRelayer { abstract protected function doNotify( $channel, array $events ); } -/** - * No-op class for publishing messages into a PubSub system - */ -class EventRelayerNull extends EventRelayer { - public function doNotify( $channel, array $events ) { - return true; - } -} diff --git a/includes/libs/eventrelayer/EventRelayerMCRD.php b/includes/libs/eventrelayer/EventRelayerMCRD.php deleted file mode 100644 index 4bcdf123ab..0000000000 --- a/includes/libs/eventrelayer/EventRelayerMCRD.php +++ /dev/null @@ -1,66 +0,0 @@ -baseUrl = $params['mcrdConfig']['url']; - - $httpConfig = isset( $params['httpConfig'] ) ? $params['httpConfig'] : []; - if ( !isset( $httpConfig['connTimeout'] ) ) { - $httpConfig['connTimeout'] = 1; - } - if ( !isset( $httpConfig['reqTimeout'] ) ) { - $httpConfig['reqTimeout'] = .25; - } - - $this->http = new MultiHttpClient( $httpConfig ); - } - - protected function doNotify( $channel, array $events ) { - if ( !count( $events ) ) { - return true; - } - - $response = $this->http->run( [ - 'url' => "{$this->baseUrl}/relayer/api/v1.0/" . rawurlencode( $channel ), - 'method' => 'POST', - 'body' => json_encode( [ 'events' => $events ] ), - 'headers' => [ 'content-type' => 'application/json' ] - ] ); - - return $response['code'] == 201; - } -} diff --git a/includes/libs/eventrelayer/EventRelayerNull.php b/includes/libs/eventrelayer/EventRelayerNull.php new file mode 100644 index 0000000000..b8ec55fc5d --- /dev/null +++ b/includes/libs/eventrelayer/EventRelayerNull.php @@ -0,0 +1,29 @@ +lastRelayError = self::ERR_NONE; } + /** + * Clear the in-process caches; useful for testing + * + * @since 1.27 + */ + public function clearProcessCache() { + $this->procCache->clear(); + } + /** * Do the actual async bus purge of a key * diff --git a/includes/libs/stats/BufferingStatsdDataFactory.php b/includes/libs/stats/BufferingStatsdDataFactory.php new file mode 100644 index 0000000000..9c18b10f10 --- /dev/null +++ b/includes/libs/stats/BufferingStatsdDataFactory.php @@ -0,0 +1,87 @@ +prefix = $prefix; + } + + /** + * Normalize a metric key for StatsD + * + * Replace occurences of '::' with dots and any other non-alphanumeric + * characters with underscores. Combine runs of dots or underscores. + * Then trim leading or trailing dots or underscores. + * + * @param string $key + * @since 1.26 + */ + private static function normalizeMetricKey( $key ) { + $key = preg_replace( '/[:.]+/', '.', $key ); + $key = preg_replace( '/[^a-z0-9.]+/i', '_', $key ); + $key = trim( $key, '_.' ); + return str_replace( [ '._', '_.' ], '.', $key ); + } + + public function produceStatsdData( + $key, $value = 1, $metric = StatsdDataInterface::STATSD_METRIC_COUNT + ) { + $entity = $this->produceStatsdDataEntity(); + if ( $key !== null ) { + $key = self::normalizeMetricKey( "{$this->prefix}.{$key}" ); + $entity->setKey( $key ); + } + if ( $value !== null ) { + $entity->setValue( $value ); + } + if ( $metric !== null ) { + $entity->setMetric( $metric ); + } + // Don't bother buffering a counter update with a delta of zero. + if ( !( $metric === StatsdDataInterface::STATSD_METRIC_COUNT && !$value ) ) { + $this->buffer[] = $entity; + } + return $entity; + } + + /** + * @return StatsdData[] + */ + public function getBuffer() { + return $this->buffer; + } +} diff --git a/includes/libs/stats/NullStatsdDataFactory.php b/includes/libs/stats/NullStatsdDataFactory.php new file mode 100644 index 0000000000..3b272e216e --- /dev/null +++ b/includes/libs/stats/NullStatsdDataFactory.php @@ -0,0 +1,111 @@ +setKey( $key ); + $data->setValue( $value ); + $data->setMetric( $metric ); + return $data; + } + +} diff --git a/includes/libs/stats/StatsdAwareInterface.php b/includes/libs/stats/StatsdAwareInterface.php new file mode 100644 index 0000000000..b0b941ae66 --- /dev/null +++ b/includes/libs/stats/StatsdAwareInterface.php @@ -0,0 +1,21 @@ + VirtualRESTService) */ + /** @var VirtualRESTService[] Map of (prefix => VirtualRESTService) */ protected $instances = []; const VALID_MOUNT_REGEX = '#^/[0-9a-z]+/([0-9a-z]+/)*$#'; diff --git a/includes/logging/BlockLogFormatter.php b/includes/logging/BlockLogFormatter.php index aa90d1d369..21e40ec5fa 100644 --- a/includes/logging/BlockLogFormatter.php +++ b/includes/logging/BlockLogFormatter.php @@ -58,7 +58,8 @@ class BlockLogFormatter extends LogFormatter { // is shown on the correct side of the tooltip text. $durationTooltip = '‎' . htmlspecialchars( $params[4] ); $params[4] = Message::rawParam( "" . - $this->context->getLanguage()->translateBlockExpiry( $params[4] ) . '' ); + $this->context->getLanguage()->translateBlockExpiry( $params[4], + $this->context->getUser() ) . '' ); $params[5] = isset( $params[5] ) ? self::formatBlockFlags( $params[5], $this->context->getLanguage() ) : ''; } diff --git a/includes/logging/LogEntry.php b/includes/logging/LogEntry.php index 1d0a54361f..20d0217baa 100644 --- a/includes/logging/LogEntry.php +++ b/includes/logging/LogEntry.php @@ -428,6 +428,9 @@ class ManualLogEntry extends LogEntryBase { /** @var int ID of the log entry */ protected $id; + /** @var Can this log entry be patrolled? */ + protected $isPatrollable = false; + /** @var bool Whether this is a legacy log entry */ protected $legacy = false; @@ -545,6 +548,19 @@ class ManualLogEntry extends LogEntryBase { $this->tags = $tags; } + /** + * Set whether this log entry should be made patrollable + * This shouldn't depend on config, only on whether there is full support + * in the software for patrolling this log entry. + * False by default + * + * @since 1.27 + * @param bool $patrollable + */ + public function setIsPatrollable( $patrollable ) { + $this->isPatrollable = (bool)$patrollable; + } + /** * Set the 'legacy' flag * @@ -679,7 +695,8 @@ class ManualLogEntry extends LogEntryBase { LogEntryBase::makeParamBlob( $this->getParameters() ), $newId, $formatter->getIRCActionComment(), // Used for IRC feeds - $this->getAssociatedRevId() // Used for e.g. moves and uploads + $this->getAssociatedRevId(), // Used for e.g. moves and uploads + $this->getIsPatrollable() ); } @@ -706,8 +723,8 @@ class ManualLogEntry extends LogEntryBase { $rc->notifyRCFeeds(); } - // Log the autopatrol if an associated rev id was passed - if ( $this->getAssociatedRevId() > 0 && + // Log the autopatrol if the log entry is patrollable + if ( $this->getIsPatrollable() && $rc->getAttribute( 'rc_patrolled' ) === 1 ) { PatrolLog::record( $rc, true, $this->getPerformer() ); } @@ -775,6 +792,16 @@ class ManualLogEntry extends LogEntryBase { return $this->tags; } + /** + * Whether this log entry is patrollable + * + * @since 1.27 + * @return bool + */ + public function getIsPatrollable() { + return $this->isPatrollable; + } + /** * @since 1.25 * @return bool diff --git a/includes/logging/LogEventsList.php b/includes/logging/LogEventsList.php index c96c0dbf0c..da5527eb9a 100644 --- a/includes/logging/LogEventsList.php +++ b/includes/logging/LogEventsList.php @@ -40,6 +40,11 @@ class LogEventsList extends ContextSource { */ protected $showTagEditUI; + /** + * @var array + */ + protected $allowedActions = null; + /** * Constructor. * The first two parameters used to be $skin and $out, but now only a context @@ -74,9 +79,10 @@ class LogEventsList extends ContextSource { * @param int $month Month * @param array $filter * @param string $tagFilter Tag to select by default + * @param string $action */ public function showOptions( $types = [], $user = '', $page = '', $pattern = '', $year = 0, - $month = 0, $filter = null, $tagFilter = '' + $month = 0, $filter = null, $tagFilter = '', $action = null ) { global $wgScript, $wgMiserMode; @@ -113,6 +119,11 @@ class LogEventsList extends ContextSource { $html .= Xml::tags( 'p', null, $this->getFilterLinks( $filter ) ); } + // Action filter + if ( $action !== null ) { + $html .= Xml::tags( 'p', null, $this->getActionSelector( $types, $action ) ); + } + // Submit button $html .= Xml::submitButton( $this->msg( 'logeventslist-submit' )->text() ); @@ -184,7 +195,7 @@ class LogEventsList extends ContextSource { $selector = $this->getTypeSelector(); $selector->setDefault( $queryType ); - return $selector->getHtml(); + return $selector->getHTML(); } /** @@ -287,6 +298,41 @@ class LogEventsList extends ContextSource { return ''; } + /** + * Drop down menu for selection of actions that can be used to filter the log + * @param array $types + * @param string $action + * @return string + * @since 1.27 + */ + private function getActionSelector( $types, $action ) { + if ( $this->allowedActions === null || !count( $this->allowedActions ) ) { + return ''; + } + $html = ''; + $html .= xml::label( wfMessage( 'log-action-filter-' . $types[0] )->text(), + 'action-filter-' .$types[0] ) . "\n"; + $select = new XmlSelect( 'subtype' ); + $select->addOption( wfMessage( 'log-action-filter-all' )->text(), '' ); + foreach ( $this->allowedActions as $value ) { + $msgKey = 'log-action-filter-' . $types[0] . '-' . $value; + $select->addOption( wfMessage( $msgKey )->text(), $value ); + } + $select->setDefault( $action ); + $html .= $select->getHtml(); + return $html; + } + + /** + * Sets the action types allowed for log filtering + * To one action type may correspond several log_actions + * @param array $actions + * @since 1.27 + */ + public function setAllowedActions( $actions ) { + $this->allowedActions = $actions; + } + /** * @return string */ diff --git a/includes/logging/LogPager.php b/includes/logging/LogPager.php index 11ae5d636a..3d04641c73 100644 --- a/includes/logging/LogPager.php +++ b/includes/logging/LogPager.php @@ -42,6 +42,9 @@ class LogPager extends ReverseChronologicalPager { /** @var string */ private $typeCGI = ''; + /** @var string */ + private $action = ''; + /** @var LogEventsList */ public $mLogEventsList; @@ -57,9 +60,12 @@ class LogPager extends ReverseChronologicalPager { * @param int|bool $year The year to start from. Default: false * @param int|bool $month The month to start from. Default: false * @param string $tagFilter Tag + * @param string $action Specific action (subtype) requested */ - public function __construct( $list, $types = [], $performer = '', $title = '', $pattern = '', - $conds = [], $year = false, $month = false, $tagFilter = '' ) { + public function __construct( $list, $types = [], $performer = '', $title = '', + $pattern = '', $conds = [], $year = false, $month = false, $tagFilter = '', + $action = '' + ) { parent::__construct( $list->getContext() ); $this->mConds = $conds; @@ -68,6 +74,7 @@ class LogPager extends ReverseChronologicalPager { $this->limitType( $types ); // also excludes hidden types $this->limitPerformer( $performer ); $this->limitTitle( $title, $pattern ); + $this->limitAction( $action ); $this->getDateCond( $year, $month ); $this->mTagFilter = $tagFilter; @@ -209,7 +216,7 @@ class LogPager extends ReverseChronologicalPager { $doUserRightsLogLike = false; if ( $this->types == [ 'rights' ] ) { - $parts = explode( $wgUserrightsInterwikiDelimiter, $title->getDBKey() ); + $parts = explode( $wgUserrightsInterwikiDelimiter, $title->getDBkey() ); if ( count( $parts ) == 2 ) { list( $name, $database ) = array_map( 'trim', $parts ); if ( strstr( $database, '*' ) ) { // Search for wildcard in database name @@ -256,6 +263,31 @@ class LogPager extends ReverseChronologicalPager { } } + /** + * Set the log_action field to a specified value (or values) + * + * @param string $action + */ + private function limitAction( $action ) { + global $wgActionFilteredLogs; + // Allow to filter the log by actions + $type = $this->typeCGI; + if ( $type === '' ) { + // nothing to do + return; + } + $actions = $wgActionFilteredLogs; + if ( isset( $actions[$type] ) ) { + // log type can be filtered by actions + $this->mLogEventsList->setAllowedActions( array_keys( $actions[$type] ) ); + if ( $action !== '' && isset( $actions[$type][$action] ) ) { + // add condition to query + $this->mConds['log_action'] = $actions[$type][$action]; + $this->action = $action; + } + } + } + /** * Constructs the most part of the query. Extra conditions are sprinkled in * all over this class. @@ -352,6 +384,8 @@ class LogPager extends ReverseChronologicalPager { } /** + * Guaranteed to either return a valid title string or a Zero-Length String + * * @return string */ public function getPerformer() { @@ -381,6 +415,10 @@ class LogPager extends ReverseChronologicalPager { return $this->mTagFilter; } + public function getAction() { + return $this->action; + } + public function doQuery() { // Workaround MySQL optimizer bug $this->mDb->setBigSelects(); diff --git a/includes/logging/PatrolLog.php b/includes/logging/PatrolLog.php index f6ecc501a3..d1de2cd3ae 100644 --- a/includes/logging/PatrolLog.php +++ b/includes/logging/PatrolLog.php @@ -58,7 +58,9 @@ class PatrolLog { $user = $wgUser; } - $entry = new ManualLogEntry( 'patrol', 'patrol' ); + $action = $auto ? 'autopatrol' : 'patrol'; + + $entry = new ManualLogEntry( 'patrol', $action ); $entry->setTarget( $rc->getTitle() ); $entry->setParameters( self::buildParams( $rc, $auto ) ); $entry->setPerformer( $user ); diff --git a/includes/logging/PatrolLogFormatter.php b/includes/logging/PatrolLogFormatter.php index e6f9fb64cd..5b933ce269 100644 --- a/includes/logging/PatrolLogFormatter.php +++ b/includes/logging/PatrolLogFormatter.php @@ -30,11 +30,11 @@ */ class PatrolLogFormatter extends LogFormatter { protected function getMessageKey() { - $key = parent::getMessageKey(); $params = $this->getMessageParameters(); if ( isset( $params[5] ) && $params[5] ) { - // Messages: logentry-patrol-patrol-auto - $key .= '-auto'; + $key = 'logentry-patrol-patrol-auto'; + } else { + $key = 'logentry-patrol-patrol'; } return $key; diff --git a/includes/logging/RightsLogFormatter.php b/includes/logging/RightsLogFormatter.php index b9dfb6c044..1fd4b7f364 100644 --- a/includes/logging/RightsLogFormatter.php +++ b/includes/logging/RightsLogFormatter.php @@ -33,12 +33,19 @@ class RightsLogFormatter extends LogFormatter { global $wgContLang, $wgUserrightsInterwikiDelimiter; if ( !$this->plaintext ) { - $text = $wgContLang->ucfirst( $title->getText() ); + $text = $wgContLang->ucfirst( $title->getDBkey() ); $parts = explode( $wgUserrightsInterwikiDelimiter, $text, 2 ); if ( count( $parts ) === 2 ) { - $titleLink = WikiMap::foreignUserLink( $parts[1], $parts[0], - htmlspecialchars( $title->getText() ) ); + $titleLink = WikiMap::foreignUserLink( + $parts[1], + $parts[0], + htmlspecialchars( + strtr( $parts[0], '_', ' ' ) . + $wgUserrightsInterwikiDelimiter . + $parts[1] + ) + ); if ( $titleLink !== false ) { return $titleLink; diff --git a/includes/mail/EmailNotification.php b/includes/mail/EmailNotification.php index 4f8f6b3da1..fe24c34ac2 100644 --- a/includes/mail/EmailNotification.php +++ b/includes/mail/EmailNotification.php @@ -155,7 +155,7 @@ class EmailNotification { $title, [ 'editor' => $editor->getName(), - 'editorID' => $editor->getID(), + 'editorID' => $editor->getId(), 'timestamp' => $timestamp, 'summary' => $summary, 'minorEdit' => $minorEdit, @@ -232,7 +232,7 @@ class EmailNotification { if ( $watchingUser->getOption( 'enotifwatchlistpages' ) && ( !$minorEdit || $watchingUser->getOption( 'enotifminoredits' ) ) && $watchingUser->isEmailConfirmed() - && $watchingUser->getID() != $userTalkId + && $watchingUser->getId() != $userTalkId && !in_array( $watchingUser->getName(), $wgUsersNotifiedOnAllChanges ) && !( $wgBlockDisablesLogin && $watchingUser->isBlocked() ) ) { diff --git a/includes/mail/UserMailer.php b/includes/mail/UserMailer.php index 1c7fb9857b..1059d7bce2 100644 --- a/includes/mail/UserMailer.php +++ b/includes/mail/UserMailer.php @@ -107,9 +107,6 @@ class UserMailer { * 'contentType' string default 'text/plain; charset=UTF-8' * 'headers' array Extra headers to set * - * Previous versions of this function had $replyto as the 5th argument and $contentType - * as the 6th. These are still supported for backwards compatability, but deprecated. - * * @throws MWException * @throws Exception * @return Status @@ -117,14 +114,6 @@ class UserMailer { public static function send( $to, $from, $subject, $body, $options = [] ) { global $wgAllowHTMLEmail; - if ( !is_array( $options ) ) { - // Old calling style - wfDeprecated( __METHOD__ . ' with $replyto as 5th parameter', '1.26' ); - $options = [ 'replyTo' => $options ]; - if ( func_num_args() === 6 ) { - $options['contentType'] = func_get_arg( 5 ); - } - } if ( !isset( $options['contentType'] ) ) { $options['contentType'] = 'text/plain; charset=UTF-8'; } diff --git a/includes/media/Bitmap.php b/includes/media/Bitmap.php index b055d16fc0..4da41c8de4 100644 --- a/includes/media/Bitmap.php +++ b/includes/media/Bitmap.php @@ -115,7 +115,7 @@ class BitmapHandler extends TransformationalImageHandler { protected function transformImageMagick( $image, $params ) { # use ImageMagick global $wgSharpenReductionThreshold, $wgSharpenParameter, $wgMaxAnimatedGifArea, - $wgImageMagickTempDir, $wgImageMagickConvertCommand, $wgMaxInterlacingAreas; + $wgImageMagickTempDir, $wgImageMagickConvertCommand; $quality = []; $sharpen = []; diff --git a/includes/media/Bitmap_ClientOnly.php b/includes/media/Bitmap_ClientOnly.php index b91fb8aa67..56b20acba5 100644 --- a/includes/media/Bitmap_ClientOnly.php +++ b/includes/media/Bitmap_ClientOnly.php @@ -55,6 +55,6 @@ class BitmapHandler_ClientOnly extends BitmapHandler { return new TransformParameterError( $params ); } - return new ThumbnailImage( $image, $image->getURL(), $image->getLocalRefPath(), $params ); + return new ThumbnailImage( $image, $image->getUrl(), $image->getLocalRefPath(), $params ); } } diff --git a/includes/media/DjVu.php b/includes/media/DjVu.php index d4ef8a875e..9add138da0 100644 --- a/includes/media/DjVu.php +++ b/includes/media/DjVu.php @@ -393,25 +393,24 @@ class DjVuHandler extends ImageHandler { } protected function getDimensionInfo( File $file ) { - $that = $this; - - return ObjectCache::getMainWANInstance()->getWithSetCallback( - wfMemcKey( 'file-djvu', 'dimensions', $file->getSha1() ), - WANObjectCache::TTL_INDEFINITE, - function () use ( $that, $file ) { - $tree = $that->getMetaTree( $file ); + $cache = ObjectCache::getMainWANInstance(); + return $cache->getWithSetCallback( + $cache->makeKey( 'file-djvu', 'dimensions', $file->getSha1() ), + $cache::TTL_INDEFINITE, + function () use ( $file ) { + $tree = $this->getMetaTree( $file ); if ( !$tree ) { return false; } $dimsByPage = []; $count = count( $tree->xpath( '//OBJECT' ) ); - for ( $i = 0; $i < $count; ++$i ) { + for ( $i = 0; $i < $count; $i++ ) { $o = $tree->BODY[0]->OBJECT[$i]; if ( $o ) { $dimsByPage[$i] = [ 'width' => (int)$o['width'], - 'height' => (int)$o['height'] + 'height' => (int)$o['height'], ]; } else { $dimsByPage[$i] = false; @@ -419,7 +418,8 @@ class DjVuHandler extends ImageHandler { } return [ 'pageCount' => $count, 'dimensionsByPage' => $dimsByPage ]; - } + }, + [ 'pcTTL' => $cache::TTL_INDEFINITE ] ); } diff --git a/includes/media/Exif.php b/includes/media/Exif.php index 11178f42cc..95fa8594fc 100644 --- a/includes/media/Exif.php +++ b/includes/media/Exif.php @@ -174,8 +174,8 @@ class Exif { # Tags relating to image configuration 'ComponentsConfiguration' => Exif::UNDEFINED, # Meaning of each component #p33 'CompressedBitsPerPixel' => Exif::RATIONAL, # Image compression mode - 'PixelYDimension' => Exif::SHORT_OR_LONG, # Valid image width - 'PixelXDimension' => Exif::SHORT_OR_LONG, # Valid image height + 'PixelYDimension' => Exif::SHORT_OR_LONG, # Valid image height + 'PixelXDimension' => Exif::SHORT_OR_LONG, # Valid image width # Tags relating to related user information 'MakerNote' => Exif::IGNORE, # Manufacturer notes diff --git a/includes/media/MediaTransformOutput.php b/includes/media/MediaTransformOutput.php index 9a6547f2aa..9176b54666 100644 --- a/includes/media/MediaTransformOutput.php +++ b/includes/media/MediaTransformOutput.php @@ -395,7 +395,7 @@ class ThumbnailImage extends MediaTransformOutput { $query ); } elseif ( !empty( $options['file-link'] ) ) { - $linkAttribs = [ 'href' => $this->file->getURL() ]; + $linkAttribs = [ 'href' => $this->file->getUrl() ]; } else { $linkAttribs = false; if ( !empty( $options['title'] ) ) { diff --git a/includes/media/SVG.php b/includes/media/SVG.php index 7e77b25be3..2bb6d139f2 100644 --- a/includes/media/SVG.php +++ b/includes/media/SVG.php @@ -468,7 +468,7 @@ class SvgHandler extends ImageHandler { return ( $value > 0 ); } elseif ( $name == 'lang' ) { // Validate $code - if ( $value === '' || !Language::isValidBuiltinCode( $value ) ) { + if ( $value === '' || !Language::isValidBuiltInCode( $value ) ) { wfDebug( "Invalid user language code\n" ); return false; diff --git a/includes/media/SVGMetadataExtractor.php b/includes/media/SVGMetadataExtractor.php index f777230e39..62b5c2c01c 100644 --- a/includes/media/SVGMetadataExtractor.php +++ b/includes/media/SVGMetadataExtractor.php @@ -229,7 +229,7 @@ class SVGReader { } // @todo Find and store type of xml snippet. metadata['metadataType'] = "rdf" if ( method_exists( $this->reader, 'readInnerXML' ) ) { - $this->metadata[$metafield] = trim( $this->reader->readInnerXML() ); + $this->metadata[$metafield] = trim( $this->reader->readInnerXml() ); } else { throw new MWException( "The PHP XMLReader extension does not come " . "with readInnerXML() method. Your libxml is probably out of " . diff --git a/includes/media/TransformationalImageHandler.php b/includes/media/TransformationalImageHandler.php index f6483a15fb..f1f21616db 100644 --- a/includes/media/TransformationalImageHandler.php +++ b/includes/media/TransformationalImageHandler.php @@ -335,7 +335,7 @@ abstract class TransformationalImageHandler extends ImageHandler { 'height' => $scalerParams['clientHeight'] ]; - return new ThumbnailImage( $image, $image->getURL(), null, $params ); + return new ThumbnailImage( $image, $image->getUrl(), null, $params ); } /** diff --git a/includes/media/WebP.php b/includes/media/WebP.php index 8fda7511b7..35e885f1ca 100644 --- a/includes/media/WebP.php +++ b/includes/media/WebP.php @@ -63,9 +63,9 @@ class WebPHandler extends BitmapHandler { return self::METADATA_GOOD; } - wfSuppressWarnings(); + MediaWiki\suppressWarnings(); $data = unserialize( $metadata ); - wfRestoreWarnings(); + MediaWiki\restoreWarnings(); if ( !$data || !is_array( $data ) ) { wfDebug( __METHOD__ . " invalid WebP metadata\n" ); @@ -154,7 +154,7 @@ class WebPHandler extends BitmapHandler { /** * Decodes a lossy chunk header * @param string $header Header string - * @return boolean|array See WebPHandler::decodeHeader + * @return bool|array See WebPHandler::decodeHeader */ protected static function decodeLossyChunkHeader( $header ) { // Bytes 0-3 are 'VP8 ' @@ -180,7 +180,7 @@ class WebPHandler extends BitmapHandler { /** * Decodes a lossless chunk header * @param string $header Header string - * @return boolean|array See WebPHandler::decodeHeader + * @return bool|array See WebPHandler::decodeHeader */ public static function decodeLosslessChunkHeader( $header ) { // Bytes 0-3 are 'VP8L' @@ -205,7 +205,7 @@ class WebPHandler extends BitmapHandler { /** * Decodes an extended chunk header * @param string $header Header string - * @return boolean|array See WebPHandler::decodeHeader + * @return bool|array See WebPHandler::decodeHeader */ public static function decodeExtendedChunkHeader( $header ) { // Bytes 0-3 are 'VP8X' @@ -234,9 +234,9 @@ class WebPHandler extends BitmapHandler { $metadata = $file->getMetadata(); } - wfSuppressWarnings(); + MediaWiki\suppressWarnings(); $metadata = unserialize( $metadata ); - wfRestoreWarnings(); + MediaWiki\restoreWarnings(); if ( $metadata == false ) { return false; diff --git a/includes/media/XCF.php b/includes/media/XCF.php index 526b45ef6a..6ac675e8fb 100644 --- a/includes/media/XCF.php +++ b/includes/media/XCF.php @@ -155,7 +155,7 @@ class XCFHandler extends BitmapHandler { * @return string */ public function getMetadata( $file, $filename ) { - $header = self::getXCFMetadata( $filename ); + $header = self::getXCFMetaData( $filename ); $metadata = []; if ( $header ) { // Try to be consistent with the names used by PNG files. diff --git a/includes/objectcache/SqlBagOStuff.php b/includes/objectcache/SqlBagOStuff.php index 39450941e3..a1394c13f8 100644 --- a/includes/objectcache/SqlBagOStuff.php +++ b/includes/objectcache/SqlBagOStuff.php @@ -27,10 +27,10 @@ * @ingroup Cache */ class SqlBagOStuff extends BagOStuff { - /** @var array */ + /** @var array[] (server index => server config) */ protected $serverInfos; - /** @var array */ - protected $serverNames; + /** @var string[] (server index => tag/host name) */ + protected $serverTags; /** @var int */ protected $numServers; /** @var int */ @@ -58,9 +58,12 @@ class SqlBagOStuff extends BagOStuff { * - server: A server info structure in the format required by each * element in $wgDBServers. * - * - servers: An array of server info structures describing a set of - * database servers to distribute keys to. If this is - * specified, the "server" option will be ignored. + * - servers: An array of server info structures describing a set of database servers + * to distribute keys to. If this is specified, the "server" option will be + * ignored. If string keys are used, then they will be used for consistent + * hashing *instead* of the host name (from the server config). This is useful + * when a cluster is replicated to another site (with different host names) + * but each server has a corresponding replica in the other cluster. * * - purgePeriod: The average number of object cache requests in between * garbage collection operations, where expired entries @@ -89,11 +92,18 @@ class SqlBagOStuff extends BagOStuff { public function __construct( $params ) { parent::__construct( $params ); if ( isset( $params['servers'] ) ) { - $this->serverInfos = $params['servers']; - $this->numServers = count( $this->serverInfos ); - $this->serverNames = []; - foreach ( $this->serverInfos as $i => $info ) { - $this->serverNames[$i] = isset( $info['host'] ) ? $info['host'] : "#$i"; + $this->serverInfos = []; + $this->serverTags = []; + $this->numServers = count( $params['servers'] ); + $index = 0; + foreach ( $params['servers'] as $tag => $info ) { + $this->serverInfos[$index] = $info; + if ( is_string( $tag ) ) { + $this->serverTags[$index] = $tag; + } else { + $this->serverTags[$index] = isset( $info['host'] ) ? $info['host'] : "#$index"; + } + ++$index; } } elseif ( isset( $params['server'] ) ) { $this->serverInfos = [ $params['server'] ]; @@ -180,7 +190,7 @@ class SqlBagOStuff extends BagOStuff { $tableIndex = 0; } if ( $this->numServers > 1 ) { - $sortedServers = $this->serverNames; + $sortedServers = $this->serverTags; ArrayUtils::consistentHashSort( $sortedServers, $key ); reset( $sortedServers ); $serverIndex = key( $sortedServers ); diff --git a/includes/page/Article.php b/includes/page/Article.php index f6b490ae3d..6c42e3427e 100644 --- a/includes/page/Article.php +++ b/includes/page/Article.php @@ -225,7 +225,7 @@ class Article implements Page { */ protected function getContentObject() { - if ( $this->mPage->getID() === 0 ) { + if ( $this->mPage->getId() === 0 ) { # If this is a MediaWiki:x message, then load the messages # and return the message value for x. if ( $this->getTitle()->getNamespace() == NS_MEDIAWIKI ) { @@ -282,7 +282,7 @@ class Article implements Page { $this->mRevision = Revision::newFromId( $oldid ); if ( $this->mRevision !== null ) { // Revision title doesn't match the page title given? - if ( $this->mPage->getID() != $this->mRevision->getPage() ) { + if ( $this->mPage->getId() != $this->mRevision->getPage() ) { $function = [ get_class( $this->mPage ), 'newFromID' ]; $this->mPage = call_user_func( $function, $this->mRevision->getPage() ); } @@ -768,7 +768,7 @@ class Article implements Page { ->params( $oldid ) ->numParams( 1 ) ->parseAsBlock(); - $this->getContext()->getOutput()->addHtml( $msg ); + $this->getContext()->getOutput()->addHTML( $msg ); return; } @@ -863,7 +863,7 @@ class Article implements Page { } } - if ( $this->mPage->getID() === 0 || $this->getOldID() ) { + if ( $this->mPage->getId() === 0 || $this->getOldID() ) { # Non-articles (special pages etc), and old revisions return [ 'index' => 'noindex', @@ -1445,7 +1445,7 @@ class Article implements Page { $outputPage->addSubtitle( "
" . $context->msg( $infomsg, $td ) ->rawParams( $userlinks ) - ->params( $revision->getID(), $tddate, $tdtime, $revision->getUserText() ) + ->params( $revision->getId(), $tddate, $tdtime, $revision->getUserText() ) ->rawParams( Linker::revComment( $revision, true, true ) ) ->parse() . "
" @@ -1572,9 +1572,8 @@ class Article implements Page { $title, htmlspecialchars( $title->getFullText() ), [], - // Automatically append redirect=no to each link, since most of them are - // redirect pages themselves. - [ 'redirect' => 'no' ], + // Make sure wiki page redirects are not followed + $title->isRedirect() ? [ 'redirect' => 'no' ] : [], ( $forceKnown ? [ 'known', 'noclasses' ] : [] ) ) . ''; } @@ -1644,6 +1643,7 @@ class Article implements Page { $title = $this->getTitle(); $context = $this->getContext(); $user = $context->getUser(); + $request = $context->getRequest(); # Check permissions $permissionErrors = $title->getUserPermissionsErrors( 'delete', $user ); @@ -1657,7 +1657,9 @@ class Article implements Page { } # Better double-check that it hasn't been deleted yet! - $this->mPage->loadPageData( 'fromdbmaster' ); + $this->mPage->loadPageData( + $request->wasPosted() ? WikiPage::READ_LATEST : WikiPage::READ_NORMAL + ); if ( !$this->mPage->exists() ) { $deleteLogPage = new LogPage( 'delete' ); $outputPage = $context->getOutput(); @@ -1677,7 +1679,6 @@ class Article implements Page { return; } - $request = $context->getRequest(); $deleteReasonList = $request->getText( 'wpDeleteReasonList', 'other' ); $deleteReason = $request->getText( 'wpReason' ); @@ -1961,7 +1962,7 @@ class Article implements Page { $cacheable = false; if ( HTMLFileCache::useFileCache( $this->getContext() ) ) { - $cacheable = $this->mPage->getID() + $cacheable = $this->mPage->getId() && !$this->mRedirectedFrom && !$this->getTitle()->isRedirect(); // Extension may have reason to disable file caching on some pages. if ( $cacheable ) { @@ -2378,15 +2379,6 @@ class Article implements Page { return $this->mPage->getUndoContent( $undo, $undoafter ); } - /** - * Call to WikiPage function for backwards compatibility. - * @see WikiPage::getUndoText - */ - public function getUndoText( Revision $undo, Revision $undoafter = null ) { - ContentHandler::deprecated( __METHOD__, '1.21' ); - return $this->mPage->getUndoText( $undo, $undoafter ); - } - /** * Call to WikiPage function for backwards compatibility. * @see WikiPage::getUser @@ -2549,19 +2541,6 @@ class Article implements Page { return $this->mPage->protectDescriptionLog( $limit, $expiry ); } - /** - * Call to WikiPage function for backwards compatibility. - * @see WikiPage::replaceSection - */ - public function replaceSection( $sectionId, $text, $sectionTitle = '', - $edittime = null - ) { - ContentHandler::deprecated( __METHOD__, '1.21' ); - return $this->mPage->replaceSection( $sectionId, $text, $sectionTitle, - $edittime - ); - } - /** * Call to WikiPage function for backwards compatibility. * @see WikiPage::replaceSectionAtRev diff --git a/includes/page/ImagePage.php b/includes/page/ImagePage.php index e569762f43..106911c5fe 100644 --- a/includes/page/ImagePage.php +++ b/includes/page/ImagePage.php @@ -160,7 +160,7 @@ class ImagePage extends Article { } # No need to display noarticletext, we use our own message, output in openShowImage() - if ( $this->mPage->getID() ) { + if ( $this->mPage->getId() ) { # NS_FILE is in the user language, but this section (the actual wikitext) # should be in page content language $pageLang = $this->getTitle()->getPageViewLanguage(); @@ -299,7 +299,7 @@ class ImagePage extends Article { */ public function getContentObject() { $this->loadFile(); - if ( $this->mPage->getFile() && !$this->mPage->getFile()->isLocal() && 0 == $this->getID() ) { + if ( $this->mPage->getFile() && !$this->mPage->getFile()->isLocal() && 0 == $this->getId() ) { return null; } return parent::getContentObject(); @@ -565,7 +565,7 @@ EOT if ( is_null( $currentLanguage ) ) { $currentLanguage = $defaultLang; } - $out->addHtml( $this->doRenderLangOpt( $renderLangOptions, $currentLanguage, $defaultLang ) ); + $out->addHTML( $this->doRenderLangOpt( $renderLangOptions, $currentLanguage, $defaultLang ) ); } // Add cannot animate thumbnail warning @@ -592,7 +592,7 @@ EOT } } else { # Image does not exist - if ( !$this->getID() ) { + if ( !$this->getId() ) { # No article exists either # Show deletion log to be consistent with normal articles LogEventsList::showLogExtract( @@ -623,7 +623,7 @@ EOT // by Article::View(). $out->setRobotPolicy( 'noindex,nofollow' ); $out->wrapWikiMsg( "", $nofile ); - if ( !$this->getID() && $wgSend404Code ) { + if ( !$this->getId() && $wgSend404Code ) { // If there is no image, no shared image, and no description page, // output a 404, to be consistent with Article::showMissingArticle. $request->response()->statusHeader( 404 ); @@ -635,7 +635,7 @@ EOT /** * Make the text under the image to say what size preview * - * @param $params Array parameters for thumbnail + * @param $params array parameters for thumbnail * @param $sizeLinkBigImagePreview HTML for the current size * @return string HTML output */ @@ -704,7 +704,7 @@ EOT $descText = $this->mPage->getFile()->getDescriptionText( $this->getContext()->getLanguage() ); /* Add canonical to head if there is no local page for this shared file */ - if ( $descUrl && $this->mPage->getID() == 0 ) { + if ( $descUrl && $this->mPage->getId() == 0 ) { $out->setCanonicalUrl( $descUrl ); } diff --git a/includes/page/Page.php b/includes/page/Page.php new file mode 100644 index 0000000000..2cb1fc0389 --- /dev/null +++ b/includes/page/Page.php @@ -0,0 +1,25 @@ +getTitle()->getArticleID(); + $pageProps = PageProps::getInstance()->getProperties( $this->getTitle(), 'hiddencat' ); + + return isset( $pageProps[$pageId] ) ? true : false; + } } diff --git a/includes/page/WikiPage.php b/includes/page/WikiPage.php index d81efa67e3..06785b70e3 100644 --- a/includes/page/WikiPage.php +++ b/includes/page/WikiPage.php @@ -20,12 +20,6 @@ * @file */ -/** - * Interface for type hinting (accepts WikiPage, Article, ImagePage, CategoryPage) - */ -interface Page { -} - /** * Class representing a MediaWiki article and history. * @@ -100,7 +94,7 @@ class WikiPage implements Page, IDBAccessObject { * @param Title $title * * @throws MWException - * @return WikiPage Object of the appropriate type + * @return WikiPage|WikiCategoryPage|WikiFilePage */ public static function factory( Title $title ) { $ns = $title->getNamespace(); @@ -1351,76 +1345,6 @@ class WikiPage implements Page, IDBAccessObject { return $handler->getUndoContent( $this->getRevision(), $undo, $undoafter ); } - /** - * Get the text that needs to be saved in order to undo all revisions - * between $undo and $undoafter. Revisions must belong to the same page, - * must exist and must not be deleted - * @param Revision $undo - * @param Revision $undoafter Must be an earlier revision than $undo - * @return string|bool String on success, false on failure - * @deprecated since 1.21: use ContentHandler::getUndoContent() instead. - */ - public function getUndoText( Revision $undo, Revision $undoafter = null ) { - ContentHandler::deprecated( __METHOD__, '1.21' ); - - $this->loadLastEdit(); - - if ( $this->mLastRevision ) { - if ( is_null( $undoafter ) ) { - $undoafter = $undo->getPrevious(); - } - - $handler = $this->getContentHandler(); - $undone = $handler->getUndoContent( $this->mLastRevision, $undo, $undoafter ); - - if ( !$undone ) { - return false; - } else { - return ContentHandler::getContentText( $undone ); - } - } - - return false; - } - - /** - * @param string|number|null|bool $sectionId Section identifier as a number or string - * (e.g. 0, 1 or 'T-1'), null/false or an empty string for the whole page - * or 'new' for a new section. - * @param string $text New text of the section. - * @param string $sectionTitle New section's subject, only if $section is "new". - * @param string $edittime Revision timestamp or null to use the current revision. - * - * @throws MWException - * @return string|null New complete article text, or null if error. - * - * @deprecated since 1.21, use replaceSectionAtRev() instead - */ - public function replaceSection( $sectionId, $text, $sectionTitle = '', - $edittime = null - ) { - ContentHandler::deprecated( __METHOD__, '1.21' ); - - // NOTE: keep condition in sync with condition in replaceSectionContent! - if ( strval( $sectionId ) === '' ) { - // Whole-page edit; let the whole text through - return $text; - } - - if ( !$this->supportsSections() ) { - throw new MWException( "sections not supported for content model " . - $this->getContentHandler()->getModelID() ); - } - - // could even make section title, but that's not required. - $sectionContent = ContentHandler::makeContent( $text, $this->getTitle() ); - - $newContent = $this->replaceSectionContent( $sectionId, $sectionContent, $sectionTitle, - $edittime ); - - return ContentHandler::getContentText( $newContent ); - } - /** * Returns true if this page's content model supports sections. * @@ -2880,7 +2804,7 @@ class WikiPage implements Page, IDBAccessObject { $dbw->startAtomic( __METHOD__ ); $this->loadPageData( self::READ_LATEST ); - $id = $this->getID(); + $id = $this->getId(); // T98706: lock the page from various other updates but avoid using // WikiPage::READ_LOCKING as that will carry over the FOR UPDATE to // the revisions queries (which also JOIN on user). Only lock the page @@ -3579,6 +3503,8 @@ class WikiPage implements Page, IDBAccessObject { return; } + $config = RequestContext::getMain()->getConfig(); + $params = [ 'isOpportunistic' => true, 'rootJobTimestamp' => $parserOutput->getCacheTime() @@ -3589,7 +3515,7 @@ class WikiPage implements Page, IDBAccessObject { JobQueueGroup::singleton()->lazyPush( RefreshLinksJob::newPrioritized( $this->mTitle, $params ) ); - } elseif ( $parserOutput->hasDynamicContent() ) { + } elseif ( !$config->get( 'MiserMode' ) && $parserOutput->hasDynamicContent() ) { // Assume the output contains "dynamic" time/random based magic words. // Only update pages that expired due to dynamic content and NOT due to edits // to referenced templates/files. When the cache expires due to dynamic content, @@ -3601,7 +3527,8 @@ class WikiPage implements Page, IDBAccessObject { // Although it would be de-duplicated, it would still waste I/O. $cache = ObjectCache::getLocalClusterInstance(); $key = $cache->makeKey( 'dynamic-linksupdate', 'last', $this->getId() ); - if ( $cache->add( $key, time(), 60 ) ) { + $ttl = max( $parserOutput->getCacheExpiry(), 3600 ); + if ( $cache->add( $key, time(), $ttl ) ) { JobQueueGroup::singleton()->lazyPush( RefreshLinksJob::newDynamic( $this->mTitle, $params ) ); diff --git a/includes/pager/ReverseChronologicalPager.php b/includes/pager/ReverseChronologicalPager.php index 2c415d6843..31c9c6dcec 100644 --- a/includes/pager/ReverseChronologicalPager.php +++ b/includes/pager/ReverseChronologicalPager.php @@ -115,7 +115,7 @@ abstract class ReverseChronologicalPager extends IndexPager { // Treat the given time in the wiki timezone and get a UTC timestamp for the database lookup $timestamp = MWTimestamp::getInstance( "${ymd}000000" ); - $timestamp->setTimeZone( $this->getConfig()->get( 'Localtimezone' ) ); + $timestamp->setTimezone( $this->getConfig()->get( 'Localtimezone' ) ); $this->mOffset = $this->mDb->timestamp( $timestamp->getTimestamp() ); } diff --git a/includes/pager/TablePager.php b/includes/pager/TablePager.php index e22cebad87..0a89e4e15b 100644 --- a/includes/pager/TablePager.php +++ b/includes/pager/TablePager.php @@ -264,26 +264,23 @@ abstract class TablePager extends IndexPager { } /** - * @protected * @return string */ - function getTableClass() { + protected function getTableClass() { return 'TablePager'; } /** - * @protected * @return string */ - function getNavClass() { + protected function getNavClass() { return 'TablePager_nav'; } /** - * @protected * @return string */ - function getSortHeaderClass() { + protected function getSortHeaderClass() { return 'TablePager_sort'; } diff --git a/includes/parser/CoreParserFunctions.php b/includes/parser/CoreParserFunctions.php index 1cc0efccda..a55ddf3f66 100644 --- a/includes/parser/CoreParserFunctions.php +++ b/includes/parser/CoreParserFunctions.php @@ -634,7 +634,7 @@ class CoreParserFunctions { if ( is_null( $t ) ) { return ''; } - return wfEscapeWikiText( wfUrlEncode( str_replace( ' ', '_', $t->getRootText() ) ) ); + return wfEscapeWikiText( wfUrlencode( str_replace( ' ', '_', $t->getRootText() ) ) ); } public static function basepagename( $parser, $title = null ) { $t = Title::newFromText( $title ); @@ -648,7 +648,7 @@ class CoreParserFunctions { if ( is_null( $t ) ) { return ''; } - return wfEscapeWikiText( wfUrlEncode( str_replace( ' ', '_', $t->getBaseText() ) ) ); + return wfEscapeWikiText( wfUrlencode( str_replace( ' ', '_', $t->getBaseText() ) ) ); } public static function talkpagename( $parser, $title = null ) { $t = Title::newFromText( $title ); diff --git a/includes/parser/Parser.php b/includes/parser/Parser.php index d7ba266fea..8209ea9f4d 100644 --- a/includes/parser/Parser.php +++ b/includes/parser/Parser.php @@ -1115,7 +1115,7 @@ class Parser { // Implies both are valid for table headings. if ( $first_character === '!' ) { - $line = str_replace( '!!', '||', $line ); + $line = StringUtils::replaceMarkup( '!!', '||', $line ); } # Split up multiple cells on the same line. @@ -1213,9 +1213,9 @@ class Parser { * * @private * - * @param string $text - * @param bool $isMain - * @param PPFrame|bool $frame + * @param string $text The text to parse + * @param bool $isMain Whether this is being called from the main parse() function + * @param PPFrame|bool $frame A pre-processor frame * * @return string */ @@ -3000,7 +3000,7 @@ class Parser { $value = wfEscapeWikiText( $this->mTitle->getRootText() ); break; case 'rootpagenamee': - $value = wfEscapeWikiText( wfUrlEncode( str_replace( + $value = wfEscapeWikiText( wfUrlencode( str_replace( ' ', '_', $this->mTitle->getRootText() @@ -3010,7 +3010,7 @@ class Parser { $value = wfEscapeWikiText( $this->mTitle->getBaseText() ); break; case 'basepagenamee': - $value = wfEscapeWikiText( wfUrlEncode( str_replace( + $value = wfEscapeWikiText( wfUrlencode( str_replace( ' ', '_', $this->mTitle->getBaseText() diff --git a/includes/parser/ParserCache.php b/includes/parser/ParserCache.php index bd5afaf033..916cfc26a1 100644 --- a/includes/parser/ParserCache.php +++ b/includes/parser/ParserCache.php @@ -64,7 +64,7 @@ class ParserCache { global $wgRequest; // idhash seem to mean 'page id' + 'rendering hash' (r3710) - $pageid = $article->getID(); + $pageid = $article->getId(); $renderkey = (int)( $wgRequest->getVal( 'action' ) == 'render' ); $key = wfMemcKey( 'pcache', 'idhash', "{$pageid}-{$renderkey}!{$hash}" ); @@ -76,7 +76,7 @@ class ParserCache { * @return mixed|string */ protected function getOptionsKey( $article ) { - $pageid = $article->getID(); + $pageid = $article->getId(); return wfMemcKey( 'pcache', 'idoptions', "{$pageid}" ); } diff --git a/includes/parser/ParserOptions.php b/includes/parser/ParserOptions.php index d2559f748b..729b9db8a9 100644 --- a/includes/parser/ParserOptions.php +++ b/includes/parser/ParserOptions.php @@ -860,7 +860,7 @@ class ParserOptions { 'page' => $title->getArticleID(), 'user_text' => $user->getName(), 'user' => $user->getId(), - 'parent_id' => $title->getLatestRevId(), + 'parent_id' => $title->getLatestRevID(), 'title' => $title, 'content' => $content ] ); diff --git a/includes/parser/Preprocessor.php b/includes/parser/Preprocessor.php index 368d79ef49..cc98abd5c0 100644 --- a/includes/parser/Preprocessor.php +++ b/includes/parser/Preprocessor.php @@ -260,8 +260,8 @@ interface PPFrame { /** * Get an argument to this frame by name - * @param string $name - * @return bool + * @param int|string $name + * @return string|bool */ public function getArgument( $name ); diff --git a/includes/parser/Preprocessor_DOM.php b/includes/parser/Preprocessor_DOM.php index 79a66e05e8..a28c0aa439 100644 --- a/includes/parser/Preprocessor_DOM.php +++ b/includes/parser/Preprocessor_DOM.php @@ -196,6 +196,7 @@ class Preprocessor_DOM extends Preprocessor { $forInclusion = $flags & Parser::PTD_FOR_INCLUSION; $xmlishElements = $this->parser->getStripList(); + $xmlishAllowMissingEndTag = [ 'includeonly', 'noinclude', 'onlyinclude' ]; $enableOnlyinclude = false; if ( $forInclusion ) { $ignoredTags = [ 'includeonly', '/includeonly' ]; @@ -237,6 +238,8 @@ class Preprocessor_DOM extends Preprocessor { $inHeading = false; // True if there are no more greater-than (>) signs right of $i $noMoreGT = false; + // Map of tag name => true if there are no more closing tags of given type right of $i + $noMoreClosingTag = []; // True to ignore all input up to the next $findOnlyinclude = $enableOnlyinclude; // Do a line-start run without outputting an LF character @@ -457,17 +460,29 @@ class Preprocessor_DOM extends Preprocessor { } else { $attrEnd = $tagEndPos; // Find closing tag - if ( preg_match( "/<\/" . preg_quote( $name, '/' ) . "\s*>/i", + if ( + !isset( $noMoreClosingTag[$name] ) && + preg_match( "/<\/" . preg_quote( $name, '/' ) . "\s*>/i", $text, $matches, PREG_OFFSET_CAPTURE, $tagEndPos + 1 ) ) { $inner = substr( $text, $tagEndPos + 1, $matches[0][1] - $tagEndPos - 1 ); $i = $matches[0][1] + strlen( $matches[0][0] ); $close = '' . htmlspecialchars( $matches[0][0] ) . ''; } else { - // No end tag -- let it run out to the end of the text. - $inner = substr( $text, $tagEndPos + 1 ); - $i = $lengthText; - $close = ''; + // No end tag + if ( in_array( $name, $xmlishAllowMissingEndTag ) ) { + // Let it run out to the end of the text. + $inner = substr( $text, $tagEndPos + 1 ); + $i = $lengthText; + $close = ''; + } else { + // Don't match the tag, treat opening tag as literal and resume parsing. + $i = $tagEndPos + 1; + $accum .= htmlspecialchars( substr( $text, $tagStartPos, $tagEndPos + 1 - $tagStartPos ) ); + // Cache results, otherwise we have O(N^2) performance for input like ... + $noMoreClosingTag[$name] = true; + continue; + } } } // and just become tags @@ -1462,6 +1477,10 @@ class PPFrame_DOM implements PPFrame { return true; } + /** + * @param int|string $name + * @return bool Always false in this implementation. + */ public function getArgument( $name ) { return false; } @@ -1646,6 +1665,10 @@ class PPTemplateFrame_DOM extends PPFrame_DOM { return $arguments; } + /** + * @param int $index + * @return string|bool + */ public function getNumberedArgument( $index ) { if ( !isset( $this->numberedArgs[$index] ) ) { return false; @@ -1660,6 +1683,10 @@ class PPTemplateFrame_DOM extends PPFrame_DOM { return $this->numberedExpansionCache[$index]; } + /** + * @param string $name + * @return string|bool + */ public function getNamedArgument( $name ) { if ( !isset( $this->namedArgs[$name] ) ) { return false; @@ -1672,6 +1699,10 @@ class PPTemplateFrame_DOM extends PPFrame_DOM { return $this->namedExpansionCache[$name]; } + /** + * @param int|string $name + * @return string|bool + */ public function getArgument( $name ) { $text = $this->getNumberedArgument( $name ); if ( $text === false ) { @@ -1738,6 +1769,10 @@ class PPCustomFrame_DOM extends PPFrame_DOM { return !count( $this->args ); } + /** + * @param int|string $index + * @return string|bool + */ public function getArgument( $index ) { if ( !isset( $this->args[$index] ) ) { return false; diff --git a/includes/parser/Preprocessor_Hash.php b/includes/parser/Preprocessor_Hash.php index 24baae43d5..0e1196793c 100644 --- a/includes/parser/Preprocessor_Hash.php +++ b/includes/parser/Preprocessor_Hash.php @@ -120,6 +120,7 @@ class Preprocessor_Hash extends Preprocessor { $forInclusion = $flags & Parser::PTD_FOR_INCLUSION; $xmlishElements = $this->parser->getStripList(); + $xmlishAllowMissingEndTag = [ 'includeonly', 'noinclude', 'onlyinclude' ]; $enableOnlyinclude = false; if ( $forInclusion ) { $ignoredTags = [ 'includeonly', '/includeonly' ]; @@ -160,6 +161,8 @@ class Preprocessor_Hash extends Preprocessor { $inHeading = false; // True if there are no more greater-than (>) signs right of $i $noMoreGT = false; + // Map of tag name => true if there are no more closing tags of given type right of $i + $noMoreClosingTag = []; // True to ignore all input up to the next $findOnlyinclude = $enableOnlyinclude; // Do a line-start run without outputting an LF character @@ -380,17 +383,29 @@ class Preprocessor_Hash extends Preprocessor { } else { $attrEnd = $tagEndPos; // Find closing tag - if ( preg_match( "/<\/" . preg_quote( $name, '/' ) . "\s*>/i", + if ( + !isset( $noMoreClosingTag[$name] ) && + preg_match( "/<\/" . preg_quote( $name, '/' ) . "\s*>/i", $text, $matches, PREG_OFFSET_CAPTURE, $tagEndPos + 1 ) ) { $inner = substr( $text, $tagEndPos + 1, $matches[0][1] - $tagEndPos - 1 ); $i = $matches[0][1] + strlen( $matches[0][0] ); $close = $matches[0][0]; } else { - // No end tag -- let it run out to the end of the text. - $inner = substr( $text, $tagEndPos + 1 ); - $i = $lengthText; - $close = null; + // No end tag + if ( in_array( $name, $xmlishAllowMissingEndTag ) ) { + // Let it run out to the end of the text. + $inner = substr( $text, $tagEndPos + 1 ); + $i = $lengthText; + $close = null; + } else { + // Don't match the tag, treat opening tag as literal and resume parsing. + $i = $tagEndPos + 1; + $accum->addLiteral( substr( $text, $tagStartPos, $tagEndPos + 1 - $tagStartPos ) ); + // Cache results, otherwise we have O(N^2) performance for input like ... + $noMoreClosingTag[$name] = true; + continue; + } } } // and just become tags @@ -1355,8 +1370,8 @@ class PPFrame_Hash implements PPFrame { } /** - * @param string $name - * @return bool + * @param int|string $name + * @return bool Always false in this implementation. */ public function getArgument( $name ) { return false; @@ -1549,7 +1564,7 @@ class PPTemplateFrame_Hash extends PPFrame_Hash { /** * @param int $index - * @return array|bool + * @return string|bool */ public function getNumberedArgument( $index ) { if ( !isset( $this->numberedArgs[$index] ) ) { @@ -1567,7 +1582,7 @@ class PPTemplateFrame_Hash extends PPFrame_Hash { /** * @param string $name - * @return bool + * @return string|bool */ public function getNamedArgument( $name ) { if ( !isset( $this->namedArgs[$name] ) ) { @@ -1582,8 +1597,8 @@ class PPTemplateFrame_Hash extends PPFrame_Hash { } /** - * @param string $name - * @return array|bool + * @param int|string $name + * @return string|bool */ public function getArgument( $name ) { $text = $this->getNumberedArgument( $name ); @@ -1652,8 +1667,8 @@ class PPCustomFrame_Hash extends PPFrame_Hash { } /** - * @param int $index - * @return bool + * @param int|string $index + * @return string|bool */ public function getArgument( $index ) { if ( !isset( $this->args[$index] ) ) { diff --git a/includes/poolcounter/PoolCounter.php b/includes/poolcounter/PoolCounter.php index 1ec14aa148..acdbd81361 100644 --- a/includes/poolcounter/PoolCounter.php +++ b/includes/poolcounter/PoolCounter.php @@ -71,11 +71,11 @@ abstract class PoolCounter { protected $timeout; /** - * @var boolean Whether the key is a "might wait" key + * @var bool Whether the key is a "might wait" key */ private $isMightWaitKey; /** - * @var boolean Whether this process holds a "might wait" lock key + * @var bool Whether this process holds a "might wait" lock key */ private static $acquiredMightWaitKey = 0; diff --git a/includes/registration/ExtensionRegistry.php b/includes/registration/ExtensionRegistry.php index 33395f74ad..dc53ca455a 100644 --- a/includes/registration/ExtensionRegistry.php +++ b/includes/registration/ExtensionRegistry.php @@ -274,13 +274,12 @@ class ExtensionRegistry { foreach ( $info['defines'] as $name => $val ) { define( $name, $val ); } - foreach ( $info['callbacks'] as $cb ) { - call_user_func( $cb ); - } - foreach ( $info['autoloaderPaths'] as $path ) { require_once $path; } + foreach ( $info['callbacks'] as $cb ) { + call_user_func( $cb ); + } $this->loaded += $info['credits']; if ( $info['attributes'] ) { diff --git a/includes/resourceloader/ResourceLoader.php b/includes/resourceloader/ResourceLoader.php index c68997905b..086ab17cdb 100644 --- a/includes/resourceloader/ResourceLoader.php +++ b/includes/resourceloader/ResourceLoader.php @@ -88,7 +88,7 @@ class ResourceLoader implements LoggerAwareInterface { private $logger; /** @var string JavaScript / CSS pragma to disable minification. **/ - const FILTER_NOMIN = ' /* @nomin */ '; + const FILTER_NOMIN = '/*@nomin*/'; /** * Load information stored in the database about modules. @@ -1098,7 +1098,7 @@ MESSAGE; $scripts = self::filter( 'minify-js', $scripts ); } } else { - $scripts = new XmlJsCode( "function ( $, jQuery ) {\n{$scripts}\n}" ); + $scripts = new XmlJsCode( "function ( $, jQuery, require, module ) {\n{$scripts}\n}" ); } } elseif ( !is_array( $scripts ) ) { throw new MWException( 'Invalid scripts error. Array of URLs or string of code expected.' ); @@ -1362,8 +1362,8 @@ MESSAGE; * @return string */ public static function makeLoaderConditionalScript( $script ) { - return "(window.RLQ = window.RLQ || []).push(function () {\n" . - trim( $script ) . "\n} );"; + return '(window.RLQ=window.RLQ||[]).push(function(){' . + trim( $script ) . '});'; } /** @@ -1379,8 +1379,8 @@ MESSAGE; $js = self::makeLoaderConditionalScript( $script ); return new WrappedString( Html::inlineScript( $js ), - "" + '' ); } @@ -1396,7 +1396,7 @@ MESSAGE; 'mw.config.set', [ $configuration ], ResourceLoader::inDebugMode() - ) . ResourceLoader::FILTER_NOMIN; + ); } /** diff --git a/includes/resourceloader/ResourceLoaderImage.php b/includes/resourceloader/ResourceLoaderImage.php index 43fd2dbb9c..87e5fd7b82 100644 --- a/includes/resourceloader/ResourceLoaderImage.php +++ b/includes/resourceloader/ResourceLoaderImage.php @@ -179,7 +179,7 @@ class ResourceLoaderImage { 'version' => $context->getVersion(), ]; - return wfExpandUrl( wfAppendQuery( $script, $query ), PROTO_RELATIVE ); + return wfAppendQuery( $script, $query ); } /** @@ -272,7 +272,7 @@ class ResourceLoaderImage { */ protected function variantize( $variantConf, ResourceLoaderContext $context ) { $dom = new DomDocument; - $dom->loadXml( file_get_contents( $this->getPath( $context ) ) ); + $dom->loadXML( file_get_contents( $this->getPath( $context ) ) ); $root = $dom->documentElement; $wrapper = $dom->createElement( 'g' ); while ( $root->firstChild ) { @@ -280,7 +280,7 @@ class ResourceLoaderImage { } $root->appendChild( $wrapper ); $wrapper->setAttribute( 'fill', $variantConf['color'] ); - return $dom->saveXml(); + return $dom->saveXML(); } /** @@ -295,7 +295,7 @@ class ResourceLoaderImage { */ protected function massageSvgPathdata( $svg ) { $dom = new DomDocument; - $dom->loadXml( $svg ); + $dom->loadXML( $svg ); foreach ( $dom->getElementsByTagName( 'path' ) as $node ) { $pathData = $node->getAttribute( 'd' ); // Make sure there is at least one space between numbers, and that leading zero is not omitted. @@ -305,7 +305,7 @@ class ResourceLoaderImage { $pathData = preg_replace( '/([ -])0(\d)/', '$1$2', $pathData ); $node->setAttribute( 'd', $pathData ); } - return $dom->saveXml(); + return $dom->saveXML(); } /** diff --git a/includes/resourceloader/ResourceLoaderRawFileModule.php b/includes/resourceloader/ResourceLoaderRawFileModule.php index d9005fa5e2..beab53eb8d 100644 --- a/includes/resourceloader/ResourceLoaderRawFileModule.php +++ b/includes/resourceloader/ResourceLoaderRawFileModule.php @@ -31,7 +31,7 @@ class ResourceLoaderRawFileModule extends ResourceLoaderFileModule { /** * Enable raw mode to omit mw.loader.state() call as mw.loader * does not yet exist when these modules execute. - * @var boolean + * @var bool */ protected $raw = true; diff --git a/includes/resourceloader/ResourceLoaderSpecialCharacterDataModule.php b/includes/resourceloader/ResourceLoaderSpecialCharacterDataModule.php index 222135cbfc..44371bbee2 100644 --- a/includes/resourceloader/ResourceLoaderSpecialCharacterDataModule.php +++ b/includes/resourceloader/ResourceLoaderSpecialCharacterDataModule.php @@ -78,6 +78,7 @@ class ResourceLoaderSpecialCharacterDataModule extends ResourceLoaderModule { 'special-characters-group-ipa', 'special-characters-group-symbols', 'special-characters-group-greek', + 'special-characters-group-greekextended', 'special-characters-group-cyrillic', 'special-characters-group-arabic', 'special-characters-group-arabicextended', diff --git a/includes/resourceloader/ResourceLoaderStartUpModule.php b/includes/resourceloader/ResourceLoaderStartUpModule.php index 6a40e27b44..34866f3635 100644 --- a/includes/resourceloader/ResourceLoaderStartUpModule.php +++ b/includes/resourceloader/ResourceLoaderStartUpModule.php @@ -40,8 +40,17 @@ class ResourceLoaderStartUpModule extends ResourceLoaderModule { } global $wgContLang; + $conf = $this->getConfig(); - $mainPage = Title::newMainPage(); + // We can't use Title::newMainPage() if 'mainpage' is in + // $wgForceUIMsgAsContentMsg because that will try to use the session + // user's language and we have no session user. This does the + // equivalent but falling back to our ResourceLoaderContext language + // instead. + $mainPage = Title::newFromText( $context->msg( 'mainpage' )->inContentLanguage()->text() ); + if ( !$mainPage ) { + $mainPage = Title::newFromText( 'Main Page' ); + } /** * Namespace related preparation @@ -57,7 +66,6 @@ class ResourceLoaderStartUpModule extends ResourceLoaderModule { } } - $conf = $this->getConfig(); // Build list of variables $vars = [ 'wgLoadScript' => wfScript( 'load' ), @@ -279,15 +287,12 @@ class ResourceLoaderStartUpModule extends ResourceLoaderModule { } public static function getLegacyModules() { - global $wgIncludeLegacyJavaScript, $wgPreloadJavaScriptMwUtil; + global $wgIncludeLegacyJavaScript; $legacyModules = []; if ( $wgIncludeLegacyJavaScript ) { $legacyModules[] = 'mediawiki.legacy.wikibits'; } - if ( $wgPreloadJavaScriptMwUtil ) { - $legacyModules[] = 'mediawiki.util'; - } return $legacyModules; } diff --git a/includes/resourceloader/ResourceLoaderUserTokensModule.php b/includes/resourceloader/ResourceLoaderUserTokensModule.php index bf4e8a7e21..cea1f3940b 100644 --- a/includes/resourceloader/ResourceLoaderUserTokensModule.php +++ b/includes/resourceloader/ResourceLoaderUserTokensModule.php @@ -54,8 +54,7 @@ class ResourceLoaderUserTokensModule extends ResourceLoaderModule { /** * Generate the JavaScript content of this module. * - * Add '@nomin' annotation to prevent the module's contents from getting - * cached (T84960). + * Add FILTER_NOMIN annotation to prevent needless minification and caching (T84960). * * @param ResourceLoaderContext $context * @return string diff --git a/includes/resourceloader/ResourceLoaderWikiModule.php b/includes/resourceloader/ResourceLoaderWikiModule.php index 7b0d93a6c5..796dc20d87 100644 --- a/includes/resourceloader/ResourceLoaderWikiModule.php +++ b/includes/resourceloader/ResourceLoaderWikiModule.php @@ -298,7 +298,8 @@ class ResourceLoaderWikiModule extends ResourceLoaderModule { if ( !$batch->isEmpty() ) { $res = $dbr->select( [ 'page', 'revision' ], - [ 'page_namespace', 'page_title', 'rev_len', 'rev_sha1' ], + // Include page_touched to allow purging if cache is poisoned (T117587, T113916) + [ 'page_namespace', 'page_title', 'page_touched', 'rev_len', 'rev_sha1' ], $batch->constructSet( 'page', $dbr ), __METHOD__, [], @@ -311,6 +312,7 @@ class ResourceLoaderWikiModule extends ResourceLoaderModule { $this->titleInfo[$key][$title->getPrefixedText()] = [ 'rev_len' => $row->rev_len, 'rev_sha1' => $row->rev_sha1, + 'page_touched' => $row->page_touched, ]; } } diff --git a/includes/search/SearchExactMatchRescorer.php b/includes/search/SearchExactMatchRescorer.php index d3b9d5cb0f..40cfe39305 100644 --- a/includes/search/SearchExactMatchRescorer.php +++ b/includes/search/SearchExactMatchRescorer.php @@ -41,7 +41,7 @@ class SearchExactMatchRescorer { */ public function rescore( $search, $namespaces, $srchres, $limit ) { // Pick namespace (based on PrefixSearch::defaultSearchBackend) - $ns = in_array( NS_MAIN, $namespaces ) ? NS_MAIN : $namespaces[0]; + $ns = in_array( NS_MAIN, $namespaces ) ? NS_MAIN : reset( $namespaces ); $t = Title::newFromText( $search, $ns ); if ( !$t || !$t->exists() ) { // No exact match so just return the search results diff --git a/includes/search/SearchNearMatchResultSet.php b/includes/search/SearchNearMatchResultSet.php index cb4f81d8b8..510726baaa 100644 --- a/includes/search/SearchNearMatchResultSet.php +++ b/includes/search/SearchNearMatchResultSet.php @@ -23,4 +23,8 @@ class SearchNearMatchResultSet extends SearchResultSet { $this->fetched = true; return SearchResult::newFromTitle( $this->result ); } + + public function rewind() { + $this->fetched = false; + } } diff --git a/includes/search/SearchResultSet.php b/includes/search/SearchResultSet.php index bfee698f12..69795e792b 100644 --- a/includes/search/SearchResultSet.php +++ b/includes/search/SearchResultSet.php @@ -129,7 +129,7 @@ class SearchResultSet { /** * Return a result set of hits on other (multiple) wikis associated with this one * - * @return SearchResultSet + * @return SearchResultSet[] */ function getInterwikiResults( $type = self::SECONDARY_RESULTS ) { return null; @@ -154,6 +154,12 @@ class SearchResultSet { return false; } + /** + * Rewind result set back to begining + */ + function rewind() { + } + /** * Frees the result set, if applicable. */ diff --git a/includes/search/SearchSuggestion.php b/includes/search/SearchSuggestion.php index cd9062b16f..80a437b6c9 100644 --- a/includes/search/SearchSuggestion.php +++ b/includes/search/SearchSuggestion.php @@ -84,7 +84,7 @@ class SearchSuggestion { */ public function setText( $text, $setTitle = true ) { $this->text = $text; - if ( $setTitle && $text ) { + if ( $setTitle && $text !== '' && $text !== null ) { $this->setSuggestedTitle( Title::makeTitle( 0, $text ) ); } } diff --git a/includes/search/SqlSearchResultSet.php b/includes/search/SqlSearchResultSet.php index 7a6aaf75f0..6b60899f10 100644 --- a/includes/search/SqlSearchResultSet.php +++ b/includes/search/SqlSearchResultSet.php @@ -8,7 +8,7 @@ class SqlSearchResultSet extends SearchResultSet { protected $terms; protected $totalHits; - function __construct( $resultSet, $terms, $total = null ) { + function __construct( ResultWrapper $resultSet, $terms, $total = null ) { $this->resultSet = $resultSet; $this->terms = $terms; $this->totalHits = $total; @@ -41,6 +41,12 @@ class SqlSearchResultSet extends SearchResultSet { ); } + function rewind() { + if ( $this->resultSet ) { + $this->resultSet->rewind(); + } + } + function free() { if ( $this->resultSet === false ) { return false; diff --git a/includes/session/BotPasswordSessionProvider.php b/includes/session/BotPasswordSessionProvider.php index bbdfdc3f26..5831b098fa 100644 --- a/includes/session/BotPasswordSessionProvider.php +++ b/includes/session/BotPasswordSessionProvider.php @@ -147,7 +147,7 @@ class BotPasswordSessionProvider extends ImmutableSessionProviderWithCookie { } $status = $bp->getRestrictions()->check( $request ); - if ( !$status->isOk() ) { + if ( !$status->isOK() ) { $this->logger->info( 'Session "{session}": Restrictions check failed', [ diff --git a/includes/session/Session.php b/includes/session/Session.php index 0fd8fa8a31..4188f4f308 100644 --- a/includes/session/Session.php +++ b/includes/session/Session.php @@ -335,7 +335,7 @@ final class Session implements \Countable, \Iterator, \ArrayAccess { * * @param string|string[] $salt Token salt * @param string $key Token key - * @return MediaWiki\\Session\\SessionToken + * @return Token */ public function getToken( $salt = '', $key = 'default' ) { $new = false; diff --git a/includes/session/SessionBackend.php b/includes/session/SessionBackend.php index 1e2b476baf..2626aa8813 100644 --- a/includes/session/SessionBackend.php +++ b/includes/session/SessionBackend.php @@ -31,7 +31,7 @@ use WebRequest; /** * This is the actual workhorse for Session. * - * Most code does not need to use this class, you want \\MediaWiki\\Session\\Session. + * Most code does not need to use this class, you want \MediaWiki\Session\Session. * The exceptions are SessionProviders and SessionMetadata hook functions, * which get an instance of this class rather than Session. * @@ -176,7 +176,7 @@ final class SessionBackend { /** * Deregister a Session - * @private For use by \\MediaWiki\\Session\\Session::__destruct() only + * @private For use by \MediaWiki\Session\Session::__destruct() only * @param int $index */ public function deregisterSession( $index ) { @@ -498,7 +498,7 @@ final class SessionBackend { * Note the caller is responsible for calling $this->dirty() if anything in * the array is changed. * - * @private For use by \\MediaWiki\\Session\\Session only. + * @private For use by \MediaWiki\Session\Session only. * @return array */ public function &getData() { @@ -530,7 +530,7 @@ final class SessionBackend { /** * Mark data as dirty - * @private For use by \\MediaWiki\\Session\\Session only. + * @private For use by \MediaWiki\Session\Session only. */ public function dirty() { $this->dataDirty = true; diff --git a/includes/session/SessionId.php b/includes/session/SessionId.php index 0669100784..33ea046ce4 100644 --- a/includes/session/SessionId.php +++ b/includes/session/SessionId.php @@ -56,7 +56,7 @@ final class SessionId { /** * Set the ID - * @private For use by \\MediaWiki\\Session\\SessionManager only + * @private For use by \MediaWiki\Session\SessionManager only * @param string $id */ public function setId( $id ) { diff --git a/includes/session/SessionManager.php b/includes/session/SessionManager.php index 0a304a99b2..29cd69a372 100644 --- a/includes/session/SessionManager.php +++ b/includes/session/SessionManager.php @@ -23,6 +23,7 @@ namespace MediaWiki\Session; +use MWException; use Psr\Log\LoggerInterface; use BagOStuff; use CachedBagOStuff; @@ -197,13 +198,17 @@ final class SessionManager implements SessionManagerInterface { } $session = null; + $info = new SessionInfo( SessionInfo::MIN_PRIORITY, [ 'id' => $id, 'idIsSafe' => true ] ); - // Test this here to provide a better log message for the common case - // of "no such ID" + // If we already have the backend loaded, use it directly + if ( isset( $this->allSessionBackends[$id] ) ) { + return $this->getSessionFromInfo( $info, $request ); + } + + // Test if the session is in storage, and if so try to load it. $key = wfMemcKey( 'MWSession', $id ); if ( is_array( $this->store->get( $key ) ) ) { - $create = false; - $info = new SessionInfo( SessionInfo::MIN_PRIORITY, [ 'id' => $id, 'idIsSafe' => true ] ); + $create = false; // If loading fails, don't bother creating because it probably will fail too. if ( $this->loadSessionInfoFromStore( $info, $request ) ) { $session = $this->getSessionFromInfo( $info, $request ); } @@ -494,10 +499,12 @@ final class SessionManager implements SessionManagerInterface { 'username' => $userName, ] ); } else { - $logger->error( __METHOD__ . ': failed with message ' . $status->getWikiText(), + $logger->error( + __METHOD__ . ': failed with message ' . $status->getWikiText( false, false, 'en' ), [ 'username' => $userName, - ] ); + ] + ); } $user->setId( $id ); $user->loadFromId( User::READ_LATEST ); @@ -548,7 +555,7 @@ final class SessionManager implements SessionManagerInterface { * The intention is that the named account will never again be usable for * normal login (i.e. there is no way to undo the prevention of access). * - * @private For use from \\User::newSystemUser only + * @private For use from \User::newSystemUser only * @param string $username */ public function preventSessionsForUser( $username ) { @@ -1022,7 +1029,7 @@ final class SessionManager implements SessionManagerInterface { /** * Deregister a SessionBackend - * @private For use from \\MediaWiki\\Session\\SessionBackend only + * @private For use from \MediaWiki\Session\SessionBackend only * @param SessionBackend $backend */ public function deregisterSessionBackend( SessionBackend $backend ) { @@ -1040,7 +1047,7 @@ final class SessionManager implements SessionManagerInterface { /** * Change a SessionBackend's ID - * @private For use from \\MediaWiki\\Session\\SessionBackend only + * @private For use from \MediaWiki\Session\SessionBackend only * @param SessionBackend $backend */ public function changeBackendId( SessionBackend $backend ) { diff --git a/includes/session/SessionManagerInterface.php b/includes/session/SessionManagerInterface.php index 14af630bc0..b3e28fe127 100644 --- a/includes/session/SessionManagerInterface.php +++ b/includes/session/SessionManagerInterface.php @@ -43,7 +43,7 @@ interface SessionManagerInterface extends LoggerAwareInterface { * @param WebRequest $request Any existing associated session will be reset * to the session corresponding to the data in the request itself. * @return Session - * @throws \\OverflowException if there are multiple sessions tied for top + * @throws \OverflowException if there are multiple sessions tied for top * priority in the request. Exception has a property "sessionInfos" * holding the SessionInfo objects for the sessions involved. */ diff --git a/includes/session/SessionProvider.php b/includes/session/SessionProvider.php index 1975ee8344..8ee1272294 100644 --- a/includes/session/SessionProvider.php +++ b/includes/session/SessionProvider.php @@ -145,7 +145,7 @@ abstract class SessionProvider implements SessionProviderInterface, LoggerAwareI * @note The SessionProvider must not attempt to auto-create users. * MediaWiki will do this later (when it's safe) if the chosen session has * a user with a valid name but no ID. - * @protected For use by \\MediaWiki\\Session\\SessionManager only + * @protected For use by \MediaWiki\Session\SessionManager only * @param WebRequest $request * @return SessionInfo|null */ @@ -158,7 +158,7 @@ abstract class SessionProvider implements SessionProviderInterface, LoggerAwareI * implementation assumes that it only makes sense if a session ID can be * persisted and changing users is allowed. * - * @protected For use by \\MediaWiki\\Session\\SessionManager only + * @protected For use by \MediaWiki\Session\SessionManager only * @param string|null $id ID to force for the new session * @return SessionInfo|null * If non-null, must return true for $info->isIdSafe(); pass true for @@ -182,7 +182,7 @@ abstract class SessionProvider implements SessionProviderInterface, LoggerAwareI * The default implementation checks that anything in both arrays is * identical, then returns $providedMetadata. * - * @protected For use by \\MediaWiki\\Session\\SessionManager only + * @protected For use by \MediaWiki\Session\SessionManager only * @param array $savedMetadata Saved provider metadata * @param array $providedMetadata Provided provider metadata * @return array Resulting metadata @@ -209,7 +209,7 @@ abstract class SessionProvider implements SessionProviderInterface, LoggerAwareI * allows for updating the provider metadata. On failure, the provider is * expected to write an appropriate message to its logger. * - * @protected For use by \\MediaWiki\\Session\\SessionManager only + * @protected For use by \MediaWiki\Session\SessionManager only * @param SessionInfo $info * @param WebRequest $request * @param array|null &$metadata Provider metadata, may be altered. @@ -242,7 +242,7 @@ abstract class SessionProvider implements SessionProviderInterface, LoggerAwareI * the session ID into a cookie can easily just set the cookie to a * different value. * - * @protected For use by \\MediaWiki\\Session\\SessionBackend only + * @protected For use by \MediaWiki\Session\SessionBackend only * @return bool */ abstract public function persistsSessionId(); @@ -269,7 +269,7 @@ abstract class SessionProvider implements SessionProviderInterface, LoggerAwareI * different user. A session provider that shoves information into cookies, * on the other hand, could easily do so. * - * @protected For use by \\MediaWiki\\Session\\SessionBackend only + * @protected For use by \MediaWiki\Session\SessionBackend only * @return bool */ abstract public function canChangeUser(); @@ -279,7 +279,7 @@ abstract class SessionProvider implements SessionProviderInterface, LoggerAwareI * * No need to persist here, persistSession() will be called if appropriate. * - * @protected For use by \\MediaWiki\\Session\\SessionBackend only + * @protected For use by \MediaWiki\Session\SessionBackend only * @param SessionBackend $session Session to persist * @param string $oldId Old session ID * @codeCoverageIgnore @@ -310,7 +310,7 @@ abstract class SessionProvider implements SessionProviderInterface, LoggerAwareI * A backend that cannot persist sesison ID or user info should implement * this as a no-op. * - * @protected For use by \\MediaWiki\\Session\\SessionBackend only + * @protected For use by \MediaWiki\Session\SessionBackend only * @param SessionBackend $session Session to persist * @param WebRequest $request Request into which to persist the session */ @@ -324,7 +324,7 @@ abstract class SessionProvider implements SessionProviderInterface, LoggerAwareI * A backend that cannot persist sesison ID or user info should implement * this as a no-op. * - * @protected For use by \\MediaWiki\\Session\\SessionManager only + * @protected For use by \MediaWiki\Session\SessionManager only * @param WebRequest $request Request from which to remove any session data */ abstract public function unpersistSession( WebRequest $request ); @@ -347,7 +347,7 @@ abstract class SessionProvider implements SessionProviderInterface, LoggerAwareI * User::idFromName( $username ) === 0); the name should still be * prevented, if applicable. * - * @protected For use by \\MediaWiki\\Session\\SessionManager only + * @protected For use by \MediaWiki\Session\SessionManager only * @param string $username */ public function preventSessionsForUser( $username ) { @@ -368,7 +368,7 @@ abstract class SessionProvider implements SessionProviderInterface, LoggerAwareI * } * @endcode * - * @protected For use by \\MediaWiki\\Session\\SessionManager only + * @protected For use by \MediaWiki\Session\SessionManager only * @return array */ public function getVaryHeaders() { @@ -377,7 +377,7 @@ abstract class SessionProvider implements SessionProviderInterface, LoggerAwareI /** * Return the list of cookies that need varying on. - * @protected For use by \\MediaWiki\\Session\\SessionManager only + * @protected For use by \MediaWiki\Session\SessionManager only * @return string[] */ public function getVaryCookies() { @@ -386,7 +386,7 @@ abstract class SessionProvider implements SessionProviderInterface, LoggerAwareI /** * Get a suggested username for the login form - * @protected For use by \\MediaWiki\\Session\\SessionBackend only + * @protected For use by \MediaWiki\Session\SessionBackend only * @param WebRequest $request * @return string|null */ @@ -424,7 +424,7 @@ abstract class SessionProvider implements SessionProviderInterface, LoggerAwareI * * This default implementation takes the class name, lowercases it, * replaces backslashes with dashes, and prefixes 'sessionprovider-' to - * determine the message key. For example, MediaWiki\\Session\\CookieSessionProvider + * determine the message key. For example, MediaWiki\Session\CookieSessionProvider * produces 'sessionprovider-mediawiki-session-cookiesessionprovider'. * * @note If self::__toString() is overridden, this will likely need to be diff --git a/includes/site/DBSiteStore.php b/includes/site/DBSiteStore.php index 756bb5140b..974789f94f 100644 --- a/includes/site/DBSiteStore.php +++ b/includes/site/DBSiteStore.php @@ -26,6 +26,7 @@ * * @license GNU GPL v2+ * @author Jeroen De Dauw < jeroendedauw@gmail.com > + * @author Daniel Kinzler */ class DBSiteStore implements SiteStore { @@ -35,15 +36,20 @@ class DBSiteStore implements SiteStore { protected $sites = null; /** - * @since 1.25 - * @param null $sitesTable Unused since 1.27 + * @var LoadBalancer */ - public function __construct( $sitesTable = null ) { - if ( $sitesTable !== null ) { - throw new InvalidArgumentException( - __METHOD__ . ': $sitesTable parameter must be null' - ); - } + private $dbLoadBalancer; + + /** + * @since 1.27 + * + * @todo: inject some kind of connection manager that is aware of the target wiki, + * instead of injecting a LoadBalancer. + * + * @param LoadBalancer $dbLoadBalancer + */ + public function __construct( LoadBalancer $dbLoadBalancer ) { + $this->dbLoadBalancer = $dbLoadBalancer; } /** @@ -67,7 +73,7 @@ class DBSiteStore implements SiteStore { protected function loadSites() { $this->sites = new SiteList(); - $dbr = wfGetDB( DB_SLAVE ); + $dbr = $this->dbLoadBalancer->getConnection( DB_SLAVE ); $res = $dbr->select( 'sites', @@ -124,6 +130,8 @@ class DBSiteStore implements SiteStore { $this->sites->setSite( $site ); } } + + $this->dbLoadBalancer->reuseConnection( $dbr ); } /** @@ -170,7 +178,7 @@ class DBSiteStore implements SiteStore { return true; } - $dbw = wfGetDB( DB_MASTER ); + $dbw = $this->dbLoadBalancer->getConnection( DB_MASTER ); $dbw->startAtomic( __METHOD__ ); @@ -241,6 +249,8 @@ class DBSiteStore implements SiteStore { $dbw->endAtomic( __METHOD__ ); + $this->dbLoadBalancer->reuseConnection( $dbw ); + $this->reset(); return $success; @@ -263,13 +273,15 @@ class DBSiteStore implements SiteStore { * @return bool Success */ public function clear() { - $dbw = wfGetDB( DB_MASTER ); + $dbw = $this->dbLoadBalancer->getConnection( DB_MASTER ); $dbw->startAtomic( __METHOD__ ); $ok = $dbw->delete( 'sites', '*', __METHOD__ ); $ok = $dbw->delete( 'site_identifiers', '*', __METHOD__ ) && $ok; $dbw->endAtomic( __METHOD__ ); + $this->dbLoadBalancer->reuseConnection( $dbw ); + $this->reset(); return $ok; diff --git a/includes/site/HashSiteStore.php b/includes/site/HashSiteStore.php index 0d0e448fd1..198d331d95 100644 --- a/includes/site/HashSiteStore.php +++ b/includes/site/HashSiteStore.php @@ -50,7 +50,7 @@ class HashSiteStore implements SiteStore { * * @param Site $site * - * @return boolean Success indicator + * @return bool Success indicator */ public function saveSite( Site $site ) { $this->sites[$site->getGlobalId()] = $site; @@ -65,7 +65,7 @@ class HashSiteStore implements SiteStore { * * @param Site[] $sites * - * @return boolean Success indicator + * @return bool Success indicator */ public function saveSites( array $sites ) { foreach ( $sites as $site ) { diff --git a/includes/site/MediaWikiSite.php b/includes/site/MediaWikiSite.php index 0f7e5d7e7c..6734d5f70c 100644 --- a/includes/site/MediaWikiSite.php +++ b/includes/site/MediaWikiSite.php @@ -39,20 +39,6 @@ class MediaWikiSite extends Site { const PATH_FILE = 'file_path'; const PATH_PAGE = 'page_path'; - /** - * @since 1.21 - * @deprecated since 1.21 Just use the constructor or the factory Site::newForType - * - * @param int $globalId - * - * @return MediaWikiSite - */ - public static function newFromGlobalId( $globalId ) { - $site = new static(); - $site->setGlobalId( $globalId ); - return $site; - } - /** * Constructor. * diff --git a/includes/site/SiteSQLStore.php b/includes/site/SiteSQLStore.php index e61179b02e..a4116aea0f 100644 --- a/includes/site/SiteSQLStore.php +++ b/includes/site/SiteSQLStore.php @@ -1,9 +1,7 @@ + * @author Daniel Kinzler */ -class SiteSQLStore extends CachingSiteStore { +class SiteSQLStore { /** + * Returns the global SiteStore instance. This is a relict of the first implementation + * of SiteStore, and is kept around for compatibility. + * + * @note This does not return an instance of SiteSQLStore! + * * @since 1.21 - * @deprecated 1.25 Construct a SiteStore instance directly instead. + * @deprecated 1.27 use MediaWikiServices::getSiteStore() or MediaWikiServices::getSiteLookup() + * instead. * - * @param null $sitesTable Unused - * @param BagOStuff|null $cache + * @param null $sitesTable IGNORED + * @param null $cache IGNORED * * @return SiteStore */ @@ -46,13 +50,11 @@ class SiteSQLStore extends CachingSiteStore { ); } - if ( $cache === null ) { - $cache = wfGetCache( wfIsHHVM() ? CACHE_ACCEL : CACHE_ANYTHING ); - } - - $siteStore = new DBSiteStore(); + // NOTE: we silently ignore $cache for now, since some existing callers + // specify it. If we break compatibility with them, we could just as + // well just remove this class. - return new static( $siteStore, $cache ); + return \MediaWiki\MediaWikiServices::getInstance()->getSiteStore(); } } diff --git a/includes/skins/Skin.php b/includes/skins/Skin.php index b80788b86c..e5b9cb9933 100644 --- a/includes/skins/Skin.php +++ b/includes/skins/Skin.php @@ -81,15 +81,6 @@ abstract class Skin extends ContextSource { return $allowedSkins; } - /** - * @deprecated since 1.23, use getAllowedSkins - * @return string[] - */ - public static function getUsableSkins() { - wfDeprecated( __METHOD__, '1.23' ); - return self::getAllowedSkins(); - } - /** * Normalize a skin preference value to a form that can be loaded. * @@ -140,23 +131,6 @@ abstract class Skin extends ContextSource { } } - /** - * Factory method for loading a skin of a given type - * @param string $key 'monobook', 'vector', etc. - * @return Skin - * @deprecated since 1.24; Use SkinFactory instead - */ - static function &newFromKey( $key ) { - wfDeprecated( __METHOD__, '1.24' ); - - $key = Skin::normalizeKey( $key ); - $factory = SkinFactory::getDefaultInstance(); - - // normalizeKey() guarantees that a skin with this key will exist. - $skin = $factory->makeSkin( $key ); - return $skin; - } - /** * @return string Skin name */ @@ -451,7 +425,7 @@ abstract class Skin extends ContextSource { } /** - * @return string + * @return string HTML */ function getCategoryLinks() { global $wgUseCategoryBrowser; @@ -542,25 +516,27 @@ abstract class Skin extends ContextSource { } /** - * @return string + * @return string HTML */ function getCategories() { $out = $this->getOutput(); - $catlinks = $this->getCategoryLinks(); - $classes = 'catlinks'; - // Check what we're showing $allCats = $out->getCategoryLinks(); $showHidden = $this->getUser()->getBoolOption( 'showhiddencats' ) || $this->getTitle()->getNamespace() == NS_CATEGORY; + $classes = [ 'catlinks' ]; if ( empty( $allCats['normal'] ) && !( !empty( $allCats['hidden'] ) && $showHidden ) ) { - $classes .= ' catlinks-allhidden'; + $classes[] = 'catlinks-allhidden'; } - return ""; + return Html::rawElement( + 'div', + [ 'id' => 'catlinks', 'class' => $classes, 'data-mw' => 'interface' ], + $catlinks + ); } /** @@ -799,12 +775,12 @@ abstract class Skin extends ContextSource { * @return null|string */ function getCopyrightIcon() { - global $wgRightsUrl, $wgRightsText, $wgRightsIcon, $wgCopyrightIcon; + global $wgRightsUrl, $wgRightsText, $wgRightsIcon, $wgFooterIcons; $out = ''; - if ( $wgCopyrightIcon ) { - $out = $wgCopyrightIcon; + if ( $wgFooterIcons['copyright']['copyright'] ) { + $out = $wgFooterIcons['copyright']['copyright']; } elseif ( $wgRightsIcon ) { $icon = htmlspecialchars( $wgRightsIcon ); @@ -1022,21 +998,6 @@ abstract class Skin extends ContextSource { $targetUser->canReceiveEmail(); } - /** - * This function previously returned a fully resolved style path URL to images or styles stored in - * the legacy skins/common/ directory. - * - * That directory has been removed in 1.24 and the function always returns an empty string. - * - * @deprecated since 1.24 - * @param string $name The name or path of a skin resource file - * @return string Empty string - */ - function getCommonStylePath( $name ) { - wfDeprecated( __METHOD__, '1.24' ); - return ''; - } - /** * Return a fully resolved style path url to images or styles stored in the current skins's folder. * This method returns a url resolved using the configured skin style path @@ -1357,22 +1318,6 @@ abstract class Skin extends ContextSource { return $bar; } - /** - * This function previously controlled whether the 'mediawiki.legacy.wikiprintable' module - * should be loaded by OutputPage. That module no longer exists and the return value of this - * method is ignored. - * - * If your skin doesn't provide its own print styles, the 'mediawiki.legacy.commonPrint' module - * can be used instead (SkinTemplate-based skins do it automatically). - * - * @deprecated since 1.22 - * @return bool - */ - public function commonPrintStylesheet() { - wfDeprecated( __METHOD__, '1.22' ); - return false; - } - /** * Gets new talk page messages for the current user and returns an * appropriate alert message (or an empty string if there are no messages) diff --git a/includes/skins/SkinTemplate.php b/includes/skins/SkinTemplate.php index 419c4b4653..e5dc59f35e 100644 --- a/includes/skins/SkinTemplate.php +++ b/includes/skins/SkinTemplate.php @@ -45,6 +45,14 @@ class SkinTemplate extends Skin { */ public $template = 'QuickTemplate'; + public $thispage; + public $titletxt; + public $userpage; + public $thisquery; + public $loggedin; + public $username; + public $userpageUrlDetails; + /** * Add specific styles for this skin * @@ -252,6 +260,7 @@ class SkinTemplate extends Skin { * Wrap the body text with language information and identifiable element * * @param Title $title + * @param string $html body text * @return string html */ protected function wrapHTML( $title, $html ) { @@ -650,33 +659,42 @@ class SkinTemplate extends Skin { 'active' => false ]; } else { + $useCombinedLoginLink = $this->useCombinedLoginLink(); + $loginlink = $this->getUser()->isAllowed( 'createaccount' ) && $useCombinedLoginLink + ? 'nav-login-createaccount' + : 'pt-login'; + $is_signup = $request->getText( 'type' ) == 'signup'; + + $login_url = [ + 'text' => $this->msg( $loginlink )->text(), + 'href' => self::makeSpecialUrl( 'Userlogin', $returnto ), + 'active' => $title->isSpecial( 'Userlogin' ) + && ( $loginlink == 'nav-login-createaccount' || !$is_signup ), + ]; + $createaccount_url = [ + 'text' => $this->msg( 'pt-createaccount' )->text(), + 'href' => self::makeSpecialUrl( 'Userlogin', "$returnto&type=signup" ), + 'active' => $title->isSpecial( 'Userlogin' ) && $is_signup, + ]; + // No need to show Talk and Contributions to anons if they can't contribute! if ( User::groupHasPermission( '*', 'edit' ) ) { + // Show the text "Not logged in" + $personal_urls['anonuserpage'] = [ + 'text' => $this->msg( 'notloggedin' )->text() + ]; - // Because of caching, we can't link directly to the anonymous - // user page (for example [[User:127.0.0.1]]), talk page, and - // contributions pages. Instead we use the special page - // shortcuts (which work correctly regardless of caching). This - // means we can't determine whether these links are active or - // not, but since major skins (MonoBook, Vector) don't use this - // information, it's not a huge loss. - - // Only show (red) link to anon user page if anon users are - // allowed to create that page - if ( User::groupHasPermission( '*', 'createpage' ) ) { - $personal_urls[ 'anonuserpage' ] = [ - 'text' => $this->msg( 'anonuserpage' )->text(), - 'href' => self::makeSpecialUrlSubpage( 'Mypage', false ), - 'active' => false - ]; - } - + // Because of caching, we can't link directly to the IP talk and + // contributions pages. Instead we use the special page shortcuts + // (which work correctly regardless of caching). This means we can't + // determine whether these links are active or not, but since major + // skins (MonoBook, Vector) don't use this information, it's not a + // huge loss. $personal_urls['anontalk'] = [ 'text' => $this->msg( 'anontalk' )->text(), 'href' => self::makeSpecialUrlSubpage( 'Mytalk', false ), 'active' => false ]; - $personal_urls['anoncontribs'] = [ 'text' => $this->msg( 'anoncontribs' )->text(), 'href' => self::makeSpecialUrlSubpage( 'Mycontributions', false ), @@ -684,21 +702,11 @@ class SkinTemplate extends Skin { ]; } - $is_signup = $request->getText( 'type' ) === 'signup'; - - if ( $this->getUser()->isAllowed( 'createaccount' ) && !( $this->useCombinedLoginLink() ) ) { - $personal_urls[ 'createaccount' ] = [ - 'text' => $this->msg( 'pt-createaccount' )->text(), - 'href' => self::makeSpecialUrl( 'Userlogin', "$returnto&type=signup" ), - 'active' => $title->isSpecial( 'Userlogin' ) && $is_signup, - ]; + if ( $this->getUser()->isAllowed( 'createaccount' ) && !$useCombinedLoginLink ) { + $personal_urls['createaccount'] = $createaccount_url; } - $personal_urls['login'] = [ - 'text' => $this->msg( 'pt-login' )->text(), - 'href' => self::makeSpecialUrl( 'Userlogin', $returnto ), - 'active' => $title->isSpecial( 'Userlogin' ) && !$is_signup, - ]; + $personal_urls['login'] = $login_url; } Hooks::run( 'PersonalUrls', [ &$personal_urls, &$title, $this ] ); diff --git a/includes/specialpage/SpecialPage.php b/includes/specialpage/SpecialPage.php index 6a04c6a754..fb153fcee2 100644 --- a/includes/specialpage/SpecialPage.php +++ b/includes/specialpage/SpecialPage.php @@ -342,10 +342,10 @@ class SpecialPage { return []; } - $search = SearchEngine::create(); - $search->setLimitOffset( $limit, $offset ); - $search->setNamespaces( [] ); - $result = $search->defaultPrefixSearch( $search ); + $searchEngine = SearchEngine::create(); + $searchEngine->setLimitOffset( $limit, $offset ); + $searchEngine->setNamespaces( [] ); + $result = $searchEngine->defaultPrefixSearch( $search ); return array_map( function( Title $t ) { return $t->getPrefixedText(); }, $result ); @@ -395,15 +395,20 @@ class SpecialPage { final public function run( $subPage ) { /** * Gets called before @see SpecialPage::execute. + * Return false to prevent calling execute() (since 1.27+). * * @since 1.20 * * @param SpecialPage $this * @param string|null $subPage */ - Hooks::run( 'SpecialPageBeforeExecute', [ $this, $subPage ] ); + if ( !Hooks::run( 'SpecialPageBeforeExecute', [ $this, $subPage ] ) ) { + return; + } - $this->beforeExecute( $subPage ); + if ( $this->beforeExecute( $subPage ) === false ) { + return; + } $this->execute( $subPage ); $this->afterExecute( $subPage ); @@ -420,10 +425,12 @@ class SpecialPage { /** * Gets called before @see SpecialPage::execute. + * Return false to prevent calling execute() (since 1.27+). * * @since 1.20 * * @param string|null $subPage + * @return bool|void */ protected function beforeExecute( $subPage ) { // No-op diff --git a/includes/specialpage/SpecialPageFactory.php b/includes/specialpage/SpecialPageFactory.php index 8ce480e123..725c4fc581 100644 --- a/includes/specialpage/SpecialPageFactory.php +++ b/includes/specialpage/SpecialPageFactory.php @@ -182,6 +182,7 @@ class SpecialPageFactory { private static $list; private static $aliases; + private static $pageObjectCache = []; /** * Reset the internal list of special pages. Useful when changing $wgSpecialPages after @@ -190,6 +191,7 @@ class SpecialPageFactory { public static function resetList() { self::$list = null; self::$aliases = null; + self::$pageObjectCache = []; } /** @@ -373,6 +375,10 @@ class SpecialPageFactory { public static function getPage( $name ) { list( $realName, /*...*/ ) = self::resolveAlias( $name ); + if ( isset( self::$pageObjectCache[$realName] ) ) { + return self::$pageObjectCache[$realName]; + } + $specialPageList = self::getPageList(); if ( isset( $specialPageList[$realName] ) ) { @@ -400,6 +406,7 @@ class SpecialPageFactory { $page = null; } + self::$pageObjectCache[$realName] = $page; if ( $page instanceof SpecialPage ) { return $page; } else { diff --git a/includes/specials/SpecialActiveusers.php b/includes/specials/SpecialActiveusers.php index 9c5fc2f973..d6d4500972 100644 --- a/includes/specials/SpecialActiveusers.php +++ b/includes/specials/SpecialActiveusers.php @@ -23,235 +23,6 @@ * @ingroup SpecialPage */ -/** - * This class is used to get a list of active users. The ones with specials - * rights (sysop, bureaucrat, developer) will have them displayed - * next to their names. - * - * @ingroup SpecialPage - */ -class ActiveUsersPager extends UsersPager { - /** - * @var FormOptions - */ - protected $opts; - - /** - * @var array - */ - protected $hideGroups = []; - - /** - * @var array - */ - protected $hideRights = []; - - /** - * @var array - */ - private $blockStatusByUid; - - /** - * @param IContextSource $context - * @param null $group Unused - * @param string $par Parameter passed to the page - */ - function __construct( IContextSource $context = null, $group = null, $par = null ) { - parent::__construct( $context ); - - $this->RCMaxAge = $this->getConfig()->get( 'ActiveUserDays' ); - $un = $this->getRequest()->getText( 'username', $par ); - $this->requestedUser = ''; - if ( $un != '' ) { - $username = Title::makeTitleSafe( NS_USER, $un ); - if ( !is_null( $username ) ) { - $this->requestedUser = $username->getText(); - } - } - - $this->setupOptions(); - } - - public function setupOptions() { - $this->opts = new FormOptions(); - - $this->opts->add( 'hidebots', false, FormOptions::BOOL ); - $this->opts->add( 'hidesysops', false, FormOptions::BOOL ); - - $this->opts->fetchValuesFromRequest( $this->getRequest() ); - - if ( $this->opts->getValue( 'hidebots' ) == 1 ) { - $this->hideRights[] = 'bot'; - } - if ( $this->opts->getValue( 'hidesysops' ) == 1 ) { - $this->hideGroups[] = 'sysop'; - } - } - - function getIndexField() { - return 'qcc_title'; - } - - function getQueryInfo() { - $dbr = $this->getDatabase(); - - $activeUserSeconds = $this->getConfig()->get( 'ActiveUserDays' ) * 86400; - $timestamp = $dbr->timestamp( wfTimestamp( TS_UNIX ) - $activeUserSeconds ); - $conds = [ - 'qcc_type' => 'activeusers', - 'qcc_namespace' => NS_USER, - 'user_name = qcc_title', - 'rc_user_text = qcc_title', - 'rc_type != ' . $dbr->addQuotes( RC_EXTERNAL ), // Don't count wikidata. - 'rc_log_type IS NULL OR rc_log_type != ' . $dbr->addQuotes( 'newusers' ), - 'rc_timestamp >= ' . $dbr->addQuotes( $timestamp ), - ]; - if ( $this->requestedUser != '' ) { - $conds[] = 'qcc_title >= ' . $dbr->addQuotes( $this->requestedUser ); - } - if ( !$this->getUser()->isAllowed( 'hideuser' ) ) { - $conds[] = 'NOT EXISTS (' . $dbr->selectSQLText( - 'ipblocks', '1', [ 'ipb_user=user_id', 'ipb_deleted' => 1 ] - ) . ')'; - } - - if ( $dbr->implicitGroupby() ) { - $options = [ 'GROUP BY' => [ 'qcc_title' ] ]; - } else { - $options = [ 'GROUP BY' => [ 'user_name', 'user_id', 'qcc_title' ] ]; - } - - return [ - 'tables' => [ 'querycachetwo', 'user', 'recentchanges' ], - 'fields' => [ 'user_name', 'user_id', 'recentedits' => 'COUNT(*)', 'qcc_title' ], - 'options' => $options, - 'conds' => $conds - ]; - } - - function doBatchLookups() { - parent::doBatchLookups(); - - $uids = []; - foreach ( $this->mResult as $row ) { - $uids[] = $row->user_id; - } - // Fetch the block status of the user for showing "(blocked)" text and for - // striking out names of suppressed users when privileged user views the list. - // Although the first query already hits the block table for un-privileged, this - // is done in two queries to avoid huge quicksorts and to make COUNT(*) correct. - $dbr = $this->getDatabase(); - $res = $dbr->select( 'ipblocks', - [ 'ipb_user', 'MAX(ipb_deleted) AS block_status' ], - [ 'ipb_user' => $uids ], - __METHOD__, - [ 'GROUP BY' => [ 'ipb_user' ] ] - ); - $this->blockStatusByUid = []; - foreach ( $res as $row ) { - $this->blockStatusByUid[$row->ipb_user] = $row->block_status; // 0 or 1 - } - $this->mResult->seek( 0 ); - } - - function formatRow( $row ) { - $userName = $row->user_name; - - $ulinks = Linker::userLink( $row->user_id, $userName ); - $ulinks .= Linker::userToolLinks( $row->user_id, $userName ); - - $lang = $this->getLanguage(); - - $list = []; - $user = User::newFromId( $row->user_id ); - - // User right filter - foreach ( $this->hideRights as $right ) { - // Calling User::getRights() within the loop so that - // if the hideRights() filter is empty, we don't have to - // trigger the lazy-init of the big userrights array in the - // User object - if ( in_array( $right, $user->getRights() ) ) { - return ''; - } - } - - // User group filter - // Note: This is a different loop than for user rights, - // because we're reusing it to build the group links - // at the same time - $groups_list = self::getGroups( intval( $row->user_id ), $this->userGroupCache ); - foreach ( $groups_list as $group ) { - if ( in_array( $group, $this->hideGroups ) ) { - return ''; - } - $list[] = self::buildGroupLink( $group, $userName ); - } - - $groups = $lang->commaList( $list ); - - $item = $lang->specialList( $ulinks, $groups ); - - $isBlocked = isset( $this->blockStatusByUid[$row->user_id] ); - if ( $isBlocked && $this->blockStatusByUid[$row->user_id] == 1 ) { - $item = "$item"; - } - $count = $this->msg( 'activeusers-count' )->numParams( $row->recentedits ) - ->params( $userName )->numParams( $this->RCMaxAge )->escaped(); - $blocked = $isBlocked ? ' ' . $this->msg( 'listusers-blocked', $userName )->escaped() : ''; - - return Html::rawElement( 'li', [], "{$item} [{$count}]{$blocked}" ); - } - - function getPageHeader() { - $self = $this->getTitle(); - $limit = $this->mLimit ? Html::hidden( 'limit', $this->mLimit ) : ''; - - # Form tag - $out = Xml::openElement( 'form', [ 'method' => 'get', 'action' => wfScript() ] ); - $out .= Xml::fieldset( $this->msg( 'activeusers' )->text() ) . "\n"; - $out .= Html::hidden( 'title', $self->getPrefixedDBkey() ) . $limit . "\n"; - - # Username field (with autocompletion support) - $this->getOutput()->addModules( 'mediawiki.userSuggest' ); - $out .= Xml::inputLabel( - $this->msg( 'activeusers-from' )->text(), - 'username', - 'offset', - 20, - $this->requestedUser, - [ - 'class' => 'mw-ui-input-inline mw-autocomplete-user', - 'tabindex' => 1, - ] + ( - // Set autofocus on blank input - $this->requestedUser === '' ? [ 'autofocus' => '' ] : [] - ) - ) . '
'; - - $out .= Xml::checkLabel( $this->msg( 'activeusers-hidebots' )->text(), - 'hidebots', 'hidebots', $this->opts->getValue( 'hidebots' ), [ 'tabindex' => 2 ] ); - - $out .= Xml::checkLabel( - $this->msg( 'activeusers-hidesysops' )->text(), - 'hidesysops', - 'hidesysops', - $this->opts->getValue( 'hidesysops' ), - [ 'tabindex' => 3 ] - ) . '
'; - - # Submit button and form bottom - $out .= Xml::submitButton( - $this->msg( 'activeusers-submit' )->text(), - [ 'tabindex' => 4 ] - ) . "\n"; - $out .= Xml::closeElement( 'fieldset' ); - $out .= Xml::closeElement( 'form' ); - - return $out; - } -} - /** * @ingroup SpecialPage */ diff --git a/includes/specials/SpecialAllMessages.php b/includes/specials/SpecialAllMessages.php index 49d5d6e596..49ca9f45de 100644 --- a/includes/specials/SpecialAllMessages.php +++ b/includes/specials/SpecialAllMessages.php @@ -77,403 +77,3 @@ class SpecialAllMessages extends SpecialPage { return 'wiki'; } } - -/** - * Use TablePager for prettified output. We have to pretend that we're - * getting data from a table when in fact not all of it comes from the database. - */ -class AllMessagesTablePager extends TablePager { - protected $filter, $prefix, $langcode, $displayPrefix; - - public $mLimitsShown; - - /** - * @var Language - */ - public $lang; - - /** - * @var null|bool - */ - public $custom; - - function __construct( $page, $conds, $langObj = null ) { - parent::__construct( $page->getContext() ); - $this->mIndexField = 'am_title'; - $this->mPage = $page; - $this->mConds = $conds; - // FIXME: Why does this need to be set to DIR_DESCENDING to produce ascending ordering? - $this->mDefaultDirection = IndexPager::DIR_DESCENDING; - $this->mLimitsShown = [ 20, 50, 100, 250, 500, 5000 ]; - - global $wgContLang; - - $this->talk = $this->msg( 'talkpagelinktext' )->escaped(); - - $this->lang = ( $langObj ? $langObj : $wgContLang ); - $this->langcode = $this->lang->getCode(); - $this->foreign = $this->langcode !== $wgContLang->getCode(); - - $request = $this->getRequest(); - - $this->filter = $request->getVal( 'filter', 'all' ); - if ( $this->filter === 'all' ) { - $this->custom = null; // So won't match in either case - } else { - $this->custom = ( $this->filter === 'unmodified' ); - } - - $prefix = $this->getLanguage()->ucfirst( $request->getVal( 'prefix', '' ) ); - $prefix = $prefix !== '' ? - Title::makeTitleSafe( NS_MEDIAWIKI, $request->getVal( 'prefix', null ) ) : - null; - - if ( $prefix !== null ) { - $this->displayPrefix = $prefix->getDBkey(); - $this->prefix = '/^' . preg_quote( $this->displayPrefix, '/' ) . '/i'; - } else { - $this->displayPrefix = false; - $this->prefix = false; - } - - // The suffix that may be needed for message names if we're in a - // different language (eg [[MediaWiki:Foo/fr]]: $suffix = '/fr' - if ( $this->foreign ) { - $this->suffix = '/' . $this->langcode; - } else { - $this->suffix = ''; - } - } - - function buildForm() { - $attrs = [ 'id' => 'mw-allmessages-form-lang', 'name' => 'lang' ]; - $msg = wfMessage( 'allmessages-language' ); - $langSelect = Xml::languageSelector( $this->langcode, false, null, $attrs, $msg ); - - $out = Xml::openElement( 'form', [ - 'method' => 'get', - 'action' => $this->getConfig()->get( 'Script' ), - 'id' => 'mw-allmessages-form' - ] ) . - Xml::fieldset( $this->msg( 'allmessages-filter-legend' )->text() ) . - Html::hidden( 'title', $this->getTitle()->getPrefixedText() ) . - Xml::openElement( 'table', [ 'class' => 'mw-allmessages-table' ] ) . "\n" . - ' - ' . - Xml::label( $this->msg( 'allmessages-prefix' )->text(), 'mw-allmessages-form-prefix' ) . - "\n - " . - Xml::input( - 'prefix', - 20, - str_replace( '_', ' ', $this->displayPrefix ), - [ 'id' => 'mw-allmessages-form-prefix' ] - ) . - "\n - - \n - " . - $this->msg( 'allmessages-filter' )->escaped() . - "\n - " . - Xml::radioLabel( $this->msg( 'allmessages-filter-unmodified' )->text(), - 'filter', - 'unmodified', - 'mw-allmessages-form-filter-unmodified', - ( $this->filter === 'unmodified' ) - ) . - Xml::radioLabel( $this->msg( 'allmessages-filter-all' )->text(), - 'filter', - 'all', - 'mw-allmessages-form-filter-all', - ( $this->filter === 'all' ) - ) . - Xml::radioLabel( $this->msg( 'allmessages-filter-modified' )->text(), - 'filter', - 'modified', - 'mw-allmessages-form-filter-modified', - ( $this->filter === 'modified' ) - ) . - "\n - - \n - " . $langSelect[0] . "\n - " . $langSelect[1] . "\n - " . - - ' - ' . - Xml::label( $this->msg( 'table_pager_limit_label' )->text(), 'mw-table_pager_limit_label' ) . - ' - ' . - $this->getLimitSelect( [ 'id' => 'mw-table_pager_limit_label' ] ) . - ' - - - ' . - Xml::submitButton( $this->msg( 'allmessages-filter-submit' )->text() ) . - "\n - " . - - Xml::closeElement( 'table' ) . - $this->getHiddenFields( [ 'title', 'prefix', 'filter', 'lang', 'limit' ] ) . - Xml::closeElement( 'fieldset' ) . - Xml::closeElement( 'form' ); - - return $out; - } - - function getAllMessages( $descending ) { - $messageNames = Language::getLocalisationCache()->getSubitemList( 'en', 'messages' ); - - // Normalise message names so they look like page titles and sort correctly - T86139 - $messageNames = array_map( [ $this->lang, 'ucfirst' ], $messageNames ); - - if ( $descending ) { - rsort( $messageNames ); - } else { - asort( $messageNames ); - } - - return $messageNames; - } - - /** - * Determine which of the MediaWiki and MediaWiki_talk namespace pages exist. - * Returns array( 'pages' => ..., 'talks' => ... ), where the subarrays have - * an entry for each existing page, with the key being the message name and - * value arbitrary. - * - * @param array $messageNames - * @param string $langcode What language code - * @param bool $foreign Whether the $langcode is not the content language - * @return array A 'pages' and 'talks' array with the keys of existing pages - */ - public static function getCustomisedStatuses( $messageNames, $langcode = 'en', $foreign = false ) { - // FIXME: This function should be moved to Language:: or something. - - $dbr = wfGetDB( DB_SLAVE ); - $res = $dbr->select( 'page', - [ 'page_namespace', 'page_title' ], - [ 'page_namespace' => [ NS_MEDIAWIKI, NS_MEDIAWIKI_TALK ] ], - __METHOD__, - [ 'USE INDEX' => 'name_title' ] - ); - $xNames = array_flip( $messageNames ); - - $pageFlags = $talkFlags = []; - - foreach ( $res as $s ) { - $exists = false; - - if ( $foreign ) { - $titleParts = explode( '/', $s->page_title ); - if ( count( $titleParts ) === 2 && - $langcode === $titleParts[1] && - isset( $xNames[$titleParts[0]] ) - ) { - $exists = $titleParts[0]; - } - } elseif ( isset( $xNames[$s->page_title] ) ) { - $exists = $s->page_title; - } - - $title = Title::newFromRow( $s ); - if ( $exists && $title->inNamespace( NS_MEDIAWIKI ) ) { - $pageFlags[$exists] = true; - } elseif ( $exists && $title->inNamespace( NS_MEDIAWIKI_TALK ) ) { - $talkFlags[$exists] = true; - } - } - - return [ 'pages' => $pageFlags, 'talks' => $talkFlags ]; - } - - /** - * This function normally does a database query to get the results; we need - * to make a pretend result using a FakeResultWrapper. - * @param string $offset - * @param int $limit - * @param bool $descending - * @return FakeResultWrapper - */ - function reallyDoQuery( $offset, $limit, $descending ) { - $result = new FakeResultWrapper( [] ); - - $messageNames = $this->getAllMessages( $descending ); - $statuses = self::getCustomisedStatuses( $messageNames, $this->langcode, $this->foreign ); - - $count = 0; - foreach ( $messageNames as $key ) { - $customised = isset( $statuses['pages'][$key] ); - if ( $customised !== $this->custom && - ( $descending && ( $key < $offset || !$offset ) || !$descending && $key > $offset ) && - ( ( $this->prefix && preg_match( $this->prefix, $key ) ) || $this->prefix === false ) - ) { - $actual = wfMessage( $key )->inLanguage( $this->langcode )->plain(); - $default = wfMessage( $key )->inLanguage( $this->langcode )->useDatabase( false )->plain(); - $result->result[] = [ - 'am_title' => $key, - 'am_actual' => $actual, - 'am_default' => $default, - 'am_customised' => $customised, - 'am_talk_exists' => isset( $statuses['talks'][$key] ) - ]; - $count++; - } - - if ( $count === $limit ) { - break; - } - } - - return $result; - } - - function getStartBody() { - $tableClass = $this->getTableClass(); - return Xml::openElement( 'table', [ - 'class' => "mw-datatable $tableClass", - 'id' => 'mw-allmessagestable' - ] ) . - "\n" . - " - " . - $this->msg( 'allmessagesname' )->escaped() . " - - " . - $this->msg( 'allmessagesdefault' )->escaped() . - " - \n - - " . - $this->msg( 'allmessagescurrent' )->escaped() . - " - \n"; - } - - function formatValue( $field, $value ) { - switch ( $field ) { - case 'am_title' : - $title = Title::makeTitle( NS_MEDIAWIKI, $value . $this->suffix ); - $talk = Title::makeTitle( NS_MEDIAWIKI_TALK, $value . $this->suffix ); - $translation = Linker::makeExternalLink( - 'https://translatewiki.net/w/i.php?' . wfArrayToCgi( [ - 'title' => 'Special:SearchTranslations', - 'group' => 'mediawiki', - 'grouppath' => 'mediawiki', - 'query' => 'language:' . $this->getLanguage()->getCode() . '^25 ' . - 'messageid:"MediaWiki:' . $value . '"^10 "' . - $this->msg( $value )->inLanguage( 'en' )->plain() . '"' - ] ), - $this->msg( 'allmessages-filter-translate' )->text() - ); - - if ( $this->mCurrentRow->am_customised ) { - $title = Linker::linkKnown( $title, $this->getLanguage()->lcfirst( $value ) ); - } else { - $title = Linker::link( - $title, - $this->getLanguage()->lcfirst( $value ), - [], - [], - [ 'broken' ] - ); - } - if ( $this->mCurrentRow->am_talk_exists ) { - $talk = Linker::linkKnown( $talk, $this->talk ); - } else { - $talk = Linker::link( - $talk, - $this->talk, - [], - [], - [ 'broken' ] - ); - } - - return $title . ' ' . - $this->msg( 'parentheses' )->rawParams( $talk )->escaped() . - ' ' . - $this->msg( 'parentheses' )->rawParams( $translation )->escaped(); - - case 'am_default' : - case 'am_actual' : - return Sanitizer::escapeHtmlAllowEntities( $value ); - } - - return ''; - } - - function formatRow( $row ) { - // Do all the normal stuff - $s = parent::formatRow( $row ); - - // But if there's a customised message, add that too. - if ( $row->am_customised ) { - $s .= Xml::openElement( 'tr', $this->getRowAttrs( $row, true ) ); - $formatted = strval( $this->formatValue( 'am_actual', $row->am_actual ) ); - - if ( $formatted === '' ) { - $formatted = ' '; - } - - $s .= Xml::tags( 'td', $this->getCellAttrs( 'am_actual', $row->am_actual ), $formatted ) - . "\n"; - } - - return $s; - } - - function getRowAttrs( $row, $isSecond = false ) { - $arr = []; - - if ( $row->am_customised ) { - $arr['class'] = 'allmessages-customised'; - } - - if ( !$isSecond ) { - $arr['id'] = Sanitizer::escapeId( 'msg_' . $this->getLanguage()->lcfirst( $row->am_title ) ); - } - - return $arr; - } - - function getCellAttrs( $field, $value ) { - if ( $this->mCurrentRow->am_customised && $field === 'am_title' ) { - return [ 'rowspan' => '2', 'class' => $field ]; - } elseif ( $field === 'am_title' ) { - return [ 'class' => $field ]; - } else { - return [ - 'lang' => $this->lang->getHtmlCode(), - 'dir' => $this->lang->getDir(), - 'class' => $field - ]; - } - } - - // This is not actually used, as getStartBody is overridden above - function getFieldNames() { - return [ - 'am_title' => $this->msg( 'allmessagesname' )->text(), - 'am_default' => $this->msg( 'allmessagesdefault' )->text() - ]; - } - - function getTitle() { - return SpecialPage::getTitleFor( 'Allmessages', false ); - } - - function isFieldSortable( $x ) { - return false; - } - - function getDefaultSort() { - return ''; - } - - function getQueryInfo() { - return ''; - } -} diff --git a/includes/specials/SpecialBlockList.php b/includes/specials/SpecialBlockList.php index e589ecb00a..dbbee71453 100644 --- a/includes/specials/SpecialBlockList.php +++ b/includes/specials/SpecialBlockList.php @@ -222,244 +222,3 @@ class SpecialBlockList extends SpecialPage { return 'users'; } } - -class BlockListPager extends TablePager { - protected $conds; - protected $page; - - /** - * @param SpecialPage $page - * @param array $conds - */ - function __construct( $page, $conds ) { - $this->page = $page; - $this->conds = $conds; - $this->mDefaultDirection = IndexPager::DIR_DESCENDING; - parent::__construct( $page->getContext() ); - } - - function getFieldNames() { - static $headers = null; - - if ( $headers === null ) { - $headers = [ - 'ipb_timestamp' => 'blocklist-timestamp', - 'ipb_target' => 'blocklist-target', - 'ipb_expiry' => 'blocklist-expiry', - 'ipb_by' => 'blocklist-by', - 'ipb_params' => 'blocklist-params', - 'ipb_reason' => 'blocklist-reason', - ]; - foreach ( $headers as $key => $val ) { - $headers[$key] = $this->msg( $val )->text(); - } - } - - return $headers; - } - - function formatValue( $name, $value ) { - static $msg = null; - if ( $msg === null ) { - $keys = [ - 'anononlyblock', - 'createaccountblock', - 'noautoblockblock', - 'emailblock', - 'blocklist-nousertalk', - 'unblocklink', - 'change-blocklink', - ]; - - foreach ( $keys as $key ) { - $msg[$key] = $this->msg( $key )->escaped(); - } - } - - /** @var $row object */ - $row = $this->mCurrentRow; - - $language = $this->getLanguage(); - - $formatted = ''; - - switch ( $name ) { - case 'ipb_timestamp': - $formatted = htmlspecialchars( $language->userTimeAndDate( $value, $this->getUser() ) ); - break; - - case 'ipb_target': - if ( $row->ipb_auto ) { - $formatted = $this->msg( 'autoblockid', $row->ipb_id )->parse(); - } else { - list( $target, $type ) = Block::parseTarget( $row->ipb_address ); - switch ( $type ) { - case Block::TYPE_USER: - case Block::TYPE_IP: - $formatted = Linker::userLink( $target->getId(), $target ); - $formatted .= Linker::userToolLinks( - $target->getId(), - $target, - false, - Linker::TOOL_LINKS_NOBLOCK - ); - break; - case Block::TYPE_RANGE: - $formatted = htmlspecialchars( $target ); - } - } - break; - - case 'ipb_expiry': - $formatted = htmlspecialchars( $language->formatExpiry( - $value, - /* User preference timezone */true - ) ); - if ( $this->getUser()->isAllowed( 'block' ) ) { - if ( $row->ipb_auto ) { - $links[] = Linker::linkKnown( - SpecialPage::getTitleFor( 'Unblock' ), - $msg['unblocklink'], - [], - [ 'wpTarget' => "#{$row->ipb_id}" ] - ); - } else { - $links[] = Linker::linkKnown( - SpecialPage::getTitleFor( 'Unblock', $row->ipb_address ), - $msg['unblocklink'] - ); - $links[] = Linker::linkKnown( - SpecialPage::getTitleFor( 'Block', $row->ipb_address ), - $msg['change-blocklink'] - ); - } - $formatted .= ' ' . Html::rawElement( - 'span', - [ 'class' => 'mw-blocklist-actions' ], - $this->msg( 'parentheses' )->rawParams( - $language->pipeList( $links ) )->escaped() - ); - } - break; - - case 'ipb_by': - if ( isset( $row->by_user_name ) ) { - $formatted = Linker::userLink( $value, $row->by_user_name ); - $formatted .= Linker::userToolLinks( $value, $row->by_user_name ); - } else { - $formatted = htmlspecialchars( $row->ipb_by_text ); // foreign user? - } - break; - - case 'ipb_reason': - $formatted = Linker::formatComment( $value ); - break; - - case 'ipb_params': - $properties = []; - if ( $row->ipb_anon_only ) { - $properties[] = $msg['anononlyblock']; - } - if ( $row->ipb_create_account ) { - $properties[] = $msg['createaccountblock']; - } - if ( $row->ipb_user && !$row->ipb_enable_autoblock ) { - $properties[] = $msg['noautoblockblock']; - } - - if ( $row->ipb_block_email ) { - $properties[] = $msg['emailblock']; - } - - if ( !$row->ipb_allow_usertalk ) { - $properties[] = $msg['blocklist-nousertalk']; - } - - $formatted = $language->commaList( $properties ); - break; - - default: - $formatted = "Unable to format $name"; - break; - } - - return $formatted; - } - - function getQueryInfo() { - $info = [ - 'tables' => [ 'ipblocks', 'user' ], - 'fields' => [ - 'ipb_id', - 'ipb_address', - 'ipb_user', - 'ipb_by', - 'ipb_by_text', - 'by_user_name' => 'user_name', - 'ipb_reason', - 'ipb_timestamp', - 'ipb_auto', - 'ipb_anon_only', - 'ipb_create_account', - 'ipb_enable_autoblock', - 'ipb_expiry', - 'ipb_range_start', - 'ipb_range_end', - 'ipb_deleted', - 'ipb_block_email', - 'ipb_allow_usertalk', - ], - 'conds' => $this->conds, - 'join_conds' => [ 'user' => [ 'LEFT JOIN', 'user_id = ipb_by' ] ] - ]; - - # Filter out any expired blocks - $db = $this->getDatabase(); - $info['conds'][] = 'ipb_expiry > ' . $db->addQuotes( $db->timestamp() ); - - # Is the user allowed to see hidden blocks? - if ( !$this->getUser()->isAllowed( 'hideuser' ) ) { - $info['conds']['ipb_deleted'] = 0; - } - - return $info; - } - - public function getTableClass() { - return parent::getTableClass() . ' mw-blocklist'; - } - - function getIndexField() { - return 'ipb_timestamp'; - } - - function getDefaultSort() { - return 'ipb_timestamp'; - } - - function isFieldSortable( $name ) { - return false; - } - - /** - * Do a LinkBatch query to minimise database load when generating all these links - * @param ResultWrapper $result - */ - function preprocessResults( $result ) { - # Do a link batch query - $lb = new LinkBatch; - $lb->setCaller( __METHOD__ ); - - foreach ( $result as $row ) { - $lb->add( NS_USER, $row->ipb_address ); - $lb->add( NS_USER_TALK, $row->ipb_address ); - - if ( isset( $row->by_user_name ) ) { - $lb->add( NS_USER, $row->by_user_name ); - $lb->add( NS_USER_TALK, $row->by_user_name ); - } - } - - $lb->execute(); - } -} diff --git a/includes/specials/SpecialBotPasswords.php b/includes/specials/SpecialBotPasswords.php index bcba190570..1027f1f6e8 100644 --- a/includes/specials/SpecialBotPasswords.php +++ b/includes/specials/SpecialBotPasswords.php @@ -84,9 +84,6 @@ class SpecialBotPasswords extends FormSpecialPage { } protected function getFormFields() { - $user = $this->getUser(); - $request = $this->getRequest(); - $fields = []; if ( $this->par !== null ) { diff --git a/includes/specials/SpecialCategories.php b/includes/specials/SpecialCategories.php index 5314f63489..d7d338ccf9 100644 --- a/includes/specials/SpecialCategories.php +++ b/includes/specials/SpecialCategories.php @@ -92,109 +92,3 @@ class SpecialCategories extends SpecialPage { return 'pages'; } } - -/** - * TODO: Allow sorting by count. We need to have a unique index to do this - * properly. - * - * @ingroup SpecialPage Pager - */ -class CategoryPager extends AlphabeticPager { - - /** - * @var PageLinkRenderer - */ - protected $linkRenderer; - - /** - * @param IContextSource $context - * @param string $from - * @param PageLinkRenderer $linkRenderer - */ - public function __construct( IContextSource $context, $from, PageLinkRenderer $linkRenderer - ) { - parent::__construct( $context ); - $from = str_replace( ' ', '_', $from ); - if ( $from !== '' ) { - $from = Title::capitalize( $from, NS_CATEGORY ); - $this->setOffset( $from ); - $this->setIncludeOffset( true ); - } - - $this->linkRenderer = $linkRenderer; - } - - function getQueryInfo() { - return [ - 'tables' => [ 'category' ], - 'fields' => [ 'cat_title', 'cat_pages' ], - 'conds' => [ 'cat_pages > 0' ], - 'options' => [ 'USE INDEX' => 'cat_title' ], - ]; - } - - function getIndexField() { -# return array( 'abc' => 'cat_title', 'count' => 'cat_pages' ); - return 'cat_title'; - } - - function getDefaultQuery() { - parent::getDefaultQuery(); - unset( $this->mDefaultQuery['from'] ); - - return $this->mDefaultQuery; - } - -# protected function getOrderTypeMessages() { -# return array( 'abc' => 'special-categories-sort-abc', -# 'count' => 'special-categories-sort-count' ); -# } - - protected function getDefaultDirections() { -# return array( 'abc' => false, 'count' => true ); - return false; - } - - /* Override getBody to apply LinksBatch on resultset before actually outputting anything. */ - public function getBody() { - $batch = new LinkBatch; - - $this->mResult->rewind(); - - foreach ( $this->mResult as $row ) { - $batch->addObj( Title::makeTitleSafe( NS_CATEGORY, $row->cat_title ) ); - } - $batch->execute(); - $this->mResult->rewind(); - - return parent::getBody(); - } - - function formatRow( $result ) { - $title = new TitleValue( NS_CATEGORY, $result->cat_title ); - $text = $title->getText(); - $link = $this->linkRenderer->renderHtmlLink( $title, $text ); - - $count = $this->msg( 'nmembers' )->numParams( $result->cat_pages )->escaped(); - return Html::rawElement( 'li', null, $this->getLanguage()->specialList( $link, $count ) ) . "\n"; - } - - public function getStartForm( $from ) { - return Xml::tags( - 'form', - [ 'method' => 'get', 'action' => wfScript() ], - Html::hidden( 'title', $this->getTitle()->getPrefixedText() ) . - Xml::fieldset( - $this->msg( 'categories' )->text(), - Xml::inputLabel( - $this->msg( 'categoriesfrom' )->text(), - 'from', 'from', 20, $from, [ 'class' => 'mw-ui-input-inline' ] ) . - ' ' . - Html::submitButton( - $this->msg( 'categories-submit' )->text(), - [], [ 'mw-ui-progressive' ] - ) - ) - ); - } -} diff --git a/includes/specials/SpecialChangePassword.php b/includes/specials/SpecialChangePassword.php index 2d0d020cac..5adc315095 100644 --- a/includes/specials/SpecialChangePassword.php +++ b/includes/specials/SpecialChangePassword.php @@ -332,7 +332,7 @@ class SpecialChangePassword extends FormSpecialPage { $dbw->update( 'user', [ 'user_password_expires' => $dbw->timestampOrNull( $newExpire ) ], - [ 'user_id' => $user->getID() ], + [ 'user_id' => $user->getId() ], __METHOD__ ); } diff --git a/includes/specials/SpecialConfirmemail.php b/includes/specials/SpecialConfirmemail.php index 914781c16a..a656c2ea11 100644 --- a/includes/specials/SpecialConfirmemail.php +++ b/includes/specials/SpecialConfirmemail.php @@ -56,8 +56,6 @@ class EmailConfirmation extends UnlistedSpecialPage { $this->checkReadOnly(); $this->checkPermissions(); - $this->requireLogin( 'confirmemail_needlogin' ); - // This could also let someone check the current email address, so // require both permissions. if ( !$this->getUser()->isAllowed( 'viewmyprivateinfo' ) ) { @@ -65,6 +63,7 @@ class EmailConfirmation extends UnlistedSpecialPage { } if ( $code === null || $code === '' ) { + $this->requireLogin( 'confirmemail_needlogin' ); if ( Sanitizer::validateEmail( $this->getUser()->getEmail() ) ) { $this->showRequestForm(); } else { diff --git a/includes/specials/SpecialContributions.php b/includes/specials/SpecialContributions.php index 5a351a7967..431b556cb3 100644 --- a/includes/specials/SpecialContributions.php +++ b/includes/specials/SpecialContributions.php @@ -85,7 +85,7 @@ class SpecialContributions extends IncludableSpecialPage { return; } - $id = $userObj->getID(); + $id = $userObj->getId(); if ( $this->opts['contribs'] != 'newbie' ) { $target = $nt->getText(); @@ -673,508 +673,3 @@ class SpecialContributions extends IncludableSpecialPage { return 'users'; } } - -/** - * Pager for Special:Contributions - * @ingroup SpecialPage Pager - */ -class ContribsPager extends ReverseChronologicalPager { - public $mDefaultDirection = IndexPager::DIR_DESCENDING; - public $messages; - public $target; - public $namespace = ''; - public $mDb; - public $preventClickjacking = false; - - /** @var IDatabase */ - public $mDbSecondary; - - /** - * @var array - */ - protected $mParentLens; - - function __construct( IContextSource $context, array $options ) { - parent::__construct( $context ); - - $msgs = [ - 'diff', - 'hist', - 'pipe-separator', - 'uctop' - ]; - - foreach ( $msgs as $msg ) { - $this->messages[$msg] = $this->msg( $msg )->escaped(); - } - - $this->target = isset( $options['target'] ) ? $options['target'] : ''; - $this->contribs = isset( $options['contribs'] ) ? $options['contribs'] : 'users'; - $this->namespace = isset( $options['namespace'] ) ? $options['namespace'] : ''; - $this->tagFilter = isset( $options['tagfilter'] ) ? $options['tagfilter'] : false; - $this->nsInvert = isset( $options['nsInvert'] ) ? $options['nsInvert'] : false; - $this->associated = isset( $options['associated'] ) ? $options['associated'] : false; - - $this->deletedOnly = !empty( $options['deletedOnly'] ); - $this->topOnly = !empty( $options['topOnly'] ); - $this->newOnly = !empty( $options['newOnly'] ); - - $year = isset( $options['year'] ) ? $options['year'] : false; - $month = isset( $options['month'] ) ? $options['month'] : false; - $this->getDateCond( $year, $month ); - - // Most of this code will use the 'contributions' group DB, which can map to slaves - // with extra user based indexes or partioning by user. The additional metadata - // queries should use a regular slave since the lookup pattern is not all by user. - $this->mDbSecondary = wfGetDB( DB_SLAVE ); // any random slave - $this->mDb = wfGetDB( DB_SLAVE, 'contributions' ); - } - - function getDefaultQuery() { - $query = parent::getDefaultQuery(); - $query['target'] = $this->target; - - return $query; - } - - /** - * This method basically executes the exact same code as the parent class, though with - * a hook added, to allow extensions to add additional queries. - * - * @param string $offset Index offset, inclusive - * @param int $limit Exact query limit - * @param bool $descending Query direction, false for ascending, true for descending - * @return ResultWrapper - */ - function reallyDoQuery( $offset, $limit, $descending ) { - list( $tables, $fields, $conds, $fname, $options, $join_conds ) = $this->buildQueryInfo( - $offset, - $limit, - $descending - ); - - /* - * This hook will allow extensions to add in additional queries, so they can get their data - * in My Contributions as well. Extensions should append their results to the $data array. - * - * Extension queries have to implement the navbar requirement as well. They should - * - have a column aliased as $pager->getIndexField() - * - have LIMIT set - * - have a WHERE-clause that compares the $pager->getIndexField()-equivalent column to the offset - * - have the ORDER BY specified based upon the details provided by the navbar - * - * See includes/Pager.php buildQueryInfo() method on how to build LIMIT, WHERE & ORDER BY - * - * &$data: an array of results of all contribs queries - * $pager: the ContribsPager object hooked into - * $offset: see phpdoc above - * $limit: see phpdoc above - * $descending: see phpdoc above - */ - $data = [ $this->mDb->select( - $tables, $fields, $conds, $fname, $options, $join_conds - ) ]; - Hooks::run( - 'ContribsPager::reallyDoQuery', - [ &$data, $this, $offset, $limit, $descending ] - ); - - $result = []; - - // loop all results and collect them in an array - foreach ( $data as $query ) { - foreach ( $query as $i => $row ) { - // use index column as key, allowing us to easily sort in PHP - $result[$row->{$this->getIndexField()} . "-$i"] = $row; - } - } - - // sort results - if ( $descending ) { - ksort( $result ); - } else { - krsort( $result ); - } - - // enforce limit - $result = array_slice( $result, 0, $limit ); - - // get rid of array keys - $result = array_values( $result ); - - return new FakeResultWrapper( $result ); - } - - function getQueryInfo() { - list( $tables, $index, $userCond, $join_cond ) = $this->getUserCond(); - - $user = $this->getUser(); - $conds = array_merge( $userCond, $this->getNamespaceCond() ); - - // Paranoia: avoid brute force searches (bug 17342) - if ( !$user->isAllowed( 'deletedhistory' ) ) { - $conds[] = $this->mDb->bitAnd( 'rev_deleted', Revision::DELETED_USER ) . ' = 0'; - } elseif ( !$user->isAllowedAny( 'suppressrevision', 'viewsuppressed' ) ) { - $conds[] = $this->mDb->bitAnd( 'rev_deleted', Revision::SUPPRESSED_USER ) . - ' != ' . Revision::SUPPRESSED_USER; - } - - # Don't include orphaned revisions - $join_cond['page'] = Revision::pageJoinCond(); - # Get the current user name for accounts - $join_cond['user'] = Revision::userJoinCond(); - - $options = []; - if ( $index ) { - $options['USE INDEX'] = [ 'revision' => $index ]; - } - - $queryInfo = [ - 'tables' => $tables, - 'fields' => array_merge( - Revision::selectFields(), - Revision::selectUserFields(), - [ 'page_namespace', 'page_title', 'page_is_new', - 'page_latest', 'page_is_redirect', 'page_len' ] - ), - 'conds' => $conds, - 'options' => $options, - 'join_conds' => $join_cond - ]; - - ChangeTags::modifyDisplayQuery( - $queryInfo['tables'], - $queryInfo['fields'], - $queryInfo['conds'], - $queryInfo['join_conds'], - $queryInfo['options'], - $this->tagFilter - ); - - Hooks::run( 'ContribsPager::getQueryInfo', [ &$this, &$queryInfo ] ); - - return $queryInfo; - } - - function getUserCond() { - $condition = []; - $join_conds = []; - $tables = [ 'revision', 'page', 'user' ]; - $index = false; - if ( $this->contribs == 'newbie' ) { - $max = $this->mDb->selectField( 'user', 'max(user_id)', false, __METHOD__ ); - $condition[] = 'rev_user >' . (int)( $max - $max / 100 ); - # ignore local groups with the bot right - # @todo FIXME: Global groups may have 'bot' rights - $groupsWithBotPermission = User::getGroupsWithPermission( 'bot' ); - if ( count( $groupsWithBotPermission ) ) { - $tables[] = 'user_groups'; - $condition[] = 'ug_group IS NULL'; - $join_conds['user_groups'] = [ - 'LEFT JOIN', [ - 'ug_user = rev_user', - 'ug_group' => $groupsWithBotPermission - ] - ]; - } - } else { - $uid = User::idFromName( $this->target ); - if ( $uid ) { - $condition['rev_user'] = $uid; - $index = 'user_timestamp'; - } else { - $condition['rev_user_text'] = $this->target; - $index = 'usertext_timestamp'; - } - } - - if ( $this->deletedOnly ) { - $condition[] = 'rev_deleted != 0'; - } - - if ( $this->topOnly ) { - $condition[] = 'rev_id = page_latest'; - } - - if ( $this->newOnly ) { - $condition[] = 'rev_parent_id = 0'; - } - - return [ $tables, $index, $condition, $join_conds ]; - } - - function getNamespaceCond() { - if ( $this->namespace !== '' ) { - $selectedNS = $this->mDb->addQuotes( $this->namespace ); - $eq_op = $this->nsInvert ? '!=' : '='; - $bool_op = $this->nsInvert ? 'AND' : 'OR'; - - if ( !$this->associated ) { - return [ "page_namespace $eq_op $selectedNS" ]; - } - - $associatedNS = $this->mDb->addQuotes( - MWNamespace::getAssociated( $this->namespace ) - ); - - return [ - "page_namespace $eq_op $selectedNS " . - $bool_op . - " page_namespace $eq_op $associatedNS" - ]; - } - - return []; - } - - function getIndexField() { - return 'rev_timestamp'; - } - - function doBatchLookups() { - # Do a link batch query - $this->mResult->seek( 0 ); - $parentRevIds = []; - $this->mParentLens = []; - $batch = new LinkBatch(); - # Give some pointers to make (last) links - foreach ( $this->mResult as $row ) { - if ( isset( $row->rev_parent_id ) && $row->rev_parent_id ) { - $parentRevIds[] = $row->rev_parent_id; - } - if ( isset( $row->rev_id ) ) { - $this->mParentLens[$row->rev_id] = $row->rev_len; - if ( $this->contribs === 'newbie' ) { // multiple users - $batch->add( NS_USER, $row->user_name ); - $batch->add( NS_USER_TALK, $row->user_name ); - } - $batch->add( $row->page_namespace, $row->page_title ); - } - } - # Fetch rev_len for revisions not already scanned above - $this->mParentLens += Revision::getParentLengths( - $this->mDbSecondary, - array_diff( $parentRevIds, array_keys( $this->mParentLens ) ) - ); - $batch->execute(); - $this->mResult->seek( 0 ); - } - - /** - * @return string - */ - function getStartBody() { - return "
    \n"; - } - - /** - * @return string - */ - function getEndBody() { - return "
\n"; - } - - /** - * Generates each row in the contributions list. - * - * Contributions which are marked "top" are currently on top of the history. - * For these contributions, a [rollback] link is shown for users with roll- - * back privileges. The rollback link restores the most recent version that - * was not written by the target user. - * - * @todo This would probably look a lot nicer in a table. - * @param object $row - * @return string - */ - function formatRow( $row ) { - - $ret = ''; - $classes = []; - - /* - * There may be more than just revision rows. To make sure that we'll only be processing - * revisions here, let's _try_ to build a revision out of our row (without displaying - * notices though) and then trying to grab data from the built object. If we succeed, - * we're definitely dealing with revision data and we may proceed, if not, we'll leave it - * to extensions to subscribe to the hook to parse the row. - */ - MediaWiki\suppressWarnings(); - try { - $rev = new Revision( $row ); - $validRevision = (bool)$rev->getId(); - } catch ( Exception $e ) { - $validRevision = false; - } - MediaWiki\restoreWarnings(); - - if ( $validRevision ) { - $classes = []; - - $page = Title::newFromRow( $row ); - $link = Linker::link( - $page, - htmlspecialchars( $page->getPrefixedText() ), - [ 'class' => 'mw-contributions-title' ], - $page->isRedirect() ? [ 'redirect' => 'no' ] : [] - ); - # Mark current revisions - $topmarktext = ''; - $user = $this->getUser(); - if ( $row->rev_id == $row->page_latest ) { - $topmarktext .= '' . $this->messages['uctop'] . ''; - # Add rollback link - if ( !$row->page_is_new && $page->quickUserCan( 'rollback', $user ) - && $page->quickUserCan( 'edit', $user ) - ) { - $this->preventClickjacking(); - $topmarktext .= ' ' . Linker::generateRollback( $rev, $this->getContext() ); - } - } - # Is there a visible previous revision? - if ( $rev->userCan( Revision::DELETED_TEXT, $user ) && $rev->getParentId() !== 0 ) { - $difftext = Linker::linkKnown( - $page, - $this->messages['diff'], - [], - [ - 'diff' => 'prev', - 'oldid' => $row->rev_id - ] - ); - } else { - $difftext = $this->messages['diff']; - } - $histlink = Linker::linkKnown( - $page, - $this->messages['hist'], - [], - [ 'action' => 'history' ] - ); - - if ( $row->rev_parent_id === null ) { - // For some reason rev_parent_id isn't populated for this row. - // Its rumoured this is true on wikipedia for some revisions (bug 34922). - // Next best thing is to have the total number of bytes. - $chardiff = ' . . '; - $chardiff .= Linker::formatRevisionSize( $row->rev_len ); - $chardiff .= ' . . '; - } else { - $parentLen = 0; - if ( isset( $this->mParentLens[$row->rev_parent_id] ) ) { - $parentLen = $this->mParentLens[$row->rev_parent_id]; - } - - $chardiff = ' . . '; - $chardiff .= ChangesList::showCharacterDifference( - $parentLen, - $row->rev_len, - $this->getContext() - ); - $chardiff .= ' . . '; - } - - $lang = $this->getLanguage(); - $comment = $lang->getDirMark() . Linker::revComment( $rev, false, true ); - $date = $lang->userTimeAndDate( $row->rev_timestamp, $user ); - if ( $rev->userCan( Revision::DELETED_TEXT, $user ) ) { - $d = Linker::linkKnown( - $page, - htmlspecialchars( $date ), - [ 'class' => 'mw-changeslist-date' ], - [ 'oldid' => intval( $row->rev_id ) ] - ); - } else { - $d = htmlspecialchars( $date ); - } - if ( $rev->isDeleted( Revision::DELETED_TEXT ) ) { - $d = '' . $d . ''; - } - - # Show user names for /newbies as there may be different users. - # Note that we already excluded rows with hidden user names. - if ( $this->contribs == 'newbie' ) { - $userlink = ' . . ' . $lang->getDirMark() - . Linker::userLink( $rev->getUser(), $rev->getUserText() ); - $userlink .= ' ' . $this->msg( 'parentheses' )->rawParams( - Linker::userTalkLink( $rev->getUser(), $rev->getUserText() ) )->escaped() . ' '; - } else { - $userlink = ''; - } - - if ( $rev->getParentId() === 0 ) { - $nflag = ChangesList::flag( 'newpage' ); - } else { - $nflag = ''; - } - - if ( $rev->isMinor() ) { - $mflag = ChangesList::flag( 'minor' ); - } else { - $mflag = ''; - } - - $del = Linker::getRevDeleteLink( $user, $rev, $page ); - if ( $del !== '' ) { - $del .= ' '; - } - - $diffHistLinks = $this->msg( 'parentheses' ) - ->rawParams( $difftext . $this->messages['pipe-separator'] . $histlink ) - ->escaped(); - $ret = "{$del}{$d} {$diffHistLinks}{$chardiff}{$nflag}{$mflag} "; - $ret .= "{$link}{$userlink} {$comment} {$topmarktext}"; - - # Denote if username is redacted for this edit - if ( $rev->isDeleted( Revision::DELETED_USER ) ) { - $ret .= " " . - $this->msg( 'rev-deleted-user-contribs' )->escaped() . - ""; - } - - # Tags, if any. - list( $tagSummary, $newClasses ) = ChangeTags::formatSummaryRow( - $row->ts_tags, - 'contributions', - $this->getContext() - ); - $classes = array_merge( $classes, $newClasses ); - $ret .= " $tagSummary"; - } - - // Let extensions add data - Hooks::run( 'ContributionsLineEnding', [ $this, &$ret, $row, &$classes ] ); - - if ( $classes === [] && $ret === '' ) { - wfDebug( "Dropping Special:Contribution row that could not be formatted\n" ); - $ret = "\n"; - } else { - $ret = Html::rawElement( 'li', [ 'class' => $classes ], $ret ) . "\n"; - } - - return $ret; - } - - /** - * Overwrite Pager function and return a helpful comment - * @return string - */ - function getSqlComment() { - if ( $this->namespace || $this->deletedOnly ) { - // potentially slow, see CR r58153 - return 'contributions page filtered for namespace or RevisionDeleted edits'; - } else { - return 'contributions page unfiltered'; - } - } - - protected function preventClickjacking() { - $this->preventClickjacking = true; - } - - /** - * @return bool - */ - public function getPreventClickjacking() { - return $this->preventClickjacking; - } -} diff --git a/includes/specials/SpecialDeletedContributions.php b/includes/specials/SpecialDeletedContributions.php index b790fdf5a8..190bf9f981 100644 --- a/includes/specials/SpecialDeletedContributions.php +++ b/includes/specials/SpecialDeletedContributions.php @@ -25,337 +25,6 @@ * Implements Special:DeletedContributions to display archived revisions * @ingroup SpecialPage */ -class DeletedContribsPager extends IndexPager { - public $mDefaultDirection = IndexPager::DIR_DESCENDING; - public $messages; - public $target; - public $namespace = ''; - public $mDb; - - /** - * @var string Navigation bar with paging links. - */ - protected $mNavigationBar; - - function __construct( IContextSource $context, $target, $namespace = false ) { - parent::__construct( $context ); - $msgs = [ 'deletionlog', 'undeleteviewlink', 'diff' ]; - foreach ( $msgs as $msg ) { - $this->messages[$msg] = $this->msg( $msg )->escaped(); - } - $this->target = $target; - $this->namespace = $namespace; - $this->mDb = wfGetDB( DB_SLAVE, 'contributions' ); - } - - function getDefaultQuery() { - $query = parent::getDefaultQuery(); - $query['target'] = $this->target; - - return $query; - } - - function getQueryInfo() { - list( $index, $userCond ) = $this->getUserCond(); - $conds = array_merge( $userCond, $this->getNamespaceCond() ); - $user = $this->getUser(); - // Paranoia: avoid brute force searches (bug 17792) - if ( !$user->isAllowed( 'deletedhistory' ) ) { - $conds[] = $this->mDb->bitAnd( 'ar_deleted', Revision::DELETED_USER ) . ' = 0'; - } elseif ( !$user->isAllowedAny( 'suppressrevision', 'viewsuppressed' ) ) { - $conds[] = $this->mDb->bitAnd( 'ar_deleted', Revision::SUPPRESSED_USER ) . - ' != ' . Revision::SUPPRESSED_USER; - } - - return [ - 'tables' => [ 'archive' ], - 'fields' => [ - 'ar_rev_id', 'ar_namespace', 'ar_title', 'ar_timestamp', 'ar_comment', - 'ar_minor_edit', 'ar_user', 'ar_user_text', 'ar_deleted' - ], - 'conds' => $conds, - 'options' => [ 'USE INDEX' => $index ] - ]; - } - - /** - * This method basically executes the exact same code as the parent class, though with - * a hook added, to allow extensions to add additional queries. - * - * @param string $offset Index offset, inclusive - * @param int $limit Exact query limit - * @param bool $descending Query direction, false for ascending, true for descending - * @return ResultWrapper - */ - function reallyDoQuery( $offset, $limit, $descending ) { - $data = [ parent::reallyDoQuery( $offset, $limit, $descending ) ]; - - // This hook will allow extensions to add in additional queries, nearly - // identical to ContribsPager::reallyDoQuery. - Hooks::run( - 'DeletedContribsPager::reallyDoQuery', - [ &$data, $this, $offset, $limit, $descending ] - ); - - $result = []; - - // loop all results and collect them in an array - foreach ( $data as $query ) { - foreach ( $query as $i => $row ) { - // use index column as key, allowing us to easily sort in PHP - $result[$row->{$this->getIndexField()} . "-$i"] = $row; - } - } - - // sort results - if ( $descending ) { - ksort( $result ); - } else { - krsort( $result ); - } - - // enforce limit - $result = array_slice( $result, 0, $limit ); - - // get rid of array keys - $result = array_values( $result ); - - return new FakeResultWrapper( $result ); - } - - function getUserCond() { - $condition = []; - - $condition['ar_user_text'] = $this->target; - $index = 'usertext_timestamp'; - - return [ $index, $condition ]; - } - - function getIndexField() { - return 'ar_timestamp'; - } - - function getStartBody() { - return "
    \n"; - } - - function getEndBody() { - return "
\n"; - } - - function getNavigationBar() { - if ( isset( $this->mNavigationBar ) ) { - return $this->mNavigationBar; - } - - $linkTexts = [ - 'prev' => $this->msg( 'pager-newer-n' )->numParams( $this->mLimit )->escaped(), - 'next' => $this->msg( 'pager-older-n' )->numParams( $this->mLimit )->escaped(), - 'first' => $this->msg( 'histlast' )->escaped(), - 'last' => $this->msg( 'histfirst' )->escaped() - ]; - - $pagingLinks = $this->getPagingLinks( $linkTexts ); - $limitLinks = $this->getLimitLinks(); - $lang = $this->getLanguage(); - $limits = $lang->pipeList( $limitLinks ); - - $firstLast = $lang->pipeList( [ $pagingLinks['first'], $pagingLinks['last'] ] ); - $firstLast = $this->msg( 'parentheses' )->rawParams( $firstLast )->escaped(); - $prevNext = $this->msg( 'viewprevnext' ) - ->rawParams( - $pagingLinks['prev'], - $pagingLinks['next'], - $limits - )->escaped(); - $separator = $this->msg( 'word-separator' )->escaped(); - $this->mNavigationBar = $firstLast . $separator . $prevNext; - - return $this->mNavigationBar; - } - - function getNamespaceCond() { - if ( $this->namespace !== '' ) { - return [ 'ar_namespace' => (int)$this->namespace ]; - } else { - return []; - } - } - - /** - * Generates each row in the contributions list. - * - * @todo This would probably look a lot nicer in a table. - * @param stdClass $row - * @return string - */ - function formatRow( $row ) { - $ret = ''; - $classes = []; - - /* - * There may be more than just revision rows. To make sure that we'll only be processing - * revisions here, let's _try_ to build a revision out of our row (without displaying - * notices though) and then trying to grab data from the built object. If we succeed, - * we're definitely dealing with revision data and we may proceed, if not, we'll leave it - * to extensions to subscribe to the hook to parse the row. - */ - MediaWiki\suppressWarnings(); - try { - $rev = Revision::newFromArchiveRow( $row ); - $validRevision = (bool)$rev->getId(); - } catch ( Exception $e ) { - $validRevision = false; - } - MediaWiki\restoreWarnings(); - - if ( $validRevision ) { - $ret = $this->formatRevisionRow( $row ); - } - - // Let extensions add data - Hooks::run( 'DeletedContributionsLineEnding', [ $this, &$ret, $row, &$classes ] ); - - if ( $classes === [] && $ret === '' ) { - wfDebug( "Dropping Special:DeletedContribution row that could not be formatted\n" ); - $ret = "\n"; - } else { - $ret = Html::rawElement( 'li', [ 'class' => $classes ], $ret ) . "\n"; - } - - return $ret; - } - - /** - * Generates each row in the contributions list for archive entries. - * - * Contributions which are marked "top" are currently on top of the history. - * For these contributions, a [rollback] link is shown for users with sysop - * privileges. The rollback link restores the most recent version that was not - * written by the target user. - * - * @todo This would probably look a lot nicer in a table. - * @param stdClass $row - * @return string - */ - function formatRevisionRow( $row ) { - $page = Title::makeTitle( $row->ar_namespace, $row->ar_title ); - - $rev = new Revision( [ - 'title' => $page, - 'id' => $row->ar_rev_id, - 'comment' => $row->ar_comment, - 'user' => $row->ar_user, - 'user_text' => $row->ar_user_text, - 'timestamp' => $row->ar_timestamp, - 'minor_edit' => $row->ar_minor_edit, - 'deleted' => $row->ar_deleted, - ] ); - - $undelete = SpecialPage::getTitleFor( 'Undelete' ); - - $logs = SpecialPage::getTitleFor( 'Log' ); - $dellog = Linker::linkKnown( - $logs, - $this->messages['deletionlog'], - [], - [ - 'type' => 'delete', - 'page' => $page->getPrefixedText() - ] - ); - - $reviewlink = Linker::linkKnown( - SpecialPage::getTitleFor( 'Undelete', $page->getPrefixedDBkey() ), - $this->messages['undeleteviewlink'] - ); - - $user = $this->getUser(); - - if ( $user->isAllowed( 'deletedtext' ) ) { - $last = Linker::linkKnown( - $undelete, - $this->messages['diff'], - [], - [ - 'target' => $page->getPrefixedText(), - 'timestamp' => $rev->getTimestamp(), - 'diff' => 'prev' - ] - ); - } else { - $last = $this->messages['diff']; - } - - $comment = Linker::revComment( $rev ); - $date = $this->getLanguage()->userTimeAndDate( $rev->getTimestamp(), $user ); - $date = htmlspecialchars( $date ); - - if ( !$user->isAllowed( 'undelete' ) || !$rev->userCan( Revision::DELETED_TEXT, $user ) ) { - $link = $date; // unusable link - } else { - $link = Linker::linkKnown( - $undelete, - $date, - [ 'class' => 'mw-changeslist-date' ], - [ - 'target' => $page->getPrefixedText(), - 'timestamp' => $rev->getTimestamp() - ] - ); - } - // Style deleted items - if ( $rev->isDeleted( Revision::DELETED_TEXT ) ) { - $link = '' . $link . ''; - } - - $pagelink = Linker::link( - $page, - null, - [ 'class' => 'mw-changeslist-title' ] - ); - - if ( $rev->isMinor() ) { - $mflag = ChangesList::flag( 'minor' ); - } else { - $mflag = ''; - } - - // Revision delete link - $del = Linker::getRevDeleteLink( $user, $rev, $page ); - if ( $del ) { - $del .= ' '; - } - - $tools = Html::rawElement( - 'span', - [ 'class' => 'mw-deletedcontribs-tools' ], - $this->msg( 'parentheses' )->rawParams( $this->getLanguage()->pipeList( - [ $last, $dellog, $reviewlink ] ) )->escaped() - ); - - $separator = '. .'; - $ret = "{$del}{$link} {$tools} {$separator} {$mflag} {$pagelink} {$comment}"; - - # Denote if username is redacted for this edit - if ( $rev->isDeleted( Revision::DELETED_USER ) ) { - $ret .= " " . $this->msg( 'rev-deleted-user-contribs' )->escaped() . ""; - } - - return $ret; - } - - /** - * Get the Database object in use - * - * @return IDatabase - */ - public function getDatabase() { - return $this->mDb; - } -} - class DeletedContributionsPage extends SpecialPage { function __construct() { parent::__construct( 'DeletedContributions', 'deletedhistory', @@ -470,7 +139,7 @@ class DeletedContributionsPage extends SpecialPage { } $links = ''; $nt = $userObj->getUserPage(); - $id = $userObj->getID(); + $id = $userObj->getId(); $talk = $nt->getTalkPage(); if ( $talk ) { # Talk page link diff --git a/includes/specials/SpecialEditWatchlist.php b/includes/specials/SpecialEditWatchlist.php index e76988dd7d..c1abd6ecbf 100644 --- a/includes/specials/SpecialEditWatchlist.php +++ b/includes/specials/SpecialEditWatchlist.php @@ -49,10 +49,26 @@ class SpecialEditWatchlist extends UnlistedSpecialPage { private $badItems = []; + /** + * @var TitleParser + */ + private $titleParser; + public function __construct() { parent::__construct( 'EditWatchlist', 'editmywatchlist' ); } + /** + * Initialize any services we'll need (unless it has already been provided via a setter). + * This allows for dependency injection even though we don't control object creation. + */ + private function initServices() { + if ( !$this->titleParser ) { + $lang = $this->getContext()->getLanguage(); + $this->titleParser = new MediaWikiTitleCodec( $lang, GenderCache::singleton() ); + } + } + public function doesWrites() { return true; } @@ -63,6 +79,7 @@ class SpecialEditWatchlist extends UnlistedSpecialPage { * @param int $mode */ public function execute( $mode ) { + $this->initServices(); $this->setHeaders(); # Anons don't get a watchlist @@ -307,32 +324,25 @@ class SpecialEditWatchlist extends UnlistedSpecialPage { private function getWatchlist() { $list = []; - $index = $this->getRequest()->wasPosted() ? DB_MASTER : DB_SLAVE; - $dbr = wfGetDB( $index ); - - $res = $dbr->select( - 'watchlist', - [ - 'wl_namespace', 'wl_title' - ], [ - 'wl_user' => $this->getUser()->getId(), - ], - __METHOD__ + $watchedItems = WatchedItemStore::getDefaultInstance()->getWatchedItemsForUser( + $this->getUser(), + [ 'forWrite' => $this->getRequest()->wasPosted() ] ); - if ( $res->numRows() > 0 ) { + if ( $watchedItems ) { /** @var Title[] $titles */ $titles = []; - foreach ( $res as $row ) { - $title = Title::makeTitleSafe( $row->wl_namespace, $row->wl_title ); + foreach ( $watchedItems as $watchedItem ) { + $namespace = $watchedItem->getLinkTarget()->getNamespace(); + $dbKey = $watchedItem->getLinkTarget()->getDBkey(); + $title = Title::makeTitleSafe( $namespace, $dbKey ); - if ( $this->checkTitle( $title, $row->wl_namespace, $row->wl_title ) + if ( $this->checkTitle( $title, $namespace, $dbKey ) && !$title->isTalkPage() ) { $titles[] = $title; } } - $res->free(); GenderCache::singleton()->doTitlesArray( $titles ); @@ -354,22 +364,18 @@ class SpecialEditWatchlist extends UnlistedSpecialPage { */ protected function getWatchlistInfo() { $titles = []; - $dbr = wfGetDB( DB_SLAVE ); - $res = $dbr->select( - [ 'watchlist' ], - [ 'wl_namespace', 'wl_title' ], - [ 'wl_user' => $this->getUser()->getId() ], - __METHOD__, - [ 'ORDER BY' => [ 'wl_namespace', 'wl_title' ] ] - ); + $watchedItems = WatchedItemStore::getDefaultInstance() + ->getWatchedItemsForUser( $this->getUser(), [ 'sort' => WatchedItemStore::SORT_ASC ] ); $lb = new LinkBatch(); - foreach ( $res as $row ) { - $lb->add( $row->wl_namespace, $row->wl_title ); - if ( !MWNamespace::isTalk( $row->wl_namespace ) ) { - $titles[$row->wl_namespace][$row->wl_title] = 1; + foreach ( $watchedItems as $watchedItem ) { + $namespace = $watchedItem->getLinkTarget()->getNamespace(); + $dbKey = $watchedItem->getLinkTarget()->getDBkey(); + $lb->add( $namespace, $dbKey ); + if ( !MWNamespace::isTalk( $namespace ) ) { + $titles[$namespace][$dbKey] = 1; } } @@ -421,7 +427,7 @@ class SpecialEditWatchlist extends UnlistedSpecialPage { $action = $title ? 'cleaning up' : 'deleting'; wfDebug( "User {$user->getName()} has broken watchlist item ns($namespace):$dbKey, $action.\n" ); - $store->removeWatch( $user, new TitleValue( $namespace, $dbKey ) ); + $store->removeWatch( $user, new TitleValue( (int)$namespace, $dbKey ) ); // Can't just do an UPDATE instead of DELETE/INSERT due to unique index if ( $title ) { @@ -443,39 +449,32 @@ class SpecialEditWatchlist extends UnlistedSpecialPage { } /** - * Add a list of titles to a user's watchlist - * - * $titles can be an array of strings or Title objects; the former - * is preferred, since Titles are very memory-heavy + * Add a list of targets to a user's watchlist * - * @param array $titles Array of strings, or Title objects + * @param string[]|LinkTarget[] $targets */ - private function watchTitles( $titles ) { - $dbw = wfGetDB( DB_MASTER ); - $rows = []; - - foreach ( $titles as $title ) { - if ( !$title instanceof Title ) { - $title = Title::newFromText( $title ); + private function watchTitles( $targets ) { + $expandedTargets = []; + foreach ( $targets as $target ) { + if ( !$target instanceof LinkTarget ) { + try { + $target = $this->titleParser->parseTitle( $target, NS_MAIN ); + } + catch ( MalformedTitleException $e ) { + continue; + } } - if ( $title instanceof Title ) { - $rows[] = [ - 'wl_user' => $this->getUser()->getId(), - 'wl_namespace' => MWNamespace::getSubject( $title->getNamespace() ), - 'wl_title' => $title->getDBkey(), - 'wl_notificationtimestamp' => null, - ]; - $rows[] = [ - 'wl_user' => $this->getUser()->getId(), - 'wl_namespace' => MWNamespace::getTalk( $title->getNamespace() ), - 'wl_title' => $title->getDBkey(), - 'wl_notificationtimestamp' => null, - ]; - } + $ns = $target->getNamespace(); + $dbKey = $target->getDBkey(); + $expandedTargets[] = new TitleValue( MWNamespace::getSubject( $ns ), $dbKey ); + $expandedTargets[] = new TitleValue( MWNamespace::getTalk( $ns ), $dbKey ); } - $dbw->insert( 'watchlist', $rows, __METHOD__, 'IGNORE' ); + WatchedItemStore::getDefaultInstance()->addWatchBatchForUser( + $this->getUser(), + $expandedTargets + ); } /** diff --git a/includes/specials/SpecialEmailuser.php b/includes/specials/SpecialEmailuser.php index 3528be0dc0..fb1943fb1e 100644 --- a/includes/specials/SpecialEmailuser.php +++ b/includes/specials/SpecialEmailuser.php @@ -154,6 +154,10 @@ class SpecialEmailUser extends UnlistedSpecialPage { $this->mTargetObj = $ret; + // Set the 'relevant user' in the skin, so it displays links like Contributions, + // User logs, UserRights, etc. + $this->getSkin()->setRelevantUser( $this->mTargetObj ); + $context = new DerivativeContext( $this->getContext() ); $context->setTitle( $this->getPageTitle() ); // Remove subpage $form = new HTMLForm( $this->getFormFields(), $context ); diff --git a/includes/specials/SpecialFileDuplicateSearch.php b/includes/specials/SpecialFileDuplicateSearch.php index 35861e3dfb..bb82d03da9 100644 --- a/includes/specials/SpecialFileDuplicateSearch.php +++ b/includes/specials/SpecialFileDuplicateSearch.php @@ -79,7 +79,7 @@ class FileDuplicateSearchPage extends QueryPage { } $html[] = $this->closeList(); - $this->getOutput()->addHtml( implode( "\n", $html ) ); + $this->getOutput()->addHTML( implode( "\n", $html ) ); } public function getQueryInfo() { @@ -118,19 +118,17 @@ class FileDuplicateSearchPage extends QueryPage { 'id' => 'filename', 'size' => 50, 'value' => $this->filename, - 'cssclass' => 'mw-ui-input-inline' ], ]; $hiddenFields = [ - 'title' => $this->getPageTitle()->getPrefixedDBKey(), + 'title' => $this->getPageTitle()->getPrefixedDBkey(), ]; - $htmlForm = HTMLForm::factory( 'inline', $formFields, $this->getContext() ); + $htmlForm = HTMLForm::factory( 'ooui', $formFields, $this->getContext() ); $htmlForm->addHiddenFields( $hiddenFields ); $htmlForm->setAction( wfScript() ); $htmlForm->setMethod( 'get' ); $htmlForm->setSubmitProgressive(); $htmlForm->setSubmitTextMsg( $this->msg( 'fileduplicatesearch-submit' ) ); - $htmlForm->setWrapperLegendMsg( 'fileduplicatesearch-legend' ); // The form should be visible always, even if it was submitted (e.g. to perform another action). // To bypass the callback validation of HTMLForm, use prepareForm() and displayForm(). @@ -246,11 +244,11 @@ class FileDuplicateSearchPage extends QueryPage { // No prefix suggestion outside of file namespace return []; } - $search = SearchEngine::create(); - $search->setLimitOffset( $limit, $offset ); + $searchEngine = SearchEngine::create(); + $searchEngine->setLimitOffset( $limit, $offset ); // Autocomplete subpage the same as a normal search, but just for files - $search->setNamespaces( [ NS_FILE ] ); - $result = $search->defaultPrefixSearch( $search ); + $searchEngine->setNamespaces( [ NS_FILE ] ); + $result = $searchEngine->defaultPrefixSearch( $search ); return array_map( function ( Title $t ) { // Remove namespace in search suggestion diff --git a/includes/specials/SpecialJavaScriptTest.php b/includes/specials/SpecialJavaScriptTest.php index e20382cba0..5d36a3c676 100644 --- a/includes/specials/SpecialJavaScriptTest.php +++ b/includes/specials/SpecialJavaScriptTest.php @@ -25,12 +25,6 @@ * @ingroup SpecialPage */ class SpecialJavaScriptTest extends SpecialPage { - /** - * @var array Supported frameworks. - */ - private static $frameworks = [ - 'qunit', - ]; public function __construct() { parent::__construct( 'JavaScriptTest' ); @@ -42,102 +36,33 @@ class SpecialJavaScriptTest extends SpecialPage { $this->setHeaders(); $out->disallowUserJs(); - if ( $par === null ) { - // No framework specified - // If only one framework is configured, redirect to it. Otherwise display a list. - if ( count( self::$frameworks ) === 1 ) { - $out->redirect( $this->getPageTitle( self::$frameworks[0] . '/plain' )->getLocalURL() ); - return; - } - $out->setStatusCode( 404 ); - $out->setPageTitle( $this->msg( 'javascripttest' ) ); - $out->addHTML( - $this->msg( 'javascripttest-pagetext-noframework' )->parseAsBlock() - . $this->getFrameworkListHtml() - ); - return; - } - - // Determine framework and mode - $pars = explode( '/', $par, 2 ); - - $framework = $pars[0]; - if ( !in_array( $framework, self::$frameworks ) ) { - // Framework not found - $out->setStatusCode( 404 ); - $out->addHTML( - '
' - . $this->msg( 'javascripttest-pagetext-unknownframework' ) - ->plaintextParams( $par )->parseAsBlock() - . '
' - . $this->getFrameworkListHtml() - ); - return; - } - // This special page is disabled by default ($wgEnableJavaScriptTest), and contains // no sensitive data. In order to allow TestSwarm to embed it into a test client window, // we need to allow iframing of this page. $out->allowClickjacking(); - if ( count( self::$frameworks ) !== 1 ) { - // If there's only one framework, don't set the subtitle since it - // is going to redirect back to this page - $out->setSubtitle( - $this->msg( 'javascripttest-backlink' ) - ->rawParams( Linker::linkKnown( $this->getPageTitle() ) ) - ); - } - // Custom actions - if ( isset( $pars[1] ) ) { - $action = $pars[1]; - if ( !in_array( $action, [ 'export', 'plain' ] ) ) { - $out->setStatusCode( 404 ); - $out->addHTML( - '
' - . $this->msg( 'javascripttest-pagetext-unknownaction' ) - ->plaintextParams( $action )->parseAsBlock() - . '
' - ); - return; - } - $method = $action . ucfirst( $framework ); - $this->$method(); + // Sub resource: Internal JavaScript export bundle for QUnit + if ( $par === 'qunit/export' ) { + $this->exportQUnit(); return; } - $method = 'view' . ucfirst( $framework ); - $this->$method(); - $out->setPageTitle( $this->msg( - 'javascripttest-title', - // Messages: javascripttest-qunit-name - $this->msg( "javascripttest-$framework-name" )->plain() - ) ); - } - - /** - * Get a list of frameworks (including introduction paragraph and links - * to the framework run pages) - * - * @return string HTML - */ - private function getFrameworkListHtml() { - $list = '
    '; - foreach ( self::$frameworks as $framework ) { - $list .= Html::rawElement( - 'li', - [], - Linker::link( - $this->getPageTitle( $framework ), - // Message: javascripttest-qunit-name - $this->msg( "javascripttest-$framework-name" )->escaped() - ) - ); + // Regular view: QUnit test runner + // (Support "/qunit" and "/qunit/plain" for backwards compatibility) + if ( $par === null || $par === '' || $par === 'qunit' || $par === 'qunit/plain' ) { + $this->plainQUnit(); + return; } - $list .= '
'; - return $this->msg( 'javascripttest-pagetext-frameworks' )->rawParams( $list ) - ->parseAsBlock(); + // Unknown action + $out->setStatusCode( 404 ); + $out->setPageTitle( $this->msg( 'javascripttest' ) ); + $out->addHTML( + '
' + . $this->msg( 'javascripttest-pagetext-unknownaction' ) + ->plaintextParams( $par )->parseAsBlock() + . '
' + ); } /** @@ -152,37 +77,6 @@ class SpecialJavaScriptTest extends SpecialPage { return "
$summary
"; } - /** - * Run the test suite on the Special page. - * - * Rendered by OutputPage and Skin. - */ - private function viewQUnit() { - $out = $this->getOutput(); - - $modules = $out->getResourceLoader()->getTestModuleNames( 'qunit' ); - - $baseHtml = << -
- -HTML; - - $out->addHtml( $this->getSummaryHtml() . $baseHtml ); - - // The testrunner configures QUnit and essentially depends on it. However, test suites - // are reusable in environments that preload QUnit (or a compatibility interface to - // another framework). Therefore we have to load it ourselves. - $out->addHtml( ResourceLoader::makeInlineScript( - Xml::encodeJsCall( 'mw.loader.using', [ - [ 'jquery.qunit', 'jquery.qunit.completenessTest' ], - new XmlJsCode( - 'function () {' . Xml::encodeJsCall( 'mw.loader.load', [ $modules ] ) . '}' - ) - ] ) - ) ); - } - /** * Generate self-sufficient JavaScript payload to run the tests elsewhere. * diff --git a/includes/specials/SpecialLinkSearch.php b/includes/specials/SpecialLinkSearch.php index 2a7046ecbd..1ecbee007e 100644 --- a/includes/specials/SpecialLinkSearch.php +++ b/includes/specials/SpecialLinkSearch.php @@ -299,4 +299,14 @@ class LinkSearchPage extends QueryPage { protected function getGroupName() { return 'redirects'; } + + /** + * enwiki complained about low limits on this special page + * + * @see T130058 + * @todo FIXME This special page should not use LIMIT for paging + */ + protected function getMaxResults() { + return max( parent::getMaxResults(), 60000 ); + } } diff --git a/includes/specials/SpecialListDuplicatedFiles.php b/includes/specials/SpecialListDuplicatedFiles.php index ed7e9549d5..49fa417c0e 100644 --- a/includes/specials/SpecialListDuplicatedFiles.php +++ b/includes/specials/SpecialListDuplicatedFiles.php @@ -96,12 +96,12 @@ class ListDuplicatedFilesPage extends QueryPage { // Future version might include a list of the first 5 duplicates // perhaps separated by an "↔". $image1 = Title::makeTitle( $result->namespace, $result->title ); - $dupeSearch = SpecialPage::getTitleFor( 'FileDuplicateSearch', $image1->getDBKey() ); + $dupeSearch = SpecialPage::getTitleFor( 'FileDuplicateSearch', $image1->getDBkey() ); $msg = $this->msg( 'listduplicatedfiles-entry' ) ->params( $image1->getText() ) ->numParams( $result->value - 1 ) - ->params( $dupeSearch->getPrefixedDBKey() ); + ->params( $dupeSearch->getPrefixedDBkey() ); return $msg->parse(); } diff --git a/includes/specials/SpecialListfiles.php b/includes/specials/SpecialListfiles.php index 16471feb71..e6e1048cd6 100644 --- a/includes/specials/SpecialListfiles.php +++ b/includes/specials/SpecialListfiles.php @@ -52,6 +52,8 @@ class SpecialListFiles extends IncludableSpecialPage { if ( $this->including() ) { $out->addParserOutputContent( $pager->getBodyOutput() ); } else { + $user = $pager->getRelevantUser(); + $this->getSkin()->setRelevantUser( $user ); $pager->getForm(); $out->addParserOutputContent( $pager->getFullOutput() ); } @@ -79,555 +81,3 @@ class SpecialListFiles extends IncludableSpecialPage { return 'media'; } } - -/** - * @ingroup SpecialPage Pager - */ -class ImageListPager extends TablePager { - protected $mFieldNames = null; - - // Subclasses should override buildQueryConds instead of using $mQueryConds variable. - protected $mQueryConds = []; - - protected $mUserName = null; - - protected $mSearch = ''; - - protected $mIncluding = false; - - protected $mShowAll = false; - - protected $mTableName = 'image'; - - function __construct( IContextSource $context, $userName = null, $search = '', - $including = false, $showAll = false - ) { - $this->setContext( $context ); - $this->mIncluding = $including; - $this->mShowAll = $showAll; - - if ( $userName !== null && $userName !== '' ) { - $nt = Title::newFromText( $userName, NS_USER ); - $user = User::newFromName( $userName, false ); - if ( !is_null( $nt ) ) { - $this->mUserName = $nt->getText(); - } - if ( !$user || ( $user->isAnon() && !User::isIP( $user->getName() ) ) ) { - $this->getOutput()->wrapWikiMsg( - "
\n$1\n
", - [ - 'listfiles-userdoesnotexist', - wfEscapeWikiText( $userName ), - ] - ); - } - - } - - if ( $search !== '' && !$this->getConfig()->get( 'MiserMode' ) ) { - $this->mSearch = $search; - $nt = Title::newFromText( $this->mSearch ); - - if ( $nt ) { - $dbr = wfGetDB( DB_SLAVE ); - $this->mQueryConds[] = 'LOWER(img_name)' . - $dbr->buildLike( $dbr->anyString(), - strtolower( $nt->getDBkey() ), $dbr->anyString() ); - } - } - - if ( !$including ) { - if ( $this->getRequest()->getText( 'sort', 'img_date' ) == 'img_date' ) { - $this->mDefaultDirection = IndexPager::DIR_DESCENDING; - } else { - $this->mDefaultDirection = IndexPager::DIR_ASCENDING; - } - } else { - $this->mDefaultDirection = IndexPager::DIR_DESCENDING; - } - - parent::__construct( $context ); - } - - /** - * Build the where clause of the query. - * - * Replaces the older mQueryConds member variable. - * @param string $table Either "image" or "oldimage" - * @return array The query conditions. - */ - protected function buildQueryConds( $table ) { - $prefix = $table === 'image' ? 'img' : 'oi'; - $conds = []; - - if ( !is_null( $this->mUserName ) ) { - $conds[$prefix . '_user_text'] = $this->mUserName; - } - - if ( $this->mSearch !== '' ) { - $nt = Title::newFromText( $this->mSearch ); - if ( $nt ) { - $dbr = wfGetDB( DB_SLAVE ); - $conds[] = 'LOWER(' . $prefix . '_name)' . - $dbr->buildLike( $dbr->anyString(), - strtolower( $nt->getDBkey() ), $dbr->anyString() ); - } - } - - if ( $table === 'oldimage' ) { - // Don't want to deal with revdel. - // Future fixme: Show partial information as appropriate. - // Would have to be careful about filtering by username when username is deleted. - $conds['oi_deleted'] = 0; - } - - // Add mQueryConds in case anyone was subclassing and using the old variable. - return $conds + $this->mQueryConds; - } - - /** - * @return array - */ - function getFieldNames() { - if ( !$this->mFieldNames ) { - $this->mFieldNames = [ - 'img_timestamp' => $this->msg( 'listfiles_date' )->text(), - 'img_name' => $this->msg( 'listfiles_name' )->text(), - 'thumb' => $this->msg( 'listfiles_thumb' )->text(), - 'img_size' => $this->msg( 'listfiles_size' )->text(), - ]; - if ( is_null( $this->mUserName ) ) { - // Do not show username if filtering by username - $this->mFieldNames['img_user_text'] = $this->msg( 'listfiles_user' )->text(); - } - // img_description down here, in order so that its still after the username field. - $this->mFieldNames['img_description'] = $this->msg( 'listfiles_description' )->text(); - - if ( !$this->getConfig()->get( 'MiserMode' ) && !$this->mShowAll ) { - $this->mFieldNames['count'] = $this->msg( 'listfiles_count' )->text(); - } - if ( $this->mShowAll ) { - $this->mFieldNames['top'] = $this->msg( 'listfiles-latestversion' )->text(); - } - } - - return $this->mFieldNames; - } - - function isFieldSortable( $field ) { - if ( $this->mIncluding ) { - return false; - } - $sortable = [ 'img_timestamp', 'img_name', 'img_size' ]; - /* For reference, the indicies we can use for sorting are: - * On the image table: img_usertext_timestamp, img_size, img_timestamp - * On oldimage: oi_usertext_timestamp, oi_name_timestamp - * - * In particular that means we cannot sort by timestamp when not filtering - * by user and including old images in the results. Which is sad. - */ - if ( $this->getConfig()->get( 'MiserMode' ) && !is_null( $this->mUserName ) ) { - // If we're sorting by user, the index only supports sorting by time. - if ( $field === 'img_timestamp' ) { - return true; - } else { - return false; - } - } elseif ( $this->getConfig()->get( 'MiserMode' ) - && $this->mShowAll /* && mUserName === null */ - ) { - // no oi_timestamp index, so only alphabetical sorting in this case. - if ( $field === 'img_name' ) { - return true; - } else { - return false; - } - } - - return in_array( $field, $sortable ); - } - - function getQueryInfo() { - // Hacky Hacky Hacky - I want to get query info - // for two different tables, without reimplementing - // the pager class. - $qi = $this->getQueryInfoReal( $this->mTableName ); - - return $qi; - } - - /** - * Actually get the query info. - * - * This is to allow displaying both stuff from image and oldimage table. - * - * This is a bit hacky. - * - * @param string $table Either 'image' or 'oldimage' - * @return array Query info - */ - protected function getQueryInfoReal( $table ) { - $prefix = $table === 'oldimage' ? 'oi' : 'img'; - - $tables = [ $table ]; - $fields = array_keys( $this->getFieldNames() ); - - if ( $table === 'oldimage' ) { - foreach ( $fields as $id => &$field ) { - if ( substr( $field, 0, 4 ) !== 'img_' ) { - continue; - } - $field = $prefix . substr( $field, 3 ) . ' AS ' . $field; - } - $fields[array_search( 'top', $fields )] = "'no' AS top"; - } else { - if ( $this->mShowAll ) { - $fields[array_search( 'top', $fields )] = "'yes' AS top"; - } - } - $fields[] = $prefix . '_user AS img_user'; - $fields[array_search( 'thumb', $fields )] = $prefix . '_name AS thumb'; - - $options = $join_conds = []; - - # Depends on $wgMiserMode - # Will also not happen if mShowAll is true. - if ( isset( $this->mFieldNames['count'] ) ) { - $tables[] = 'oldimage'; - - # Need to rewrite this one - foreach ( $fields as &$field ) { - if ( $field == 'count' ) { - $field = 'COUNT(oi_archive_name) AS count'; - } - } - unset( $field ); - - $dbr = wfGetDB( DB_SLAVE ); - if ( $dbr->implicitGroupby() ) { - $options = [ 'GROUP BY' => 'img_name' ]; - } else { - $columnlist = preg_grep( '/^img/', array_keys( $this->getFieldNames() ) ); - $options = [ 'GROUP BY' => array_merge( [ 'img_user' ], $columnlist ) ]; - } - $join_conds = [ 'oldimage' => [ 'LEFT JOIN', 'oi_name = img_name' ] ]; - } - - return [ - 'tables' => $tables, - 'fields' => $fields, - 'conds' => $this->buildQueryConds( $table ), - 'options' => $options, - 'join_conds' => $join_conds - ]; - } - - /** - * Override reallyDoQuery to mix together two queries. - * - * @note $asc is named $descending in IndexPager base class. However - * it is true when the order is ascending, and false when the order - * is descending, so I renamed it to $asc here. - * @param int $offset - * @param int $limit - * @param bool $asc - * @return array - * @throws MWException - */ - function reallyDoQuery( $offset, $limit, $asc ) { - $prevTableName = $this->mTableName; - $this->mTableName = 'image'; - list( $tables, $fields, $conds, $fname, $options, $join_conds ) = - $this->buildQueryInfo( $offset, $limit, $asc ); - $imageRes = $this->mDb->select( $tables, $fields, $conds, $fname, $options, $join_conds ); - $this->mTableName = $prevTableName; - - if ( !$this->mShowAll ) { - return $imageRes; - } - - $this->mTableName = 'oldimage'; - - # Hacky... - $oldIndex = $this->mIndexField; - if ( substr( $this->mIndexField, 0, 4 ) !== 'img_' ) { - throw new MWException( "Expected to be sorting on an image table field" ); - } - $this->mIndexField = 'oi_' . substr( $this->mIndexField, 4 ); - - list( $tables, $fields, $conds, $fname, $options, $join_conds ) = - $this->buildQueryInfo( $offset, $limit, $asc ); - $oldimageRes = $this->mDb->select( $tables, $fields, $conds, $fname, $options, $join_conds ); - - $this->mTableName = $prevTableName; - $this->mIndexField = $oldIndex; - - return $this->combineResult( $imageRes, $oldimageRes, $limit, $asc ); - } - - /** - * Combine results from 2 tables. - * - * Note: This will throw away some results - * - * @param ResultWrapper $res1 - * @param ResultWrapper $res2 - * @param int $limit - * @param bool $ascending See note about $asc in $this->reallyDoQuery - * @return FakeResultWrapper $res1 and $res2 combined - */ - protected function combineResult( $res1, $res2, $limit, $ascending ) { - $res1->rewind(); - $res2->rewind(); - $topRes1 = $res1->next(); - $topRes2 = $res2->next(); - $resultArray = []; - for ( $i = 0; $i < $limit && $topRes1 && $topRes2; $i++ ) { - if ( strcmp( $topRes1->{$this->mIndexField}, $topRes2->{$this->mIndexField} ) > 0 ) { - if ( !$ascending ) { - $resultArray[] = $topRes1; - $topRes1 = $res1->next(); - } else { - $resultArray[] = $topRes2; - $topRes2 = $res2->next(); - } - } else { - if ( !$ascending ) { - $resultArray[] = $topRes2; - $topRes2 = $res2->next(); - } else { - $resultArray[] = $topRes1; - $topRes1 = $res1->next(); - } - } - } - - // @codingStandardsIgnoreStart Squiz.WhiteSpace.SemicolonSpacing.Incorrect - for ( ; $i < $limit && $topRes1; $i++ ) { - // @codingStandardsIgnoreEnd - $resultArray[] = $topRes1; - $topRes1 = $res1->next(); - } - - // @codingStandardsIgnoreStart Squiz.WhiteSpace.SemicolonSpacing.Incorrect - for ( ; $i < $limit && $topRes2; $i++ ) { - // @codingStandardsIgnoreEnd - $resultArray[] = $topRes2; - $topRes2 = $res2->next(); - } - - return new FakeResultWrapper( $resultArray ); - } - - function getDefaultSort() { - if ( $this->mShowAll && $this->getConfig()->get( 'MiserMode' ) && is_null( $this->mUserName ) ) { - // Unfortunately no index on oi_timestamp. - return 'img_name'; - } else { - return 'img_timestamp'; - } - } - - function doBatchLookups() { - $userIds = []; - $this->mResult->seek( 0 ); - foreach ( $this->mResult as $row ) { - $userIds[] = $row->img_user; - } - # Do a link batch query for names and userpages - UserCache::singleton()->doQuery( $userIds, [ 'userpage' ], __METHOD__ ); - } - - /** - * @param string $field - * @param string $value - * @return Message|string|int The return type depends on the value of $field: - * - thumb: string - * - img_timestamp: string - * - img_name: string - * - img_user_text: string - * - img_size: string - * - img_description: string - * - count: int - * - top: Message - * @throws MWException - */ - function formatValue( $field, $value ) { - switch ( $field ) { - case 'thumb': - $opt = [ 'time' => wfTimestamp( TS_MW, $this->mCurrentRow->img_timestamp ) ]; - $file = RepoGroup::singleton()->getLocalRepo()->findFile( $value, $opt ); - // If statement for paranoia - if ( $file ) { - $thumb = $file->transform( [ 'width' => 180, 'height' => 360 ] ); - - return $thumb->toHtml( [ 'desc-link' => true ] ); - } else { - return htmlspecialchars( $value ); - } - case 'img_timestamp': - // We may want to make this a link to the "old" version when displaying old files - return htmlspecialchars( $this->getLanguage()->userTimeAndDate( $value, $this->getUser() ) ); - case 'img_name': - static $imgfile = null; - if ( $imgfile === null ) { - $imgfile = $this->msg( 'imgfile' )->text(); - } - - // Weird files can maybe exist? Bug 22227 - $filePage = Title::makeTitleSafe( NS_FILE, $value ); - if ( $filePage ) { - $link = Linker::linkKnown( - $filePage, - htmlspecialchars( $filePage->getText() ) - ); - $download = Xml::element( 'a', - [ 'href' => wfLocalFile( $filePage )->getURL() ], - $imgfile - ); - $download = $this->msg( 'parentheses' )->rawParams( $download )->escaped(); - - // Add delete links if allowed - // From https://github.com/Wikia/app/pull/3859 - if ( $filePage->userCan( 'delete', $this->getUser() ) ) { - $deleteMsg = $this->msg( 'listfiles-delete' )->escaped(); - - $delete = Linker::linkKnown( - $filePage, $deleteMsg, [], [ 'action' => 'delete' ] - ); - $delete = $this->msg( 'parentheses' )->rawParams( $delete )->escaped(); - - return "$link $download $delete"; - } - - return "$link $download"; - } else { - return htmlspecialchars( $value ); - } - case 'img_user_text': - if ( $this->mCurrentRow->img_user ) { - $name = User::whoIs( $this->mCurrentRow->img_user ); - $link = Linker::link( - Title::makeTitle( NS_USER, $name ), - htmlspecialchars( $name ) - ); - } else { - $link = htmlspecialchars( $value ); - } - - return $link; - case 'img_size': - return htmlspecialchars( $this->getLanguage()->formatSize( $value ) ); - case 'img_description': - return Linker::formatComment( $value ); - case 'count': - return intval( $value ) + 1; - case 'top': - // Messages: listfiles-latestversion-yes, listfiles-latestversion-no - return $this->msg( 'listfiles-latestversion-' . $value ); - default: - throw new MWException( "Unknown field '$field'" ); - } - } - - function getForm() { - $fields = []; - $fields['limit'] = [ - 'type' => 'select', - 'name' => 'limit', - 'label-message' => 'table_pager_limit_label', - 'options' => $this->getLimitSelectList(), - 'default' => $this->mLimit, - ]; - - if ( !$this->getConfig()->get( 'MiserMode' ) ) { - $fields['ilsearch'] = [ - 'type' => 'text', - 'name' => 'ilsearch', - 'id' => 'mw-ilsearch', - 'label-message' => 'listfiles_search_for', - 'default' => $this->mSearch, - 'size' => '40', - 'maxlength' => '255', - ]; - } - - $this->getOutput()->addModules( 'mediawiki.userSuggest' ); - $fields['user'] = [ - 'type' => 'text', - 'name' => 'user', - 'id' => 'mw-listfiles-user', - 'label-message' => 'username', - 'default' => $this->mUserName, - 'size' => '40', - 'maxlength' => '255', - 'cssclass' => 'mw-autocomplete-user', // used by mediawiki.userSuggest - ]; - - $fields['ilshowall'] = [ - 'type' => 'check', - 'name' => 'ilshowall', - 'id' => 'mw-listfiles-show-all', - 'label-message' => 'listfiles-show-all', - 'default' => $this->mShowAll, - ]; - - $query = $this->getRequest()->getQueryValues(); - unset( $query['title'] ); - unset( $query['limit'] ); - unset( $query['ilsearch'] ); - unset( $query['ilshowall'] ); - unset( $query['user'] ); - - $form = new HTMLForm( $fields, $this->getContext() ); - - $form->setMethod( 'get' ); - $form->setTitle( $this->getTitle() ); - $form->setId( 'mw-listfiles-form' ); - $form->setWrapperLegendMsg( 'listfiles' ); - $form->setSubmitTextMsg( 'table_pager_limit_submit' ); - $form->addHiddenFields( $query ); - - $form->prepareForm(); - $form->displayForm( '' ); - } - - function getTableClass() { - return parent::getTableClass() . ' listfiles'; - } - - function getNavClass() { - return parent::getNavClass() . ' listfiles_nav'; - } - - function getSortHeaderClass() { - return parent::getSortHeaderClass() . ' listfiles_sort'; - } - - function getPagingQueries() { - $queries = parent::getPagingQueries(); - if ( !is_null( $this->mUserName ) ) { - # Append the username to the query string - foreach ( $queries as &$query ) { - if ( $query !== false ) { - $query['user'] = $this->mUserName; - } - } - } - - return $queries; - } - - function getDefaultQuery() { - $queries = parent::getDefaultQuery(); - if ( !isset( $queries['user'] ) && !is_null( $this->mUserName ) ) { - $queries['user'] = $this->mUserName; - } - - return $queries; - } - - function getTitle() { - return SpecialPage::getTitleFor( 'Listfiles' ); - } -} diff --git a/includes/specials/SpecialListusers.php b/includes/specials/SpecialListusers.php index da31f009a2..1a8dccf4de 100644 --- a/includes/specials/SpecialListusers.php +++ b/includes/specials/SpecialListusers.php @@ -25,376 +25,6 @@ * @ingroup SpecialPage */ -/** - * This class is used to get a list of user. The ones with specials - * rights (sysop, bureaucrat, developer) will have them displayed - * next to their names. - * - * @ingroup SpecialPage - */ -class UsersPager extends AlphabeticPager { - - /** - * @var array A array with user ids as key and a array of groups as value - */ - protected $userGroupCache; - - /** - * @param IContextSource $context - * @param array $par (Default null) - * @param bool $including Whether this page is being transcluded in - * another page - */ - function __construct( IContextSource $context = null, $par = null, $including = null ) { - if ( $context ) { - $this->setContext( $context ); - } - - $request = $this->getRequest(); - $par = ( $par !== null ) ? $par : ''; - $parms = explode( '/', $par ); - $symsForAll = [ '*', 'user' ]; - - if ( $parms[0] != '' && - ( in_array( $par, User::getAllGroups() ) || in_array( $par, $symsForAll ) ) - ) { - $this->requestedGroup = $par; - $un = $request->getText( 'username' ); - } elseif ( count( $parms ) == 2 ) { - $this->requestedGroup = $parms[0]; - $un = $parms[1]; - } else { - $this->requestedGroup = $request->getVal( 'group' ); - $un = ( $par != '' ) ? $par : $request->getText( 'username' ); - } - - if ( in_array( $this->requestedGroup, $symsForAll ) ) { - $this->requestedGroup = ''; - } - $this->editsOnly = $request->getBool( 'editsOnly' ); - $this->creationSort = $request->getBool( 'creationSort' ); - $this->including = $including; - $this->mDefaultDirection = $request->getBool( 'desc' ) - ? IndexPager::DIR_DESCENDING - : IndexPager::DIR_ASCENDING; - - $this->requestedUser = ''; - - if ( $un != '' ) { - $username = Title::makeTitleSafe( NS_USER, $un ); - - if ( !is_null( $username ) ) { - $this->requestedUser = $username->getText(); - } - } - - parent::__construct(); - } - - /** - * @return string - */ - function getIndexField() { - return $this->creationSort ? 'user_id' : 'user_name'; - } - - /** - * @return array - */ - function getQueryInfo() { - $dbr = wfGetDB( DB_SLAVE ); - $conds = []; - - // Don't show hidden names - if ( !$this->getUser()->isAllowed( 'hideuser' ) ) { - $conds[] = 'ipb_deleted IS NULL OR ipb_deleted = 0'; - } - - $options = []; - - if ( $this->requestedGroup != '' ) { - $conds['ug_group'] = $this->requestedGroup; - } - - if ( $this->requestedUser != '' ) { - # Sorted either by account creation or name - if ( $this->creationSort ) { - $conds[] = 'user_id >= ' . intval( User::idFromName( $this->requestedUser ) ); - } else { - $conds[] = 'user_name >= ' . $dbr->addQuotes( $this->requestedUser ); - } - } - - if ( $this->editsOnly ) { - $conds[] = 'user_editcount > 0'; - } - - $options['GROUP BY'] = $this->creationSort ? 'user_id' : 'user_name'; - - $query = [ - 'tables' => [ 'user', 'user_groups', 'ipblocks' ], - 'fields' => [ - 'user_name' => $this->creationSort ? 'MAX(user_name)' : 'user_name', - 'user_id' => $this->creationSort ? 'user_id' : 'MAX(user_id)', - 'edits' => 'MAX(user_editcount)', - 'creation' => 'MIN(user_registration)', - 'ipb_deleted' => 'MAX(ipb_deleted)' // block/hide status - ], - 'options' => $options, - 'join_conds' => [ - 'user_groups' => [ 'LEFT JOIN', 'user_id=ug_user' ], - 'ipblocks' => [ - 'LEFT JOIN', [ - 'user_id=ipb_user', - 'ipb_auto' => 0 - ] - ], - ], - 'conds' => $conds - ]; - - Hooks::run( 'SpecialListusersQueryInfo', [ $this, &$query ] ); - - return $query; - } - - /** - * @param stdClass $row - * @return string - */ - function formatRow( $row ) { - if ( $row->user_id == 0 ) { # Bug 16487 - return ''; - } - - $userName = $row->user_name; - - $ulinks = Linker::userLink( $row->user_id, $userName ); - $ulinks .= Linker::userToolLinksRedContribs( - $row->user_id, - $userName, - (int)$row->edits - ); - - $lang = $this->getLanguage(); - - $groups = ''; - $groups_list = self::getGroups( intval( $row->user_id ), $this->userGroupCache ); - - if ( !$this->including && count( $groups_list ) > 0 ) { - $list = []; - foreach ( $groups_list as $group ) { - $list[] = self::buildGroupLink( $group, $userName ); - } - $groups = $lang->commaList( $list ); - } - - $item = $lang->specialList( $ulinks, $groups ); - - if ( $row->ipb_deleted ) { - $item = "$item"; - } - - $edits = ''; - if ( !$this->including && $this->getConfig()->get( 'Edititis' ) ) { - $count = $this->msg( 'usereditcount' )->numParams( $row->edits )->escaped(); - $edits = $this->msg( 'word-separator' )->escaped() . $this->msg( 'brackets', $count )->escaped(); - } - - $created = ''; - # Some rows may be null - if ( !$this->including && $row->creation ) { - $user = $this->getUser(); - $d = $lang->userDate( $row->creation, $user ); - $t = $lang->userTime( $row->creation, $user ); - $created = $this->msg( 'usercreated', $d, $t, $row->user_name )->escaped(); - $created = ' ' . $this->msg( 'parentheses' )->rawParams( $created )->escaped(); - } - $blocked = !is_null( $row->ipb_deleted ) ? - ' ' . $this->msg( 'listusers-blocked', $userName )->escaped() : - ''; - - Hooks::run( 'SpecialListusersFormatRow', [ &$item, $row ] ); - - return Html::rawElement( 'li', [], "{$item}{$edits}{$created}{$blocked}" ); - } - - function doBatchLookups() { - $batch = new LinkBatch(); - $userIds = []; - # Give some pointers to make user links - foreach ( $this->mResult as $row ) { - $batch->add( NS_USER, $row->user_name ); - $batch->add( NS_USER_TALK, $row->user_name ); - $userIds[] = $row->user_id; - } - - // Lookup groups for all the users - $dbr = wfGetDB( DB_SLAVE ); - $groupRes = $dbr->select( - 'user_groups', - [ 'ug_user', 'ug_group' ], - [ 'ug_user' => $userIds ], - __METHOD__ - ); - $cache = []; - $groups = []; - foreach ( $groupRes as $row ) { - $cache[intval( $row->ug_user )][] = $row->ug_group; - $groups[$row->ug_group] = true; - } - $this->userGroupCache = $cache; - - // Add page of groups to link batch - foreach ( $groups as $group => $unused ) { - $groupPage = User::getGroupPage( $group ); - if ( $groupPage ) { - $batch->addObj( $groupPage ); - } - } - - $batch->execute(); - $this->mResult->rewind(); - } - - /** - * @return string - */ - function getPageHeader() { - list( $self ) = explode( '/', $this->getTitle()->getPrefixedDBkey() ); - - $this->getOutput()->addModules( 'mediawiki.userSuggest' ); - - # Form tag - $out = Xml::openElement( - 'form', - [ 'method' => 'get', 'action' => wfScript(), 'id' => 'mw-listusers-form' ] - ) . - Xml::fieldset( $this->msg( 'listusers' )->text() ) . - Html::hidden( 'title', $self ); - - # Username field (with autocompletion support) - $out .= Xml::label( $this->msg( 'listusersfrom' )->text(), 'offset' ) . ' ' . - Html::input( - 'username', - $this->requestedUser, - 'text', - [ - 'class' => 'mw-autocomplete-user', - 'id' => 'offset', - 'size' => 20, - 'autofocus' => $this->requestedUser === '' - ] - ) . ' '; - - # Group drop-down list - $sel = new XmlSelect( 'group', 'group', $this->requestedGroup ); - $sel->addOption( $this->msg( 'group-all' )->text(), '' ); - foreach ( $this->getAllGroups() as $group => $groupText ) { - $sel->addOption( $groupText, $group ); - } - - $out .= Xml::label( $this->msg( 'group' )->text(), 'group' ) . ' '; - $out .= $sel->getHTML() . '
'; - $out .= Xml::checkLabel( - $this->msg( 'listusers-editsonly' )->text(), - 'editsOnly', - 'editsOnly', - $this->editsOnly - ); - $out .= ' '; - $out .= Xml::checkLabel( - $this->msg( 'listusers-creationsort' )->text(), - 'creationSort', - 'creationSort', - $this->creationSort - ); - $out .= ' '; - $out .= Xml::checkLabel( - $this->msg( 'listusers-desc' )->text(), - 'desc', - 'desc', - $this->mDefaultDirection - ); - $out .= '
'; - - Hooks::run( 'SpecialListusersHeaderForm', [ $this, &$out ] ); - - # Submit button and form bottom - $out .= Html::hidden( 'limit', $this->mLimit ); - $out .= Xml::submitButton( $this->msg( 'listusers-submit' )->text() ); - Hooks::run( 'SpecialListusersHeader', [ $this, &$out ] ); - $out .= Xml::closeElement( 'fieldset' ) . - Xml::closeElement( 'form' ); - - return $out; - } - - /** - * Get a list of all explicit groups - * @return array - */ - function getAllGroups() { - $result = []; - foreach ( User::getAllGroups() as $group ) { - $result[$group] = User::getGroupName( $group ); - } - asort( $result ); - - return $result; - } - - /** - * Preserve group and username offset parameters when paging - * @return array - */ - function getDefaultQuery() { - $query = parent::getDefaultQuery(); - if ( $this->requestedGroup != '' ) { - $query['group'] = $this->requestedGroup; - } - if ( $this->requestedUser != '' ) { - $query['username'] = $this->requestedUser; - } - Hooks::run( 'SpecialListusersDefaultQuery', [ $this, &$query ] ); - - return $query; - } - - /** - * Get a list of groups the specified user belongs to - * - * @param int $uid User id - * @param array|null $cache - * @return array - */ - protected static function getGroups( $uid, $cache = null ) { - if ( $cache === null ) { - $user = User::newFromId( $uid ); - $effectiveGroups = $user->getEffectiveGroups(); - } else { - $effectiveGroups = 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 $username Username - * @return string - */ - protected static function buildGroupLink( $group, $username ) { - return User::makeGroupLinkHtml( - $group, - User::getGroupMember( $group, $username ) - ); - } -} - /** * @ingroup SpecialPage */ diff --git a/includes/specials/SpecialLog.php b/includes/specials/SpecialLog.php index d4c7c6ad2b..af087a667b 100644 --- a/includes/specials/SpecialLog.php +++ b/includes/specials/SpecialLog.php @@ -49,6 +49,7 @@ class SpecialLog extends SpecialPage { $opts->add( 'offset', '' ); $opts->add( 'dir', '' ); $opts->add( 'offender', '' ); + $opts->add( 'subtype', '' ); // Set values $opts->fetchValuesFromRequest( $this->getRequest() ); @@ -146,7 +147,8 @@ class SpecialLog extends SpecialPage { private function parseParams( FormOptions $opts, $par ) { # Get parameters - $parms = explode( '/', ( $par = ( $par !== null ) ? $par : '' ) ); + $par = $par !== null ? $par : ''; + $parms = explode( '/', $par ); $symsForAll = [ '*', 'all' ]; if ( $parms[0] != '' && ( in_array( $par, $this->getConfig()->get( 'LogTypes' ) ) || in_array( $par, $symsForAll ) ) @@ -167,6 +169,7 @@ class SpecialLog extends SpecialPage { null, LogEventsList::USE_CHECKBOXES ); + $pager = new LogPager( $loglist, $opts->getValue( 'type' ), @@ -176,26 +179,29 @@ class SpecialLog extends SpecialPage { $extraConds, $opts->getValue( 'year' ), $opts->getValue( 'month' ), - $opts->getValue( 'tagfilter' ) + $opts->getValue( 'tagfilter' ), + $opts->getValue( 'subtype' ) ); $this->addHeader( $opts->getValue( 'type' ) ); # Set relevant user if ( $pager->getPerformer() ) { - $this->getSkin()->setRelevantUser( User::newFromName( $pager->getPerformer() ) ); + $performerUser = User::newFromName( $pager->getPerformer(), false ); + $this->getSkin()->setRelevantUser( $performerUser ); } # Show form options $loglist->showOptions( $pager->getType(), - $opts->getValue( 'user' ), + $pager->getPerformer(), $pager->getPage(), $pager->getPattern(), $pager->getYear(), $pager->getMonth(), $pager->getFilterParams(), - $opts->getValue( 'tagfilter' ) + $pager->getTagFilter(), + $pager->getAction() ); # Insert list diff --git a/includes/specials/SpecialMediaStatistics.php b/includes/specials/SpecialMediaStatistics.php index ed12e047c7..8ba90a6a6a 100644 --- a/includes/specials/SpecialMediaStatistics.php +++ b/includes/specials/SpecialMediaStatistics.php @@ -154,7 +154,7 @@ class MediaStatisticsPage extends QueryPage { * Output closing */ protected function outputTableEnd() { - $this->getOutput()->addHtml( Html::closeElement( 'table' ) ); + $this->getOutput()->addHTML( Html::closeElement( 'table' ) ); $this->getOutput()->addWikiText( $this->msg( 'mediastatistics-bytespertype' ) ->numParams( $this->totalPerType ) diff --git a/includes/specials/SpecialMergeHistory.php b/includes/specials/SpecialMergeHistory.php index 3310538a59..b916c1fc78 100644 --- a/includes/specials/SpecialMergeHistory.php +++ b/includes/specials/SpecialMergeHistory.php @@ -379,78 +379,3 @@ class SpecialMergeHistory extends SpecialPage { return 'pagetools'; } } - -class MergeHistoryPager extends ReverseChronologicalPager { - /** @var SpecialMergeHistory */ - public $mForm; - - /** @var array */ - public $mConds; - - function __construct( SpecialMergeHistory $form, $conds, Title $source, Title $dest ) { - $this->mForm = $form; - $this->mConds = $conds; - $this->title = $source; - $this->articleID = $source->getArticleID(); - - $dbr = wfGetDB( DB_SLAVE ); - $maxtimestamp = $dbr->selectField( - 'revision', - 'MIN(rev_timestamp)', - [ 'rev_page' => $dest->getArticleID() ], - __METHOD__ - ); - $this->maxTimestamp = $maxtimestamp; - - parent::__construct( $form->getContext() ); - } - - function getStartBody() { - # Do a link batch query - $this->mResult->seek( 0 ); - $batch = new LinkBatch(); - # Give some pointers to make (last) links - $this->mForm->prevId = []; - foreach ( $this->mResult as $row ) { - $batch->addObj( Title::makeTitleSafe( NS_USER, $row->user_name ) ); - $batch->addObj( Title::makeTitleSafe( NS_USER_TALK, $row->user_name ) ); - - $rev_id = isset( $rev_id ) ? $rev_id : $row->rev_id; - if ( $rev_id > $row->rev_id ) { - $this->mForm->prevId[$rev_id] = $row->rev_id; - } elseif ( $rev_id < $row->rev_id ) { - $this->mForm->prevId[$row->rev_id] = $rev_id; - } - - $rev_id = $row->rev_id; - } - - $batch->execute(); - $this->mResult->seek( 0 ); - - return ''; - } - - function formatRow( $row ) { - return $this->mForm->formatRevisionRow( $row ); - } - - function getQueryInfo() { - $conds = $this->mConds; - $conds['rev_page'] = $this->articleID; - $conds[] = "rev_timestamp < " . $this->mDb->addQuotes( $this->maxTimestamp ); - - return [ - 'tables' => [ 'revision', 'page', 'user' ], - 'fields' => array_merge( Revision::selectFields(), Revision::selectUserFields() ), - 'conds' => $conds, - 'join_conds' => [ - 'page' => Revision::pageJoinCond(), - 'user' => Revision::userJoinCond() ] - ]; - } - - function getIndexField() { - return 'rev_timestamp'; - } -} diff --git a/includes/specials/SpecialNewimages.php b/includes/specials/SpecialNewimages.php index 9e28908204..14391d2459 100644 --- a/includes/specials/SpecialNewimages.php +++ b/includes/specials/SpecialNewimages.php @@ -71,189 +71,3 @@ class SpecialNewFiles extends IncludableSpecialPage { } } } - -/** - * @ingroup SpecialPage Pager - */ -class NewFilesPager extends ReverseChronologicalPager { - /** - * @var ImageGallery - */ - protected $gallery; - - /** - * @var bool - */ - protected $showBots; - - /** - * @var bool - */ - protected $hidePatrolled; - - function __construct( IContextSource $context, $par = null ) { - $this->like = $context->getRequest()->getText( 'like' ); - $this->showBots = $context->getRequest()->getBool( 'showbots', 0 ); - $this->hidePatrolled = $context->getRequest()->getBool( 'hidepatrolled', 0 ); - if ( is_numeric( $par ) ) { - $this->setLimit( $par ); - } - - parent::__construct( $context ); - } - - function getQueryInfo() { - $conds = $jconds = []; - $tables = [ 'image' ]; - $fields = [ 'img_name', 'img_user', 'img_timestamp' ]; - $options = []; - - if ( !$this->showBots ) { - $groupsWithBotPermission = User::getGroupsWithPermission( 'bot' ); - - if ( count( $groupsWithBotPermission ) ) { - $tables[] = 'user_groups'; - $conds[] = 'ug_group IS NULL'; - $jconds['user_groups'] = [ - 'LEFT JOIN', - [ - 'ug_group' => $groupsWithBotPermission, - 'ug_user = img_user' - ] - ]; - } - } - - if ( $this->hidePatrolled ) { - $tables[] = 'recentchanges'; - $conds['rc_type'] = RC_LOG; - $conds['rc_log_type'] = 'upload'; - $conds['rc_patrolled'] = 0; - $conds['rc_namespace'] = NS_FILE; - $jconds['recentchanges'] = [ - 'INNER JOIN', - [ - 'rc_title = img_name', - 'rc_user = img_user', - 'rc_timestamp = img_timestamp' - ] - ]; - // We're ordering by img_timestamp, so we have to make sure MariaDB queries `image` first. - // It sometimes decides to query `recentchanges` first and filesort the result set later - // to get the right ordering. T124205 / https://mariadb.atlassian.net/browse/MDEV-8880 - $options[] = 'STRAIGHT_JOIN'; - } - - if ( !$this->getConfig()->get( 'MiserMode' ) && $this->like !== null ) { - $dbr = wfGetDB( DB_SLAVE ); - $likeObj = Title::newFromText( $this->like ); - if ( $likeObj instanceof Title ) { - $like = $dbr->buildLike( - $dbr->anyString(), - strtolower( $likeObj->getDBkey() ), - $dbr->anyString() - ); - $conds[] = "LOWER(img_name) $like"; - } - } - - $query = [ - 'tables' => $tables, - 'fields' => $fields, - 'join_conds' => $jconds, - 'conds' => $conds, - 'options' => $options, - ]; - - return $query; - } - - function getIndexField() { - return 'img_timestamp'; - } - - function getStartBody() { - if ( !$this->gallery ) { - // Note that null for mode is taken to mean use default. - $mode = $this->getRequest()->getVal( 'gallerymode', null ); - try { - $this->gallery = ImageGalleryBase::factory( $mode, $this->getContext() ); - } catch ( Exception $e ) { - // User specified something invalid, fallback to default. - $this->gallery = ImageGalleryBase::factory( false, $this->getContext() ); - } - } - - return ''; - } - - function getEndBody() { - return $this->gallery->toHTML(); - } - - function formatRow( $row ) { - $name = $row->img_name; - $user = User::newFromId( $row->img_user ); - - $title = Title::makeTitle( NS_FILE, $name ); - $ul = Linker::link( $user->getUserpage(), $user->getName() ); - $time = $this->getLanguage()->userTimeAndDate( $row->img_timestamp, $this->getUser() ); - - $this->gallery->add( - $title, - "$ul
\n" - . htmlspecialchars( $time ) - . "
\n" - ); - } - - function getForm() { - $fields = [ - 'like' => [ - 'type' => 'text', - 'label-message' => 'newimages-label', - 'name' => 'like', - ], - 'showbots' => [ - 'type' => 'check', - 'label-message' => 'newimages-showbots', - 'name' => 'showbots', - ], - 'hidepatrolled' => [ - 'type' => 'check', - 'label-message' => 'newimages-hidepatrolled', - 'name' => 'hidepatrolled', - ], - 'limit' => [ - 'type' => 'hidden', - 'default' => $this->mLimit, - 'name' => 'limit', - ], - 'offset' => [ - 'type' => 'hidden', - 'default' => $this->getRequest()->getText( 'offset' ), - 'name' => 'offset', - ], - ]; - - if ( $this->getConfig()->get( 'MiserMode' ) ) { - unset( $fields['like'] ); - } - - if ( !$this->getUser()->useFilePatrol() ) { - unset( $fields['hidepatrolled'] ); - } - - $context = new DerivativeContext( $this->getContext() ); - $context->setTitle( $this->getTitle() ); // Remove subpage - $form = new HTMLForm( $fields, $context ); - - $form->setSubmitTextMsg( 'ilsubmit' ); - $form->setSubmitProgressive(); - - $form->setMethod( 'get' ); - $form->setWrapperLegendMsg( 'newimages-legend' ); - - return $form; - } -} diff --git a/includes/specials/SpecialNewpages.php b/includes/specials/SpecialNewpages.php index f1b231d546..c24b054750 100644 --- a/includes/specials/SpecialNewpages.php +++ b/includes/specials/SpecialNewpages.php @@ -265,11 +265,11 @@ class SpecialNewpages extends IncludableSpecialPage { ); $htmlForm->setMethod( 'get' ); - $out->addHtml( Xml::fieldset( $this->msg( 'newpages' )->text() ) ); + $out->addHTML( Xml::fieldset( $this->msg( 'newpages' )->text() ) ); $htmlForm->show(); - $out->addHtml( + $out->addHTML( Html::rawElement( 'div', null, @@ -479,130 +479,3 @@ class SpecialNewpages extends IncludableSpecialPage { return 'changes'; } } - -/** - * @ingroup SpecialPage Pager - */ -class NewPagesPager extends ReverseChronologicalPager { - // Stored opts - protected $opts; - - /** - * @var HtmlForm - */ - protected $mForm; - - function __construct( $form, FormOptions $opts ) { - parent::__construct( $form->getContext() ); - $this->mForm = $form; - $this->opts = $opts; - } - - function getQueryInfo() { - $conds = []; - $conds['rc_new'] = 1; - - $namespace = $this->opts->getValue( 'namespace' ); - $namespace = ( $namespace === 'all' ) ? false : intval( $namespace ); - - $username = $this->opts->getValue( 'username' ); - $user = Title::makeTitleSafe( NS_USER, $username ); - - $rcIndexes = []; - - if ( $namespace !== false ) { - if ( $this->opts->getValue( 'invert' ) ) { - $conds[] = 'rc_namespace != ' . $this->mDb->addQuotes( $namespace ); - } else { - $conds['rc_namespace'] = $namespace; - } - } - - if ( $user ) { - $conds['rc_user_text'] = $user->getText(); - $rcIndexes = 'rc_user_text'; - } elseif ( User::groupHasPermission( '*', 'createpage' ) && - $this->opts->getValue( 'hideliu' ) - ) { - # If anons cannot make new pages, don't "exclude logged in users"! - $conds['rc_user'] = 0; - } - - # If this user cannot see patrolled edits or they are off, don't do dumb queries! - if ( $this->opts->getValue( 'hidepatrolled' ) && $this->getUser()->useNPPatrol() ) { - $conds['rc_patrolled'] = 0; - } - - if ( $this->opts->getValue( 'hidebots' ) ) { - $conds['rc_bot'] = 0; - } - - if ( $this->opts->getValue( 'hideredirs' ) ) { - $conds['page_is_redirect'] = 0; - } - - // Allow changes to the New Pages query - $tables = [ 'recentchanges', 'page' ]; - $fields = [ - 'rc_namespace', 'rc_title', 'rc_cur_id', 'rc_user', 'rc_user_text', - 'rc_comment', 'rc_timestamp', 'rc_patrolled', 'rc_id', 'rc_deleted', - 'length' => 'page_len', 'rev_id' => 'page_latest', 'rc_this_oldid', - 'page_namespace', 'page_title' - ]; - $join_conds = [ 'page' => [ 'INNER JOIN', 'page_id=rc_cur_id' ] ]; - - Hooks::run( 'SpecialNewpagesConditions', - [ &$this, $this->opts, &$conds, &$tables, &$fields, &$join_conds ] ); - - $options = []; - - if ( $rcIndexes ) { - $options = [ 'USE INDEX' => [ 'recentchanges' => $rcIndexes ] ]; - } - - $info = [ - 'tables' => $tables, - 'fields' => $fields, - 'conds' => $conds, - 'options' => $options, - 'join_conds' => $join_conds - ]; - - // Modify query for tags - ChangeTags::modifyDisplayQuery( - $info['tables'], - $info['fields'], - $info['conds'], - $info['join_conds'], - $info['options'], - $this->opts['tagfilter'] - ); - - return $info; - } - - function getIndexField() { - return 'rc_timestamp'; - } - - function formatRow( $row ) { - return $this->mForm->formatRow( $row ); - } - - function getStartBody() { - # Do a batch existence check on pages - $linkBatch = new LinkBatch(); - foreach ( $this->mResult as $row ) { - $linkBatch->add( NS_USER, $row->rc_user_text ); - $linkBatch->add( NS_USER_TALK, $row->rc_user_text ); - $linkBatch->add( $row->page_namespace, $row->page_title ); - } - $linkBatch->execute(); - - return '
    '; - } - - function getEndBody() { - return '
'; - } -} diff --git a/includes/specials/SpecialPasswordReset.php b/includes/specials/SpecialPasswordReset.php index 44f31a53e6..c3ed91feca 100644 --- a/includes/specials/SpecialPasswordReset.php +++ b/includes/specials/SpecialPasswordReset.php @@ -218,7 +218,7 @@ class SpecialPasswordReset extends FormSpecialPage { $firstUser = $users[0]; - if ( !$firstUser instanceof User || !$firstUser->getID() ) { + if ( !$firstUser instanceof User || !$firstUser->getId() ) { // Don't parse username as wikitext (bug 65501) return [ [ 'nosuchuser', wfEscapeWikiText( $data['Username'] ) ] ]; } diff --git a/includes/specials/SpecialPreferences.php b/includes/specials/SpecialPreferences.php index 7f257e65e4..2e7b4cd2d2 100644 --- a/includes/specials/SpecialPreferences.php +++ b/includes/specials/SpecialPreferences.php @@ -74,7 +74,11 @@ class SpecialPreferences extends SpecialPage { $this->addHelpLink( 'Help:Preferences' ); // Load the user from the master to reduce CAS errors on double post (T95839) - $user = $this->getUser()->getInstanceForUpdate() ?: $this->getUser(); + if ( $this->getRequest()->wasPosted() ) { + $user = $this->getUser()->getInstanceForUpdate() ?: $this->getUser(); + } else { + $user = $this->getUser(); + } $htmlForm = Preferences::getFormObject( $user, $this->getContext() ); $htmlForm->setSubmitCallback( [ 'Preferences', 'tryUISubmit' ] ); diff --git a/includes/specials/SpecialProtectedpages.php b/includes/specials/SpecialProtectedpages.php index 8e9636ea77..54b471e40b 100644 --- a/includes/specials/SpecialProtectedpages.php +++ b/includes/specials/SpecialProtectedpages.php @@ -549,7 +549,7 @@ class ProtectedPagesPager extends TablePager { ]; } - public function getTableClass() { + protected function getTableClass() { return parent::getTableClass() . ' mw-protectedpages'; } diff --git a/includes/specials/SpecialProtectedtitles.php b/includes/specials/SpecialProtectedtitles.php index 5df425a18c..c800d96c78 100644 --- a/includes/specials/SpecialProtectedtitles.php +++ b/includes/specials/SpecialProtectedtitles.php @@ -190,74 +190,3 @@ class SpecialProtectedtitles extends SpecialPage { return 'maintenance'; } } - -/** - * @todo document - * @ingroup Pager - */ -class ProtectedTitlesPager extends AlphabeticPager { - public $mForm, $mConds; - - function __construct( $form, $conds = [], $type, $level, $namespace, - $sizetype = '', $size = 0 - ) { - $this->mForm = $form; - $this->mConds = $conds; - $this->level = $level; - $this->namespace = $namespace; - $this->size = intval( $size ); - parent::__construct( $form->getContext() ); - } - - function getStartBody() { - # Do a link batch query - $this->mResult->seek( 0 ); - $lb = new LinkBatch; - - foreach ( $this->mResult as $row ) { - $lb->add( $row->pt_namespace, $row->pt_title ); - } - - $lb->execute(); - - return ''; - } - - /** - * @return Title - */ - function getTitle() { - return $this->mForm->getTitle(); - } - - function formatRow( $row ) { - return $this->mForm->formatRow( $row ); - } - - /** - * @return array - */ - function getQueryInfo() { - $conds = $this->mConds; - $conds[] = 'pt_expiry > ' . $this->mDb->addQuotes( $this->mDb->timestamp() ) . - ' OR pt_expiry IS NULL'; - if ( $this->level ) { - $conds['pt_create_perm'] = $this->level; - } - - if ( !is_null( $this->namespace ) ) { - $conds[] = 'pt_namespace=' . $this->mDb->addQuotes( $this->namespace ); - } - - return [ - 'tables' => 'protected_titles', - 'fields' => [ 'pt_namespace', 'pt_title', 'pt_create_perm', - 'pt_expiry', 'pt_timestamp' ], - 'conds' => $conds - ]; - } - - function getIndexField() { - return 'pt_timestamp'; - } -} diff --git a/includes/specials/SpecialRandomInCategory.php b/includes/specials/SpecialRandomInCategory.php index d4c1004ab5..efb1748913 100644 --- a/includes/specials/SpecialRandomInCategory.php +++ b/includes/specials/SpecialRandomInCategory.php @@ -206,7 +206,7 @@ class SpecialRandomInCategory extends FormSpecialPage { 'tables' => [ 'categorylinks', 'page' ], 'fields' => [ 'page_title', 'page_namespace' ], 'conds' => array_merge( [ - 'cl_to' => $this->category->getDBKey(), + 'cl_to' => $this->category->getDBkey(), ], $this->extra ), 'options' => [ 'ORDER BY' => 'cl_timestamp ' . $dir, diff --git a/includes/specials/SpecialRecentchanges.php b/includes/specials/SpecialRecentchanges.php index 7be95fa842..b93fb4e2af 100644 --- a/includes/specials/SpecialRecentchanges.php +++ b/includes/specials/SpecialRecentchanges.php @@ -324,12 +324,23 @@ class SpecialRecentChanges extends ChangesListSpecialPage { $list = ChangesList::newFromContext( $this->getContext() ); $list->initChangesListRows( $rows ); + $userShowHiddenCats = $this->getUser()->getBoolOption( 'showhiddencats' ); $rclistOutput = $list->beginRecentChangesList(); foreach ( $rows as $obj ) { if ( $limit == 0 ) { break; } $rc = RecentChange::newFromRow( $obj ); + + # Skip CatWatch entries for hidden cats based on user preference + if ( + $rc->getAttribute( 'rc_type' ) == RC_CATEGORIZE && + !$userShowHiddenCats && + $rc->getParam( 'hidden-cat' ) + ) { + continue; + } + $rc->counter = $counter++; # Check if the page has been updated since the last visit if ( $this->getConfig()->get( 'ShowUpdatedMarker' ) @@ -344,14 +355,8 @@ class SpecialRecentChanges extends ChangesListSpecialPage { if ( $showWatcherCount && $obj->rc_namespace >= 0 ) { if ( !isset( $watcherCache[$obj->rc_namespace][$obj->rc_title] ) ) { $watcherCache[$obj->rc_namespace][$obj->rc_title] = - $dbr->selectField( - 'watchlist', - 'COUNT(*)', - [ - 'wl_namespace' => $obj->rc_namespace, - 'wl_title' => $obj->rc_title, - ], - __METHOD__ . '-watchers' + WatchedItemStore::getDefaultInstance()->countWatchers( + new TitleValue( (int)$obj->rc_namespace, $obj->rc_title ) ); } $rc->numberofWatchingusers = $watcherCache[$obj->rc_namespace][$obj->rc_title]; @@ -366,7 +371,7 @@ class SpecialRecentChanges extends ChangesListSpecialPage { $rclistOutput .= $list->endRecentChangesList(); if ( $rows->numRows() === 0 ) { - $this->getOutput()->addHtml( + $this->getOutput()->addHTML( '
' . $this->msg( 'recentchanges-noresult' )->parse() . '
' @@ -399,7 +404,7 @@ class SpecialRecentChanges extends ChangesListSpecialPage { $extraOpts = $this->getExtraOptions( $opts ); $extraOptsCount = count( $extraOpts ); $count = 0; - $submit = ' ' . Xml::submitbutton( $this->msg( 'recentchanges-submit' )->text() ); + $submit = ' ' . Xml::submitButton( $this->msg( 'recentchanges-submit' )->text() ); $out = Xml::openElement( 'table', [ 'class' => 'mw-recentchanges-table' ] ); foreach ( $extraOpts as $name => $optionRow ) { diff --git a/includes/specials/SpecialRecentchangeslinked.php b/includes/specials/SpecialRecentchangeslinked.php index a259ac2008..57a3d929ad 100644 --- a/includes/specials/SpecialRecentchangeslinked.php +++ b/includes/specials/SpecialRecentchangeslinked.php @@ -57,7 +57,7 @@ class SpecialRecentChangesLinked extends SpecialRecentChanges { $outputPage = $this->getOutput(); $title = Title::newFromText( $target ); if ( !$title || $title->isExternal() ) { - $outputPage->addHtml( '
' . $this->msg( 'allpagesbadtitle' ) + $outputPage->addHTML( '
' . $this->msg( 'allpagesbadtitle' ) ->parse() . '
' ); return false; diff --git a/includes/specials/SpecialRedirect.php b/includes/specials/SpecialRedirect.php index 206e400662..80dc7977a1 100644 --- a/includes/specials/SpecialRedirect.php +++ b/includes/specials/SpecialRedirect.php @@ -99,7 +99,7 @@ class SpecialRedirect extends FormSpecialPage { return null; } // Default behavior: Use the direct link to the file. - $url = $file->getURL(); + $url = $file->getUrl(); $request = $this->getRequest(); $width = $request->getInt( 'width', -1 ); $height = $request->getInt( 'height', -1 ); @@ -110,7 +110,7 @@ class SpecialRedirect extends FormSpecialPage { // ... and we can if ( $mto && !$mto->isError() ) { // ... change the URL to point to a thumbnail. - $url = $mto->getURL(); + $url = $mto->getUrl(); } } @@ -272,7 +272,6 @@ class SpecialRedirect extends FormSpecialPage { $url = $this->dispatchLog(); break; default: - $this->getOutput()->setStatusCode( 404 ); $url = null; break; } @@ -353,6 +352,10 @@ class SpecialRedirect extends FormSpecialPage { $form->setMethod( 'get' ); } + protected function getDisplayFormat() { + return 'ooui'; + } + /** * Return an array of subpages that this special page will accept. * diff --git a/includes/specials/SpecialRunJobs.php b/includes/specials/SpecialRunJobs.php index 2312f76399..ce5533fbf0 100644 --- a/includes/specials/SpecialRunJobs.php +++ b/includes/specials/SpecialRunJobs.php @@ -94,8 +94,11 @@ class SpecialRunJobs extends UnlistedSpecialPage { if ( strpos( $errstr, 'Cannot modify header information' ) !== false ) { return true; // bug T115413 } - // Delegate unhandled errors to the default handlers - return false; + // Delegate unhandled errors to the default MediaWiki handler + // so that fatal errors get proper logging (T89169) + return call_user_func_array( + 'MWExceptionHandler::handleError', func_get_args() + ); } ); } diff --git a/includes/specials/SpecialSearch.php b/includes/specials/SpecialSearch.php index 9bb5d9592e..45ef679a1b 100644 --- a/includes/specials/SpecialSearch.php +++ b/includes/specials/SpecialSearch.php @@ -97,7 +97,7 @@ class SpecialSearch extends SpecialPage { $out->allowClickjacking(); $out->addModuleStyles( [ 'mediawiki.special', 'mediawiki.special.search', 'mediawiki.ui', 'mediawiki.ui.button', - 'mediawiki.ui.input', + 'mediawiki.ui.input', 'mediawiki.widgets.SearchInputWidget.styles', ] ); $this->addHelpLink( 'Help:Searching' ); @@ -299,7 +299,7 @@ class SpecialSearch extends SpecialPage { } // start rendering the page - $out->addHtml( + $out->addHTML( Xml::openElement( 'form', [ @@ -323,7 +323,8 @@ class SpecialSearch extends SpecialPage { $num = $titleMatchesNum + $textMatchesNum; $totalRes = $numTitleMatches + $numTextMatches; - $out->addHtml( + $out->enableOOUI(); + $out->addHTML( # This is an awful awful ID name. It's not a table, but we # named it poorly from when this was a table so now we're # stuck with it @@ -342,7 +343,7 @@ class SpecialSearch extends SpecialPage { return; } - $out->addHtml( "
" ); + $out->addHTML( "
" ); // prev/next links $prevnext = null; @@ -429,7 +430,7 @@ class SpecialSearch extends SpecialPage { $out->addHTML( "

{$prevnext}

\n" ); } - $out->addHtml( "
" ); + $out->addHTML( "
" ); Hooks::run( 'SpecialSearchResultsAppend', [ $this, $out, $term ] ); @@ -551,7 +552,7 @@ class SpecialSearch extends SpecialPage { ) { // invalid title // preserve the paragraph for margins etc... - $this->getOutput()->addHtml( '

' ); + $this->getOutput()->addHTML( '

' ); return; } @@ -580,7 +581,7 @@ class SpecialSearch extends SpecialPage { $this->getOutput()->wrapWikiMsg( "

\n$1

", $params ); } else { // preserve the paragraph for margins etc... - $this->getOutput()->addHtml( '

' ); + $this->getOutput()->addHTML( '

' ); } } @@ -1218,23 +1219,23 @@ class SpecialSearch extends SpecialPage { * @return string */ protected function shortDialog( $term, $resultsShown, $totalNum ) { - $out = Html::hidden( 'title', $this->getPageTitle()->getPrefixedText() ); - $out .= Html::hidden( 'profile', $this->profile ) . "\n"; - // Term box - $out .= Html::input( 'search', $term, 'search', [ - 'id' => $this->isPowerSearch() ? 'powerSearchText' : 'searchText', - 'size' => '50', + $searchWidget = new MediaWiki\Widget\SearchInputWidget( [ + 'id' => 'searchText', + 'name' => 'search', 'autofocus' => trim( $term ) === '', - 'class' => 'mw-ui-input mw-ui-input-inline', - // identifies the location of the search bar for tracking purposes - 'data-search-loc' => 'content', - ] ) . "\n"; - $out .= Html::hidden( 'fulltext', 'Search' ) . "\n"; - $out .= Html::submitButton( - $this->msg( 'searchbutton' )->text(), - [ 'class' => 'mw-ui-button mw-ui-progressive' ], - [ 'mw-ui-progressive' ] - ) . "\n"; + 'value' => $term, + ] ); + + $out = + Html::hidden( 'title', $this->getPageTitle()->getPrefixedText() ) . + Html::hidden( 'profile', $this->profile ) . + Html::hidden( 'fulltext', 'Search' ) . + $searchWidget . + new OOUI\ButtonInputWidget( [ + 'type' => 'submit', + 'label' => $this->msg( 'searchbutton' )->text(), + 'flags' => [ 'progressive', 'primary' ], + ] ); // Results-info if ( $totalNum > 0 && $this->offset < $totalNum ) { diff --git a/includes/specials/SpecialStatistics.php b/includes/specials/SpecialStatistics.php index c352927fd6..86f1e2080c 100644 --- a/includes/specials/SpecialStatistics.php +++ b/includes/specials/SpecialStatistics.php @@ -36,8 +36,6 @@ class SpecialStatistics extends SpecialPage { } public function execute( $par ) { - $miserMode = $this->getConfig()->get( 'MiserMode' ); - $this->setHeaders(); $this->getOutput()->addModuleStyles( 'mediawiki.special' ); diff --git a/includes/specials/SpecialTags.php b/includes/specials/SpecialTags.php index 2ff21228c6..e79fd6ee0f 100644 --- a/includes/specials/SpecialTags.php +++ b/includes/specials/SpecialTags.php @@ -297,7 +297,7 @@ class SpecialTags extends SpecialPage { $headerText = $this->msg( 'tags-create-warnings-above', $tag, count( $status->getWarningsArray() ) )->parseAsBlock() . - $out->parse( $status->getWikitext() ) . + $out->parse( $status->getWikiText() ) . $this->msg( 'tags-create-warnings-below' )->parseAsBlock(); $subform = new HTMLForm( $fields, $this->getContext() ); @@ -311,7 +311,7 @@ class SpecialTags extends SpecialPage { $out->addBacklinkSubtitle( $this->getPageTitle() ); return true; } else { - $out->addWikiText( "
\n" . $status->getWikitext() . + $out->addWikiText( "
\n" . $status->getWikiText() . "\n
" ); return false; } diff --git a/includes/specials/SpecialUnblock.php b/includes/specials/SpecialUnblock.php index d14e02f573..cff8bf463a 100644 --- a/includes/specials/SpecialUnblock.php +++ b/includes/specials/SpecialUnblock.php @@ -218,7 +218,7 @@ class SpecialUnblock extends SpecialPage { if ( $block->mHideName ) { # Something is deeply FUBAR if this is not a User object, but who knows? $id = $block->getTarget() instanceof User - ? $block->getTarget()->getID() + ? $block->getTarget()->getId() : User::idFromName( $block->getTarget() ); RevisionDeleteUser::unsuppressUserName( $block->getTarget(), $id ); @@ -229,7 +229,7 @@ class SpecialUnblock extends SpecialPage { $page = Title::makeTitle( NS_USER, '#' . $block->getId() ); } else { $page = $block->getTarget() instanceof User - ? $block->getTarget()->getUserpage() + ? $block->getTarget()->getUserPage() : Title::makeTitle( NS_USER, $block->getTarget() ); } @@ -238,7 +238,9 @@ class SpecialUnblock extends SpecialPage { $logEntry->setTarget( $page ); $logEntry->setComment( $data['Reason'] ); $logEntry->setPerformer( $performer ); - $logEntry->setTags( $data['Tags'] ); + if ( isset( $data['Tags'] ) ) { + $logEntry->setTags( $data['Tags'] ); + } $logId = $logEntry->insert(); $logEntry->publish( $logId ); diff --git a/includes/specials/SpecialUndelete.php b/includes/specials/SpecialUndelete.php index 52a3d17c27..c6d3f6e75e 100644 --- a/includes/specials/SpecialUndelete.php +++ b/includes/specials/SpecialUndelete.php @@ -698,6 +698,10 @@ class SpecialUndelete extends SpecialPage { parent::__construct( 'Undelete', 'deletedhistory' ); } + public function doesWrites() { + return true; + } + function loadRequest( $par ) { $request = $this->getRequest(); $user = $this->getUser(); diff --git a/includes/specials/SpecialUpload.php b/includes/specials/SpecialUpload.php index 2754b1356f..82e07fd6bf 100644 --- a/includes/specials/SpecialUpload.php +++ b/includes/specials/SpecialUpload.php @@ -622,7 +622,8 @@ class SpecialUpload extends SpecialPage { return false; } else { // New page should get watched if that's our option. - return $this->getUser()->getOption( 'watchcreations' ); + return $this->getUser()->getOption( 'watchcreations' ) || + $this->getUser()->getOption( 'watchuploads' ); } } diff --git a/includes/specials/SpecialUploadStash.php b/includes/specials/SpecialUploadStash.php index f2da81f1f2..555fe5ce14 100644 --- a/includes/specials/SpecialUploadStash.php +++ b/includes/specials/SpecialUploadStash.php @@ -306,6 +306,8 @@ class SpecialUploadStash extends UnlistedSpecialPage { if ( $size > self::MAX_SERVE_BYTES ) { throw new SpecialUploadStashTooLargeException(); } + // Cancel output buffering and gzipping if set + wfResetOutputBuffers(); self::outputFileHeaders( $contentType, $size ); print $content; @@ -367,13 +369,14 @@ class SpecialUploadStash extends UnlistedSpecialPage { $context = new DerivativeContext( $this->getContext() ); $context->setTitle( $this->getPageTitle() ); // Remove subpage - $form = new HTMLForm( [ + $form = HTMLForm::factory( 'ooui', [ 'Clear' => [ 'type' => 'hidden', 'default' => true, 'name' => 'clear', ] ], $context, 'clearStashedUploads' ); + $form->setSubmitDestructive(); $form->setSubmitCallback( [ __CLASS__, 'tryClearStashedUploads' ] ); $form->setSubmitTextMsg( 'uploadstash-clear' ); @@ -389,17 +392,27 @@ class SpecialUploadStash extends UnlistedSpecialPage { sort( $files ); $fileListItemsHtml = ''; foreach ( $files as $file ) { - // TODO: Use Linker::link or even construct the list in plain wikitext - $fileListItemsHtml .= Html::rawElement( 'li', [], - Html::element( 'a', [ 'href' => - $this->getPageTitle( "file/$file" )->getLocalURL() ], $file ) - ); + $itemHtml = Linker::linkKnown( $this->getPageTitle( "file/$file" ), htmlspecialchars( $file ) ); + try { + $fileObj = $this->stash->getFile( $file ); + $thumb = $fileObj->generateThumbName( $file, [ 'width' => 220 ] ); + $itemHtml .= + $this->msg( 'word-separator' )->escaped() . + $this->msg( 'parentheses' )->rawParams( + Linker::linkKnown( + $this->getPageTitle( "thumb/$file/$thumb" ), + $this->msg( 'uploadstash-thumbnail' )->escaped() + ) + )->escaped(); + } catch ( Exception $e ) { + } + $fileListItemsHtml .= Html::rawElement( 'li', [], $itemHtml ); } - $this->getOutput()->addHtml( Html::rawElement( 'ul', [], $fileListItemsHtml ) ); + $this->getOutput()->addHTML( Html::rawElement( 'ul', [], $fileListItemsHtml ) ); $form->displayForm( $formResult ); - $this->getOutput()->addHtml( Html::rawElement( 'p', [], $refreshHtml ) ); + $this->getOutput()->addHTML( Html::rawElement( 'p', [], $refreshHtml ) ); } else { - $this->getOutput()->addHtml( Html::rawElement( 'p', [], + $this->getOutput()->addHTML( Html::rawElement( 'p', [], Html::element( 'span', [], $this->msg( 'uploadstash-nofiles' )->text() ) . ' ' . $refreshHtml diff --git a/includes/specials/SpecialUserlogin.php b/includes/specials/SpecialUserlogin.php index 8d45468092..9901d36bbe 100644 --- a/includes/specials/SpecialUserlogin.php +++ b/includes/specials/SpecialUserlogin.php @@ -275,7 +275,7 @@ class LoginForm extends SpecialPage { */ public function execute( $subPage ) { // Make sure session is persisted - $session = MediaWiki\Session\SessionManager::getGlobalSession(); + $session = SessionManager::getGlobalSession(); $session->persist(); $this->load(); @@ -792,7 +792,7 @@ class LoginForm extends SpecialPage { } $isAutoCreated = false; - if ( $u->getID() == 0 ) { + if ( $u->getId() == 0 ) { $status = $this->attemptAutoCreate( $u ); if ( $status !== self::SUCCESS ) { return $status; @@ -1647,8 +1647,8 @@ class LoginForm extends SpecialPage { /** * Get the login token from the current session - * @since 1.27 returns a MediaWiki\\Session\\Token instead of a string - * @return MediaWiki\\Session\\Token + * @since 1.27 returns a MediaWiki\Session\Token instead of a string + * @return MediaWiki\Session\Token */ public static function getLoginToken() { global $wgRequest; @@ -1678,8 +1678,8 @@ class LoginForm extends SpecialPage { /** * Get the createaccount token from the current session - * @since 1.27 returns a MediaWiki\\Session\\Token instead of a string - * @return MediaWiki\\Session\\Token + * @since 1.27 returns a MediaWiki\Session\Token instead of a string + * @return MediaWiki\Session\Token */ public static function getCreateaccountToken() { global $wgRequest; @@ -1716,7 +1716,7 @@ class LoginForm extends SpecialPage { $wgCookieSecure = false; } - MediaWiki\Session\SessionManager::getGlobalSession()->resetId(); + SessionManager::getGlobalSession()->resetId(); } /** diff --git a/includes/specials/SpecialUserrights.php b/includes/specials/SpecialUserrights.php index 29261f325a..be110aa9cc 100644 --- a/includes/specials/SpecialUserrights.php +++ b/includes/specials/SpecialUserrights.php @@ -119,7 +119,7 @@ class UserrightsPage extends SpecialPage { } $fetchedStatus = $this->fetchUser( $this->mTarget ); - if ( $fetchedStatus->isOk() ) { + if ( $fetchedStatus->isOK() ) { $this->mFetchedUser = $fetchedStatus->value; if ( $this->mFetchedUser instanceof User ) { // Set the 'relevant user' in the skin, so it displays links like Contributions, @@ -417,28 +417,18 @@ class UserrightsPage extends SpecialPage { return Status::newGood( $user ); } - function makeGroupNameList( $ids ) { - if ( empty( $ids ) ) { - return $this->msg( 'rightsnone' )->inContentLanguage()->text(); - } else { - return implode( ', ', $ids ); - } - } - /** - * Make a list of group names to be stored as parameter for log entries + * @since 1.15 * - * @deprecated since 1.21; use LogFormatter instead. * @param array $ids + * * @return string */ - function makeGroupNameListForLog( $ids ) { - wfDeprecated( __METHOD__, '1.21' ); - + public function makeGroupNameList( $ids ) { if ( empty( $ids ) ) { - return ''; + return $this->msg( 'rightsnone' )->inContentLanguage()->text(); } else { - return $this->makeGroupNameList( $ids ); + return implode( ', ', $ids ); } } @@ -627,7 +617,7 @@ class UserrightsPage extends SpecialPage { * @return string */ private static function buildGroupLink( $group ) { - return User::makeGroupLinkHtml( $group, User::getGroupName( $group ) ); + return User::makeGroupLinkHTML( $group, User::getGroupName( $group ) ); } /** @@ -637,7 +627,7 @@ class UserrightsPage extends SpecialPage { * @return string */ private static function buildGroupMemberLink( $group ) { - return User::makeGroupLinkHtml( $group, User::getGroupMember( $group ) ); + return User::makeGroupLinkHTML( $group, User::getGroupMember( $group ) ); } /** diff --git a/includes/specials/SpecialVersion.php b/includes/specials/SpecialVersion.php index 5b452a682a..ce5cbeb56c 100644 --- a/includes/specials/SpecialVersion.php +++ b/includes/specials/SpecialVersion.php @@ -132,7 +132,7 @@ class SpecialVersion extends SpecialPage { $this->softwareInformation() . $this->getEntryPointInfo() ); - $out->addHtml( + $out->addHTML( $this->getSkinCredits() . $this->getExtensionCredits() . $this->getExternalLibraries() . diff --git a/includes/specials/SpecialWatchlist.php b/includes/specials/SpecialWatchlist.php index 2dda093b13..15691f2c46 100644 --- a/includes/specials/SpecialWatchlist.php +++ b/includes/specials/SpecialWatchlist.php @@ -369,10 +369,21 @@ class SpecialWatchlist extends ChangesListSpecialPage { } $s = $list->beginRecentChangesList(); + $userShowHiddenCats = $this->getUser()->getBoolOption( 'showhiddencats' ); $counter = 1; foreach ( $rows as $obj ) { # Make RC entry $rc = RecentChange::newFromRow( $obj ); + + # Skip CatWatch entries for hidden cats based on user preference + if ( + $rc->getAttribute( 'rc_type' ) == RC_CATEGORIZE && + !$userShowHiddenCats && + $rc->getParam( 'hidden-cat' ) + ) { + continue; + } + $rc->counter = $counter++; if ( $this->getConfig()->get( 'ShowUpdatedMarker' ) ) { @@ -382,7 +393,7 @@ class SpecialWatchlist extends ChangesListSpecialPage { } if ( isset( $watchedItemStore ) ) { - $rcTitleValue = new TitleValue( $obj->rc_namespace, $obj->rc_title ); + $rcTitleValue = new TitleValue( (int)$obj->rc_namespace, $obj->rc_title ); $rc->numberofWatchingusers = $watchedItemStore->countWatchers( $rcTitleValue ); } else { $rc->numberofWatchingusers = 0; diff --git a/includes/specials/SpecialWhatlinkshere.php b/includes/specials/SpecialWhatlinkshere.php index b1c3f16915..baa55f098a 100644 --- a/includes/specials/SpecialWhatlinkshere.php +++ b/includes/specials/SpecialWhatlinkshere.php @@ -160,7 +160,7 @@ class SpecialWhatLinksHere extends IncludableSpecialPage { ]; $on['rd_namespace'] = $target->getNamespace(); // Inner LIMIT is 2X in case of stale backlinks with wrong namespaces - $subQuery = $dbr->selectSqlText( + $subQuery = $dbr->selectSQLText( [ $table, 'redirect', 'page' ], [ $fromCol, 'rd_from' ], $conds[$table], diff --git a/includes/specials/pagers/ActiveUsersPager.php b/includes/specials/pagers/ActiveUsersPager.php new file mode 100644 index 0000000000..0d3bc9aeee --- /dev/null +++ b/includes/specials/pagers/ActiveUsersPager.php @@ -0,0 +1,254 @@ +RCMaxAge = $this->getConfig()->get( 'ActiveUserDays' ); + $un = $this->getRequest()->getText( 'username', $par ); + $this->requestedUser = ''; + if ( $un != '' ) { + $username = Title::makeTitleSafe( NS_USER, $un ); + if ( !is_null( $username ) ) { + $this->requestedUser = $username->getText(); + } + } + + $this->setupOptions(); + } + + public function setupOptions() { + $this->opts = new FormOptions(); + + $this->opts->add( 'hidebots', false, FormOptions::BOOL ); + $this->opts->add( 'hidesysops', false, FormOptions::BOOL ); + + $this->opts->fetchValuesFromRequest( $this->getRequest() ); + + if ( $this->opts->getValue( 'hidebots' ) == 1 ) { + $this->hideRights[] = 'bot'; + } + if ( $this->opts->getValue( 'hidesysops' ) == 1 ) { + $this->hideGroups[] = 'sysop'; + } + } + + function getIndexField() { + return 'qcc_title'; + } + + function getQueryInfo() { + $dbr = $this->getDatabase(); + + $activeUserSeconds = $this->getConfig()->get( 'ActiveUserDays' ) * 86400; + $timestamp = $dbr->timestamp( wfTimestamp( TS_UNIX ) - $activeUserSeconds ); + $conds = [ + 'qcc_type' => 'activeusers', + 'qcc_namespace' => NS_USER, + 'user_name = qcc_title', + 'rc_user_text = qcc_title', + 'rc_type != ' . $dbr->addQuotes( RC_EXTERNAL ), // Don't count wikidata. + 'rc_type != ' . $dbr->addQuotes( RC_CATEGORIZE ), // Don't count categorization changes. + 'rc_log_type IS NULL OR rc_log_type != ' . $dbr->addQuotes( 'newusers' ), + 'rc_timestamp >= ' . $dbr->addQuotes( $timestamp ), + ]; + if ( $this->requestedUser != '' ) { + $conds[] = 'qcc_title >= ' . $dbr->addQuotes( $this->requestedUser ); + } + if ( !$this->getUser()->isAllowed( 'hideuser' ) ) { + $conds[] = 'NOT EXISTS (' . $dbr->selectSQLText( + 'ipblocks', '1', [ 'ipb_user=user_id', 'ipb_deleted' => 1 ] + ) . ')'; + } + + if ( $dbr->implicitGroupby() ) { + $options = [ 'GROUP BY' => [ 'qcc_title' ] ]; + } else { + $options = [ 'GROUP BY' => [ 'user_name', 'user_id', 'qcc_title' ] ]; + } + + return [ + 'tables' => [ 'querycachetwo', 'user', 'recentchanges' ], + 'fields' => [ 'user_name', 'user_id', 'recentedits' => 'COUNT(*)', 'qcc_title' ], + 'options' => $options, + 'conds' => $conds + ]; + } + + function doBatchLookups() { + parent::doBatchLookups(); + + $uids = []; + foreach ( $this->mResult as $row ) { + $uids[] = $row->user_id; + } + // Fetch the block status of the user for showing "(blocked)" text and for + // striking out names of suppressed users when privileged user views the list. + // Although the first query already hits the block table for un-privileged, this + // is done in two queries to avoid huge quicksorts and to make COUNT(*) correct. + $dbr = $this->getDatabase(); + $res = $dbr->select( 'ipblocks', + [ 'ipb_user', 'MAX(ipb_deleted) AS block_status' ], + [ 'ipb_user' => $uids ], + __METHOD__, + [ 'GROUP BY' => [ 'ipb_user' ] ] + ); + $this->blockStatusByUid = []; + foreach ( $res as $row ) { + $this->blockStatusByUid[$row->ipb_user] = $row->block_status; // 0 or 1 + } + $this->mResult->seek( 0 ); + } + + function formatRow( $row ) { + $userName = $row->user_name; + + $ulinks = Linker::userLink( $row->user_id, $userName ); + $ulinks .= Linker::userToolLinks( $row->user_id, $userName ); + + $lang = $this->getLanguage(); + + $list = []; + $user = User::newFromId( $row->user_id ); + + // User right filter + foreach ( $this->hideRights as $right ) { + // Calling User::getRights() within the loop so that + // if the hideRights() filter is empty, we don't have to + // trigger the lazy-init of the big userrights array in the + // User object + if ( in_array( $right, $user->getRights() ) ) { + return ''; + } + } + + // User group filter + // Note: This is a different loop than for user rights, + // because we're reusing it to build the group links + // at the same time + $groups_list = self::getGroups( intval( $row->user_id ), $this->userGroupCache ); + foreach ( $groups_list as $group ) { + if ( in_array( $group, $this->hideGroups ) ) { + return ''; + } + $list[] = self::buildGroupLink( $group, $userName ); + } + + $groups = $lang->commaList( $list ); + + $item = $lang->specialList( $ulinks, $groups ); + + $isBlocked = isset( $this->blockStatusByUid[$row->user_id] ); + if ( $isBlocked && $this->blockStatusByUid[$row->user_id] == 1 ) { + $item = "$item"; + } + $count = $this->msg( 'activeusers-count' )->numParams( $row->recentedits ) + ->params( $userName )->numParams( $this->RCMaxAge )->escaped(); + $blocked = $isBlocked ? ' ' . $this->msg( 'listusers-blocked', $userName )->escaped() : ''; + + return Html::rawElement( 'li', [], "{$item} [{$count}]{$blocked}" ); + } + + function getPageHeader() { + $self = $this->getTitle(); + $limit = $this->mLimit ? Html::hidden( 'limit', $this->mLimit ) : ''; + + # Form tag + $out = Xml::openElement( 'form', [ 'method' => 'get', 'action' => wfScript() ] ); + $out .= Xml::fieldset( $this->msg( 'activeusers' )->text() ) . "\n"; + $out .= Html::hidden( 'title', $self->getPrefixedDBkey() ) . $limit . "\n"; + + # Username field (with autocompletion support) + $this->getOutput()->addModules( 'mediawiki.userSuggest' ); + $out .= Xml::inputLabel( + $this->msg( 'activeusers-from' )->text(), + 'username', + 'offset', + 20, + $this->requestedUser, + [ + 'class' => 'mw-ui-input-inline mw-autocomplete-user', + 'tabindex' => 1, + ] + ( + // Set autofocus on blank input + $this->requestedUser === '' ? [ 'autofocus' => '' ] : [] + ) + ) . '
'; + + $out .= Xml::checkLabel( $this->msg( 'activeusers-hidebots' )->text(), + 'hidebots', 'hidebots', $this->opts->getValue( 'hidebots' ), [ 'tabindex' => 2 ] ); + + $out .= Xml::checkLabel( + $this->msg( 'activeusers-hidesysops' )->text(), + 'hidesysops', + 'hidesysops', + $this->opts->getValue( 'hidesysops' ), + [ 'tabindex' => 3 ] + ) . '
'; + + # Submit button and form bottom + $out .= Xml::submitButton( + $this->msg( 'activeusers-submit' )->text(), + [ 'tabindex' => 4 ] + ) . "\n"; + $out .= Xml::closeElement( 'fieldset' ); + $out .= Xml::closeElement( 'form' ); + + return $out; + } + +} diff --git a/includes/specials/pagers/AllMessagesTablePager.php b/includes/specials/pagers/AllMessagesTablePager.php new file mode 100644 index 0000000000..2f2cbc2be8 --- /dev/null +++ b/includes/specials/pagers/AllMessagesTablePager.php @@ -0,0 +1,424 @@ +getContext() ); + $this->mIndexField = 'am_title'; + $this->mPage = $page; + $this->mConds = $conds; + // FIXME: Why does this need to be set to DIR_DESCENDING to produce ascending ordering? + $this->mDefaultDirection = IndexPager::DIR_DESCENDING; + $this->mLimitsShown = [ 20, 50, 100, 250, 500, 5000 ]; + + global $wgContLang; + + $this->talk = $this->msg( 'talkpagelinktext' )->escaped(); + + $this->lang = ( $langObj ? $langObj : $wgContLang ); + $this->langcode = $this->lang->getCode(); + $this->foreign = $this->langcode !== $wgContLang->getCode(); + + $request = $this->getRequest(); + + $this->filter = $request->getVal( 'filter', 'all' ); + if ( $this->filter === 'all' ) { + $this->custom = null; // So won't match in either case + } else { + $this->custom = ( $this->filter === 'unmodified' ); + } + + $prefix = $this->getLanguage()->ucfirst( $request->getVal( 'prefix', '' ) ); + $prefix = $prefix !== '' ? + Title::makeTitleSafe( NS_MEDIAWIKI, $request->getVal( 'prefix', null ) ) : + null; + + if ( $prefix !== null ) { + $this->displayPrefix = $prefix->getDBkey(); + $this->prefix = '/^' . preg_quote( $this->displayPrefix, '/' ) . '/i'; + } else { + $this->displayPrefix = false; + $this->prefix = false; + } + + // The suffix that may be needed for message names if we're in a + // different language (eg [[MediaWiki:Foo/fr]]: $suffix = '/fr' + if ( $this->foreign ) { + $this->suffix = '/' . $this->langcode; + } else { + $this->suffix = ''; + } + } + + function buildForm() { + $attrs = [ 'id' => 'mw-allmessages-form-lang', 'name' => 'lang' ]; + $msg = wfMessage( 'allmessages-language' ); + $langSelect = Xml::languageSelector( $this->langcode, false, null, $attrs, $msg ); + + $out = Xml::openElement( 'form', [ + 'method' => 'get', + 'action' => $this->getConfig()->get( 'Script' ), + 'id' => 'mw-allmessages-form' + ] ) . + Xml::fieldset( $this->msg( 'allmessages-filter-legend' )->text() ) . + Html::hidden( 'title', $this->getTitle()->getPrefixedText() ) . + Xml::openElement( 'table', [ 'class' => 'mw-allmessages-table' ] ) . "\n" . + ' + ' . + Xml::label( $this->msg( 'allmessages-prefix' )->text(), 'mw-allmessages-form-prefix' ) . + "\n + " . + Xml::input( + 'prefix', + 20, + str_replace( '_', ' ', $this->displayPrefix ), + [ 'id' => 'mw-allmessages-form-prefix' ] + ) . + "\n + + \n + " . + $this->msg( 'allmessages-filter' )->escaped() . + "\n + " . + Xml::radioLabel( $this->msg( 'allmessages-filter-unmodified' )->text(), + 'filter', + 'unmodified', + 'mw-allmessages-form-filter-unmodified', + ( $this->filter === 'unmodified' ) + ) . + Xml::radioLabel( $this->msg( 'allmessages-filter-all' )->text(), + 'filter', + 'all', + 'mw-allmessages-form-filter-all', + ( $this->filter === 'all' ) + ) . + Xml::radioLabel( $this->msg( 'allmessages-filter-modified' )->text(), + 'filter', + 'modified', + 'mw-allmessages-form-filter-modified', + ( $this->filter === 'modified' ) + ) . + "\n + + \n + " . $langSelect[0] . "\n + " . $langSelect[1] . "\n + " . + + ' + ' . + Xml::label( $this->msg( 'table_pager_limit_label' )->text(), 'mw-table_pager_limit_label' ) . + ' + ' . + $this->getLimitSelect( [ 'id' => 'mw-table_pager_limit_label' ] ) . + ' + + + ' . + Xml::submitButton( $this->msg( 'allmessages-filter-submit' )->text() ) . + "\n + " . + + Xml::closeElement( 'table' ) . + $this->getHiddenFields( [ 'title', 'prefix', 'filter', 'lang', 'limit' ] ) . + Xml::closeElement( 'fieldset' ) . + Xml::closeElement( 'form' ); + + return $out; + } + + function getAllMessages( $descending ) { + $messageNames = Language::getLocalisationCache()->getSubitemList( 'en', 'messages' ); + + // Normalise message names so they look like page titles and sort correctly - T86139 + $messageNames = array_map( [ $this->lang, 'ucfirst' ], $messageNames ); + + if ( $descending ) { + rsort( $messageNames ); + } else { + asort( $messageNames ); + } + + return $messageNames; + } + + /** + * Determine which of the MediaWiki and MediaWiki_talk namespace pages exist. + * Returns array( 'pages' => ..., 'talks' => ... ), where the subarrays have + * an entry for each existing page, with the key being the message name and + * value arbitrary. + * + * @param array $messageNames + * @param string $langcode What language code + * @param bool $foreign Whether the $langcode is not the content language + * @return array A 'pages' and 'talks' array with the keys of existing pages + */ + public static function getCustomisedStatuses( $messageNames, $langcode = 'en', $foreign = false ) { + // FIXME: This function should be moved to Language:: or something. + + $dbr = wfGetDB( DB_SLAVE ); + $res = $dbr->select( 'page', + [ 'page_namespace', 'page_title' ], + [ 'page_namespace' => [ NS_MEDIAWIKI, NS_MEDIAWIKI_TALK ] ], + __METHOD__, + [ 'USE INDEX' => 'name_title' ] + ); + $xNames = array_flip( $messageNames ); + + $pageFlags = $talkFlags = []; + + foreach ( $res as $s ) { + $exists = false; + + if ( $foreign ) { + $titleParts = explode( '/', $s->page_title ); + if ( count( $titleParts ) === 2 && + $langcode === $titleParts[1] && + isset( $xNames[$titleParts[0]] ) + ) { + $exists = $titleParts[0]; + } + } elseif ( isset( $xNames[$s->page_title] ) ) { + $exists = $s->page_title; + } + + $title = Title::newFromRow( $s ); + if ( $exists && $title->inNamespace( NS_MEDIAWIKI ) ) { + $pageFlags[$exists] = true; + } elseif ( $exists && $title->inNamespace( NS_MEDIAWIKI_TALK ) ) { + $talkFlags[$exists] = true; + } + } + + return [ 'pages' => $pageFlags, 'talks' => $talkFlags ]; + } + + /** + * This function normally does a database query to get the results; we need + * to make a pretend result using a FakeResultWrapper. + * @param string $offset + * @param int $limit + * @param bool $descending + * @return FakeResultWrapper + */ + function reallyDoQuery( $offset, $limit, $descending ) { + $result = new FakeResultWrapper( [] ); + + $messageNames = $this->getAllMessages( $descending ); + $statuses = self::getCustomisedStatuses( $messageNames, $this->langcode, $this->foreign ); + + $count = 0; + foreach ( $messageNames as $key ) { + $customised = isset( $statuses['pages'][$key] ); + if ( $customised !== $this->custom && + ( $descending && ( $key < $offset || !$offset ) || !$descending && $key > $offset ) && + ( ( $this->prefix && preg_match( $this->prefix, $key ) ) || $this->prefix === false ) + ) { + $actual = wfMessage( $key )->inLanguage( $this->langcode )->plain(); + $default = wfMessage( $key )->inLanguage( $this->langcode )->useDatabase( false )->plain(); + $result->result[] = [ + 'am_title' => $key, + 'am_actual' => $actual, + 'am_default' => $default, + 'am_customised' => $customised, + 'am_talk_exists' => isset( $statuses['talks'][$key] ) + ]; + $count++; + } + + if ( $count === $limit ) { + break; + } + } + + return $result; + } + + function getStartBody() { + $tableClass = $this->getTableClass(); + return Xml::openElement( 'table', [ + 'class' => "mw-datatable $tableClass", + 'id' => 'mw-allmessagestable' + ] ) . + "\n" . + " + " . + $this->msg( 'allmessagesname' )->escaped() . " + + " . + $this->msg( 'allmessagesdefault' )->escaped() . + " + \n + + " . + $this->msg( 'allmessagescurrent' )->escaped() . + " + \n"; + } + + function formatValue( $field, $value ) { + switch ( $field ) { + case 'am_title' : + $title = Title::makeTitle( NS_MEDIAWIKI, $value . $this->suffix ); + $talk = Title::makeTitle( NS_MEDIAWIKI_TALK, $value . $this->suffix ); + $translation = Linker::makeExternalLink( + 'https://translatewiki.net/w/i.php?' . wfArrayToCgi( [ + 'title' => 'Special:SearchTranslations', + 'group' => 'mediawiki', + 'grouppath' => 'mediawiki', + 'query' => 'language:' . $this->getLanguage()->getCode() . '^25 ' . + 'messageid:"MediaWiki:' . $value . '"^10 "' . + $this->msg( $value )->inLanguage( 'en' )->plain() . '"' + ] ), + $this->msg( 'allmessages-filter-translate' )->text() + ); + + if ( $this->mCurrentRow->am_customised ) { + $title = Linker::linkKnown( $title, $this->getLanguage()->lcfirst( $value ) ); + } else { + $title = Linker::link( + $title, + $this->getLanguage()->lcfirst( $value ), + [], + [], + [ 'broken' ] + ); + } + if ( $this->mCurrentRow->am_talk_exists ) { + $talk = Linker::linkKnown( $talk, $this->talk ); + } else { + $talk = Linker::link( + $talk, + $this->talk, + [], + [], + [ 'broken' ] + ); + } + + return $title . ' ' . + $this->msg( 'parentheses' )->rawParams( $talk )->escaped() . + ' ' . + $this->msg( 'parentheses' )->rawParams( $translation )->escaped(); + + case 'am_default' : + case 'am_actual' : + return Sanitizer::escapeHtmlAllowEntities( $value ); + } + + return ''; + } + + function formatRow( $row ) { + // Do all the normal stuff + $s = parent::formatRow( $row ); + + // But if there's a customised message, add that too. + if ( $row->am_customised ) { + $s .= Xml::openElement( 'tr', $this->getRowAttrs( $row, true ) ); + $formatted = strval( $this->formatValue( 'am_actual', $row->am_actual ) ); + + if ( $formatted === '' ) { + $formatted = ' '; + } + + $s .= Xml::tags( 'td', $this->getCellAttrs( 'am_actual', $row->am_actual ), $formatted ) + . "\n"; + } + + return $s; + } + + function getRowAttrs( $row, $isSecond = false ) { + $arr = []; + + if ( $row->am_customised ) { + $arr['class'] = 'allmessages-customised'; + } + + if ( !$isSecond ) { + $arr['id'] = Sanitizer::escapeId( 'msg_' . $this->getLanguage()->lcfirst( $row->am_title ) ); + } + + return $arr; + } + + function getCellAttrs( $field, $value ) { + if ( $this->mCurrentRow->am_customised && $field === 'am_title' ) { + return [ 'rowspan' => '2', 'class' => $field ]; + } elseif ( $field === 'am_title' ) { + return [ 'class' => $field ]; + } else { + return [ + 'lang' => $this->lang->getHtmlCode(), + 'dir' => $this->lang->getDir(), + 'class' => $field + ]; + } + } + + // This is not actually used, as getStartBody is overridden above + function getFieldNames() { + return [ + 'am_title' => $this->msg( 'allmessagesname' )->text(), + 'am_default' => $this->msg( 'allmessagesdefault' )->text() + ]; + } + + function getTitle() { + return SpecialPage::getTitleFor( 'Allmessages', false ); + } + + function isFieldSortable( $x ) { + return false; + } + + function getDefaultSort() { + return ''; + } + + function getQueryInfo() { + return ''; + } + +} diff --git a/includes/specials/pagers/BlockListPager.php b/includes/specials/pagers/BlockListPager.php new file mode 100644 index 0000000000..d8229761b7 --- /dev/null +++ b/includes/specials/pagers/BlockListPager.php @@ -0,0 +1,282 @@ +page = $page; + $this->conds = $conds; + $this->mDefaultDirection = IndexPager::DIR_DESCENDING; + parent::__construct( $page->getContext() ); + } + + function getFieldNames() { + static $headers = null; + + if ( $headers === null ) { + $headers = [ + 'ipb_timestamp' => 'blocklist-timestamp', + 'ipb_target' => 'blocklist-target', + 'ipb_expiry' => 'blocklist-expiry', + 'ipb_by' => 'blocklist-by', + 'ipb_params' => 'blocklist-params', + 'ipb_reason' => 'blocklist-reason', + ]; + foreach ( $headers as $key => $val ) { + $headers[$key] = $this->msg( $val )->text(); + } + } + + return $headers; + } + + function formatValue( $name, $value ) { + static $msg = null; + if ( $msg === null ) { + $keys = [ + 'anononlyblock', + 'createaccountblock', + 'noautoblockblock', + 'emailblock', + 'blocklist-nousertalk', + 'unblocklink', + 'change-blocklink', + ]; + + foreach ( $keys as $key ) { + $msg[$key] = $this->msg( $key )->escaped(); + } + } + + /** @var $row object */ + $row = $this->mCurrentRow; + + $language = $this->getLanguage(); + + $formatted = ''; + + switch ( $name ) { + case 'ipb_timestamp': + $formatted = htmlspecialchars( $language->userTimeAndDate( $value, $this->getUser() ) ); + break; + + case 'ipb_target': + if ( $row->ipb_auto ) { + $formatted = $this->msg( 'autoblockid', $row->ipb_id )->parse(); + } else { + list( $target, $type ) = Block::parseTarget( $row->ipb_address ); + switch ( $type ) { + case Block::TYPE_USER: + case Block::TYPE_IP: + $formatted = Linker::userLink( $target->getId(), $target ); + $formatted .= Linker::userToolLinks( + $target->getId(), + $target, + false, + Linker::TOOL_LINKS_NOBLOCK + ); + break; + case Block::TYPE_RANGE: + $formatted = htmlspecialchars( $target ); + } + } + break; + + case 'ipb_expiry': + $formatted = htmlspecialchars( $language->formatExpiry( + $value, + /* User preference timezone */true + ) ); + if ( $this->getUser()->isAllowed( 'block' ) ) { + if ( $row->ipb_auto ) { + $links[] = Linker::linkKnown( + SpecialPage::getTitleFor( 'Unblock' ), + $msg['unblocklink'], + [], + [ 'wpTarget' => "#{$row->ipb_id}" ] + ); + } else { + $links[] = Linker::linkKnown( + SpecialPage::getTitleFor( 'Unblock', $row->ipb_address ), + $msg['unblocklink'] + ); + $links[] = Linker::linkKnown( + SpecialPage::getTitleFor( 'Block', $row->ipb_address ), + $msg['change-blocklink'] + ); + } + $formatted .= ' ' . Html::rawElement( + 'span', + [ 'class' => 'mw-blocklist-actions' ], + $this->msg( 'parentheses' )->rawParams( + $language->pipeList( $links ) )->escaped() + ); + } + if ( $value !== 'infinity' ) { + $timestamp = new MWTimestamp( $value ); + $formatted .= '
' . $this->msg( + 'ipb-blocklist-duration-left', + $language->formatDuration( + $timestamp->getTimestamp() - time(), + // reasonable output + [ + 'minutes', + 'hours', + 'days', + 'years', + ] + ) + )->escaped(); + } + break; + + case 'ipb_by': + if ( isset( $row->by_user_name ) ) { + $formatted = Linker::userLink( $value, $row->by_user_name ); + $formatted .= Linker::userToolLinks( $value, $row->by_user_name ); + } else { + $formatted = htmlspecialchars( $row->ipb_by_text ); // foreign user? + } + break; + + case 'ipb_reason': + $formatted = Linker::formatComment( $value ); + break; + + case 'ipb_params': + $properties = []; + if ( $row->ipb_anon_only ) { + $properties[] = $msg['anononlyblock']; + } + if ( $row->ipb_create_account ) { + $properties[] = $msg['createaccountblock']; + } + if ( $row->ipb_user && !$row->ipb_enable_autoblock ) { + $properties[] = $msg['noautoblockblock']; + } + + if ( $row->ipb_block_email ) { + $properties[] = $msg['emailblock']; + } + + if ( !$row->ipb_allow_usertalk ) { + $properties[] = $msg['blocklist-nousertalk']; + } + + $formatted = $language->commaList( $properties ); + break; + + default: + $formatted = "Unable to format $name"; + break; + } + + return $formatted; + } + + function getQueryInfo() { + $info = [ + 'tables' => [ 'ipblocks', 'user' ], + 'fields' => [ + 'ipb_id', + 'ipb_address', + 'ipb_user', + 'ipb_by', + 'ipb_by_text', + 'by_user_name' => 'user_name', + 'ipb_reason', + 'ipb_timestamp', + 'ipb_auto', + 'ipb_anon_only', + 'ipb_create_account', + 'ipb_enable_autoblock', + 'ipb_expiry', + 'ipb_range_start', + 'ipb_range_end', + 'ipb_deleted', + 'ipb_block_email', + 'ipb_allow_usertalk', + ], + 'conds' => $this->conds, + 'join_conds' => [ 'user' => [ 'LEFT JOIN', 'user_id = ipb_by' ] ] + ]; + + # Filter out any expired blocks + $db = $this->getDatabase(); + $info['conds'][] = 'ipb_expiry > ' . $db->addQuotes( $db->timestamp() ); + + # Is the user allowed to see hidden blocks? + if ( !$this->getUser()->isAllowed( 'hideuser' ) ) { + $info['conds']['ipb_deleted'] = 0; + } + + return $info; + } + + protected function getTableClass() { + return parent::getTableClass() . ' mw-blocklist'; + } + + function getIndexField() { + return 'ipb_timestamp'; + } + + function getDefaultSort() { + return 'ipb_timestamp'; + } + + function isFieldSortable( $name ) { + return false; + } + + /** + * Do a LinkBatch query to minimise database load when generating all these links + * @param ResultWrapper $result + */ + function preprocessResults( $result ) { + # Do a link batch query + $lb = new LinkBatch; + $lb->setCaller( __METHOD__ ); + + foreach ( $result as $row ) { + $lb->add( NS_USER, $row->ipb_address ); + $lb->add( NS_USER_TALK, $row->ipb_address ); + + if ( isset( $row->by_user_name ) ) { + $lb->add( NS_USER, $row->by_user_name ); + $lb->add( NS_USER_TALK, $row->by_user_name ); + } + } + + $lb->execute(); + } + +} diff --git a/includes/specials/pagers/CategoryPager.php b/includes/specials/pagers/CategoryPager.php new file mode 100644 index 0000000000..cba4952b6f --- /dev/null +++ b/includes/specials/pagers/CategoryPager.php @@ -0,0 +1,112 @@ +setOffset( $from ); + $this->setIncludeOffset( true ); + } + + $this->linkRenderer = $linkRenderer; + } + + function getQueryInfo() { + return [ + 'tables' => [ 'category' ], + 'fields' => [ 'cat_title', 'cat_pages' ], + 'conds' => [ 'cat_pages > 0' ], + 'options' => [ 'USE INDEX' => 'cat_title' ], + ]; + } + + function getIndexField() { + return 'cat_title'; + } + + function getDefaultQuery() { + parent::getDefaultQuery(); + unset( $this->mDefaultQuery['from'] ); + + return $this->mDefaultQuery; + } + + /* Override getBody to apply LinksBatch on resultset before actually outputting anything. */ + public function getBody() { + $batch = new LinkBatch; + + $this->mResult->rewind(); + + foreach ( $this->mResult as $row ) { + $batch->addObj( Title::makeTitleSafe( NS_CATEGORY, $row->cat_title ) ); + } + $batch->execute(); + $this->mResult->rewind(); + + return parent::getBody(); + } + + function formatRow( $result ) { + $title = new TitleValue( NS_CATEGORY, $result->cat_title ); + $text = $title->getText(); + $link = $this->linkRenderer->renderHtmlLink( $title, $text ); + + $count = $this->msg( 'nmembers' )->numParams( $result->cat_pages )->escaped(); + return Html::rawElement( 'li', null, $this->getLanguage()->specialList( $link, $count ) ) . "\n"; + } + + public function getStartForm( $from ) { + return Xml::tags( + 'form', + [ 'method' => 'get', 'action' => wfScript() ], + Html::hidden( 'title', $this->getTitle()->getPrefixedText() ) . + Xml::fieldset( + $this->msg( 'categories' )->text(), + Xml::inputLabel( + $this->msg( 'categoriesfrom' )->text(), + 'from', 'from', 20, $from, [ 'class' => 'mw-ui-input-inline' ] ) . + ' ' . + Html::submitButton( + $this->msg( 'categories-submit' )->text(), + [], [ 'mw-ui-progressive' ] + ) + ) + ); + } +} diff --git a/includes/specials/pagers/ContribsPager.php b/includes/specials/pagers/ContribsPager.php new file mode 100644 index 0000000000..d90c37bab7 --- /dev/null +++ b/includes/specials/pagers/ContribsPager.php @@ -0,0 +1,526 @@ +messages[$msg] = $this->msg( $msg )->escaped(); + } + + $this->target = isset( $options['target'] ) ? $options['target'] : ''; + $this->contribs = isset( $options['contribs'] ) ? $options['contribs'] : 'users'; + $this->namespace = isset( $options['namespace'] ) ? $options['namespace'] : ''; + $this->tagFilter = isset( $options['tagfilter'] ) ? $options['tagfilter'] : false; + $this->nsInvert = isset( $options['nsInvert'] ) ? $options['nsInvert'] : false; + $this->associated = isset( $options['associated'] ) ? $options['associated'] : false; + + $this->deletedOnly = !empty( $options['deletedOnly'] ); + $this->topOnly = !empty( $options['topOnly'] ); + $this->newOnly = !empty( $options['newOnly'] ); + + $year = isset( $options['year'] ) ? $options['year'] : false; + $month = isset( $options['month'] ) ? $options['month'] : false; + $this->getDateCond( $year, $month ); + + // Most of this code will use the 'contributions' group DB, which can map to slaves + // with extra user based indexes or partioning by user. The additional metadata + // queries should use a regular slave since the lookup pattern is not all by user. + $this->mDbSecondary = wfGetDB( DB_SLAVE ); // any random slave + $this->mDb = wfGetDB( DB_SLAVE, 'contributions' ); + } + + function getDefaultQuery() { + $query = parent::getDefaultQuery(); + $query['target'] = $this->target; + + return $query; + } + + /** + * This method basically executes the exact same code as the parent class, though with + * a hook added, to allow extensions to add additional queries. + * + * @param string $offset Index offset, inclusive + * @param int $limit Exact query limit + * @param bool $descending Query direction, false for ascending, true for descending + * @return ResultWrapper + */ + function reallyDoQuery( $offset, $limit, $descending ) { + list( $tables, $fields, $conds, $fname, $options, $join_conds ) = $this->buildQueryInfo( + $offset, + $limit, + $descending + ); + + /* + * This hook will allow extensions to add in additional queries, so they can get their data + * in My Contributions as well. Extensions should append their results to the $data array. + * + * Extension queries have to implement the navbar requirement as well. They should + * - have a column aliased as $pager->getIndexField() + * - have LIMIT set + * - have a WHERE-clause that compares the $pager->getIndexField()-equivalent column to the offset + * - have the ORDER BY specified based upon the details provided by the navbar + * + * See includes/Pager.php buildQueryInfo() method on how to build LIMIT, WHERE & ORDER BY + * + * &$data: an array of results of all contribs queries + * $pager: the ContribsPager object hooked into + * $offset: see phpdoc above + * $limit: see phpdoc above + * $descending: see phpdoc above + */ + $data = [ $this->mDb->select( + $tables, $fields, $conds, $fname, $options, $join_conds + ) ]; + Hooks::run( + 'ContribsPager::reallyDoQuery', + [ &$data, $this, $offset, $limit, $descending ] + ); + + $result = []; + + // loop all results and collect them in an array + foreach ( $data as $query ) { + foreach ( $query as $i => $row ) { + // use index column as key, allowing us to easily sort in PHP + $result[$row->{$this->getIndexField()} . "-$i"] = $row; + } + } + + // sort results + if ( $descending ) { + ksort( $result ); + } else { + krsort( $result ); + } + + // enforce limit + $result = array_slice( $result, 0, $limit ); + + // get rid of array keys + $result = array_values( $result ); + + return new FakeResultWrapper( $result ); + } + + function getQueryInfo() { + list( $tables, $index, $userCond, $join_cond ) = $this->getUserCond(); + + $user = $this->getUser(); + $conds = array_merge( $userCond, $this->getNamespaceCond() ); + + // Paranoia: avoid brute force searches (bug 17342) + if ( !$user->isAllowed( 'deletedhistory' ) ) { + $conds[] = $this->mDb->bitAnd( 'rev_deleted', Revision::DELETED_USER ) . ' = 0'; + } elseif ( !$user->isAllowedAny( 'suppressrevision', 'viewsuppressed' ) ) { + $conds[] = $this->mDb->bitAnd( 'rev_deleted', Revision::SUPPRESSED_USER ) . + ' != ' . Revision::SUPPRESSED_USER; + } + + # Don't include orphaned revisions + $join_cond['page'] = Revision::pageJoinCond(); + # Get the current user name for accounts + $join_cond['user'] = Revision::userJoinCond(); + + $options = []; + if ( $index ) { + $options['USE INDEX'] = [ 'revision' => $index ]; + } + + $queryInfo = [ + 'tables' => $tables, + 'fields' => array_merge( + Revision::selectFields(), + Revision::selectUserFields(), + [ 'page_namespace', 'page_title', 'page_is_new', + 'page_latest', 'page_is_redirect', 'page_len' ] + ), + 'conds' => $conds, + 'options' => $options, + 'join_conds' => $join_cond + ]; + + ChangeTags::modifyDisplayQuery( + $queryInfo['tables'], + $queryInfo['fields'], + $queryInfo['conds'], + $queryInfo['join_conds'], + $queryInfo['options'], + $this->tagFilter + ); + + Hooks::run( 'ContribsPager::getQueryInfo', [ &$this, &$queryInfo ] ); + + return $queryInfo; + } + + function getUserCond() { + $condition = []; + $join_conds = []; + $tables = [ 'revision', 'page', 'user' ]; + $index = false; + if ( $this->contribs == 'newbie' ) { + $max = $this->mDb->selectField( 'user', 'max(user_id)', false, __METHOD__ ); + $condition[] = 'rev_user >' . (int)( $max - $max / 100 ); + # ignore local groups with the bot right + # @todo FIXME: Global groups may have 'bot' rights + $groupsWithBotPermission = User::getGroupsWithPermission( 'bot' ); + if ( count( $groupsWithBotPermission ) ) { + $tables[] = 'user_groups'; + $condition[] = 'ug_group IS NULL'; + $join_conds['user_groups'] = [ + 'LEFT JOIN', [ + 'ug_user = rev_user', + 'ug_group' => $groupsWithBotPermission + ] + ]; + } + } else { + $uid = User::idFromName( $this->target ); + if ( $uid ) { + $condition['rev_user'] = $uid; + $index = 'user_timestamp'; + } else { + $condition['rev_user_text'] = $this->target; + $index = 'usertext_timestamp'; + } + } + + if ( $this->deletedOnly ) { + $condition[] = 'rev_deleted != 0'; + } + + if ( $this->topOnly ) { + $condition[] = 'rev_id = page_latest'; + } + + if ( $this->newOnly ) { + $condition[] = 'rev_parent_id = 0'; + } + + return [ $tables, $index, $condition, $join_conds ]; + } + + function getNamespaceCond() { + if ( $this->namespace !== '' ) { + $selectedNS = $this->mDb->addQuotes( $this->namespace ); + $eq_op = $this->nsInvert ? '!=' : '='; + $bool_op = $this->nsInvert ? 'AND' : 'OR'; + + if ( !$this->associated ) { + return [ "page_namespace $eq_op $selectedNS" ]; + } + + $associatedNS = $this->mDb->addQuotes( + MWNamespace::getAssociated( $this->namespace ) + ); + + return [ + "page_namespace $eq_op $selectedNS " . + $bool_op . + " page_namespace $eq_op $associatedNS" + ]; + } + + return []; + } + + function getIndexField() { + return 'rev_timestamp'; + } + + function doBatchLookups() { + # Do a link batch query + $this->mResult->seek( 0 ); + $parentRevIds = []; + $this->mParentLens = []; + $batch = new LinkBatch(); + # Give some pointers to make (last) links + foreach ( $this->mResult as $row ) { + if ( isset( $row->rev_parent_id ) && $row->rev_parent_id ) { + $parentRevIds[] = $row->rev_parent_id; + } + if ( isset( $row->rev_id ) ) { + $this->mParentLens[$row->rev_id] = $row->rev_len; + if ( $this->contribs === 'newbie' ) { // multiple users + $batch->add( NS_USER, $row->user_name ); + $batch->add( NS_USER_TALK, $row->user_name ); + } + $batch->add( $row->page_namespace, $row->page_title ); + } + } + # Fetch rev_len for revisions not already scanned above + $this->mParentLens += Revision::getParentLengths( + $this->mDbSecondary, + array_diff( $parentRevIds, array_keys( $this->mParentLens ) ) + ); + $batch->execute(); + $this->mResult->seek( 0 ); + } + + /** + * @return string + */ + function getStartBody() { + return "
    \n"; + } + + /** + * @return string + */ + function getEndBody() { + return "
\n"; + } + + /** + * Generates each row in the contributions list. + * + * Contributions which are marked "top" are currently on top of the history. + * For these contributions, a [rollback] link is shown for users with roll- + * back privileges. The rollback link restores the most recent version that + * was not written by the target user. + * + * @todo This would probably look a lot nicer in a table. + * @param object $row + * @return string + */ + function formatRow( $row ) { + + $ret = ''; + $classes = []; + + /* + * There may be more than just revision rows. To make sure that we'll only be processing + * revisions here, let's _try_ to build a revision out of our row (without displaying + * notices though) and then trying to grab data from the built object. If we succeed, + * we're definitely dealing with revision data and we may proceed, if not, we'll leave it + * to extensions to subscribe to the hook to parse the row. + */ + MediaWiki\suppressWarnings(); + try { + $rev = new Revision( $row ); + $validRevision = (bool)$rev->getId(); + } catch ( Exception $e ) { + $validRevision = false; + } + MediaWiki\restoreWarnings(); + + if ( $validRevision ) { + $classes = []; + + $page = Title::newFromRow( $row ); + $link = Linker::link( + $page, + htmlspecialchars( $page->getPrefixedText() ), + [ 'class' => 'mw-contributions-title' ], + $page->isRedirect() ? [ 'redirect' => 'no' ] : [] + ); + # Mark current revisions + $topmarktext = ''; + $user = $this->getUser(); + if ( $row->rev_id == $row->page_latest ) { + $topmarktext .= '' . $this->messages['uctop'] . ''; + # Add rollback link + if ( !$row->page_is_new && $page->quickUserCan( 'rollback', $user ) + && $page->quickUserCan( 'edit', $user ) + ) { + $this->preventClickjacking(); + $topmarktext .= ' ' . Linker::generateRollback( $rev, $this->getContext() ); + } + } + # Is there a visible previous revision? + if ( $rev->userCan( Revision::DELETED_TEXT, $user ) && $rev->getParentId() !== 0 ) { + $difftext = Linker::linkKnown( + $page, + $this->messages['diff'], + [], + [ + 'diff' => 'prev', + 'oldid' => $row->rev_id + ] + ); + } else { + $difftext = $this->messages['diff']; + } + $histlink = Linker::linkKnown( + $page, + $this->messages['hist'], + [], + [ 'action' => 'history' ] + ); + + if ( $row->rev_parent_id === null ) { + // For some reason rev_parent_id isn't populated for this row. + // Its rumoured this is true on wikipedia for some revisions (bug 34922). + // Next best thing is to have the total number of bytes. + $chardiff = ' . . '; + $chardiff .= Linker::formatRevisionSize( $row->rev_len ); + $chardiff .= ' . . '; + } else { + $parentLen = 0; + if ( isset( $this->mParentLens[$row->rev_parent_id] ) ) { + $parentLen = $this->mParentLens[$row->rev_parent_id]; + } + + $chardiff = ' . . '; + $chardiff .= ChangesList::showCharacterDifference( + $parentLen, + $row->rev_len, + $this->getContext() + ); + $chardiff .= ' . . '; + } + + $lang = $this->getLanguage(); + $comment = $lang->getDirMark() . Linker::revComment( $rev, false, true ); + $date = $lang->userTimeAndDate( $row->rev_timestamp, $user ); + if ( $rev->userCan( Revision::DELETED_TEXT, $user ) ) { + $d = Linker::linkKnown( + $page, + htmlspecialchars( $date ), + [ 'class' => 'mw-changeslist-date' ], + [ 'oldid' => intval( $row->rev_id ) ] + ); + } else { + $d = htmlspecialchars( $date ); + } + if ( $rev->isDeleted( Revision::DELETED_TEXT ) ) { + $d = '' . $d . ''; + } + + # Show user names for /newbies as there may be different users. + # Note that we already excluded rows with hidden user names. + if ( $this->contribs == 'newbie' ) { + $userlink = ' . . ' . $lang->getDirMark() + . Linker::userLink( $rev->getUser(), $rev->getUserText() ); + $userlink .= ' ' . $this->msg( 'parentheses' )->rawParams( + Linker::userTalkLink( $rev->getUser(), $rev->getUserText() ) )->escaped() . ' '; + } else { + $userlink = ''; + } + + if ( $rev->getParentId() === 0 ) { + $nflag = ChangesList::flag( 'newpage' ); + } else { + $nflag = ''; + } + + if ( $rev->isMinor() ) { + $mflag = ChangesList::flag( 'minor' ); + } else { + $mflag = ''; + } + + $del = Linker::getRevDeleteLink( $user, $rev, $page ); + if ( $del !== '' ) { + $del .= ' '; + } + + $diffHistLinks = $this->msg( 'parentheses' ) + ->rawParams( $difftext . $this->messages['pipe-separator'] . $histlink ) + ->escaped(); + $ret = "{$del}{$d} {$diffHistLinks}{$chardiff}{$nflag}{$mflag} "; + $ret .= "{$link}{$userlink} {$comment} {$topmarktext}"; + + # Denote if username is redacted for this edit + if ( $rev->isDeleted( Revision::DELETED_USER ) ) { + $ret .= " " . + $this->msg( 'rev-deleted-user-contribs' )->escaped() . + ""; + } + + # Tags, if any. + list( $tagSummary, $newClasses ) = ChangeTags::formatSummaryRow( + $row->ts_tags, + 'contributions', + $this->getContext() + ); + $classes = array_merge( $classes, $newClasses ); + $ret .= " $tagSummary"; + } + + // Let extensions add data + Hooks::run( 'ContributionsLineEnding', [ $this, &$ret, $row, &$classes ] ); + + if ( $classes === [] && $ret === '' ) { + wfDebug( "Dropping Special:Contribution row that could not be formatted\n" ); + $ret = "\n"; + } else { + $ret = Html::rawElement( 'li', [ 'class' => $classes ], $ret ) . "\n"; + } + + return $ret; + } + + /** + * Overwrite Pager function and return a helpful comment + * @return string + */ + function getSqlComment() { + if ( $this->namespace || $this->deletedOnly ) { + // potentially slow, see CR r58153 + return 'contributions page filtered for namespace or RevisionDeleted edits'; + } else { + return 'contributions page unfiltered'; + } + } + + protected function preventClickjacking() { + $this->preventClickjacking = true; + } + + /** + * @return bool + */ + public function getPreventClickjacking() { + return $this->preventClickjacking; + } +} diff --git a/includes/specials/pagers/DeletedContribsPager.php b/includes/specials/pagers/DeletedContribsPager.php new file mode 100644 index 0000000000..f2421f871a --- /dev/null +++ b/includes/specials/pagers/DeletedContribsPager.php @@ -0,0 +1,355 @@ +messages[$msg] = $this->msg( $msg )->escaped(); + } + $this->target = $target; + $this->namespace = $namespace; + $this->mDb = wfGetDB( DB_SLAVE, 'contributions' ); + } + + function getDefaultQuery() { + $query = parent::getDefaultQuery(); + $query['target'] = $this->target; + + return $query; + } + + function getQueryInfo() { + list( $index, $userCond ) = $this->getUserCond(); + $conds = array_merge( $userCond, $this->getNamespaceCond() ); + $user = $this->getUser(); + // Paranoia: avoid brute force searches (bug 17792) + if ( !$user->isAllowed( 'deletedhistory' ) ) { + $conds[] = $this->mDb->bitAnd( 'ar_deleted', Revision::DELETED_USER ) . ' = 0'; + } elseif ( !$user->isAllowedAny( 'suppressrevision', 'viewsuppressed' ) ) { + $conds[] = $this->mDb->bitAnd( 'ar_deleted', Revision::SUPPRESSED_USER ) . + ' != ' . Revision::SUPPRESSED_USER; + } + + return [ + 'tables' => [ 'archive' ], + 'fields' => [ + 'ar_rev_id', 'ar_namespace', 'ar_title', 'ar_timestamp', 'ar_comment', + 'ar_minor_edit', 'ar_user', 'ar_user_text', 'ar_deleted' + ], + 'conds' => $conds, + 'options' => [ 'USE INDEX' => $index ] + ]; + } + + /** + * This method basically executes the exact same code as the parent class, though with + * a hook added, to allow extensions to add additional queries. + * + * @param string $offset Index offset, inclusive + * @param int $limit Exact query limit + * @param bool $descending Query direction, false for ascending, true for descending + * @return ResultWrapper + */ + function reallyDoQuery( $offset, $limit, $descending ) { + $data = [ parent::reallyDoQuery( $offset, $limit, $descending ) ]; + + // This hook will allow extensions to add in additional queries, nearly + // identical to ContribsPager::reallyDoQuery. + Hooks::run( + 'DeletedContribsPager::reallyDoQuery', + [ &$data, $this, $offset, $limit, $descending ] + ); + + $result = []; + + // loop all results and collect them in an array + foreach ( $data as $query ) { + foreach ( $query as $i => $row ) { + // use index column as key, allowing us to easily sort in PHP + $result[$row->{$this->getIndexField()} . "-$i"] = $row; + } + } + + // sort results + if ( $descending ) { + ksort( $result ); + } else { + krsort( $result ); + } + + // enforce limit + $result = array_slice( $result, 0, $limit ); + + // get rid of array keys + $result = array_values( $result ); + + return new FakeResultWrapper( $result ); + } + + function getUserCond() { + $condition = []; + + $condition['ar_user_text'] = $this->target; + $index = 'usertext_timestamp'; + + return [ $index, $condition ]; + } + + function getIndexField() { + return 'ar_timestamp'; + } + + function getStartBody() { + return "
    \n"; + } + + function getEndBody() { + return "
\n"; + } + + function getNavigationBar() { + if ( isset( $this->mNavigationBar ) ) { + return $this->mNavigationBar; + } + + $linkTexts = [ + 'prev' => $this->msg( 'pager-newer-n' )->numParams( $this->mLimit )->escaped(), + 'next' => $this->msg( 'pager-older-n' )->numParams( $this->mLimit )->escaped(), + 'first' => $this->msg( 'histlast' )->escaped(), + 'last' => $this->msg( 'histfirst' )->escaped() + ]; + + $pagingLinks = $this->getPagingLinks( $linkTexts ); + $limitLinks = $this->getLimitLinks(); + $lang = $this->getLanguage(); + $limits = $lang->pipeList( $limitLinks ); + + $firstLast = $lang->pipeList( [ $pagingLinks['first'], $pagingLinks['last'] ] ); + $firstLast = $this->msg( 'parentheses' )->rawParams( $firstLast )->escaped(); + $prevNext = $this->msg( 'viewprevnext' ) + ->rawParams( + $pagingLinks['prev'], + $pagingLinks['next'], + $limits + )->escaped(); + $separator = $this->msg( 'word-separator' )->escaped(); + $this->mNavigationBar = $firstLast . $separator . $prevNext; + + return $this->mNavigationBar; + } + + function getNamespaceCond() { + if ( $this->namespace !== '' ) { + return [ 'ar_namespace' => (int)$this->namespace ]; + } else { + return []; + } + } + + /** + * Generates each row in the contributions list. + * + * @todo This would probably look a lot nicer in a table. + * @param stdClass $row + * @return string + */ + function formatRow( $row ) { + $ret = ''; + $classes = []; + + /* + * There may be more than just revision rows. To make sure that we'll only be processing + * revisions here, let's _try_ to build a revision out of our row (without displaying + * notices though) and then trying to grab data from the built object. If we succeed, + * we're definitely dealing with revision data and we may proceed, if not, we'll leave it + * to extensions to subscribe to the hook to parse the row. + */ + MediaWiki\suppressWarnings(); + try { + $rev = Revision::newFromArchiveRow( $row ); + $validRevision = (bool)$rev->getId(); + } catch ( Exception $e ) { + $validRevision = false; + } + MediaWiki\restoreWarnings(); + + if ( $validRevision ) { + $ret = $this->formatRevisionRow( $row ); + } + + // Let extensions add data + Hooks::run( 'DeletedContributionsLineEnding', [ $this, &$ret, $row, &$classes ] ); + + if ( $classes === [] && $ret === '' ) { + wfDebug( "Dropping Special:DeletedContribution row that could not be formatted\n" ); + $ret = "\n"; + } else { + $ret = Html::rawElement( 'li', [ 'class' => $classes ], $ret ) . "\n"; + } + + return $ret; + } + + /** + * Generates each row in the contributions list for archive entries. + * + * Contributions which are marked "top" are currently on top of the history. + * For these contributions, a [rollback] link is shown for users with sysop + * privileges. The rollback link restores the most recent version that was not + * written by the target user. + * + * @todo This would probably look a lot nicer in a table. + * @param stdClass $row + * @return string + */ + function formatRevisionRow( $row ) { + $page = Title::makeTitle( $row->ar_namespace, $row->ar_title ); + + $rev = new Revision( [ + 'title' => $page, + 'id' => $row->ar_rev_id, + 'comment' => $row->ar_comment, + 'user' => $row->ar_user, + 'user_text' => $row->ar_user_text, + 'timestamp' => $row->ar_timestamp, + 'minor_edit' => $row->ar_minor_edit, + 'deleted' => $row->ar_deleted, + ] ); + + $undelete = SpecialPage::getTitleFor( 'Undelete' ); + + $logs = SpecialPage::getTitleFor( 'Log' ); + $dellog = Linker::linkKnown( + $logs, + $this->messages['deletionlog'], + [], + [ + 'type' => 'delete', + 'page' => $page->getPrefixedText() + ] + ); + + $reviewlink = Linker::linkKnown( + SpecialPage::getTitleFor( 'Undelete', $page->getPrefixedDBkey() ), + $this->messages['undeleteviewlink'] + ); + + $user = $this->getUser(); + + if ( $user->isAllowed( 'deletedtext' ) ) { + $last = Linker::linkKnown( + $undelete, + $this->messages['diff'], + [], + [ + 'target' => $page->getPrefixedText(), + 'timestamp' => $rev->getTimestamp(), + 'diff' => 'prev' + ] + ); + } else { + $last = $this->messages['diff']; + } + + $comment = Linker::revComment( $rev ); + $date = $this->getLanguage()->userTimeAndDate( $rev->getTimestamp(), $user ); + $date = htmlspecialchars( $date ); + + if ( !$user->isAllowed( 'undelete' ) || !$rev->userCan( Revision::DELETED_TEXT, $user ) ) { + $link = $date; // unusable link + } else { + $link = Linker::linkKnown( + $undelete, + $date, + [ 'class' => 'mw-changeslist-date' ], + [ + 'target' => $page->getPrefixedText(), + 'timestamp' => $rev->getTimestamp() + ] + ); + } + // Style deleted items + if ( $rev->isDeleted( Revision::DELETED_TEXT ) ) { + $link = '' . $link . ''; + } + + $pagelink = Linker::link( + $page, + null, + [ 'class' => 'mw-changeslist-title' ] + ); + + if ( $rev->isMinor() ) { + $mflag = ChangesList::flag( 'minor' ); + } else { + $mflag = ''; + } + + // Revision delete link + $del = Linker::getRevDeleteLink( $user, $rev, $page ); + if ( $del ) { + $del .= ' '; + } + + $tools = Html::rawElement( + 'span', + [ 'class' => 'mw-deletedcontribs-tools' ], + $this->msg( 'parentheses' )->rawParams( $this->getLanguage()->pipeList( + [ $last, $dellog, $reviewlink ] ) )->escaped() + ); + + $separator = '. .'; + $ret = "{$del}{$link} {$tools} {$separator} {$mflag} {$pagelink} {$comment}"; + + # Denote if username is redacted for this edit + if ( $rev->isDeleted( Revision::DELETED_USER ) ) { + $ret .= " " . $this->msg( 'rev-deleted-user-contribs' )->escaped() . ""; + } + + return $ret; + } + + /** + * Get the Database object in use + * + * @return IDatabase + */ + public function getDatabase() { + return $this->mDb; + } +} diff --git a/includes/specials/pagers/ImageListPager.php b/includes/specials/pagers/ImageListPager.php new file mode 100644 index 0000000000..45fe5c402a --- /dev/null +++ b/includes/specials/pagers/ImageListPager.php @@ -0,0 +1,602 @@ +setContext( $context ); + $this->mIncluding = $including; + $this->mShowAll = $showAll; + + if ( $userName !== null && $userName !== '' ) { + $nt = Title::makeTitleSafe( NS_USER, $userName ); + if ( is_null( $nt ) ) { + $this->outputUserDoesNotExist( $userName ); + } else { + $this->mUserName = $nt->getText(); + $user = User::newFromName( $this->mUserName, false ); + if ( $user ) { + $this->mUser = $user; + } + if ( !$user || ( $user->isAnon() && !User::isIP( $user->getName() ) ) ) { + $this->outputUserDoesNotExist( $userName ); + } + } + } + + if ( $search !== '' && !$this->getConfig()->get( 'MiserMode' ) ) { + $this->mSearch = $search; + $nt = Title::newFromText( $this->mSearch ); + + if ( $nt ) { + $dbr = wfGetDB( DB_SLAVE ); + $this->mQueryConds[] = 'LOWER(img_name)' . + $dbr->buildLike( $dbr->anyString(), + strtolower( $nt->getDBkey() ), $dbr->anyString() ); + } + } + + if ( !$including ) { + if ( $this->getRequest()->getText( 'sort', 'img_date' ) == 'img_date' ) { + $this->mDefaultDirection = IndexPager::DIR_DESCENDING; + } else { + $this->mDefaultDirection = IndexPager::DIR_ASCENDING; + } + } else { + $this->mDefaultDirection = IndexPager::DIR_DESCENDING; + } + + parent::__construct( $context ); + } + + /** + * Get the user relevant to the ImageList + * + * @return User|null + */ + function getRelevantUser() { + return $this->mUser; + } + + /** + * Add a message to the output stating that the user doesn't exist + * + * @param string $userName Unescaped user name + */ + protected function outputUserDoesNotExist( $userName ) { + $this->getOutput()->wrapWikiMsg( + "
\n$1\n
", + [ + 'listfiles-userdoesnotexist', + wfEscapeWikiText( $userName ), + ] + ); + } + + /** + * Build the where clause of the query. + * + * Replaces the older mQueryConds member variable. + * @param string $table Either "image" or "oldimage" + * @return array The query conditions. + */ + protected function buildQueryConds( $table ) { + $prefix = $table === 'image' ? 'img' : 'oi'; + $conds = []; + + if ( !is_null( $this->mUserName ) ) { + $conds[$prefix . '_user_text'] = $this->mUserName; + } + + if ( $this->mSearch !== '' ) { + $nt = Title::newFromText( $this->mSearch ); + if ( $nt ) { + $dbr = wfGetDB( DB_SLAVE ); + $conds[] = 'LOWER(' . $prefix . '_name)' . + $dbr->buildLike( $dbr->anyString(), + strtolower( $nt->getDBkey() ), $dbr->anyString() ); + } + } + + if ( $table === 'oldimage' ) { + // Don't want to deal with revdel. + // Future fixme: Show partial information as appropriate. + // Would have to be careful about filtering by username when username is deleted. + $conds['oi_deleted'] = 0; + } + + // Add mQueryConds in case anyone was subclassing and using the old variable. + return $conds + $this->mQueryConds; + } + + /** + * @return array + */ + function getFieldNames() { + if ( !$this->mFieldNames ) { + $this->mFieldNames = [ + 'img_timestamp' => $this->msg( 'listfiles_date' )->text(), + 'img_name' => $this->msg( 'listfiles_name' )->text(), + 'thumb' => $this->msg( 'listfiles_thumb' )->text(), + 'img_size' => $this->msg( 'listfiles_size' )->text(), + ]; + if ( is_null( $this->mUserName ) ) { + // Do not show username if filtering by username + $this->mFieldNames['img_user_text'] = $this->msg( 'listfiles_user' )->text(); + } + // img_description down here, in order so that its still after the username field. + $this->mFieldNames['img_description'] = $this->msg( 'listfiles_description' )->text(); + + if ( !$this->getConfig()->get( 'MiserMode' ) && !$this->mShowAll ) { + $this->mFieldNames['count'] = $this->msg( 'listfiles_count' )->text(); + } + if ( $this->mShowAll ) { + $this->mFieldNames['top'] = $this->msg( 'listfiles-latestversion' )->text(); + } + } + + return $this->mFieldNames; + } + + function isFieldSortable( $field ) { + if ( $this->mIncluding ) { + return false; + } + $sortable = [ 'img_timestamp', 'img_name', 'img_size' ]; + /* For reference, the indicies we can use for sorting are: + * On the image table: img_usertext_timestamp, img_size, img_timestamp + * On oldimage: oi_usertext_timestamp, oi_name_timestamp + * + * In particular that means we cannot sort by timestamp when not filtering + * by user and including old images in the results. Which is sad. + */ + if ( $this->getConfig()->get( 'MiserMode' ) && !is_null( $this->mUserName ) ) { + // If we're sorting by user, the index only supports sorting by time. + if ( $field === 'img_timestamp' ) { + return true; + } else { + return false; + } + } elseif ( $this->getConfig()->get( 'MiserMode' ) + && $this->mShowAll /* && mUserName === null */ + ) { + // no oi_timestamp index, so only alphabetical sorting in this case. + if ( $field === 'img_name' ) { + return true; + } else { + return false; + } + } + + return in_array( $field, $sortable ); + } + + function getQueryInfo() { + // Hacky Hacky Hacky - I want to get query info + // for two different tables, without reimplementing + // the pager class. + $qi = $this->getQueryInfoReal( $this->mTableName ); + + return $qi; + } + + /** + * Actually get the query info. + * + * This is to allow displaying both stuff from image and oldimage table. + * + * This is a bit hacky. + * + * @param string $table Either 'image' or 'oldimage' + * @return array Query info + */ + protected function getQueryInfoReal( $table ) { + $prefix = $table === 'oldimage' ? 'oi' : 'img'; + + $tables = [ $table ]; + $fields = array_keys( $this->getFieldNames() ); + + if ( $table === 'oldimage' ) { + foreach ( $fields as $id => &$field ) { + if ( substr( $field, 0, 4 ) !== 'img_' ) { + continue; + } + $field = $prefix . substr( $field, 3 ) . ' AS ' . $field; + } + $fields[array_search( 'top', $fields )] = "'no' AS top"; + } else { + if ( $this->mShowAll ) { + $fields[array_search( 'top', $fields )] = "'yes' AS top"; + } + } + $fields[] = $prefix . '_user AS img_user'; + $fields[array_search( 'thumb', $fields )] = $prefix . '_name AS thumb'; + + $options = $join_conds = []; + + # Depends on $wgMiserMode + # Will also not happen if mShowAll is true. + if ( isset( $this->mFieldNames['count'] ) ) { + $tables[] = 'oldimage'; + + # Need to rewrite this one + foreach ( $fields as &$field ) { + if ( $field == 'count' ) { + $field = 'COUNT(oi_archive_name) AS count'; + } + } + unset( $field ); + + $dbr = wfGetDB( DB_SLAVE ); + if ( $dbr->implicitGroupby() ) { + $options = [ 'GROUP BY' => 'img_name' ]; + } else { + $columnlist = preg_grep( '/^img/', array_keys( $this->getFieldNames() ) ); + $options = [ 'GROUP BY' => array_merge( [ 'img_user' ], $columnlist ) ]; + } + $join_conds = [ 'oldimage' => [ 'LEFT JOIN', 'oi_name = img_name' ] ]; + } + + return [ + 'tables' => $tables, + 'fields' => $fields, + 'conds' => $this->buildQueryConds( $table ), + 'options' => $options, + 'join_conds' => $join_conds + ]; + } + + /** + * Override reallyDoQuery to mix together two queries. + * + * @note $asc is named $descending in IndexPager base class. However + * it is true when the order is ascending, and false when the order + * is descending, so I renamed it to $asc here. + * @param int $offset + * @param int $limit + * @param bool $asc + * @return array + * @throws MWException + */ + function reallyDoQuery( $offset, $limit, $asc ) { + $prevTableName = $this->mTableName; + $this->mTableName = 'image'; + list( $tables, $fields, $conds, $fname, $options, $join_conds ) = + $this->buildQueryInfo( $offset, $limit, $asc ); + $imageRes = $this->mDb->select( $tables, $fields, $conds, $fname, $options, $join_conds ); + $this->mTableName = $prevTableName; + + if ( !$this->mShowAll ) { + return $imageRes; + } + + $this->mTableName = 'oldimage'; + + # Hacky... + $oldIndex = $this->mIndexField; + if ( substr( $this->mIndexField, 0, 4 ) !== 'img_' ) { + throw new MWException( "Expected to be sorting on an image table field" ); + } + $this->mIndexField = 'oi_' . substr( $this->mIndexField, 4 ); + + list( $tables, $fields, $conds, $fname, $options, $join_conds ) = + $this->buildQueryInfo( $offset, $limit, $asc ); + $oldimageRes = $this->mDb->select( $tables, $fields, $conds, $fname, $options, $join_conds ); + + $this->mTableName = $prevTableName; + $this->mIndexField = $oldIndex; + + return $this->combineResult( $imageRes, $oldimageRes, $limit, $asc ); + } + + /** + * Combine results from 2 tables. + * + * Note: This will throw away some results + * + * @param ResultWrapper $res1 + * @param ResultWrapper $res2 + * @param int $limit + * @param bool $ascending See note about $asc in $this->reallyDoQuery + * @return FakeResultWrapper $res1 and $res2 combined + */ + protected function combineResult( $res1, $res2, $limit, $ascending ) { + $res1->rewind(); + $res2->rewind(); + $topRes1 = $res1->next(); + $topRes2 = $res2->next(); + $resultArray = []; + for ( $i = 0; $i < $limit && $topRes1 && $topRes2; $i++ ) { + if ( strcmp( $topRes1->{$this->mIndexField}, $topRes2->{$this->mIndexField} ) > 0 ) { + if ( !$ascending ) { + $resultArray[] = $topRes1; + $topRes1 = $res1->next(); + } else { + $resultArray[] = $topRes2; + $topRes2 = $res2->next(); + } + } else { + if ( !$ascending ) { + $resultArray[] = $topRes2; + $topRes2 = $res2->next(); + } else { + $resultArray[] = $topRes1; + $topRes1 = $res1->next(); + } + } + } + + // @codingStandardsIgnoreStart Squiz.WhiteSpace.SemicolonSpacing.Incorrect + for ( ; $i < $limit && $topRes1; $i++ ) { + // @codingStandardsIgnoreEnd + $resultArray[] = $topRes1; + $topRes1 = $res1->next(); + } + + // @codingStandardsIgnoreStart Squiz.WhiteSpace.SemicolonSpacing.Incorrect + for ( ; $i < $limit && $topRes2; $i++ ) { + // @codingStandardsIgnoreEnd + $resultArray[] = $topRes2; + $topRes2 = $res2->next(); + } + + return new FakeResultWrapper( $resultArray ); + } + + function getDefaultSort() { + if ( $this->mShowAll && $this->getConfig()->get( 'MiserMode' ) && is_null( $this->mUserName ) ) { + // Unfortunately no index on oi_timestamp. + return 'img_name'; + } else { + return 'img_timestamp'; + } + } + + function doBatchLookups() { + $userIds = []; + $this->mResult->seek( 0 ); + foreach ( $this->mResult as $row ) { + $userIds[] = $row->img_user; + } + # Do a link batch query for names and userpages + UserCache::singleton()->doQuery( $userIds, [ 'userpage' ], __METHOD__ ); + } + + /** + * @param string $field + * @param string $value + * @return Message|string|int The return type depends on the value of $field: + * - thumb: string + * - img_timestamp: string + * - img_name: string + * - img_user_text: string + * - img_size: string + * - img_description: string + * - count: int + * - top: Message + * @throws MWException + */ + function formatValue( $field, $value ) { + switch ( $field ) { + case 'thumb': + $opt = [ 'time' => wfTimestamp( TS_MW, $this->mCurrentRow->img_timestamp ) ]; + $file = RepoGroup::singleton()->getLocalRepo()->findFile( $value, $opt ); + // If statement for paranoia + if ( $file ) { + $thumb = $file->transform( [ 'width' => 180, 'height' => 360 ] ); + + return $thumb->toHtml( [ 'desc-link' => true ] ); + } else { + return htmlspecialchars( $value ); + } + case 'img_timestamp': + // We may want to make this a link to the "old" version when displaying old files + return htmlspecialchars( $this->getLanguage()->userTimeAndDate( $value, $this->getUser() ) ); + case 'img_name': + static $imgfile = null; + if ( $imgfile === null ) { + $imgfile = $this->msg( 'imgfile' )->text(); + } + + // Weird files can maybe exist? Bug 22227 + $filePage = Title::makeTitleSafe( NS_FILE, $value ); + if ( $filePage ) { + $link = Linker::linkKnown( + $filePage, + htmlspecialchars( $filePage->getText() ) + ); + $download = Xml::element( 'a', + [ 'href' => wfLocalFile( $filePage )->getUrl() ], + $imgfile + ); + $download = $this->msg( 'parentheses' )->rawParams( $download )->escaped(); + + // Add delete links if allowed + // From https://github.com/Wikia/app/pull/3859 + if ( $filePage->userCan( 'delete', $this->getUser() ) ) { + $deleteMsg = $this->msg( 'listfiles-delete' )->escaped(); + + $delete = Linker::linkKnown( + $filePage, $deleteMsg, [], [ 'action' => 'delete' ] + ); + $delete = $this->msg( 'parentheses' )->rawParams( $delete )->escaped(); + + return "$link $download $delete"; + } + + return "$link $download"; + } else { + return htmlspecialchars( $value ); + } + case 'img_user_text': + if ( $this->mCurrentRow->img_user ) { + $name = User::whoIs( $this->mCurrentRow->img_user ); + $link = Linker::link( + Title::makeTitle( NS_USER, $name ), + htmlspecialchars( $name ) + ); + } else { + $link = htmlspecialchars( $value ); + } + + return $link; + case 'img_size': + return htmlspecialchars( $this->getLanguage()->formatSize( $value ) ); + case 'img_description': + return Linker::formatComment( $value ); + case 'count': + return intval( $value ) + 1; + case 'top': + // Messages: listfiles-latestversion-yes, listfiles-latestversion-no + return $this->msg( 'listfiles-latestversion-' . $value ); + default: + throw new MWException( "Unknown field '$field'" ); + } + } + + function getForm() { + $fields = []; + $fields['limit'] = [ + 'type' => 'select', + 'name' => 'limit', + 'label-message' => 'table_pager_limit_label', + 'options' => $this->getLimitSelectList(), + 'default' => $this->mLimit, + ]; + + if ( !$this->getConfig()->get( 'MiserMode' ) ) { + $fields['ilsearch'] = [ + 'type' => 'text', + 'name' => 'ilsearch', + 'id' => 'mw-ilsearch', + 'label-message' => 'listfiles_search_for', + 'default' => $this->mSearch, + 'size' => '40', + 'maxlength' => '255', + ]; + } + + $this->getOutput()->addModules( 'mediawiki.userSuggest' ); + $fields['user'] = [ + 'type' => 'text', + 'name' => 'user', + 'id' => 'mw-listfiles-user', + 'label-message' => 'username', + 'default' => $this->mUserName, + 'size' => '40', + 'maxlength' => '255', + 'cssclass' => 'mw-autocomplete-user', // used by mediawiki.userSuggest + ]; + + $fields['ilshowall'] = [ + 'type' => 'check', + 'name' => 'ilshowall', + 'id' => 'mw-listfiles-show-all', + 'label-message' => 'listfiles-show-all', + 'default' => $this->mShowAll, + ]; + + $query = $this->getRequest()->getQueryValues(); + unset( $query['title'] ); + unset( $query['limit'] ); + unset( $query['ilsearch'] ); + unset( $query['ilshowall'] ); + unset( $query['user'] ); + + $form = new HTMLForm( $fields, $this->getContext() ); + + $form->setMethod( 'get' ); + $form->setTitle( $this->getTitle() ); + $form->setId( 'mw-listfiles-form' ); + $form->setWrapperLegendMsg( 'listfiles' ); + $form->setSubmitTextMsg( 'table_pager_limit_submit' ); + $form->addHiddenFields( $query ); + + $form->prepareForm(); + $form->displayForm( '' ); + } + + protected function getTableClass() { + return parent::getTableClass() . ' listfiles'; + } + + protected function getNavClass() { + return parent::getNavClass() . ' listfiles_nav'; + } + + protected function getSortHeaderClass() { + return parent::getSortHeaderClass() . ' listfiles_sort'; + } + + function getPagingQueries() { + $queries = parent::getPagingQueries(); + if ( !is_null( $this->mUserName ) ) { + # Append the username to the query string + foreach ( $queries as &$query ) { + if ( $query !== false ) { + $query['user'] = $this->mUserName; + } + } + } + + return $queries; + } + + function getDefaultQuery() { + $queries = parent::getDefaultQuery(); + if ( !isset( $queries['user'] ) && !is_null( $this->mUserName ) ) { + $queries['user'] = $this->mUserName; + } + + return $queries; + } + + function getTitle() { + return SpecialPage::getTitleFor( 'Listfiles' ); + } +} diff --git a/includes/specials/pagers/MergeHistoryPager.php b/includes/specials/pagers/MergeHistoryPager.php new file mode 100644 index 0000000000..0b9587c422 --- /dev/null +++ b/includes/specials/pagers/MergeHistoryPager.php @@ -0,0 +1,99 @@ +mForm = $form; + $this->mConds = $conds; + $this->title = $source; + $this->articleID = $source->getArticleID(); + + $dbr = wfGetDB( DB_SLAVE ); + $maxtimestamp = $dbr->selectField( + 'revision', + 'MIN(rev_timestamp)', + [ 'rev_page' => $dest->getArticleID() ], + __METHOD__ + ); + $this->maxTimestamp = $maxtimestamp; + + parent::__construct( $form->getContext() ); + } + + function getStartBody() { + # Do a link batch query + $this->mResult->seek( 0 ); + $batch = new LinkBatch(); + # Give some pointers to make (last) links + $this->mForm->prevId = []; + foreach ( $this->mResult as $row ) { + $batch->addObj( Title::makeTitleSafe( NS_USER, $row->user_name ) ); + $batch->addObj( Title::makeTitleSafe( NS_USER_TALK, $row->user_name ) ); + + $rev_id = isset( $rev_id ) ? $rev_id : $row->rev_id; + if ( $rev_id > $row->rev_id ) { + $this->mForm->prevId[$rev_id] = $row->rev_id; + } elseif ( $rev_id < $row->rev_id ) { + $this->mForm->prevId[$row->rev_id] = $rev_id; + } + + $rev_id = $row->rev_id; + } + + $batch->execute(); + $this->mResult->seek( 0 ); + + return ''; + } + + function formatRow( $row ) { + return $this->mForm->formatRevisionRow( $row ); + } + + function getQueryInfo() { + $conds = $this->mConds; + $conds['rev_page'] = $this->articleID; + $conds[] = "rev_timestamp < " . $this->mDb->addQuotes( $this->maxTimestamp ); + + return [ + 'tables' => [ 'revision', 'page', 'user' ], + 'fields' => array_merge( Revision::selectFields(), Revision::selectUserFields() ), + 'conds' => $conds, + 'join_conds' => [ + 'page' => Revision::pageJoinCond(), + 'user' => Revision::userJoinCond() ] + ]; + } + + function getIndexField() { + return 'rev_timestamp'; + } +} diff --git a/includes/specials/pagers/NewFilesPager.php b/includes/specials/pagers/NewFilesPager.php new file mode 100644 index 0000000000..ae5773617c --- /dev/null +++ b/includes/specials/pagers/NewFilesPager.php @@ -0,0 +1,207 @@ +like = $context->getRequest()->getText( 'like' ); + $this->showBots = $context->getRequest()->getBool( 'showbots', 0 ); + $this->hidePatrolled = $context->getRequest()->getBool( 'hidepatrolled', 0 ); + if ( is_numeric( $par ) ) { + $this->setLimit( $par ); + } + + parent::__construct( $context ); + } + + function getQueryInfo() { + $conds = $jconds = []; + $tables = [ 'image' ]; + $fields = [ 'img_name', 'img_user', 'img_timestamp' ]; + $options = []; + + if ( !$this->showBots ) { + $groupsWithBotPermission = User::getGroupsWithPermission( 'bot' ); + + if ( count( $groupsWithBotPermission ) ) { + $tables[] = 'user_groups'; + $conds[] = 'ug_group IS NULL'; + $jconds['user_groups'] = [ + 'LEFT JOIN', + [ + 'ug_group' => $groupsWithBotPermission, + 'ug_user = img_user' + ] + ]; + } + } + + if ( $this->hidePatrolled ) { + $tables[] = 'recentchanges'; + $conds['rc_type'] = RC_LOG; + $conds['rc_log_type'] = 'upload'; + $conds['rc_patrolled'] = 0; + $conds['rc_namespace'] = NS_FILE; + $jconds['recentchanges'] = [ + 'INNER JOIN', + [ + 'rc_title = img_name', + 'rc_user = img_user', + 'rc_timestamp = img_timestamp' + ] + ]; + // We're ordering by img_timestamp, so we have to make sure MariaDB queries `image` first. + // It sometimes decides to query `recentchanges` first and filesort the result set later + // to get the right ordering. T124205 / https://mariadb.atlassian.net/browse/MDEV-8880 + $options[] = 'STRAIGHT_JOIN'; + } + + if ( !$this->getConfig()->get( 'MiserMode' ) && $this->like !== null ) { + $dbr = wfGetDB( DB_SLAVE ); + $likeObj = Title::newFromText( $this->like ); + if ( $likeObj instanceof Title ) { + $like = $dbr->buildLike( + $dbr->anyString(), + strtolower( $likeObj->getDBkey() ), + $dbr->anyString() + ); + $conds[] = "LOWER(img_name) $like"; + } + } + + $query = [ + 'tables' => $tables, + 'fields' => $fields, + 'join_conds' => $jconds, + 'conds' => $conds, + 'options' => $options, + ]; + + return $query; + } + + function getIndexField() { + return 'img_timestamp'; + } + + function getStartBody() { + if ( !$this->gallery ) { + // Note that null for mode is taken to mean use default. + $mode = $this->getRequest()->getVal( 'gallerymode', null ); + try { + $this->gallery = ImageGalleryBase::factory( $mode, $this->getContext() ); + } catch ( Exception $e ) { + // User specified something invalid, fallback to default. + $this->gallery = ImageGalleryBase::factory( false, $this->getContext() ); + } + } + + return ''; + } + + function getEndBody() { + return $this->gallery->toHTML(); + } + + function formatRow( $row ) { + $name = $row->img_name; + $user = User::newFromId( $row->img_user ); + + $title = Title::makeTitle( NS_FILE, $name ); + $ul = Linker::link( $user->getUserPage(), $user->getName() ); + $time = $this->getLanguage()->userTimeAndDate( $row->img_timestamp, $this->getUser() ); + + $this->gallery->add( + $title, + "$ul
\n" + . htmlspecialchars( $time ) + . "
\n" + ); + } + + function getForm() { + $fields = [ + 'like' => [ + 'type' => 'text', + 'label-message' => 'newimages-label', + 'name' => 'like', + ], + 'showbots' => [ + 'type' => 'check', + 'label-message' => 'newimages-showbots', + 'name' => 'showbots', + ], + 'hidepatrolled' => [ + 'type' => 'check', + 'label-message' => 'newimages-hidepatrolled', + 'name' => 'hidepatrolled', + ], + 'limit' => [ + 'type' => 'hidden', + 'default' => $this->mLimit, + 'name' => 'limit', + ], + 'offset' => [ + 'type' => 'hidden', + 'default' => $this->getRequest()->getText( 'offset' ), + 'name' => 'offset', + ], + ]; + + if ( $this->getConfig()->get( 'MiserMode' ) ) { + unset( $fields['like'] ); + } + + if ( !$this->getUser()->useFilePatrol() ) { + unset( $fields['hidepatrolled'] ); + } + + $context = new DerivativeContext( $this->getContext() ); + $context->setTitle( $this->getTitle() ); // Remove subpage + $form = new HTMLForm( $fields, $context ); + + $form->setSubmitTextMsg( 'ilsubmit' ); + $form->setSubmitProgressive(); + + $form->setMethod( 'get' ); + $form->setWrapperLegendMsg( 'newimages-legend' ); + + return $form; + } +} diff --git a/includes/specials/pagers/NewPagesPager.php b/includes/specials/pagers/NewPagesPager.php new file mode 100644 index 0000000000..2d39f99dc7 --- /dev/null +++ b/includes/specials/pagers/NewPagesPager.php @@ -0,0 +1,148 @@ +getContext() ); + $this->mForm = $form; + $this->opts = $opts; + } + + function getQueryInfo() { + $conds = []; + $conds['rc_new'] = 1; + + $namespace = $this->opts->getValue( 'namespace' ); + $namespace = ( $namespace === 'all' ) ? false : intval( $namespace ); + + $username = $this->opts->getValue( 'username' ); + $user = Title::makeTitleSafe( NS_USER, $username ); + + $rcIndexes = []; + + if ( $namespace !== false ) { + if ( $this->opts->getValue( 'invert' ) ) { + $conds[] = 'rc_namespace != ' . $this->mDb->addQuotes( $namespace ); + } else { + $conds['rc_namespace'] = $namespace; + } + } + + if ( $user ) { + $conds['rc_user_text'] = $user->getText(); + $rcIndexes = 'rc_user_text'; + } elseif ( User::groupHasPermission( '*', 'createpage' ) && + $this->opts->getValue( 'hideliu' ) + ) { + # If anons cannot make new pages, don't "exclude logged in users"! + $conds['rc_user'] = 0; + } + + # If this user cannot see patrolled edits or they are off, don't do dumb queries! + if ( $this->opts->getValue( 'hidepatrolled' ) && $this->getUser()->useNPPatrol() ) { + $conds['rc_patrolled'] = 0; + } + + if ( $this->opts->getValue( 'hidebots' ) ) { + $conds['rc_bot'] = 0; + } + + if ( $this->opts->getValue( 'hideredirs' ) ) { + $conds['page_is_redirect'] = 0; + } + + // Allow changes to the New Pages query + $tables = [ 'recentchanges', 'page' ]; + $fields = [ + 'rc_namespace', 'rc_title', 'rc_cur_id', 'rc_user', 'rc_user_text', + 'rc_comment', 'rc_timestamp', 'rc_patrolled', 'rc_id', 'rc_deleted', + 'length' => 'page_len', 'rev_id' => 'page_latest', 'rc_this_oldid', + 'page_namespace', 'page_title' + ]; + $join_conds = [ 'page' => [ 'INNER JOIN', 'page_id=rc_cur_id' ] ]; + + Hooks::run( 'SpecialNewpagesConditions', + [ &$this, $this->opts, &$conds, &$tables, &$fields, &$join_conds ] ); + + $options = []; + + if ( $rcIndexes ) { + $options = [ 'USE INDEX' => [ 'recentchanges' => $rcIndexes ] ]; + } + + $info = [ + 'tables' => $tables, + 'fields' => $fields, + 'conds' => $conds, + 'options' => $options, + 'join_conds' => $join_conds + ]; + + // Modify query for tags + ChangeTags::modifyDisplayQuery( + $info['tables'], + $info['fields'], + $info['conds'], + $info['join_conds'], + $info['options'], + $this->opts['tagfilter'] + ); + + return $info; + } + + function getIndexField() { + return 'rc_timestamp'; + } + + function formatRow( $row ) { + return $this->mForm->formatRow( $row ); + } + + function getStartBody() { + # Do a batch existence check on pages + $linkBatch = new LinkBatch(); + foreach ( $this->mResult as $row ) { + $linkBatch->add( NS_USER, $row->rc_user_text ); + $linkBatch->add( NS_USER_TALK, $row->rc_user_text ); + $linkBatch->add( $row->page_namespace, $row->page_title ); + } + $linkBatch->execute(); + + return '
    '; + } + + function getEndBody() { + return '
'; + } +} diff --git a/includes/specials/pagers/ProtectedTitlesPager.php b/includes/specials/pagers/ProtectedTitlesPager.php new file mode 100644 index 0000000000..8f172f8b55 --- /dev/null +++ b/includes/specials/pagers/ProtectedTitlesPager.php @@ -0,0 +1,91 @@ +mForm = $form; + $this->mConds = $conds; + $this->level = $level; + $this->namespace = $namespace; + $this->size = intval( $size ); + parent::__construct( $form->getContext() ); + } + + function getStartBody() { + # Do a link batch query + $this->mResult->seek( 0 ); + $lb = new LinkBatch; + + foreach ( $this->mResult as $row ) { + $lb->add( $row->pt_namespace, $row->pt_title ); + } + + $lb->execute(); + + return ''; + } + + /** + * @return Title + */ + function getTitle() { + return $this->mForm->getTitle(); + } + + function formatRow( $row ) { + return $this->mForm->formatRow( $row ); + } + + /** + * @return array + */ + function getQueryInfo() { + $conds = $this->mConds; + $conds[] = 'pt_expiry > ' . $this->mDb->addQuotes( $this->mDb->timestamp() ) . + ' OR pt_expiry IS NULL'; + if ( $this->level ) { + $conds['pt_create_perm'] = $this->level; + } + + if ( !is_null( $this->namespace ) ) { + $conds[] = 'pt_namespace=' . $this->mDb->addQuotes( $this->namespace ); + } + + return [ + 'tables' => 'protected_titles', + 'fields' => [ 'pt_namespace', 'pt_title', 'pt_create_perm', + 'pt_expiry', 'pt_timestamp' ], + 'conds' => $conds + ]; + } + + function getIndexField() { + return 'pt_timestamp'; + } +} diff --git a/includes/specials/pagers/UsersPager.php b/includes/specials/pagers/UsersPager.php new file mode 100644 index 0000000000..7b058c19eb --- /dev/null +++ b/includes/specials/pagers/UsersPager.php @@ -0,0 +1,395 @@ + + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * http://www.gnu.org/copyleft/gpl.html + * + * @file + * @ingroup Pager + */ + +/** + * This class is used to get a list of user. The ones with specials + * rights (sysop, bureaucrat, developer) will have them displayed + * next to their names. + * + * @ingroup Pager + */ +class UsersPager extends AlphabeticPager { + + /** + * @var array A array with user ids as key and a array of groups as value + */ + protected $userGroupCache; + + /** + * @param IContextSource $context + * @param array $par (Default null) + * @param bool $including Whether this page is being transcluded in + * another page + */ + function __construct( IContextSource $context = null, $par = null, $including = null ) { + if ( $context ) { + $this->setContext( $context ); + } + + $request = $this->getRequest(); + $par = ( $par !== null ) ? $par : ''; + $parms = explode( '/', $par ); + $symsForAll = [ '*', 'user' ]; + + if ( $parms[0] != '' && + ( in_array( $par, User::getAllGroups() ) || in_array( $par, $symsForAll ) ) + ) { + $this->requestedGroup = $par; + $un = $request->getText( 'username' ); + } elseif ( count( $parms ) == 2 ) { + $this->requestedGroup = $parms[0]; + $un = $parms[1]; + } else { + $this->requestedGroup = $request->getVal( 'group' ); + $un = ( $par != '' ) ? $par : $request->getText( 'username' ); + } + + if ( in_array( $this->requestedGroup, $symsForAll ) ) { + $this->requestedGroup = ''; + } + $this->editsOnly = $request->getBool( 'editsOnly' ); + $this->creationSort = $request->getBool( 'creationSort' ); + $this->including = $including; + $this->mDefaultDirection = $request->getBool( 'desc' ) + ? IndexPager::DIR_DESCENDING + : IndexPager::DIR_ASCENDING; + + $this->requestedUser = ''; + + if ( $un != '' ) { + $username = Title::makeTitleSafe( NS_USER, $un ); + + if ( !is_null( $username ) ) { + $this->requestedUser = $username->getText(); + } + } + + parent::__construct(); + } + + /** + * @return string + */ + function getIndexField() { + return $this->creationSort ? 'user_id' : 'user_name'; + } + + /** + * @return array + */ + function getQueryInfo() { + $dbr = wfGetDB( DB_SLAVE ); + $conds = []; + + // Don't show hidden names + if ( !$this->getUser()->isAllowed( 'hideuser' ) ) { + $conds[] = 'ipb_deleted IS NULL OR ipb_deleted = 0'; + } + + $options = []; + + if ( $this->requestedGroup != '' ) { + $conds['ug_group'] = $this->requestedGroup; + } + + if ( $this->requestedUser != '' ) { + # Sorted either by account creation or name + if ( $this->creationSort ) { + $conds[] = 'user_id >= ' . intval( User::idFromName( $this->requestedUser ) ); + } else { + $conds[] = 'user_name >= ' . $dbr->addQuotes( $this->requestedUser ); + } + } + + if ( $this->editsOnly ) { + $conds[] = 'user_editcount > 0'; + } + + $options['GROUP BY'] = $this->creationSort ? 'user_id' : 'user_name'; + + $query = [ + 'tables' => [ 'user', 'user_groups', 'ipblocks' ], + 'fields' => [ + 'user_name' => $this->creationSort ? 'MAX(user_name)' : 'user_name', + 'user_id' => $this->creationSort ? 'user_id' : 'MAX(user_id)', + 'edits' => 'MAX(user_editcount)', + 'creation' => 'MIN(user_registration)', + 'ipb_deleted' => 'MAX(ipb_deleted)' // block/hide status + ], + 'options' => $options, + 'join_conds' => [ + 'user_groups' => [ 'LEFT JOIN', 'user_id=ug_user' ], + 'ipblocks' => [ + 'LEFT JOIN', [ + 'user_id=ipb_user', + 'ipb_auto' => 0 + ] + ], + ], + 'conds' => $conds + ]; + + Hooks::run( 'SpecialListusersQueryInfo', [ $this, &$query ] ); + + return $query; + } + + /** + * @param stdClass $row + * @return string + */ + function formatRow( $row ) { + if ( $row->user_id == 0 ) { # Bug 16487 + return ''; + } + + $userName = $row->user_name; + + $ulinks = Linker::userLink( $row->user_id, $userName ); + $ulinks .= Linker::userToolLinksRedContribs( + $row->user_id, + $userName, + (int)$row->edits + ); + + $lang = $this->getLanguage(); + + $groups = ''; + $groups_list = self::getGroups( intval( $row->user_id ), $this->userGroupCache ); + + if ( !$this->including && count( $groups_list ) > 0 ) { + $list = []; + foreach ( $groups_list as $group ) { + $list[] = self::buildGroupLink( $group, $userName ); + } + $groups = $lang->commaList( $list ); + } + + $item = $lang->specialList( $ulinks, $groups ); + + if ( $row->ipb_deleted ) { + $item = "$item"; + } + + $edits = ''; + if ( !$this->including && $this->getConfig()->get( 'Edititis' ) ) { + $count = $this->msg( 'usereditcount' )->numParams( $row->edits )->escaped(); + $edits = $this->msg( 'word-separator' )->escaped() . $this->msg( 'brackets', $count )->escaped(); + } + + $created = ''; + # Some rows may be null + if ( !$this->including && $row->creation ) { + $user = $this->getUser(); + $d = $lang->userDate( $row->creation, $user ); + $t = $lang->userTime( $row->creation, $user ); + $created = $this->msg( 'usercreated', $d, $t, $row->user_name )->escaped(); + $created = ' ' . $this->msg( 'parentheses' )->rawParams( $created )->escaped(); + } + $blocked = !is_null( $row->ipb_deleted ) ? + ' ' . $this->msg( 'listusers-blocked', $userName )->escaped() : + ''; + + Hooks::run( 'SpecialListusersFormatRow', [ &$item, $row ] ); + + return Html::rawElement( 'li', [], "{$item}{$edits}{$created}{$blocked}" ); + } + + function doBatchLookups() { + $batch = new LinkBatch(); + $userIds = []; + # Give some pointers to make user links + foreach ( $this->mResult as $row ) { + $batch->add( NS_USER, $row->user_name ); + $batch->add( NS_USER_TALK, $row->user_name ); + $userIds[] = $row->user_id; + } + + // Lookup groups for all the users + $dbr = wfGetDB( DB_SLAVE ); + $groupRes = $dbr->select( + 'user_groups', + [ 'ug_user', 'ug_group' ], + [ 'ug_user' => $userIds ], + __METHOD__ + ); + $cache = []; + $groups = []; + foreach ( $groupRes as $row ) { + $cache[intval( $row->ug_user )][] = $row->ug_group; + $groups[$row->ug_group] = true; + } + $this->userGroupCache = $cache; + + // Add page of groups to link batch + foreach ( $groups as $group => $unused ) { + $groupPage = User::getGroupPage( $group ); + if ( $groupPage ) { + $batch->addObj( $groupPage ); + } + } + + $batch->execute(); + $this->mResult->rewind(); + } + + /** + * @return string + */ + function getPageHeader() { + list( $self ) = explode( '/', $this->getTitle()->getPrefixedDBkey() ); + + $this->getOutput()->addModules( 'mediawiki.userSuggest' ); + + # Form tag + $out = Xml::openElement( + 'form', + [ 'method' => 'get', 'action' => wfScript(), 'id' => 'mw-listusers-form' ] + ) . + Xml::fieldset( $this->msg( 'listusers' )->text() ) . + Html::hidden( 'title', $self ); + + # Username field (with autocompletion support) + $out .= Xml::label( $this->msg( 'listusersfrom' )->text(), 'offset' ) . ' ' . + Html::input( + 'username', + $this->requestedUser, + 'text', + [ + 'class' => 'mw-autocomplete-user', + 'id' => 'offset', + 'size' => 20, + 'autofocus' => $this->requestedUser === '' + ] + ) . ' '; + + # Group drop-down list + $sel = new XmlSelect( 'group', 'group', $this->requestedGroup ); + $sel->addOption( $this->msg( 'group-all' )->text(), '' ); + foreach ( $this->getAllGroups() as $group => $groupText ) { + $sel->addOption( $groupText, $group ); + } + + $out .= Xml::label( $this->msg( 'group' )->text(), 'group' ) . ' '; + $out .= $sel->getHTML() . '
'; + $out .= Xml::checkLabel( + $this->msg( 'listusers-editsonly' )->text(), + 'editsOnly', + 'editsOnly', + $this->editsOnly + ); + $out .= ' '; + $out .= Xml::checkLabel( + $this->msg( 'listusers-creationsort' )->text(), + 'creationSort', + 'creationSort', + $this->creationSort + ); + $out .= ' '; + $out .= Xml::checkLabel( + $this->msg( 'listusers-desc' )->text(), + 'desc', + 'desc', + $this->mDefaultDirection + ); + $out .= '
'; + + Hooks::run( 'SpecialListusersHeaderForm', [ $this, &$out ] ); + + # Submit button and form bottom + $out .= Html::hidden( 'limit', $this->mLimit ); + $out .= Xml::submitButton( $this->msg( 'listusers-submit' )->text() ); + Hooks::run( 'SpecialListusersHeader', [ $this, &$out ] ); + $out .= Xml::closeElement( 'fieldset' ) . + Xml::closeElement( 'form' ); + + return $out; + } + + /** + * Get a list of all explicit groups + * @return array + */ + function getAllGroups() { + $result = []; + foreach ( User::getAllGroups() as $group ) { + $result[$group] = User::getGroupName( $group ); + } + asort( $result ); + + return $result; + } + + /** + * Preserve group and username offset parameters when paging + * @return array + */ + function getDefaultQuery() { + $query = parent::getDefaultQuery(); + if ( $this->requestedGroup != '' ) { + $query['group'] = $this->requestedGroup; + } + if ( $this->requestedUser != '' ) { + $query['username'] = $this->requestedUser; + } + Hooks::run( 'SpecialListusersDefaultQuery', [ $this, &$query ] ); + + return $query; + } + + /** + * Get a list of groups the specified user belongs to + * + * @param int $uid User id + * @param array|null $cache + * @return array + */ + protected static function getGroups( $uid, $cache = null ) { + if ( $cache === null ) { + $user = User::newFromId( $uid ); + $effectiveGroups = $user->getEffectiveGroups(); + } else { + $effectiveGroups = 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 $username Username + * @return string + */ + protected static function buildGroupLink( $group, $username ) { + return User::makeGroupLinkHTML( + $group, + User::getGroupMember( $group, $username ) + ); + } + +} diff --git a/includes/tidy/Html5Depurate.php b/includes/tidy/Html5Depurate.php index a34933ca1d..c6acd661f2 100644 --- a/includes/tidy/Html5Depurate.php +++ b/includes/tidy/Html5Depurate.php @@ -29,9 +29,10 @@ class Html5Depurate extends TidyDriverBase { ] ); $status = $req->execute(); if ( !$status->isOK() ) { - throw new Exception( "Error contacting depurate service: " . $status->getWikiText() ); + throw new Exception( "Error contacting depurate service: " + . $status->getWikiText( false, false, 'en' ) ); } elseif ( $req->getStatus() !== 200 ) { - throw new Exception( "Depurate returned error: " . $status->getWikiText() ); + throw new Exception( "Depurate returned error: " . $status->getWikiText( false, false, 'en' ) ); } $result = $req->getContent(); $startBody = strpos( $result, "" ); diff --git a/includes/upload/UploadBase.php b/includes/upload/UploadBase.php index fb25249bd3..1185c4da61 100644 --- a/includes/upload/UploadBase.php +++ b/includes/upload/UploadBase.php @@ -241,12 +241,14 @@ abstract class UploadBase { */ protected function setTempFile( $tempPath, $fileSize = null ) { $this->mTempPath = $tempPath; + $this->mFileSize = $fileSize ?: null; if ( strlen( $this->mTempPath ) && file_exists( $this->mTempPath ) ) { $this->tempFileObj = new TempFSFile( $this->mTempPath ); - $this->mFileSize = $fileSize ?: filesize( $this->mTempPath ); + if ( !$fileSize ) { + $this->mFileSize = filesize( $this->mTempPath ); + } } else { $this->tempFileObj = null; - $this->mFileSize = null; } } @@ -643,9 +645,6 @@ abstract class UploadBase { if ( $this->mDesiredDestName != $filename && $comparableName != $filename ) { $warnings['badfilename'] = $filename; - // Debugging for bug 62241 - wfDebugLog( 'upload', "Filename: '$filename', mDesiredDestName: " - . "'$this->mDesiredDestName', comparableName: '$comparableName'" ); } // Check whether the file extension is on the unwanted list @@ -664,7 +663,7 @@ abstract class UploadBase { } if ( $this->mFileSize == 0 ) { - $warnings['emptyfile'] = true; + $warnings['empty-file'] = true; } $exists = self::getExistsWarning( $localFile ); diff --git a/includes/upload/UploadFromChunks.php b/includes/upload/UploadFromChunks.php index ebb4ebb9e8..0323b685b8 100644 --- a/includes/upload/UploadFromChunks.php +++ b/includes/upload/UploadFromChunks.php @@ -142,7 +142,7 @@ class UploadFromChunks extends UploadFromFile { $tStart = microtime( true ); $status = $this->repo->concatenate( $fileList, $tmpPath, FileRepo::DELETE_SOURCE ); $tAmount = microtime( true ) - $tStart; - if ( !$status->isOk() ) { + if ( !$status->isOK() ) { return $status; } @@ -234,7 +234,7 @@ class UploadFromChunks extends UploadFromFile { wfDebug( __METHOD__ . " update chunk status for {$this->mFileKey} offset:" . $this->getOffset() . ' inx:' . $this->getChunkIndex() . "\n" ); - $dbw = $this->repo->getMasterDb(); + $dbw = $this->repo->getMasterDB(); // Use a quick transaction since we will upload the full temp file into shared // storage, which takes time for large files. We don't want to hold locks then. $dbw->update( @@ -256,7 +256,7 @@ class UploadFromChunks extends UploadFromFile { private function getChunkStatus() { // get Master db to avoid race conditions. // Otherwise, if chunk upload time < replag there will be spurious errors - $dbw = $this->repo->getMasterDb(); + $dbw = $this->repo->getMasterDB(); $row = $dbw->selectRow( 'uploadstash', [ diff --git a/includes/upload/UploadFromUrl.php b/includes/upload/UploadFromUrl.php index 342bd79ccb..6639c340ae 100644 --- a/includes/upload/UploadFromUrl.php +++ b/includes/upload/UploadFromUrl.php @@ -286,7 +286,7 @@ class UploadFromUrl extends UploadBase { } wfDebugLog( 'fileupload', $status ); - if ( $status->isOk() ) { + if ( $status->isOK() ) { wfDebugLog( 'fileupload', 'Download by URL completed successfuly.' ); } else { wfDebugLog( diff --git a/includes/upload/UploadStash.php b/includes/upload/UploadStash.php index d5e573b8b3..c171ded7da 100644 --- a/includes/upload/UploadStash.php +++ b/includes/upload/UploadStash.php @@ -276,7 +276,7 @@ class UploadStash { // insert the file metadata into the db. wfDebug( __METHOD__ . " inserting $stashPath under $key\n" ); - $dbw = $this->repo->getMasterDb(); + $dbw = $this->repo->getMasterDB(); $serializedFileProps = serialize( $fileProps ); if ( strlen( $serializedFileProps ) > self::MAX_US_PROPS_SIZE ) { @@ -336,7 +336,7 @@ class UploadStash { } wfDebug( __METHOD__ . ' clearing all rows for user ' . $this->userId . "\n" ); - $dbw = $this->repo->getMasterDb(); + $dbw = $this->repo->getMasterDB(); $dbw->delete( 'uploadstash', [ 'us_user' => $this->userId ], @@ -364,7 +364,7 @@ class UploadStash { . ' No user is logged in, files must belong to users' ); } - $dbw = $this->repo->getMasterDb(); + $dbw = $this->repo->getMasterDB(); // this is a cheap query. it runs on the master so that this function // still works when there's lag. It won't be called all that often. @@ -399,7 +399,7 @@ class UploadStash { // Ensure we have the UploadStashFile loaded for this key $this->getFile( $key, true ); - $dbw = $this->repo->getMasterDb(); + $dbw = $this->repo->getMasterDB(); $dbw->delete( 'uploadstash', @@ -430,7 +430,7 @@ class UploadStash { . ' No user is logged in, files must belong to users' ); } - $dbr = $this->repo->getSlaveDb(); + $dbr = $this->repo->getSlaveDB(); $res = $dbr->select( 'uploadstash', 'us_key', @@ -507,9 +507,9 @@ class UploadStash { $dbr = null; if ( $readFromDB === DB_MASTER ) { // sometimes reading from the master is necessary, if there's replication lag. - $dbr = $this->repo->getMasterDb(); + $dbr = $this->repo->getMasterDB(); } else { - $dbr = $this->repo->getSlaveDb(); + $dbr = $this->repo->getSlaveDB(); } $row = $dbr->selectRow( diff --git a/includes/user/BotPassword.php b/includes/user/BotPassword.php index c758f26193..49a71633c7 100644 --- a/includes/user/BotPassword.php +++ b/includes/user/BotPassword.php @@ -18,6 +18,8 @@ * http://www.gnu.org/copyleft/gpl.html */ +use MediaWiki\Session\BotPasswordSessionProvider; + /** * Utility class for bot passwords * @since 1.27 @@ -401,9 +403,7 @@ class BotPassword implements IDBAccessObject { } $manager = MediaWiki\Session\SessionManager::singleton(); - $provider = $manager->getProvider( - 'MediaWiki\\Session\\BotPasswordSessionProvider' - ); + $provider = $manager->getProvider( BotPasswordSessionProvider::class ); if ( !$provider ) { return Status::newFatal( 'botpasswords-no-provider' ); } @@ -429,7 +429,7 @@ class BotPassword implements IDBAccessObject { // Check restrictions $status = $bp->getRestrictions()->check( $request ); - if ( !$status->isOk() ) { + if ( !$status->isOK() ) { return Status::newFatal( 'botpasswords-restriction-failed' ); } diff --git a/includes/user/LoggedOutEditToken.php b/includes/user/LoggedOutEditToken.php index 14548f409b..5444a51fc6 100644 --- a/includes/user/LoggedOutEditToken.php +++ b/includes/user/LoggedOutEditToken.php @@ -26,13 +26,13 @@ use MediaWiki\Session\Token; /** * Value object representing a logged-out user's edit token * - * This exists so that code generically dealing with MediaWiki\\Session\\Token + * This exists so that code generically dealing with MediaWiki\Session\Token * (i.e. the API) doesn't have to have so many special cases for anon edit * tokens. * * @since 1.27 */ -class LoggedOutEditToken extends MediaWiki\Session\Token { +class LoggedOutEditToken extends Token { public function __construct() { parent::__construct( '', '', false ); } diff --git a/includes/user/User.php b/includes/user/User.php index 09124bfd61..c1e096b93b 100644 --- a/includes/user/User.php +++ b/includes/user/User.php @@ -21,13 +21,14 @@ */ use MediaWiki\Session\SessionManager; +use MediaWiki\Session\Token; /** * String Some punctuation to prevent editing from broken text-mangling proxies. - * @deprecated since 1.27, use \\MediaWiki\\Session\\Token::SUFFIX + * @deprecated since 1.27, use \MediaWiki\Session\Token::SUFFIX * @ingroup Constants */ -define( 'EDIT_TOKEN_SUFFIX', MediaWiki\Session\Token::SUFFIX ); +define( 'EDIT_TOKEN_SUFFIX', Token::SUFFIX ); /** * The User object encapsulates all of the user-specific settings (user_id, @@ -53,7 +54,7 @@ class User implements IDBAccessObject { /** * Global constant made accessible as class constants so that autoloader * magic can be used. - * @deprecated since 1.27, use \\MediaWiki\\Session\\Token::SUFFIX + * @deprecated since 1.27, use \MediaWiki\Session\Token::SUFFIX */ const EDIT_TOKEN_SUFFIX = EDIT_TOKEN_SUFFIX; @@ -200,6 +201,7 @@ class User implements IDBAccessObject { /** Cache variables */ // @{ + /** @var int */ public $mId; /** @var string */ public $mName; @@ -1068,9 +1070,9 @@ class User implements IDBAccessObject { // Clean up name according to title rules, // but only when validation is requested (bug 12654) $t = ( $validate !== false ) ? - Title::newFromText( $name ) : Title::makeTitle( NS_USER, $name ); + Title::newFromText( $name, NS_USER ) : Title::makeTitle( NS_USER, $name ); // Check for invalid titles - if ( is_null( $t ) ) { + if ( is_null( $t ) || $t->getNamespace() !== NS_USER || $t->isExternal() ) { return false; } @@ -2052,7 +2054,8 @@ class User implements IDBAccessObject { // Don't load if this was initialized from an ID $this->load(); } - return $this->mId; + + return (int)$this->mId; } /** @@ -2162,7 +2165,7 @@ class User implements IDBAccessObject { // Get the "last viewed rev" timestamp from the oldest message notification $timestamp = $dbr->selectField( 'user_newtalk', 'MIN(user_last_timestamp)', - $this->isAnon() ? [ 'user_ip' => $this->getName() ] : [ 'user_id' => $this->getID() ], + $this->isAnon() ? [ 'user_ip' => $this->getName() ] : [ 'user_id' => $this->getId() ], __METHOD__ ); $rev = $timestamp ? Revision::loadFromTimestamp( $dbr, $utp, $timestamp ) : null; return [ [ 'wiki' => wfWikiID(), 'link' => $utp->getLocalURL(), 'rev' => $rev ] ]; @@ -2691,14 +2694,36 @@ class User implements IDBAccessObject { return Status::newGood( true ); } + $type = $oldaddr != '' ? 'changed' : 'set'; + $notificationResult = null; + + if ( $wgEmailAuthentication ) { + // Send the user an email notifying the user of the change in registered + // email address on their previous email address + if ( $type == 'changed' ) { + $change = $str != '' ? 'changed' : 'removed'; + $notificationResult = $this->sendMail( + wfMessage( 'notificationemail_subject_' . $change )->text(), + wfMessage( 'notificationemail_body_' . $change, + $this->getRequest()->getIP(), + $this->getName(), + $str )->text() + ); + } + } + $this->setEmail( $str ); if ( $str !== '' && $wgEmailAuthentication ) { // Send a confirmation request to the new address if needed - $type = $oldaddr != '' ? 'changed' : 'set'; $result = $this->sendConfirmationMail( $type ); + + if ( $notificationResult !== null ) { + $result->merge( $notificationResult ); + } + if ( $result->isGood() ) { - // Say to the caller that a confirmation mail has been sent + // Say to the caller that a confirmation and notification mail has been sent $result->value = 'eauth'; } } else { @@ -3268,7 +3293,7 @@ class User implements IDBAccessObject { if ( $this->getId() ) { $dbw->insert( 'user_groups', [ - 'ug_user' => $this->getID(), + 'ug_user' => $this->getId(), 'ug_group' => $group, ], __METHOD__, @@ -3306,14 +3331,14 @@ class User implements IDBAccessObject { $dbw = wfGetDB( DB_MASTER ); $dbw->delete( 'user_groups', [ - 'ug_user' => $this->getID(), + '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_user' => $this->getId(), 'ufg_group' => $group, ], __METHOD__, @@ -3338,7 +3363,7 @@ class User implements IDBAccessObject { * @return bool */ public function isLoggedIn() { - return $this->getID() != 0; + return $this->getId() != 0; } /** @@ -3465,10 +3490,9 @@ class User implements IDBAccessObject { */ public function addWatch( $title, $checkRights = self::CHECK_USER_RIGHTS ) { if ( !$checkRights || $this->isAllowed( 'editmywatchlist' ) ) { - WatchedItemStore::getDefaultInstance()->addWatchBatch( [ - [ $this, $title->getSubjectPage() ], - [ $this, $title->getTalkPage() ], - ] + WatchedItemStore::getDefaultInstance()->addWatchBatchForUser( + $this, + [ $title->getSubjectPage(), $title->getTalkPage() ] ); } $this->invalidateCache(); @@ -3989,6 +4013,7 @@ class User implements IDBAccessObject { if ( $this->isLoggedIn() && $this->isBlocked() ) { return $this->spreadBlock(); } + return false; } @@ -4197,7 +4222,7 @@ class User implements IDBAccessObject { * @since 1.27 * @param string|array $salt Array of Strings Optional function-specific data for hashing * @param WebRequest|null $request WebRequest object to use or null to use $wgRequest - * @return MediaWiki\\Session\\Token The new edit token + * @return MediaWiki\Session\Token The new edit token */ public function getEditTokenObject( $salt = '', $request = null ) { if ( $this->isAnon() ) { @@ -4227,7 +4252,7 @@ class User implements IDBAccessObject { /** * Get the embedded timestamp from a token. - * @deprecated since 1.27, use \\MediaWiki\\Session\\Token::getTimestamp instead. + * @deprecated since 1.27, use \MediaWiki\Session\Token::getTimestamp instead. * @param string $val Input token * @return int|null */ @@ -4263,7 +4288,7 @@ class User implements IDBAccessObject { * @return bool Whether the token matches */ public function matchEditTokenNoSuffix( $val, $salt = '', $request = null, $maxage = null ) { - $val = substr( $val, 0, strspn( $val, '0123456789abcdef' ) ) . self::EDIT_TOKEN_SUFFIX; + $val = substr( $val, 0, strspn( $val, '0123456789abcdef' ) ) . Token::SUFFIX; return $this->matchEditToken( $val, $salt, $request, $maxage ); } diff --git a/includes/utils/BatchRowIterator.php b/includes/utils/BatchRowIterator.php index 002fd06e82..3bd3a4c3ec 100644 --- a/includes/utils/BatchRowIterator.php +++ b/includes/utils/BatchRowIterator.php @@ -166,14 +166,14 @@ class BatchRowIterator implements RecursiveIterator { } /** - * @return boolean True when the iterator is in a valid state + * @return bool True when the iterator is in a valid state */ public function valid() { return (bool)$this->current; } /** - * @return boolean True when this result set has rows + * @return bool True when this result set has rows */ public function hasChildren() { return $this->current && count( $this->current ); diff --git a/includes/utils/IP.php b/includes/utils/IP.php index bcc2ed3828..4a2205eebb 100644 --- a/includes/utils/IP.php +++ b/includes/utils/IP.php @@ -73,7 +73,7 @@ class IP { /** * Determine if a string is as valid IP address or network (CIDR prefix). * SIIT IPv4-translated addresses are rejected. - * Note: canonicalize() tries to convert translated addresses to IPv4. + * @note canonicalize() tries to convert translated addresses to IPv4. * * @param string $ip Possible IP address * @return bool @@ -84,7 +84,7 @@ class IP { /** * Given a string, determine if it as valid IP in IPv6 only. - * Note: Unlike isValid(), this looks for networks too. + * @note Unlike isValid(), this looks for networks too. * * @param string $ip Possible IP address * @return bool @@ -95,7 +95,7 @@ class IP { /** * Given a string, determine if it as valid IP in IPv4 only. - * Note: Unlike isValid(), this looks for networks too. + * @note Unlike isValid(), this looks for networks too. * * @param string $ip Possible IP address * @return bool @@ -107,7 +107,7 @@ class IP { /** * Validate an IP address. Ranges are NOT considered valid. * SIIT IPv4-translated addresses are rejected. - * Note: canonicalize() tries to convert translated addresses to IPv4. + * @note canonicalize() tries to convert translated addresses to IPv4. * * @param string $ip * @return bool True if it is valid @@ -120,7 +120,7 @@ class IP { /** * Validate an IP Block (valid address WITH a valid prefix). * SIIT IPv4-translated addresses are rejected. - * Note: canonicalize() tries to convert translated addresses to IPv4. + * @note canonicalize() tries to convert translated addresses to IPv4. * * @param string $ipblock * @return bool True if it is valid @@ -633,6 +633,9 @@ class IP { * @param string $addr The address to check against the given range. * @param string $range The range to check the given address against. * @return bool Whether or not the given address is in the given range. + * + * @note This can return unexpected results for invalid arguments! + * Make sure you pass a valid IP address and IP range. */ public static function isInRange( $addr, $range ) { $hexIP = self::toHex( $addr ); diff --git a/includes/utils/MWCryptHash.php b/includes/utils/MWCryptHash.php index 75eaedee0f..11173573e7 100644 --- a/includes/utils/MWCryptHash.php +++ b/includes/utils/MWCryptHash.php @@ -70,7 +70,7 @@ class MWCryptHash { * Return the byte-length output of the hash algorithm we are * using in self::hash and self::hmac. * - * @param boolean $raw True to return the length for binary data, false to + * @param bool $raw True to return the length for binary data, false to * return for hex-encoded * @return int Number of bytes the hash outputs */ @@ -88,7 +88,7 @@ class MWCryptHash { * making use of the best hash algorithm that we have available. * * @param string $data - * @param boolean $raw True to return binary data, false to return it hex-encoded + * @param bool $raw True to return binary data, false to return it hex-encoded * @return string A hash of the data */ public static function hash( $data, $raw = true ) { @@ -101,10 +101,14 @@ class MWCryptHash { * * @param string $data * @param string $key - * @param boolean $raw True to return binary data, false to return it hex-encoded + * @param bool $raw True to return binary data, false to return it hex-encoded * @return string An hmac hash of the data + key */ public static function hmac( $data, $key, $raw = true ) { + if ( !is_string( $key ) ) { + // a fatal error in HHVM; an exception will at least give us a stack trace + throw new InvalidArgumentException( 'Invalid key type: ' . gettype( $key ) ); + } return hash_hmac( self::hashAlgo(), $data, $key, $raw ); } diff --git a/includes/utils/ZipDirectoryReader.php b/includes/utils/ZipDirectoryReader.php index 44815b4750..516e9aec4a 100644 --- a/includes/utils/ZipDirectoryReader.php +++ b/includes/utils/ZipDirectoryReader.php @@ -215,6 +215,10 @@ class ZipDirectoryReader { $startPos = 0; } + if ( $this->getFileLength() === 0 ) { + $this->error( 'zip-wrong-format', "The file is empty." ); + } + $block = $this->getBlock( $startPos ); $sigPos = strrpos( $block, "PK\x05\x06" ); if ( $sigPos === false ) { diff --git a/includes/widget/SearchInputWidget.php b/includes/widget/SearchInputWidget.php index 7b3de4a557..5ff411df4e 100644 --- a/includes/widget/SearchInputWidget.php +++ b/includes/widget/SearchInputWidget.php @@ -13,6 +13,7 @@ namespace MediaWiki\Widget; class SearchInputWidget extends TitleInputWidget { protected $pushPending = false; + protected $performSearchOnClick = true; protected $validateTitle = false; protected $highlightFirst = false; @@ -20,23 +21,36 @@ class SearchInputWidget extends TitleInputWidget { * @param array $config Configuration options * @param int|null $config['pushPending'] Whether the input should be visually marked as * "pending", while requesting suggestions (default: true) + * @param boolean|null $config['performSearchOnClick'] If true, the script will start a search + * whenever a user hits a suggestion. If false, the text of the suggestion is inserted into the + * text field only (default: true) */ public function __construct( array $config = [] ) { + $config = array_merge( [ + 'infusable' => true, + 'maxLength' => null, + 'type' => 'search', + 'icon' => 'search', + 'dataLocation' => 'content', + ], $config ); + // Parent constructor - parent::__construct( - array_merge( [ - 'infusable' => true, - 'maxLength' => null, - 'type' => 'search', - 'icon' => 'search' - ], $config ) - ); + parent::__construct( $config ); // Properties, which are ignored in PHP and just shipped back to JS if ( isset( $config['pushPending'] ) ) { $this->pushPending = $config['pushPending']; } + if ( isset( $config['performSearchOnClick'] ) ) { + $this->performSearchOnClick = $config['performSearchOnClick']; + } + + if ( $config['dataLocation'] ) { + // identifies the location of the search bar for tracking purposes + $this->dataLocation = $config['dataLocation']; + } + // Initialization $this->addClasses( [ 'mw-widget-searchInputWidget' ] ); } @@ -47,6 +61,10 @@ class SearchInputWidget extends TitleInputWidget { public function getConfig( &$config ) { $config['pushPending'] = $this->pushPending; + $config['performSearchOnClick'] = $this->performSearchOnClick; + if ( $this->dataLocation ) { + $config['dataLocation'] = $this->dataLocation; + } return parent::getConfig( $config ); } } diff --git a/languages/Language.php b/languages/Language.php index 56ecee9fc8..190f2bfe78 100644 --- a/languages/Language.php +++ b/languages/Language.php @@ -30,9 +30,7 @@ if ( !defined( 'MEDIAWIKI' ) ) { exit( 1 ); } -if ( function_exists( 'mb_strtoupper' ) ) { - mb_internal_encoding( 'UTF-8' ); -} +mb_internal_encoding( 'UTF-8' ); use CLDRPluralRuleParser\Evaluator; @@ -443,7 +441,7 @@ class Language { * @return array * @since 1.19 */ - function getFallbackLanguages() { + public function getFallbackLanguages() { return self::getFallbacksFor( $this->mCode ); } @@ -451,7 +449,7 @@ class Language { * Exports $wgBookstoreListEn * @return array */ - function getBookstoreList() { + public function getBookstoreList() { return self::$dataCache->getItem( $this->mCode, 'bookstoreList' ); } @@ -520,7 +518,7 @@ class Language { * * @return array */ - function getFormattedNamespaces() { + public function getFormattedNamespaces() { $ns = $this->getNamespaces(); foreach ( $ns as $k => $v ) { $ns[$k] = strtr( $v, '_', ' ' ); @@ -539,7 +537,7 @@ class Language { * @param int $index The array key of the namespace to return * @return string|bool String if the namespace value exists, otherwise false */ - function getNsText( $index ) { + public function getNsText( $index ) { $ns = $this->getNamespaces(); return isset( $ns[$index] ) ? $ns[$index] : false; } @@ -557,7 +555,7 @@ class Language { * @param int $index The array key of the namespace to return * @return string Namespace name without underscores (empty string if namespace does not exist) */ - function getFormattedNsText( $index ) { + public function getFormattedNsText( $index ) { $ns = $this->getNsText( $index ); return strtr( $ns, '_', ' ' ); } @@ -570,7 +568,7 @@ class Language { * @return string * @since 1.18 */ - function getGenderNsText( $index, $gender ) { + public function getGenderNsText( $index, $gender ) { global $wgExtraGenderNamespaces; $ns = $wgExtraGenderNamespaces + @@ -585,7 +583,7 @@ class Language { * @return bool * @since 1.18 */ - function needsGenderDistinction() { + public function needsGenderDistinction() { global $wgExtraGenderNamespaces, $wgExtraNamespaces; if ( count( $wgExtraGenderNamespaces ) > 0 ) { // $wgExtraGenderNamespaces overrides everything @@ -618,7 +616,7 @@ class Language { /** * @return array */ - function getNamespaceAliases() { + public function getNamespaceAliases() { if ( is_null( $this->namespaceAliases ) ) { $aliases = self::$dataCache->getItem( $this->mCode, 'namespaceAliases' ); if ( !$aliases ) { @@ -662,7 +660,7 @@ class Language { /** * @return array */ - function getNamespaceIds() { + public function getNamespaceIds() { if ( is_null( $this->mNamespaceIds ) ) { global $wgNamespaceAliases; # Put namespace names and aliases into a hashtable. @@ -692,7 +690,7 @@ class Language { * @param string $text * @return int|bool An integer if $text is a valid value otherwise false */ - function getNsIndex( $text ) { + public function getNsIndex( $text ) { $lctext = $this->lc( $text ); $ns = MWNamespace::getCanonicalIndex( $lctext ); if ( $ns !== null ) { @@ -709,7 +707,7 @@ class Language { * @param bool $usemsg Use the "variantname-xyz" message if it exists * @return string */ - function getVariantname( $code, $usemsg = true ) { + public function getVariantname( $code, $usemsg = true ) { $msg = "variantname-$code"; if ( $usemsg && wfMessage( $msg )->exists() ) { return $this->getMessageFromDB( $msg ); @@ -726,7 +724,7 @@ class Language { /** * @return array */ - function getDatePreferences() { + public function getDatePreferences() { return self::$dataCache->getItem( $this->mCode, 'datePreferences' ); } @@ -740,7 +738,7 @@ class Language { /** * @return array|string */ - function getDefaultDateFormat() { + public function getDefaultDateFormat() { $df = self::$dataCache->getItem( $this->mCode, 'defaultDateFormat' ); if ( $df === 'dmy or mdy' ) { global $wgAmericanDates; @@ -753,7 +751,7 @@ class Language { /** * @return array */ - function getDatePreferenceMigrationMap() { + public function getDatePreferenceMigrationMap() { return self::$dataCache->getItem( $this->mCode, 'datePreferenceMigrationMap' ); } @@ -769,14 +767,14 @@ class Language { * @return array * @since 1.24 */ - function getImageFiles() { + public function getImageFiles() { return self::$dataCache->getItem( $this->mCode, 'imageFiles' ); } /** * @return array */ - function getExtraUserToggles() { + public function getExtraUserToggles() { return (array)self::$dataCache->getItem( $this->mCode, 'extraUserToggles' ); } @@ -899,7 +897,7 @@ class Language { * @param string $msg Message name * @return string */ - function getMessageFromDB( $msg ) { + public function getMessageFromDB( $msg ) { return $this->msg( $msg )->text(); } @@ -917,14 +915,14 @@ class Language { * @param string $key * @return string */ - function getMonthName( $key ) { + public function getMonthName( $key ) { return $this->getMessageFromDB( self::$mMonthMsgs[$key - 1] ); } /** * @return array */ - function getMonthNamesArray() { + public function getMonthNamesArray() { $monthNames = [ '' ]; for ( $i = 1; $i < 13; $i++ ) { $monthNames[] = $this->getMonthName( $i ); @@ -936,7 +934,7 @@ class Language { * @param string $key * @return string */ - function getMonthNameGen( $key ) { + public function getMonthNameGen( $key ) { return $this->getMessageFromDB( self::$mMonthGenMsgs[$key - 1] ); } @@ -2592,7 +2590,7 @@ class Language { return $text; } - // callback functions for uc(), lc(), ucwords(), ucwordbreaks() + // callback functions for ucwords(), ucwordbreaks() /** * @param array $matches @@ -2610,24 +2608,6 @@ class Language { return mb_strtoupper( $matches[0] ); } - /** - * @param array $matches - * @return string - */ - function ucCallback( $matches ) { - list( $wikiUpperChars ) = self::getCaseMaps(); - return strtr( $matches[1], $wikiUpperChars ); - } - - /** - * @param array $matches - * @return string - */ - function lcCallback( $matches ) { - list( , $wikiLowerChars ) = self::getCaseMaps(); - return strtr( $matches[1], $wikiLowerChars ); - } - /** * @param array $matches * @return string @@ -2636,15 +2616,6 @@ class Language { return mb_strtoupper( $matches[0] ); } - /** - * @param array $matches - * @return string - */ - function ucwordsCallbackWiki( $matches ) { - list( $wikiUpperChars ) = self::getCaseMaps(); - return strtr( $matches[0], $wikiUpperChars ); - } - /** * Make a string's first character uppercase * @@ -2673,27 +2644,14 @@ class Language { * @return string */ function uc( $str, $first = false ) { - if ( function_exists( 'mb_strtoupper' ) ) { - if ( $first ) { - if ( $this->isMultibyte( $str ) ) { - return mb_strtoupper( mb_substr( $str, 0, 1 ) ) . mb_substr( $str, 1 ); - } else { - return ucfirst( $str ); - } - } else { - return $this->isMultibyte( $str ) ? mb_strtoupper( $str ) : strtoupper( $str ); - } - } else { + if ( $first ) { if ( $this->isMultibyte( $str ) ) { - $x = $first ? '^' : ''; - return preg_replace_callback( - "/$x([a-z]|[\\xc0-\\xff][\\x80-\\xbf]*)/", - [ $this, 'ucCallback' ], - $str - ); + return mb_strtoupper( mb_substr( $str, 0, 1 ) ) . mb_substr( $str, 1 ); } else { - return $first ? ucfirst( $str ) : strtoupper( $str ); + return ucfirst( $str ); } + } else { + return $this->isMultibyte( $str ) ? mb_strtoupper( $str ) : strtoupper( $str ); } } @@ -2721,27 +2679,14 @@ class Language { * @return mixed|string */ function lc( $str, $first = false ) { - if ( function_exists( 'mb_strtolower' ) ) { - if ( $first ) { - if ( $this->isMultibyte( $str ) ) { - return mb_strtolower( mb_substr( $str, 0, 1 ) ) . mb_substr( $str, 1 ); - } else { - return strtolower( substr( $str, 0, 1 ) ) . substr( $str, 1 ); - } - } else { - return $this->isMultibyte( $str ) ? mb_strtolower( $str ) : strtolower( $str ); - } - } else { + if ( $first ) { if ( $this->isMultibyte( $str ) ) { - $x = $first ? '^' : ''; - return preg_replace_callback( - "/$x([A-Z]|[\\xc0-\\xff][\\x80-\\xbf]*)/", - [ $this, 'lcCallback' ], - $str - ); + return mb_strtolower( mb_substr( $str, 0, 1 ) ) . mb_substr( $str, 1 ); } else { - return $first ? strtolower( substr( $str, 0, 1 ) ) . substr( $str, 1 ) : strtolower( $str ); + return strtolower( substr( $str, 0, 1 ) ) . substr( $str, 1 ); } + } else { + return $this->isMultibyte( $str ) ? mb_strtolower( $str ) : strtolower( $str ); } } @@ -2765,19 +2710,11 @@ class Language { $replaceRegexp = "/^([a-z]|[\\xc0-\\xff][\\x80-\\xbf]*)| ([a-z]|[\\xc0-\\xff][\\x80-\\xbf]*)/"; // function to use to capitalize a single char - if ( function_exists( 'mb_strtoupper' ) ) { - return preg_replace_callback( - $replaceRegexp, - [ $this, 'ucwordsCallbackMB' ], - $str - ); - } else { - return preg_replace_callback( - $replaceRegexp, - [ $this, 'ucwordsCallbackWiki' ], - $str - ); - } + return preg_replace_callback( + $replaceRegexp, + [ $this, 'ucwordsCallbackMB' ], + $str + ); } else { return ucwords( strtolower( $str ) ); } @@ -2800,19 +2737,11 @@ class Language { $replaceRegexp = "/^([a-z]|[\\xc0-\\xff][\\x80-\\xbf]*)|" . "$breaks([a-z]|[\\xc0-\\xff][\\x80-\\xbf]*)/"; - if ( function_exists( 'mb_strtoupper' ) ) { - return preg_replace_callback( - $replaceRegexp, - [ $this, 'ucwordbreaksCallbackMB' ], - $str - ); - } else { - return preg_replace_callback( - $replaceRegexp, - [ $this, 'ucwordsCallbackWiki' ], - $str - ); - } + return preg_replace_callback( + $replaceRegexp, + [ $this, 'ucwordbreaksCallbackMB' ], + $str + ); } else { return preg_replace_callback( '/\b([\w\x80-\xff]+)\b/', @@ -3966,10 +3895,11 @@ class Language { * match up with it. * * @param string $str The validated block duration in English + * @param User $user User object to use timezone from or null for $wgUser * @return string Somehow translated block duration * @see LanguageFi.php for example implementation */ - function translateBlockExpiry( $str ) { + function translateBlockExpiry( $str, User $user = null ) { $duration = SpecialBlock::getSuggestedDurations( $this ); foreach ( $duration as $show => $value ) { if ( strcmp( $str, $value ) == 0 ) { @@ -3995,10 +3925,12 @@ class Language { } else { // It's an absolute timestamp. if ( $time === 0 ) { // wfTimestamp() handles 0 as current time instead of epoch. - return $this->timeanddate( '19700101000000' ); - } else { - return $this->timeanddate( $time ); + $time = '19700101000000'; + } + if ( $user ) { + return $this->userTimeAndDate( $time, $user ); } + return $this->timeanddate( $time ); } } @@ -4464,7 +4396,7 @@ class Language { * @return array Array of message keys (strings) */ public static function getMessageKeysFor( $code ) { - return self::getLocalisationCache()->getSubItemList( $code, 'messages' ); + return self::getLocalisationCache()->getSubitemList( $code, 'messages' ); } /** @@ -4496,26 +4428,6 @@ class Language { return $this->convertGrammar( trim( $m[2] ), trim( $m[1] ) ); } - /** - * @throws MWException - * @return array - */ - static function getCaseMaps() { - static $wikiUpperChars, $wikiLowerChars; - if ( isset( $wikiUpperChars ) ) { - return [ $wikiUpperChars, $wikiLowerChars ]; - } - - $arr = wfGetPrecompiledData( 'Utf8Case.ser' ); - if ( $arr === false ) { - throw new MWException( - "Utf8Case.ser is missing, please run \"make\" in the serialized directory\n" ); - } - $wikiUpperChars = $arr['wikiUpperChars']; - $wikiLowerChars = $arr['wikiLowerChars']; - return [ $wikiUpperChars, $wikiLowerChars ]; - } - /** * Decode an expiry (block, protection, etc) which has come from the DB * diff --git a/languages/classes/LanguageFi.php b/languages/classes/LanguageFi.php index c3c40efde6..338853683c 100644 --- a/languages/classes/LanguageFi.php +++ b/languages/classes/LanguageFi.php @@ -73,7 +73,6 @@ class LanguageFi extends Language { break; case 'illative': # Double the last letter and add 'n' - # mb_substr has a compatibility function in GlobalFunctions.php $word = $word . mb_substr( $word, -1 ) . 'n'; break; case 'inessive': @@ -85,10 +84,10 @@ class LanguageFi extends Language { /** * @param string $str - * @param bool $forContent + * @param User $user User object to use timezone from or null for $wgUser * @return string */ - function translateBlockExpiry( $str, $forContent = false ) { + function translateBlockExpiry( $str, User $user = null ) { /* 'ago', 'now', 'today', 'this', 'next', 'first', 'third', 'fourth', 'fifth', 'sixth', 'seventh', 'eighth', 'ninth', diff --git a/languages/data/Names.php b/languages/data/Names.php index 7a46aacd5a..6c49aa443a 100644 --- a/languages/data/Names.php +++ b/languages/data/Names.php @@ -180,7 +180,7 @@ class Names { 'gv' => 'Gaelg', # Manx 'ha' => 'Hausa', # Hausa 'hak' => '客家語/Hak-kâ-ngî', # Hakka - 'haw' => 'Hawai`i', # Hawaiian + 'haw' => 'Hawaiʻi', # Hawaiian 'he' => 'עברית', # Hebrew 'hi' => 'हिन्दी', # Hindi 'hif' => 'Fiji Hindi', # Fijian Hindi (multiple scripts - defaults to Latin) diff --git a/languages/i18n/af.json b/languages/i18n/af.json index 0c51902c2f..5ef02cebc1 100644 --- a/languages/i18n/af.json +++ b/languages/i18n/af.json @@ -1163,7 +1163,7 @@ "recentchangeslinked-page": "Bladsynaam:", "recentchangeslinked-to": "Besigtig wysigings aan bladsye met skakels na die bladsy", "recentchanges-page-added-to-category": "[[:$1]] by kategorie gevoeg", - "recentchanges-page-added-to-category-bundled": "[[:$1]] en {{PLURAL:$2|een bladsy|$2 bladsye}} by kategorie gevoeg", + "recentchanges-page-added-to-category-bundled": "[[:$1]] en [[Special:WhatLinksHere/$1|{{PLURAL:$2|een bladsy|$2 bladsye}}]] by kategorie gevoeg", "recentchanges-page-removed-from-category": "[[:$1]] uit kategorie verwyder", "recentchanges-page-removed-from-category-bundled": "[[:$1]] en {{PLURAL:$2|een bladsy|$2 bladsye}} van kategorie verwyder", "autochange-username": "Outomatiese MediaWiki-wysiging", @@ -1583,8 +1583,6 @@ "categories": "Kategorieë", "categoriespagetext": "Die volgende {{PLURAL:$1|kategorie|kategorieë}} bevat bladsye of media.\n[[Special:UnusedCategories|Ongebruikte kategorieë]] word nie gewys nie.\nSien ook [[Special:WantedCategories|nie-bestaande kategorieë met verwysings]].", "categoriesfrom": "Wys kategorieë vanaf:", - "special-categories-sort-count": "sorteer volgens getal", - "special-categories-sort-abc": "sorteer alfabeties", "deletedcontributions": "Geskrapte gebruikersbydraes", "deletedcontributions-title": "Geskrapte gebruikersbydraes", "sp-deletedcontributions-contribs": "bydraes", @@ -2151,10 +2149,6 @@ "import-logentry-upload-detail": "$1 {{PLURAL:$1|weergawe|weergawes}}", "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|weergawe|weergawes}} vanaf $2", "javascripttest": "JavaScript toetsing", - "javascripttest-pagetext-noframework": "Hierdie bladsy is gereserveer vir die uitvoer van JavaScript-toetse.", - "javascripttest-pagetext-unknownframework": "Onbekende toetsraamwerk \"$1\".", - "javascripttest-pagetext-frameworks": "Kies een van die volgende toetsraamwerke: $1", - "javascripttest-pagetext-skins": "Kies 'n omslag waarmee die toets uitgevoer moet word:", "javascripttest-qunit-intro": "Sien die [$1 toetsdokumentasie] op mediawiki.org.", "tooltip-pt-userpage": "{{GENDER:|My}} gebruikerbladsy", "tooltip-pt-anonuserpage": "Die gebruikersbladsy vir die IP-adres waaronder u wysigings aanbring", @@ -2400,8 +2394,8 @@ "exif-colorspace": "Kleurruimte", "exif-componentsconfiguration": "Betekenis van elke komponent", "exif-compressedbitsperpixel": "Beeldkompressiemetode", - "exif-pixelydimension": "Beeldwydte", - "exif-pixelxdimension": "Beeldhoogte", + "exif-pixelxdimension": "Beeldwydte", + "exif-pixelydimension": "Beeldhoogte", "exif-usercomment": "Opmerkings", "exif-relatedsoundfile": "Verwante klanklêer", "exif-datetimeoriginal": "Gegewens opgestel op", @@ -2833,7 +2827,6 @@ "version-libraries-description": "Beskrywing", "version-libraries-authors": "Outeurs", "redirect": "Aanstuur volgens lêer, gebruiker, bladsy of weergawenommer", - "redirect-legend": "Aanstuur na 'n lêer of bladsy", "redirect-summary": "Hierdie spesiale bladsy stuur aan na 'n lêer (as 'n lêernaam verskaf word), 'n bladsy (as 'n weergawe-nommer verskaf word) of 'n gebruikersblad (as 'n gebruiker-ID verskaf word).", "redirect-submit": "OK", "redirect-lookup": "Soek volgens:", @@ -2845,7 +2838,6 @@ "redirect-not-exists": "Waarde nie gevind nie", "fileduplicatesearch": "Soek duplikaatlêers", "fileduplicatesearch-summary": "Soek na duplikaatlêers volgens hul hutswaardes.", - "fileduplicatesearch-legend": "Soek vir 'n duplikaat", "fileduplicatesearch-filename": "Lêernaam:", "fileduplicatesearch-submit": "Soek", "fileduplicatesearch-info": "$1 × $2 piksels
Lêergrootte: $3
MIME-tipe: $4", diff --git a/languages/i18n/am.json b/languages/i18n/am.json index 4971ff7ebd..58c4a1a1da 100644 --- a/languages/i18n/am.json +++ b/languages/i18n/am.json @@ -1125,7 +1125,6 @@ "cachedspecial-refresh-now": "መጨረሻውን ለማየት", "categories": "ምድቦች", "categoriespagetext": "በዚሁ ሥራ ዕቅድ ውስጥ የሚከተሉ መደቦች ይኖራሉ።\n[[Special:UnusedCategories|Unused categories]] are not shown here.\nAlso see [[Special:WantedCategories|wanted categories]].", - "special-categories-sort-abc": "በፊደል ተራ ይደርደሩ", "deletedcontributions": "የአባሉ የጠፉት አስተዋጽኦች", "deletedcontributions-title": "የአባሉ የጠፉት አስተዋጽኦች", "sp-deletedcontributions-contribs": "አስተዋጽኦች", @@ -1656,8 +1655,8 @@ "exif-flashpixversion": "የተደገፈ Flashpix ዝርያ", "exif-componentsconfiguration": "የየክፍለ ነገሩ ትርጉም", "exif-compressedbitsperpixel": "የስዕል መጨመቅ ዘዴ", - "exif-pixelydimension": "እውነተኛ የስዕል ስፋት", - "exif-pixelxdimension": "እውነተኛ የስዕል ቁመት", + "exif-pixelxdimension": "እውነተኛ የስዕል ስፋት", + "exif-pixelydimension": "እውነተኛ የስዕል ቁመት", "exif-usercomment": "የተጠቃሚው ማጠቃለያ", "exif-relatedsoundfile": "የተዛመደ የድምጽ ፋይል", "exif-datetimeoriginal": "መረጃው የተፈጠረበት ቀንና ሰዓት", @@ -1906,7 +1905,6 @@ "version-software-product": "ሶፍትዌር", "version-software-version": "ዝርያ", "fileduplicatesearch": "ለቅጂ ፋይሎች መፈልግ", - "fileduplicatesearch-legend": "ለቅጂ ለመፈልግ", "fileduplicatesearch-filename": "የፋይል ስም:", "fileduplicatesearch-submit": "ፍለጋ", "fileduplicatesearch-noresults": "«$1» የሚባል ፋይል አልተገኘም።", diff --git a/languages/i18n/an.json b/languages/i18n/an.json index a7d5d44a43..0af7f4507a 100644 --- a/languages/i18n/an.json +++ b/languages/i18n/an.json @@ -147,7 +147,7 @@ "cancel": "Cancelar", "moredotdotdot": "Más...", "mypage": "Pachina", - "mytalk": "Pachina de discusión", + "mytalk": "Pachina de descusión", "anontalk": "Pachina de descusión d'ista IP", "navigation": "Navego", "and": " y", @@ -1356,8 +1356,6 @@ "categories": "Categorías", "categoriespagetext": "{{PLURAL:$1|A siguient categoría contién|As siguients categorías contienen}} pachinas u fichers multimedia.\nNo s'amuestran aquí as [[Special:UnusedCategories|categorías no emplegatas]].\nSe veigan tamién as [[Special:WantedCategories|categorías requiestas]].", "categoriesfrom": "Amostrar as categoría que prencipien por:", - "special-categories-sort-count": "ordenar por recuento", - "special-categories-sort-abc": "ordenar alfabeticament", "deletedcontributions": "Contrebucions d'usuario borratas", "deletedcontributions-title": "Contrebucions d'usuario borradas", "sp-deletedcontributions-contribs": "contrebucions", @@ -1876,10 +1874,6 @@ "import-logentry-upload-detail": "$1 {{PLURAL:$1|versión|versions}}", "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|versión|versions}} dende $2", "javascripttest": "Prebatinas de JavaScript", - "javascripttest-pagetext-noframework": "Ista pachina ye reservada ta fer as prebas de JavaScrip.", - "javascripttest-pagetext-unknownframework": "Bastida de prebas \"$1\" desconoixida.", - "javascripttest-pagetext-frameworks": "Por favor, trigue una d'as siguients bastidas de prebas: $1", - "javascripttest-pagetext-skins": "Trigue una apariencia ta fer as prebas con ella:", "javascripttest-qunit-intro": "Mire-se [$1 a documentación de prebatinas] en mediawiki.org", "tooltip-pt-userpage": "A suya pachina d'usuario", "tooltip-pt-anonuserpage": "A pachina d'usuario de l'adreza IP dende a que ye editando", @@ -2074,8 +2068,8 @@ "exif-colorspace": "Espacio de colors", "exif-componentsconfiguration": "Significación de cada component", "exif-compressedbitsperpixel": "Modo de compresión d'a imachen", - "exif-pixelydimension": "Amplaria d'a imachen", - "exif-pixelxdimension": "Altaria d'a imachen", + "exif-pixelxdimension": "Amplaria d'a imachen", + "exif-pixelydimension": "Altaria d'a imachen", "exif-usercomment": "Comentarios de l'usuario", "exif-relatedsoundfile": "Fichero d'audio relacionato", "exif-datetimeoriginal": "Calendata y hora de cheneración d'os datos", @@ -2450,7 +2444,7 @@ "watchlisttools-view": "Amostrar cambeos", "watchlisttools-edit": "Veyer y editar a lista de seguimiento", "watchlisttools-raw": "Editar a lista de seguimiento en formato texto", - "signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|discusión]])", + "signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|descusión]])", "duplicate-defaultsort": "Pare cuenta: A clau d'ordenación por defecto «$2» anula l'anterior clau d'ordenación por defecto «$1».", "version": "Versión", "version-extensions": "Estensions instalatas", @@ -2476,7 +2470,6 @@ "version-software-version": "Versión", "fileduplicatesearch": "Mirar fichers duplicatos", "fileduplicatesearch-summary": "Mirar archivos duplicatos basatos en a suya valura hash.", - "fileduplicatesearch-legend": "Mirar duplicatos", "fileduplicatesearch-filename": "Nombre d'o fichero:", "fileduplicatesearch-submit": "Mirar", "fileduplicatesearch-info": "$1 × $2 pixels
Grandaria d'o fichero: $3
tipo MIME: $4", diff --git a/languages/i18n/ar.json b/languages/i18n/ar.json index 358fa891fa..c3f3afce43 100644 --- a/languages/i18n/ar.json +++ b/languages/i18n/ar.json @@ -200,7 +200,6 @@ "moredotdotdot": "المزيد...", "morenotlisted": "هذه القائمة غير مكتملة.", "mypage": "صفحة", - "anonuserpage": "مستخدم غير معروف", "mytalk": "نقاش", "anontalk": "نقاش", "navigation": "تصفح", @@ -388,7 +387,7 @@ "cannotdelete-title": "تعذّر حذف الصفحة \"$1\"", "delete-hook-aborted": "أجهض خطّاف الحذف.\nلم يقدم أي توضيح.", "no-null-revision": "تعذر إنشاء مراجعة جديدة فارغة لصفحة \"$1\"", - "badtitle": "عنوان سيء", + "badtitle": "عنوان سيئ", "badtitletext": "عنوان الصفحة المطلوب إما غير صحيح أو فارغ، وربما الرابط بين اللغات أو بين المشاريع خاطئ.\nربما يحوي محارف لا تصلح للاستخدام في العناوين.", "title-invalid-empty": "عنوان الصفحة المطلوبة فارغ أو يحتوي اسم النطاق فقط.", "title-invalid-utf8": "عنوان الصفحة المطلوب يحتوي سلسلة محارف UTF-8 غير صالحة.", @@ -425,7 +424,7 @@ "exception-nologin": "غير مسجل الدخول", "exception-nologin-text": "سجل الدخول للتمكن من عرض هذه الصفحة أو إجراء هذا الفعل.", "exception-nologin-text-manual": "الرجاء $1 لتتمكن من الوصول لهذه الصفحة أو أداء هذا الإجراء.", - "virus-badscanner": "ضبط سيء: ماسح فيروسات غير معروف: ''$1''", + "virus-badscanner": "ضبط سيئ: ماسح فيروسات غير معروف: ''$1''", "virus-scanfailed": "فشل المسح (كود $1)", "virus-unknownscanner": "مضاد فيروسات غير معروف:", "logouttext": "أنت الآن غير مسجل الدخول. قد ترى بعض الصفحات كما لو أنك ما زلت مسجل الدخول، وذلك حتى تفرغ التخزين المؤقت في متصفحك.", @@ -579,6 +578,7 @@ "botpasswords-deleted-title": "كلمة سر البوت حذفت", "botpasswords-deleted-body": "كلمة سر البوت\"$1\" قد حذفت.", "botpasswords-no-provider": "BotPasswordsSessionProvider غير متاح.", + "botpasswords-restriction-failed": "قيود كلمة مرور البوت تمنع هذا الولوج.", "resetpass_forbidden": "كلمات السر لا يمكن تغييرها", "resetpass-no-info": "يجب أن تكون مسجل الدخول للوصول إلى هذه الصفحة مباشرة.", "resetpass-submit-loggedin": "تغيير كلمة السر", @@ -1496,6 +1496,7 @@ "uploadstash-badtoken": "لم ينجح أداء ذلك العمل، ربما لأن وثائق تفويض التحرير الخاصة بك منتهية الصلاحية. حاول مرة أخرى.", "uploadstash-errclear": "فشلت عملية مسح الملفات.", "uploadstash-refresh": "تحديث قائمة الملفات", + "uploadstash-thumbnail": "اعرض صورة مصغرة", "invalid-chunk-offset": "قطعة أوفست غير صالحة", "img-auth-accessdenied": "رفض الوصول", "img-auth-nopathinfo": "PATH_INFO مفقود.\nخادومك ليس مضبوطاً لتمرير هذه المعلومة.\nقد يكون مبنياً على نظام CGI ولا يمكنه دعم img_auth.\nراجع https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Image_Authorization.", @@ -1746,6 +1747,7 @@ "apihelp-no-such-module": "الوحدة \"$1\" غير موجودة.", "apisandbox": "ملعب API", "apisandbox-jsonly": "الجافا سكريبت مطلوبة لاستخدام ملعب API", + "apisandbox-api-disabled": "واجهة برمجة التطبيق API معطلة في هذا الموقع.", "apisandbox-fullscreen": "وسع اللوحة", "apisandbox-unfullscreen": "أظهر الصفحة", "apisandbox-submit": "عمل الطلب", @@ -1808,8 +1810,6 @@ "categories-submit": "أظهر", "categoriespagetext": "{{PLURAL:$1|التصنيف التالي يحتوي|التصنيفات التالية تحتوي}} على صفحات أو وسائط.\n[[Special:UnusedCategories|التصنيفات غير المستخدمة]] غير معروضة هنا.\nانظر أيضاً [[Special:WantedCategories|التصنيفات المطلوبة]].", "categoriesfrom": "اعرض التصنيفات ابتداء من:", - "special-categories-sort-count": "رتب بالعدد", - "special-categories-sort-abc": "رتب هجائياً", "deletedcontributions": "مساهمات المستخدم المحذوفة", "deletedcontributions-title": "مساهمات المستخدم المحذوفة", "sp-deletedcontributions-contribs": "مساهمات", @@ -2425,11 +2425,7 @@ "import-logentry-upload-detail": "{{PLURAL:$1|لا مراجعات|مراجعة واحدة|مراجعتان|$1 مراجعات|$1 مراجعة}}", "import-logentry-interwiki-detail": "تم استيراد {{PLURAL:$1||مراجعة واحدة|مراجعتين|$1 مراجعات|$1 مراجعة}} من $2", "javascripttest": "اختبار جافاسكربت", - "javascripttest-pagetext-noframework": "هذه الصفحة محجوزة لإجراء أختبارات الجافا سكريبت.", - "javascripttest-pagetext-unknownframework": "إطار اختبار غير معروف \"$1\".", "javascripttest-pagetext-unknownaction": "فعل غير معروف \"$1\".", - "javascripttest-pagetext-frameworks": "الرجاء اختيار أحد أطر الاختبارات التالية: $1", - "javascripttest-pagetext-skins": "قم باختيار الواجهة لإجراء الإحتبارات بها:", "javascripttest-qunit-intro": "راجع [$1 وثيقة الاختبار] على mediawiki.org.", "tooltip-pt-userpage": "{{GENDER:|صفحة المستخدم}} الخاصة بك", "tooltip-pt-anonuserpage": "صفحة المستخدم للأيبي الذي تقوم بالتحرير من خلاله", @@ -2700,8 +2696,8 @@ "exif-colorspace": "فضاء الألوان", "exif-componentsconfiguration": "معنى كل مكونة", "exif-compressedbitsperpixel": "طور ضغط الصورة", - "exif-pixelydimension": "عرض الصورة", - "exif-pixelxdimension": "ارتفاع الصورة", + "exif-pixelxdimension": "عرض الصورة", + "exif-pixelydimension": "ارتفاع الصورة", "exif-usercomment": "تعليقات المستخدم", "exif-relatedsoundfile": "ملف صوتي مرتبط", "exif-datetimeoriginal": "تاريخ ووقت توليد البيانات", @@ -3244,7 +3240,6 @@ "version-libraries-description": "الوصف", "version-libraries-authors": "المؤلفون", "redirect": "تحويل حسب الملف , المستخدم ,الصفحة , معرف الدخول", - "redirect-legend": "تحويل إلى ملف أو صفحة", "redirect-summary": "هذه الصفحة الخاصة تحوّل إلى ملف (باسمه) أو صفحة (برقم إحدى مراجعاتها) أو إلى صفحة مستخدم (برقمه التعريفي). الاستخدام [[{{#Special:Redirect}}/file/Example.jpg]] أو [[{{#Special:Redirect}}/revision/328429]] أو [[{{#Special:Redirect}}/user/101]].", "redirect-submit": "حوّل", "redirect-lookup": "ابحث في:", @@ -3257,7 +3252,6 @@ "redirect-not-exists": "المطلوب غير موجود", "fileduplicatesearch": "بحث عن ملفات مكررة", "fileduplicatesearch-summary": "ابحث عن الملفات المكررة بناء على قيم الهاش.", - "fileduplicatesearch-legend": "بحث عن مكرر", "fileduplicatesearch-filename": "اسم الملف:", "fileduplicatesearch-submit": "بحث", "fileduplicatesearch-info": "$1 × $2 بكسل
حجم الملف: $3
نوع MIME: $4", @@ -3638,5 +3632,30 @@ "sessionprovider-generic": "جلسات $1", "sessionprovider-mediawiki-session-cookiesessionprovider": "جلسات قائمة على ملفات تعريف الارتباط (كوكيز)", "sessionprovider-nocookies": "قد يتم تعطيل الكوكيز. تأكد من تمكين ملفات تعريف الأرتباط وأبد مرةأخرى.", - "randomrootpage": "صفحة جذر عشوائية" + "randomrootpage": "صفحة جذر عشوائية", + "log-action-filter-block": "نوع المنع:", + "log-action-filter-delete": "نوع الحذف:", + "log-action-filter-import": "نوع الاستيراد:", + "log-action-filter-managetags": "نوع فعل إدارة الوسوم:", + "log-action-filter-move": "نوع النقل:", + "log-action-filter-newusers": "نوع إنشاء الحساب:", + "log-action-filter-protect": "نوع الحماية:", + "log-action-filter-rights": "نوع تغيير الصلاحية", + "log-action-filter-upload": "نوع الرفع:", + "log-action-filter-all": "الكل", + "log-action-filter-block-block": "منع", + "log-action-filter-block-reblock": "منع التعديل", + "log-action-filter-block-unblock": "رفع المنع", + "log-action-filter-delete-delete": "حذف الصفحات", + "log-action-filter-delete-event": "حذف السجلات", + "log-action-filter-delete-revision": "حذف المراجعات", + "log-action-filter-import-interwiki": "استيراد عابر للويكي", + "log-action-filter-newusers-autocreate": "إنشاء آلي", + "log-action-filter-newusers-byemail": "الإنشاء بكلمة مرور مرسلة عبر البريد الإلكتروني", + "log-action-filter-protect-protect": "حماية", + "log-action-filter-protect-modify": "تعديل الحماية", + "log-action-filter-protect-unprotect": "رفع الحماية", + "log-action-filter-rights-rights": "تغيير يدوي", + "log-action-filter-upload-upload": "رفع جديد", + "log-action-filter-upload-overwrite": "إعادة الرفع" } diff --git a/languages/i18n/ary.json b/languages/i18n/ary.json index 0f69f6a88d..c996b3fed1 100644 --- a/languages/i18n/ary.json +++ b/languages/i18n/ary.json @@ -1120,8 +1120,6 @@ "allpagesprefix": "biyn sfahi katbda b:", "categories": "tsnifat", "categoriesfrom": "wrri ṫ-ṫṣnifaṫ li badyin mn:", - "special-categories-sort-count": "rttb bladad", - "special-categories-sort-abc": "rttb blhorof", "deletedcontributions": "mosahamaṫ mosṫĥdim memḫiya", "deletedcontributions-title": "mosahamaṫ mosṫĥdim memḫiya", "sp-deletedcontributions-contribs": "l-mosahamaṫ", @@ -1628,8 +1626,8 @@ "exif-colorspace": "farq lon", "exif-componentsconfiguration": "maana kol mokawwin", "exif-compressedbitsperpixel": "tor daght sora", - "exif-pixelydimension": "ard sora sahih", - "exif-pixelxdimension": "tol sora sahih", + "exif-pixelxdimension": "ard sora sahih", + "exif-pixelydimension": "tol sora sahih", "exif-usercomment": "taaliqat lmostakhdim", "exif-relatedsoundfile": "milf sawti mortabit", "exif-datetimeoriginal": "tarikh o wqt tawlid lbayanat", @@ -1907,7 +1905,6 @@ "version-software-version": "noskha", "fileduplicatesearch": "qlleb ĝla milffaṫ mḍoḅla", "fileduplicatesearch-summary": "qlleb ĝla milffaṫ mḍoḅla ĝla asas l-qyam dl-haċ.", - "fileduplicatesearch-legend": "qllb ala lmdoublin", "fileduplicatesearch-filename": "smiyt lfichier", "fileduplicatesearch-submit": "Qelleb", "fileduplicatesearch-info": "$1 × $2 piksel
ṫqel l-fiċyé: $3
noĝ MIME : $4", diff --git a/languages/i18n/arz.json b/languages/i18n/arz.json index 91089cc615..d1addb695f 100644 --- a/languages/i18n/arz.json +++ b/languages/i18n/arz.json @@ -1284,8 +1284,6 @@ "categories": "تصانيف", "categoriespagetext": "{{PLURAL:$1|التصنيف دا بيحتوى على|التصنيفات دى بتحتوى على}} صفحات او ميديا.\n[[Special:UnusedCategories|التصنيفات اللى مش مستعمله]] مش معروضه هنا.\nشوف كمان [[Special:WantedCategories|التصنيفات المتعازه]].", "categoriesfrom": "اعرض التصانيف من أول:", - "special-categories-sort-count": "رتب بالعدد", - "special-categories-sort-abc": "ترتيب ابجدي", "deletedcontributions": "تعديلات اليوزر الممسوحة", "deletedcontributions-title": "تعديلات اليوزر الممسوحة", "sp-deletedcontributions-contribs": "المساهمات", @@ -1918,8 +1916,8 @@ "exif-colorspace": "فرق اللون", "exif-componentsconfiguration": "معنى كل مكون", "exif-compressedbitsperpixel": "طور ضغط الصورة", - "exif-pixelydimension": "عرض صورة صحيح", - "exif-pixelxdimension": "ارتفاع صورة صحيح", + "exif-pixelxdimension": "عرض صورة صحيح", + "exif-pixelydimension": "ارتفاع صورة صحيح", "exif-usercomment": "تعليقات اليوزر", "exif-relatedsoundfile": "ملف صوت مرتبط", "exif-datetimeoriginal": "تاريخ و وقت الإنتاج", @@ -2258,7 +2256,6 @@ "version-software-version": "النسخه", "fileduplicatesearch": "دور على الملفات المتكررة", "fileduplicatesearch-summary": "دور على الملفات المتكررة على اساس قيمة الهاش بتاعتها.", - "fileduplicatesearch-legend": "تدوير على متكرر", "fileduplicatesearch-filename": "اسم الملف:", "fileduplicatesearch-submit": "تدوير", "fileduplicatesearch-info": "$1 × $2 بكسل
حجم الملف: $3
نوع MIME: $4", diff --git a/languages/i18n/as.json b/languages/i18n/as.json index e702f3279f..a57dbea7e9 100644 --- a/languages/i18n/as.json +++ b/languages/i18n/as.json @@ -1609,8 +1609,6 @@ "categories": "শ্ৰেণী", "categoriespagetext": "এই {{PLURAL:$1|বিষয়শ্ৰেণীত|বিষয়শ্ৰেণীসমূহত}} পৃষ্ঠা বা মিডিয়া ফাইল আছে ।\n[[Special:UnusedCategories|অব্যৱহৃত শ্ৰেণীসমূহ]] ইয়াত দেখুওৱা হোৱা নাই ।\nঅধিক তথ্যৰ বাবে [[Special:WantedCategories|আৱশ্যক শ্ৰেণীসমূহ]] চাওক ।", "categoriesfrom": "ইয়াৰে আৰম্ভ হোৱা শ্ৰেণীসমূহ দেখুৱাওক:", - "special-categories-sort-count": "গণনাৰ ভিত্তিত সজাওক", - "special-categories-sort-abc": "বৰ্ণানুক্ৰমে সজাওক", "deletedcontributions": "ৰদ কৰা সদস্যৰ বৰঙণিসমূহ", "deletedcontributions-title": "ৰদ কৰা সদস্যৰ বৰঙণিসমূহ", "sp-deletedcontributions-contribs": "বৰঙণিসমূহ", @@ -2166,11 +2164,7 @@ "import-logentry-upload-detail": "$1 {{PLURAL:$1|টা সংশোধন|টা সংশোধন}}", "import-logentry-interwiki-detail": "$2ৱে কৰা $1 {{PLURAL:$1|টা সংশোধন|টা সংশোধন}}", "javascripttest": "জাভাস্ক্ৰিপ্ট পৰীক্ষা।", - "javascripttest-pagetext-noframework": "এই পৃষ্ঠাটো জাভাস্ক্ৰিপ্ট পৰীক্ষা চলোৱাৰ বাবে সংৰক্ষিত।", - "javascripttest-pagetext-unknownframework": "অজ্ঞাত সম্পৰীক্ষা ফ্ৰেমৱৰ্ক \"$1\"।", "javascripttest-pagetext-unknownaction": "অজ্ঞাত কাৰ্য \"$1\"।", - "javascripttest-pagetext-frameworks": "অনুগ্ৰহ কৰি তলৰ যিকোনো এটা সম্পৰীক্ষা ফ্ৰেমৱৰ্ক বাছনি কৰক: $1", - "javascripttest-pagetext-skins": "পৰীক্ষা কৰিবলৈ আৱৰণ এখন বাছনি কৰক:", "javascripttest-qunit-intro": "mediawiki.org-ত [$1 পৰীক্ষা নথিকৰণ] চাওক।", "tooltip-pt-userpage": "আপোনাৰ সদস্য পৃষ্ঠা", "tooltip-pt-anonuserpage": "যি আই.পি. ঠিকনাৰ পৰা আপুনি সম্পাদনা কৰিছে তাৰ সদস্য পৃষ্ঠা", @@ -2417,8 +2411,8 @@ "exif-colorspace": "ৰং স্থান", "exif-componentsconfiguration": "প্ৰতিটো উপাদানৰ অৰ্থ", "exif-compressedbitsperpixel": "ছবি সংকোচন অৱস্থা", - "exif-pixelydimension": "ছবিৰ প্ৰস্থতা", - "exif-pixelxdimension": "ছবিৰ উচ্চতা", + "exif-pixelxdimension": "ছবিৰ প্ৰস্থতা", + "exif-pixelydimension": "ছবিৰ উচ্চতা", "exif-usercomment": "সদস্যৰ মন্তব্য", "exif-relatedsoundfile": "সংশ্লিষ্ট শ্ৰব্য ফাইল", "exif-datetimeoriginal": "তথ্য সৃজনৰ তাৰিখ আৰু সময়", @@ -2844,7 +2838,6 @@ "version-entrypoints-header-url": "ইউআৰএল", "version-libraries-version": "সংস্কৰণ", "redirect": "ফাইল, সদস্য, পৃষ্ঠা বা সংশোধন আই ডি-ৰে পুনঃনিৰ্দেশ", - "redirect-legend": "এটা ফাইল বা পৃষ্ঠালৈ পুনঃনিৰ্দেশ", "redirect-summary": "এই বিশেষ পৃষ্ঠাটোৱে আপোনাক অন্য এটা ফাইললৈ (ফাইলৰ নাম), এটা পৃষ্ঠালৈ (সংশোধন আই ডি বা পৃষ্ঠা আই ডি), অথবা অন্য সদস্যৰ পৃষ্ঠালৈ (সদস্যৰ সাংখ্যিক আই ডি) পুনঃনির্দেশিত কৰিছে।\nব্যৱহাৰ: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/page/64308]], [[{{#Special:Redirect}}/revision/328429]], বা [[{{#Special:Redirect}}/user/101]]।", "redirect-submit": "যাওক", "redirect-lookup": "চাওক:", @@ -2856,7 +2849,6 @@ "redirect-not-exists": "মূল্য পোৱা নগ'ল", "fileduplicatesearch": "প্ৰতিলিপি পৃষ্ঠাসমূহ অনুসন্ধান কৰক", "fileduplicatesearch-summary": "হেছ্‌ মানসমূহৰ উপৰত নিৰ্ভৰ কৰি প্ৰতিলিপিত নথিপত্ৰসমূহৰ বাবে সন্ধান কৰক।", - "fileduplicatesearch-legend": "প্ৰতিলিপিৰ বাবে অনুসন্ধান কৰক", "fileduplicatesearch-filename": "ফাইলৰ নাম:", "fileduplicatesearch-submit": "সন্ধান কৰক", "fileduplicatesearch-info": "$1 × $2 পিক্সেল
ফাইলৰ মাত্ৰা: $3
MIME প্ৰকাৰ: $4", diff --git a/languages/i18n/ast.json b/languages/i18n/ast.json index 876d22234a..07317f0dc6 100644 --- a/languages/i18n/ast.json +++ b/languages/i18n/ast.json @@ -450,7 +450,7 @@ "nocookieslogin": "{{SITENAME}} usa «cookies» pa identificar a los usuarios.\nTien les «cookies» desactivaes.\nPor favor activeles y vuelva a intentalo.", "nocookiesfornew": "La cuenta nun se creó porque nun pudimos confirmar l'orixe.\nComprueba que tienes activaes les «cookies», recarga esta páxina y vuelvi a intentalo.", "noname": "Nun conseñasti un nome d'usuariu válidu.", - "loginsuccesstitle": "Aniciu de sesión correutu", + "loginsuccesstitle": "Identificáu", "loginsuccess": "'''Aniciasti sesión en {{SITENAME}} como «$1».'''", "nosuchuser": "Nun hai nengún usuariu col nome «$1».\nLos nomes d'usuariu distinguen mayúscules y minúscules.\nMira que tea bien escritu o [[Special:UserLogin/signup|crea una cuenta nueva]].", "nosuchusershort": "Nun hai nengún usuariu col nome «$1».\nMira que tea bien escritu.", @@ -469,7 +469,7 @@ "noemail": "L'usuariu «$1» nun tien rexistrada nenguna direición de corréu.", "noemailcreate": "Tienes de conseñar una direición de corréu válida.", "passwordsent": "Unvióse una contraseña nueva a la direición de corréu rexistrada pa «$1».\nPor favor vuelvi a aniciar sesión depués de recibila.", - "blocked-mailpassword": "La edición ta bloquiada dende la to direición IP, y por tanto nun se permite usar la función de recuperar contraseñes pa evitar abusos.", + "blocked-mailpassword": "La to direición IP tien bloquiada la edición. Pa torgar los abusos, nun se permite usar la recuperación de contraseñes dende esta direición IP.", "eauthentsent": "Unvióse un corréu electrónicu de confirmación a la direición indicada.\nEnantes de que s'unvie nengún otru corréu a la cuenta, has de siguir les instrucciones d'esi corréu pa confirmar que la cuenta ye daveres de to.", "throttled-mailpassword": "Yá s'unvió un corréu de reaniciu la clave {{PLURAL:$1|na postrer hora|nes postreres $1 hores}}.\nPa evitar abusos, namái s'unviará un corréu de reaniciu cada {{PLURAL:$1|hora|$1 hores}}.", "mailerror": "Fallu al unviar el corréu: $1", @@ -486,7 +486,7 @@ "createaccount-title": "Creación de cuenta pa {{SITENAME}}", "createaccount-text": "Daquién creó una cuenta cola to direición de corréu electrónicu en {{SITENAME}} ($4) col nome «$2», y cola contraseña «$3».\nAgora tendríes d'aniciar sesión y camudar la contraseña.\n\nPues escaecer esti mensaxe si esta cuenta creóse por error.", "login-throttled": "Ficisti demasiaos intentos d'aniciu de sesión recientes.\nPor favor espera $1 enantes d'intentalo otra vuelta.", - "login-abort-generic": "Falló la identificación - Encaboxao", + "login-abort-generic": "Falló l'aniciu de sesión - Encaboxao", "login-migrated-generic": "La to cuenta migróse ya'l to nome d'usuariu yá nun esiste nesta wiki.", "loginlanguagelabel": "Llingua: $1", "suspicious-userlogout": "La to solicitú de zarrar sesión refugose porque paez qu'unvióla un restolador frañíu o un proxy de caché.", @@ -506,7 +506,7 @@ "newpassword": "Contraseña nueva:", "retypenew": "Vuelvi a escribir la contraseña nueva:", "resetpass_submit": "Configurar la contraseña y aniciar sesión", - "changepassword-success": "¡Camudóse la contraseña correutamente!", + "changepassword-success": "Camudóse la contraseña.", "changepassword-throttled": "Ficisti demasiaos intentos d'aniciu de sesión recientes.\nPor favor espera $1 enantes d'intentalo otra vuelta.", "botpasswords": "Contraseñes de bots", "botpasswords-summary": "Les contraseñes de bot permiten l'accesu a una cuenta d'usuariu por aciu de la API sin usar les credenciales d'accesu de la cuenta principal. Los permisos d'usuariu disponibles al aniciar sesión con una contraseña de bot puen tar torgaos.\n\nSi nun sabes pa qué val esto, probablemente nun tendríes d'usalo. Naide tendría de pidite nunca que xeneres una d'estes y que-y la deas.", @@ -529,11 +529,11 @@ "botpasswords-insert-failed": "Nun pudo amestase'l nome de bot «$1». ¿Taba añadíu yá?", "botpasswords-update-failed": "Nun pudo anovase'l nome de bot «$1». ¿Desaniciaríase?", "botpasswords-created-title": "Creóse la contraseña de bot", - "botpasswords-created-body": "La contraseña de bot «$1» creóse correchamente.", + "botpasswords-created-body": "Creóse la contraseña del bot llamáu «$1» del usuariu «$2».", "botpasswords-updated-title": "Anovóse la contraseña de bot", - "botpasswords-updated-body": "La contraseña de bot «$1» anovóse correchamente.", + "botpasswords-updated-body": "Anovóse la contraseña del bot llamáu «$1» del usuariu «$2».", "botpasswords-deleted-title": "Desanicióse la contraseña de bot", - "botpasswords-deleted-body": "La contraseña de bot «$1» desanicióse.", + "botpasswords-deleted-body": "Desanicióse la contraseña del bot llamáu «$1» del usuariu «$2».", "botpasswords-newpassword": "La nueva contraseña p'aniciar sesión con strong>$1 ye $2. Por favor, rexistra esto pa referencies futures.", "botpasswords-no-provider": "BotPasswordsSessionProvider nun ta disponible.", "botpasswords-restriction-failed": "Hai torgues de contraseña de bot que torgaron esti aniciu de sesión.", @@ -543,7 +543,7 @@ "resetpass-no-info": "Tienes d'aniciar sesión pa entrar direutamente a esta páxina.", "resetpass-submit-loggedin": "Camudar la contraseña", "resetpass-submit-cancel": "Encaboxar", - "resetpass-wrong-oldpass": "Contraseña temporal o actual inválida.\nSeique yá camudaras correutamente la contraseña o que pidieras una nueva contraseña temporal.", + "resetpass-wrong-oldpass": "Contraseña temporal o actual inválida.\nSeique yá camudaras la contraseña o que pidieras una nueva contraseña temporal.", "resetpass-recycled": "Por favor, cambie la so contraseña por otra distinta de la actual.", "resetpass-temp-emailed": "Anició sesión con un códigu temporal unviáu per corréu electrónicu.\nPa completar l'aniciu de sesión, tien de definir una nueva contraseña equí:", "resetpass-temp-password": "Contraseña temporal:", @@ -660,7 +660,7 @@ "previewnote": "'''Alcuerdate de qu'esto ye sólo una vista previa.'''\n¡Los cambios entá nun se guardaron!", "continue-editing": "Dir al área d'edición", "previewconflict": "Esta vista previa amuesa'l testu del área d'edición d'arriba tal como apaecerá si escueyes guardar.", - "session_fail_preview": "'''¡Sentímoslo muncho! Nun pudimos procesar la to edición porque hebo una perda de datos de la sesión.'''\nPor favor, vuelvi a intentalo.\nSi inda nun funciona, intenta [[Special:UserLogout|colar]] y volver a aniciar sesión.", + "session_fail_preview": "¡Sentímoslo muncho! Nun pudimos procesar la edición porque hebo una perda de datos de la sesión.\n\nSeique zarróse la sesión. Comprueba si tienes abierta la sesión y vuelve a intentalo.\nSi inda nun funcionara, tenta [[Special:UserLogout|colar]] y volver a aniciar sesión y comprueba que'l restolador permite les cookies d'esti sitiu.", "session_fail_preview_html": "¡Sentímoslo! Nun pudo procesase la to edición por aciu d'una perda de datos de la sesión.\n\nComo {{SITENAME}} tien el HTML puru activáu, la vista previa ta tapecida como precaución escontra ataques en JavaScript.\n\nSi esti ye un intentu llexítimu d'edición, por favor vuelvi a intentalo.\nSi inda nun funciona, intenta [[Special:UserLogout|colar]] y volver a aniciar sesión, y comprueba que'l to restolador permite les cookies d'esti sitiu.", "token_suffix_mismatch": "'''La to edición nun s'aceutó porque'l to navegador mutiló los caráuteres de puntuación nel editor.'''\nLa edición nun foi aceutada pa prevenir corrupciones na páxina de testu.\nDacuando esto pasa por usar un serviciu proxy anónimu basáu en web que tenga fallos.", "edit_form_incomplete": "'''Delles partes del formulariu d'edición nun llegaron al sirvidor; comprueba que les ediciones tean intactes y vuelvi a tentalo.'''", @@ -827,9 +827,9 @@ "revdelete-unsuppress": "Desaniciar les torgues nes revisiones restauraes", "revdelete-log": "Motivu:", "revdelete-submit": "Aplicar a {{PLURAL:$1|la revisión seleicionada|les revisiones seleicionaes}}", - "revdelete-success": "'''Visibilidá de revisiones anovada correutamente.'''", + "revdelete-success": "Cambiada la visibilidá de revisiones.", "revdelete-failure": "'''La visibilida de revisiones nun se pudo anovar:'''\n$1", - "logdelete-success": "Configuróse correutamente la visibilidá del rexistru.", + "logdelete-success": "Configuróse la visibilidá del rexistru.", "logdelete-failure": "'''Nun se pudo configurar la visibilidá del rexistru:'''\n$1", "revdel-restore": "camudar visibilidá", "pagehist": "Historial de la páxina", @@ -861,6 +861,12 @@ "mergehistory-done": "$3 {{PLURAL:$3|revisión|revisiones}} de $1 {{PLURAL:$3|fusionóse|fusionáronse}} en [[:$2]].", "mergehistory-fail": "Nun pudo facese la fusión d'historiales, por favor comprueba los parámetros de páxina y hora.", "mergehistory-fail-bad-timestamp": "La marca de tiempu ye inválida.", + "mergehistory-fail-invalid-source": "La páxina d'orixe ye inválida.", + "mergehistory-fail-invalid-dest": "La páxina de destín ye inválida.", + "mergehistory-fail-no-change": "La fusión d'historiales nun fusionó nenguna revisión. Por favor, comprueba los parámetros de páxina y tiempu.", + "mergehistory-fail-permission": "Permisos insuficientes pa fusionar los historiales.", + "mergehistory-fail-self-merge": "Les páxines d'orixe y destín son la mesma.", + "mergehistory-fail-timestamps-overlap": "Les revisiones de la fonte se sobreponen o vienen después de les revisiones del destín.", "mergehistory-fail-toobig": "Nun pudo fusionase l'historial porque moveríense más del máximu de $1 {{PLURAL:$1|revisión|revisiones}}.", "mergehistory-no-source": "La páxina d'orixe $1 nun esiste.", "mergehistory-no-destination": "La páxina de destín $1 nun esiste.", @@ -1066,7 +1072,7 @@ "userrights-changeable-col": "Grupos que pues camudar", "userrights-unchangeable-col": "Grupos que nun pues camudar", "userrights-conflict": "¡Conflictu de cambiu de permisos d'usuariu! Por favor, revise y confirme los cambios.", - "userrights-removed-self": "Retiró correutamente los sos propios drechos. Poro, yá nun tendrá accesu a esta páxina.", + "userrights-removed-self": "Desaniciasti los tos propios permisos. Poro, yá nun tienes accesu a esta páxina.", "group": "Grupu:", "group-user": "Usuarios", "group-autoconfirmed": "Usuarios autoconfirmaos", @@ -1305,9 +1311,9 @@ "recentchangeslinked-page": "Nome de la páxina:", "recentchangeslinked-to": "Amosar los cambios de les páxines qu'enllacen en cuenta de los de la páxina dada", "recentchanges-page-added-to-category": "[[:$1]] amestóse a la categoría", - "recentchanges-page-added-to-category-bundled": "[[:$1]] y {{PLURAL:$2|otra páxina|otres $2 páxines}} amestaes a la categoría", + "recentchanges-page-added-to-category-bundled": "[[:$1]] y [[Special:WhatLinksHere/$1|{{PLURAL:$2|otra páxina|otres $2 páxines}}]] amestaes a la categoría", "recentchanges-page-removed-from-category": "[[:$1]] desanicióse de la categoría", - "recentchanges-page-removed-from-category-bundled": "[[:$1]] y {{PLURAL:$2|otra páxina|otres $2 páxines}} desaniciaes de la categoría", + "recentchanges-page-removed-from-category-bundled": "[[:$1]] y [[Special:WhatLinksHere/$1|{{PLURAL:$2|otra páxina|otres $2 páxines}}]] desaniciaes de la categoría", "autochange-username": "Cambiu automáticu de MediaWiki", "upload": "Xubir ficheru", "uploadbtn": "Xubir ficheru", @@ -1457,7 +1463,7 @@ "backend-fail-read": "Nun se pudo lleer el ficheru $1.", "backend-fail-create": "Nun se pudo escribir el ficheru $1.", "backend-fail-maxsize": "Nun se pudo escribir el ficheru $1 porque ye mayor de {{PLURAL:$2|un byte|$2 bytes}}.", - "backend-fail-readonly": "Nesti momentu el motor d'almacenamientu \"$1\" ta en mou de sólo llectura. El motivu dau foi: \"$2\"", + "backend-fail-readonly": "Nesti momentu el motor d'almacenamientu \"$1\" ta en mou de sólo llectura. El motivu dau ye: $2", "backend-fail-synced": "El ficheru \"$1\" ta nún estáu inconsistente colos motores d'almacenamientu internos", "backend-fail-connect": "Nun se pudo coneutar col motor d'almacenamientu \"$1\".", "backend-fail-internal": "Hebo un fallu desconocíu nel motor d'almacenamientu \"$1\".", @@ -1484,9 +1490,10 @@ "uploadstash-summary": "Esta páxina ufre accesu a ficheros que tan xubíos (o en procesu de xubía), pero qu'entá nun s'espublizaron na wiki. Estos ficheros nun son visibles pa naide, sacante l'usuariu que los xubió.", "uploadstash-clear": "Desaniciar los ficheros de la reserva", "uploadstash-nofiles": "Nun tienes ficheros na reserva.", - "uploadstash-badtoken": "Nun se pudo facer esa operación, seique porque caducó la identificación pa editar. Vuelvi a intentalo.", - "uploadstash-errclear": "Nun se pudieron desaniciar los ficheros.", + "uploadstash-badtoken": "Nun pudo facese esa operación. Seique caducó la identificación pa editar. Vuelve a tentalo.", + "uploadstash-errclear": "Falló'l desaniciu de los ficheros.", "uploadstash-refresh": "Anovar la llista de ficheros", + "uploadstash-thumbnail": "ver miniatura", "invalid-chunk-offset": "Allugamientu inválidu del fragmentu", "img-auth-accessdenied": "Accesu denegáu", "img-auth-nopathinfo": "Falta PATH_INFO.\nEl to sirvidor nun ta configuráu pa pasar esta información.\nPue tar basáu en CGI y nun tener sofitu pa img_auth.\nVer https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Image_Authorization", @@ -1735,15 +1742,39 @@ "apihelp": "Ayuda de la API", "apihelp-no-such-module": "Nun s'alcuentra'l módulu «$1».", "apisandbox": "Zona de pruebes API", + "apisandbox-jsonly": "Necesítase JavaScript pa usar la zona de pruebes de la API.", "apisandbox-api-disabled": "La API ta desactivada nesti sitiu.", "apisandbox-intro": "Usa esta páxina pa esperimentar cola API de serviciu web de MediaWiki.\nConsulta [[mw:API:Main page|la documentación de la API]] pa más detalles tocante al so usu. Exemplu: [//www.mediawiki.org/wiki/API#A_simple_example llamar al conteníu d'una Páxina principal]. Seleiciona una aición pa ver más exemplos.\n\nTen presente que, anque esto ye una zona de pruebes, les aiciones que faigas nesta páxina puen camudar la wiki.", "apisandbox-fullscreen": "Espander el panel", + "apisandbox-fullscreen-tooltip": "Espander el panel de la zona de pruebes pa llenar la pantalla del navegador.", + "apisandbox-unfullscreen": "Amosar la páxina", + "apisandbox-unfullscreen-tooltip": "Amenorgar el panel de la zona de pruebes pa que tean disponibles los enllaces de navegación de MediaWiki.", "apisandbox-submit": "Facer solicitú", "apisandbox-reset": "Llimpiar", + "apisandbox-retry": "Reintentar", + "apisandbox-loading": "Cargando la información pal módulu de la API «$1»...", + "apisandbox-load-error": "Asocedió un error al cargar la información del módulu de la API «$1»: $2", + "apisandbox-no-parameters": "Esti módulu de la API nun tien parámetros.", + "apisandbox-helpurls": "Enllaces d'ayuda", "apisandbox-examples": "Exemplos", + "apisandbox-dynamic-parameters": "Más parámetros", + "apisandbox-dynamic-parameters-add-label": "Amestar parámetru:", + "apisandbox-dynamic-parameters-add-placeholder": "Nome del parámetru", + "apisandbox-dynamic-error-exists": "Yá existe un parámetru llamáu «$1».", + "apisandbox-deprecated-parameters": "Parámetros anticuaos", + "apisandbox-fetch-token": "Rellenu automáticu del pase", + "apisandbox-submit-invalid-fields-title": "Dalgunos campos son inválidos", + "apisandbox-submit-invalid-fields-message": "Por favor, igua los campos señalaos y téntalo nuevamente.", "apisandbox-results": "Resultaos", + "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-url-label": "URL 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».", + "apisandbox-alert-page": "Los campos d'esta páxina nun son válidos.", + "apisandbox-alert-field": "El valor d'esti campu nun ye válidu.", "booksources": "Fontes de llibros", "booksources-search-legend": "Busca de fontes de llibros", "booksources-search": "Buscar", @@ -1782,8 +1813,6 @@ "categories-submit": "Amosar", "categoriespagetext": "{{PLURAL:$1|La siguiente categoría contién|Les siguientes categoríes contienen}} páxines o ficheros multimedia.\nLes [[Special:UnusedCategories|categoríes nun usaes]] nun s'amuesen equí.\nVer tamién les [[Special:WantedCategories|categoríes más buscaes]].", "categoriesfrom": "Amosar categoríes qu'emprimen por:", - "special-categories-sort-count": "ordenar por tamañu", - "special-categories-sort-abc": "ordenar alfabéticamente", "deletedcontributions": "Contribuciones d'usuariu esborraes", "deletedcontributions-title": "Contribuciones d'usuariu desaniciaes", "sp-deletedcontributions-contribs": "collaboraciones", @@ -1951,7 +1980,7 @@ "delete-toobig": "Esta páxina tien un historial d'ediciones grande, más de $1 {{PLURAL:$1|revisión|revisiones}}.\nRestrinxóse l'esborráu d'estes páxines pa evitar perturbaciones accidentales de {{SITENAME}}.", "delete-warning-toobig": "Esta páxina tien un historial d'ediciones grande, más de $1 {{PLURAL:$1|revisión|revisiones}}.\nEsborralu pue perturbar les operaciones de la base de datos de {{SITENAME}};\nobra con precaución.", "deleteprotected": "Nun pues desaniciar esta páxina porque ta protexida.", - "deleting-backlinks-warning": "'''Avisu:''' [[Special:WhatLinksHere/{{FULLPAGENAME}}|Otres páxines]] enllacen a, o trescluyen de, la páxina que ta a piques de desaniciar.", + "deleting-backlinks-warning": "Avisu: [[Special:WhatLinksHere/{{FULLPAGENAME}}|Otres páxines]] enllacen a, o trescluyen de, la páxina que tas a piques de desaniciar.", "rollback": "Revertir ediciones", "rollbacklink": "revertir", "rollbacklinkcount": "revertir $1 {{PLURAL:$1|edición|ediciones}}", @@ -1970,12 +1999,14 @@ "changecontentmodel-title-label": "Títulu de la páxina", "changecontentmodel-model-label": "Nuevu modelu de conteníu", "changecontentmodel-reason-label": "Motivu:", + "changecontentmodel-submit": "Camudar", "changecontentmodel-success-title": "Cambióse'l modelu de conteníu", "changecontentmodel-success-text": "Cambióse'l tipu de conteníu de [[:$1]].", "changecontentmodel-cannot-convert": "El conteníu de [[:$1]] nun puede convertise a un tipu de $2.", "changecontentmodel-nodirectediting": "El modelu de conteníu $1 nun tien encontu pa edición direuta", "log-name-contentmodel": "Rexistru de cambios del modelu de conteníu", "log-description-contentmodel": "Socesos rellacionaos colos modelos de conteníu d'una páxina", + "logentry-contentmodel-new": "$1 {{GENDER:$2|creó}} la páxina $3 usando un modelu de conteníu non predetermináu «$5»", "logentry-contentmodel-change": "$1 {{GENDER:$2|cambió}}'l modelu de conteníu de la páxina $3 dende «$4» a «$5»", "logentry-contentmodel-change-revertlink": "revertir", "logentry-contentmodel-change-revert": "revertir", @@ -2158,6 +2189,7 @@ "ipb-unblock": "Desbloquiar un nome d'usuariu o direición IP", "ipb-blocklist": "Ver los bloqueos esistentes", "ipb-blocklist-contribs": "Collaboraciones de {{GENDER:$1|$1}}", + "ipb-blocklist-duration-left": "falten $1", "unblockip": "Desbloquiar usuariu", "unblockiptext": "Usa'l formulariu d'abaxo pa restablecer l'accesu d'escritura a una direicion IP o a un nome d'usuariu previamente bloquiáu.", "ipusubmit": "Desaniciar esti bloquéu", @@ -2382,7 +2414,7 @@ "import-nonewrevisions": "Nun s'importó denguna revision (o yá taben toes presentes, o se saltaron por errores).", "xml-error-string": "$1 na llinia $2, col $3 (byte $4): $5", "import-upload": "Xubir datos XML", - "import-token-mismatch": "Perdiéronse los datos de la sesión. Intentalo otra vuelta.", + "import-token-mismatch": "Perda de datos de la sesión.\n\nSeique zarróse la sesión. Comprueba si tienes abierta la sesión y vuelve a intentalo.\nSi inda nun funcionara, tenta [[Special:UserLogout|colar]] y volver a aniciar sesión y comprueba que'l restolador permite les cookies d'esti sitiu.", "import-invalid-interwiki": "Nun se puede importar d'esi wiki.", "import-error-edit": "La páxina «$1» nun s'importó porque nun tienes permisu pa editala.", "import-error-create": "La páxina «$1» nun s'importó porque nun tienes permisu pa creala.", @@ -2399,11 +2431,7 @@ "import-logentry-upload-detail": "$1 {{PLURAL:$1|revisión importada|revisiones importaes}}", "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|revisión importada|revisiones importaes}} dende $2", "javascripttest": "Prueba de JavaScript", - "javascripttest-pagetext-noframework": "Esta páxina ta acutada pa executar pruebes de javascript.", - "javascripttest-pagetext-unknownframework": "L'entornu de pruebes «$1» ye desconocíu.", "javascripttest-pagetext-unknownaction": "Aición desconocida «$1».", - "javascripttest-pagetext-frameworks": "Escueyi un de los siguientes entornos de pruebes: $1", - "javascripttest-pagetext-skins": "Escueyi una apariencia pa executar les pruebes:", "javascripttest-qunit-intro": "Ver la [$1 documentación de les pruebes] en mediawiki.org.", "tooltip-pt-userpage": "La to páxina d'{{GENDER:|usuariu|usuaria}}", "tooltip-pt-anonuserpage": "La páxina d'usuariu de la IP cola que tas editando", @@ -2670,8 +2698,8 @@ "exif-colorspace": "Espaciu de color", "exif-componentsconfiguration": "Significáu de cada componente", "exif-compressedbitsperpixel": "Mou de compresión d'imaxe", - "exif-pixelydimension": "Anchor d'imaxe", - "exif-pixelxdimension": "Altor d'imaxe", + "exif-pixelxdimension": "Anchor d'imaxe", + "exif-pixelydimension": "Altor d'imaxe", "exif-usercomment": "Comentarios del usuariu", "exif-relatedsoundfile": "Archivu d'audiu rellacionáu", "exif-datetimeoriginal": "Data y hora de xeneración de los datos", @@ -3116,7 +3144,6 @@ "version-libraries-description": "Descripción", "version-libraries-authors": "Autores", "redirect": "Redireición por ID del ficheru, usuariu, páxina, revisión o rexistru", - "redirect-legend": "Redirixir a un ficheru o una páxina", "redirect-summary": "Esta páxina especial redirixe a un ficheru (dando'l so nome), una páxina (dando una ID de revisión o de páxina), una páxina d'usuariu (dando un númberu d'ID d'usuariu) o una entrada del rexistru (dando la ID del rexistru). Usu: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/page/64308]], [[{{#Special:Redirect}}/revision/328429]], [[{{#Special:Redirect}}/user/101]], o [[{{#Special:Redirect}}/logid/186]].", "redirect-submit": "Dir", "redirect-lookup": "Buscar:", @@ -3129,7 +3156,6 @@ "redirect-not-exists": "Nun s'alcontró'l valor", "fileduplicatesearch": "Buscar archivos duplicaos", "fileduplicatesearch-summary": "Busca archivos duplicaos basándose nos sos valores fragmentarios.", - "fileduplicatesearch-legend": "Buscar duplicaos", "fileduplicatesearch-filename": "Nome del ficheru:", "fileduplicatesearch-submit": "Buscar", "fileduplicatesearch-info": "$1 × $2 píxeles
Tamañu del archivu: $3
Triba MIME: $4", @@ -3201,7 +3227,7 @@ "tags-delete-not-allowed": "Les etiquetes definíes por una estensión nun puen desaniciase mentanto la estensión nun lo permita específicamente.", "tags-delete-not-found": "La etiqueta «$1» nun esiste.", "tags-delete-too-many-uses": "La etiqueta «$1» aplícase a más {{PLURAL:$2|d'una revisión|de $2 revisiones}}, lo que quier dicir que nun pue desaniciase.", - "tags-delete-warnings-after-delete": "La etiqueta «$1» desanicióse correutamente, pero {{PLURAL:$2|alcontróse'l siguiente avisu|alcontráronse los siguientes avisos}}:", + "tags-delete-warnings-after-delete": "Desanicióse la etiqueta «$1», pero {{PLURAL:$2|alcontróse'l siguiente avisu|alcontráronse los siguientes avisos}}:", "tags-activate-title": "Activar etiqueta", "tags-activate-question": "Tas a piques d'activar la etiqueta «$1».", "tags-activate-reason": "Motivu:", @@ -3230,7 +3256,7 @@ "tags-edit-revision-legend": "Amestar o desaniciar etiquetes {{PLURAL:$1|d'esta revisión|de toles $1 revisiones}}", "tags-edit-logentry-legend": "Amestar o desaniciar etiquetes {{PLURAL:$1|d'esta entrada del rexistru|de les $1 entraes del rexistru}}", "tags-edit-existing-tags": "Etiquetes esistentes:", - "tags-edit-existing-tags-none": "''Nenguna''", + "tags-edit-existing-tags-none": "Nenguna", "tags-edit-new-tags": "Etiquetes nueves:", "tags-edit-add": "Amestar estes etiquetes:", "tags-edit-remove": "Desaniciar estes etiquetes:", @@ -3240,7 +3266,7 @@ "tags-edit-reason": "Motivu:", "tags-edit-revision-submit": "Aplicar los cambios a {{PLURAL:$1|esta revisión|$1 revisiones}}", "tags-edit-logentry-submit": "Aplicar los cambios a {{PLURAL:$1|esta entrada del rexistru|$1 entraes del rexistru}}", - "tags-edit-success": "Los cambios aplicáronse correutamente.", + "tags-edit-success": "Aplicáronse los cambios.", "tags-edit-failure": "Nun pudieron aplicase los cambios:\n$1", "tags-edit-nooldid-title": "Revisión de destín inválida", "tags-edit-nooldid-text": "O nun conseñasti una revisión sobre la qu'aplicar esta función, o la revisión conseñada nun esiste.", @@ -3330,7 +3356,7 @@ "logentry-protect-protect-cascade": "$1 {{GENDER:$2|protexó}} a $3 $4 [en cascada]", "logentry-protect-modify": "$1 {{GENDER:$2|camudó}} el nivel de protección de $3 $4", "logentry-protect-modify-cascade": "$1 {{GENDER:$2|camudó}} el nivel de protección de $3 $4 [en cascada]", - "logentry-rights-rights": "$1 {{GENDER:$2|camudó}} la pertenencia a grupos de $3 dende $4 a $5", + "logentry-rights-rights": "$1 {{GENDER:$2|camudó}} la pertenencia a grupos de {{GENDER:$3|$3}} dende $4 a $5", "logentry-rights-rights-legacy": "$1 {{GENDER:$2|camudó}} la pertenencia a grupos de $3", "logentry-rights-autopromote": "$1 {{GENDER:$2|promocionó}} automáticamente de $4 a $5", "logentry-upload-upload": "$1 {{GENDER:$2|xubió}} $3", @@ -3423,6 +3449,7 @@ "api-error-unknownerror": "Fallu desconocíu: «$1».", "api-error-uploaddisabled": "Les xubíes tan desactivaes nesta wiki.", "api-error-verification-error": "Esti ficheru pudiera tar corrompíu, o tien una estensión incorreuta.", + "api-error-was-deleted": "Anteriormente xubióse y desanicióse dempués un ficheru con esti nome.", "duration-seconds": "$1 {{PLURAL:$1|segundu|segundos}}", "duration-minutes": "$1 {{PLURAL:$1|minutu|minutos}}", "duration-hours": "$1 {{PLURAL:$1|hora|hores}}", @@ -3459,7 +3486,7 @@ "expand_templates_generate_xml": "Amosar l'árbole d'análisis sintáuticu XML", "expand_templates_generate_rawhtml": "Ver el HTML en bruto", "expand_templates_preview": "Vista previa", - "expand_templates_preview_fail_html": "Como {{SITENAME}} tien activáu el códigu HTML puru y hebo una perda de datos de la sesión, la vista previa ta tapecida como precaución escontra ataques de JavaScript.\n\nSi esti ye un intentu llexítimu d'accesu a la vista previa, vuelvi a intentalo.\nSi inda nun funciona, intenta [[Special:UserLogout|salir]] y volver a entrar na to cuenta.", + "expand_templates_preview_fail_html": "Como {{SITENAME}} tien activáu el códigu HTML puru y hebo una perda de datos de la sesión, la vista previa ta tapecida como precaución escontra ataques de JavaScript.\n\nSi esti ye un intentu llexítimu d'accesu a la vista previa, vuelve a tentalo.\nSi inda nun funciona, tenta [[Special:UserLogout|salir]] y volver a entrar na to cuenta, y comprueba que'l to restolador permite les cookies d'esti sitiu.", "expand_templates_preview_fail_html_anon": "Como {{SITENAME}} tien activáu el códigu HTML puru y nun aniciasti sesión, la vista previa ta tapecida como precaución escontra ataques de JavaScript.\n\nSi esti ye un intentu llexítimu d'accesu a la vista previa, intenta [[Special:UserLogin|entrar]] y vuelvi a intentalo.", "expand_templates_input_missing": "Fai falta dar daqué de testu d'entrada.", "pagelanguage": "Cambiar la llingua de la páxina", @@ -3513,6 +3540,7 @@ "special-characters-group-ipa": "AFI", "special-characters-group-symbols": "Símbolos", "special-characters-group-greek": "Griegu", + "special-characters-group-greekextended": "Griegu estendíu", "special-characters-group-cyrillic": "Cirílicu", "special-characters-group-arabic": "Árabe", "special-characters-group-arabicextended": "Árabe estendíu", @@ -3540,5 +3568,25 @@ "sessionprovider-generic": "sesiones $1", "sessionprovider-mediawiki-session-cookiesessionprovider": "sesiones basaes en cookies", "sessionprovider-nocookies": "Les cookies puen tar desactivaes. Asegúrate de tener activaes les cookies y vuelve a principiar.", - "randomrootpage": "Páxina raíz al debalu" + "randomrootpage": "Páxina raíz al debalu", + "log-action-filter-block": "Tipu de bloquéu:", + "log-action-filter-delete": "Tipu de desaniciu:", + "log-action-filter-patrol": "Tipu de patrulla:", + "log-action-filter-protect": "Tipu de proteición:", + "log-action-filter-upload": "Tipu de carga:", + "log-action-filter-all": "Too", + "log-action-filter-block-block": "Bloquéu", + "log-action-filter-block-reblock": "Cambiu de bloquéu", + "log-action-filter-block-unblock": "Desbloquéu", + "log-action-filter-delete-delete": "Desaniciu de páxines", + "log-action-filter-delete-restore": "Restauración de páxines", + "log-action-filter-delete-event": "Desaniciu de rexistros", + "log-action-filter-delete-revision": "Desaniciu de revisión", + "log-action-filter-patrol-patrol": "Patrulláu manual", + "log-action-filter-patrol-autopatrol": "Patrulláu automáticu", + "log-action-filter-protect-protect": "Proteición", + "log-action-filter-protect-modify": "Cambiu na proteición", + "log-action-filter-protect-unprotect": "Desproteición", + "log-action-filter-upload-upload": "Nueva carga", + "log-action-filter-upload-overwrite": "Recargar" } diff --git a/languages/i18n/avk.json b/languages/i18n/avk.json index f4d4d28ec7..71e16398da 100644 --- a/languages/i18n/avk.json +++ b/languages/i18n/avk.json @@ -996,8 +996,6 @@ "categories": "Bulomeem", "categoriespagetext": "Radimiasa loma se moe wiki krulded.\n[[Special:UnusedCategories|Unused categories]] are not shown here.\nAlso see [[Special:WantedCategories|wanted categories]].", "categoriesfrom": "Nedira va loma tozakirafa gu :", - "special-categories-sort-count": "Otafa mubera", - "special-categories-sort-abc": "Abavafa mubera", "deletedcontributions": "Sulayan favesikaf webeks", "linksearch": "Divafi gluyasiki", "linksearch-ns": "Yoltxo :", @@ -1472,8 +1470,8 @@ "exif-exifversion": "Version exif", "exif-colorspace": "Ksevaxo", "exif-compressedbitsperpixel": "Ewavaraxivaracave", - "exif-pixelydimension": "Mante ke enafa ewava", - "exif-pixelxdimension": "Ontine ke enafa ewava", + "exif-pixelxdimension": "Mante ke enafa ewava", + "exif-pixelydimension": "Ontine ke enafa ewava", "exif-usercomment": "Favesikaf sebuks", "exif-relatedsoundfile": "Fichier audio lié", "exif-datetimeoriginal": "Viel is gemelt ke nasbara va origeem", @@ -1664,7 +1662,6 @@ "version-software-product": "Warzeks", "version-software-version": "Siatos", "fileduplicatesearch": "Aneyara va jontolaf iyeltak", - "fileduplicatesearch-legend": "Aneyara va jontolaca", "fileduplicatesearch-filename": "Iyeltakyolt :", "fileduplicatesearch-submit": "Aneyara", "fileduplicatesearch-result-1": "\"$1\" iyeltak va miltafa jontoloca me digir.", diff --git a/languages/i18n/awa.json b/languages/i18n/awa.json index 6cb75d2895..8cab3c967b 100644 --- a/languages/i18n/awa.json +++ b/languages/i18n/awa.json @@ -1601,8 +1601,6 @@ "categories": "श्रेणी", "categoriespagetext": "निम्नोक्त {{PLURAL:$1|श्रेणी|श्रेणि}} मा पन्ना या मीडिया है।\nजवन श्रेणिन् कय [[Special:UnusedCategories|अप्रयुक्त श्रेणि]] यहँ नाइ देखाई गा हैं।\n[[Special:WantedCategories|वांछित श्रेणि]] भी देखा जाय।", "categoriesfrom": "इ अक्षर से शुरु होय वाला श्रेणी देखावा जाय:", - "special-categories-sort-count": "संख्या कय अनुसार क्रमांकित करा जाय", - "special-categories-sort-abc": "वर्णानुक्रम कय अनुसार देखावा जाय", "deletedcontributions": "हटावल सदस्य योगदान", "deletedcontributions-title": "हटावल सदस्य योगदान", "sp-deletedcontributions-contribs": "योगदान", @@ -2156,11 +2154,7 @@ "import-logentry-upload-detail": "$1 अवतरण आयात {{PLURAL:$1|किया गया|किये गए}}", "import-logentry-interwiki-detail": "$2 से $1 अवतरण आयात {{PLURAL:$1|किया गया|किये गए}}", "javascripttest": "जावास्क्रिप्ट परीक्षण", - "javascripttest-pagetext-noframework": "यह पृष्ठ जावास्क्रिप्ट परीक्षण चलाने के लिए है।", - "javascripttest-pagetext-unknownframework": "अज्ञात परीक्षण ढाँचा \"$1\"", "javascripttest-pagetext-unknownaction": "अज्ञात काम \"$1\".", - "javascripttest-pagetext-frameworks": "कृपया निम्न परीक्षण ढाँचों में से एक चुनें: $1", - "javascripttest-pagetext-skins": "परीक्षण करने के लिए त्वचा चुनें:", "javascripttest-qunit-intro": "mediawiki.org पे [$1 परीक्षण कय प्रलेखन] देखा जाय।", "tooltip-pt-userpage": "आप कय सदस्य पन्ना", "tooltip-pt-anonuserpage": "आप जिस आईपी से बदलाव कर रहें हैं उसका सदस्य पन्ना निचे है", @@ -2406,8 +2400,8 @@ "exif-colorspace": "रंग स्थान", "exif-componentsconfiguration": "हर घटक कय मतलब", "exif-compressedbitsperpixel": "चित्र कॉम्प्रेशन मोड", - "exif-pixelydimension": "छवि चौड़ाई", - "exif-pixelxdimension": "छवि ऊँचाई", + "exif-pixelxdimension": "छवि चौड़ाई", + "exif-pixelydimension": "छवि ऊँचाई", "exif-usercomment": "सदस्य टिप्पणी", "exif-relatedsoundfile": "संबंधित ध्वनी फ़ाईल", "exif-datetimeoriginal": "डेटा सञ्चालन कय मिति अव समय", @@ -2835,7 +2829,6 @@ "version-libraries": "इन्स्टाल करल लाइब्रेरी", "version-libraries-library": "लाइब्रेरी", "version-libraries-version": "संस्करण", - "redirect-legend": "फ़ाइल अथवा पृष्ठ को पुनर्प्रेषण", "redirect-summary": "यह विशेष पृष्ठ फ़ाइलनाम प्रदान करने पर फ़ाइल नाम को, पृष्ठ आइ॰दी अथवा अवतरण आइ॰दी देने पर पृष्ठ को, और सदस्य आइ॰दी देने पर सदस्य पृष्ठ को पुनर्प्रेषित करता है। उदाहरण: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/page/64308]], [[{{#Special:Redirect}}/revision/328429]], या [[{{#Special:Redirect}}/user/101]]।", "redirect-submit": "जावा जाय", "redirect-lookup": "ढूँढा जाय:", @@ -2847,7 +2840,6 @@ "redirect-not-exists": "मुल्य नाइ मिला", "fileduplicatesearch": "डुप्लिकेट फाइल खोजा जाय", "fileduplicatesearch-summary": "हैश वैल्यू कय अनुसार डुप्लिकेट फाइल खोजा जाय ।", - "fileduplicatesearch-legend": "डुप्लिकेट खोजा जाय", "fileduplicatesearch-filename": "फ़ाइल कय नाँव", "fileduplicatesearch-submit": "खोजा जाय", "fileduplicatesearch-info": "$1 × $2 पिक्सेल
फाइल आकार: $3
MIME प्रकार: $4", diff --git a/languages/i18n/az.json b/languages/i18n/az.json index 5a68e59539..5b1afd54c3 100644 --- a/languages/i18n/az.json +++ b/languages/i18n/az.json @@ -1342,8 +1342,6 @@ "allpages-hide-redirects": "Yönləndirmələri gizlət", "categories": "Kateqoriyalar", "categoriespagetext": "Aşağıdakı {{PLURAL:$1|kateqoriyada|kateqoriyalarda}} səhifələr, yaxud media-fayllar var.\n[[Special:UnusedCategories|İstifadə olunmayan kateqoriyalar]] burada göstərilməyib.\nHəmçinin, [[Special:WantedCategories|tələb olunan kateqoriyalara]] baxın.", - "special-categories-sort-count": "miqdara görə tənzimlə", - "special-categories-sort-abc": "əlifba sırası ilə düz", "deletedcontributions": "Silinmiş istifadəçi fəaliyyətləri", "deletedcontributions-title": "Silinmiş istifadəçi fəaliyyətləri", "sp-deletedcontributions-contribs": "fəaliyyət", @@ -2003,8 +2001,8 @@ "exif-copyright": "Sahibinin müəlliflik hüququ", "exif-exifversion": "Exif versiyası", "exif-colorspace": "Rəng sahəsi", - "exif-pixelydimension": "Şəkilin eni", - "exif-pixelxdimension": "Şəkilin hündürlüyü", + "exif-pixelxdimension": "Şəkilin eni", + "exif-pixelydimension": "Şəkilin hündürlüyü", "exif-usercomment": "İstifadəçi şərhi", "exif-datetimeoriginal": "Orijinal tarix və vaxt", "exif-datetimedigitized": "Tarix və vaxt rəqəmləşdirilir", @@ -2339,7 +2337,6 @@ "redirect-user": "İstifadəçi ID-si", "redirect-page": "Səhifə ID-si", "fileduplicatesearch": "Dublikat fayl axtarışı", - "fileduplicatesearch-legend": "Dublikatı axtar", "fileduplicatesearch-filename": "Fayl adı:", "fileduplicatesearch-submit": "Axtar", "fileduplicatesearch-result-1": "\"$1\" faylı hər hansı eyni dublikata malik deyil.", diff --git a/languages/i18n/azb.json b/languages/i18n/azb.json index f8cc340ef8..ab8571afa2 100644 --- a/languages/i18n/azb.json +++ b/languages/i18n/azb.json @@ -496,6 +496,9 @@ "resetpass_submit": "رمز یارادین و گیریش ائدین", "changepassword-success": "رمزینیز باشاری‌لا دَییشدیرلدی!", "changepassword-throttled": "سیزین چوخ گیریش چالیشماغینیز اولوب‌دور.\nلوطفاً یئنی‌دن چالیشماق‌دان اؤنجه $1 دؤزون.", + "botpasswords-label-create": "یارات", + "botpasswords-label-cancel": "وازگئچ", + "botpasswords-label-delete": "سیل", "resetpass_forbidden": "رمزلر دَییشیلمز", "resetpass-no-info": "بو صحیفه‌نی دوغرو گؤردوگونوز اوچون سیستمه گیرمه‌لیسینیز.", "resetpass-submit-loggedin": "رمزی دَییشدیر", @@ -592,7 +595,7 @@ "newarticle": "(یئنی)", "newarticletext": "مؤوجود اوْلمايان صحیفه‌‌يه اوْلان کئچیدی ایزله‌دینیز. \nآشاغیداکی ساحه‌‌يه مظمونونو يازاراق بۇ صحیفه‌‌نی '''سیز''' يارادا بیلرسینیز. (علاوه‌‌ معلومات اۆچون [$1 کؤمک صحیفه‌‌سینه] باخین). اگر بۇ صحیفه‌‌يه سهون گلمیسینیزسه ساده‌جه اوْلاراق براوزئرین '''گئری''' دۆيمه‌سینه وۇرون.", "anontalkpagetext": "''بو صحیفه قئیدیات‌دان کئچممیش و یا داخیل اولمامیش آنونیم ایستیفادچییه عایید موذاکیره صحیفه‌سی‌دیر.\nاونا گؤره بو ایستیفادچینی رقم‌لردن عبارت ایپ اونوانی ایله معین ائتمک مجبوریتیندییک.\nبئله ایپ اونوان بیر نئچه فرد طرفین‌دن ایستیفاده‌ده اولا بیلر.\nاگر سیز آنونیم ایستیفادچیسینیزسه و بو مئساژین سیزه عایید اولمادیغینی دوشونورسونوزسه، اوندا [[Special:UserLogin/signup|قئیدیات‌دان کئچین]] و یا [[Special:UserLogin|داخی اولون]].''", - "noarticletext": "ایندی بو صحیفه‌ده یازی یوخدور.\nسیز آیری صحیفه‌‌لرده [[Special:Search/{{PAGENAME}}|بو باشلیق اوچون آختارا بیلرسیز]]،\nیا دا [{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} ایلگیلی قئیدلری آختارا بیلرسیز]،\nیا دا [{{fullurl:{{FULLPAGENAME}}|action=edit}} بو صحیفه‌نی دَییشدیره بیلرسیز].", + "noarticletext": "ایندی بو صفحه‌ده یازی یوخدور.\nسیز آیری صفحه‌‌لرده [[Special:Search/{{PAGENAME}}|بو باشلیق اوچون آختارا بیلرسیز]]،\nیا دا [{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} باغلی قئیدلری آختارا بیلرسیز]،\nیا دا [{{fullurl:{{FULLPAGENAME}}|action=edit}} بو صفحه‌نی دَییشدیره بیلرسیز].", "noarticletext-nopermission": "بو صحیفه‌‌ ایندی بوشدور. \nباشقا صحیفه‌‌لرده عینی آددا صحیفه‌‌نی [[Special:Search/{{PAGENAME}}| آختار]], علاقه‌‌لی قئيدلره \n[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} باخا],\nو يا صحیفه‌‌نی [{{fullurl:{{FULLPAGENAME}}|action=edit}} redaktə] ائده بیلرسینیز.", "missing-revision": "«{{FULLPAGENAME}}» صحیفه‌سی اوچون $1 نومره‌لی نوسخه یوخدور.\n\nعموماُ بو ایشکال، واختی گئچمیش بیر باغلانتی ایله سیلینمیش بیر صحیفه‌یه گلنده، قاباغا گلر.\n[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} سیلمک سیاهی]‌سینده باشقا بیلگیلر اولا بیلر.", "userpage-userdoesnotexist": "«$1» ایستیفاده‌چی حسابی یارانماییب‌دیر.\nبو صحیفه‌نی یارادماق یوخسا دَییشدیرمگینه بیر ده باخین.", @@ -1176,6 +1179,7 @@ "rcshowhidemine": "منیم دَییشیکلریمی $1", "rcshowhidemine-show": "گؤستر", "rcshowhidemine-hide": "گیزلت", + "rcshowhidecategorization-hide": "گیزلت", "rclinks": "سون $2 گون عرضینده‌کی سون $1 ديَیشیکلیگی گؤستر
$3", "diff": "فرق", "hist": "گئچمیش", @@ -1622,8 +1626,6 @@ "categories": "بؤلمه‌لر", "categoriespagetext": "آشاغی‌داکی {{PLURAL:$1|بولمه لردهٔ|بولمه لرده}} صحیفه‌لر، یاخود مئدیا-فایل‌لار وار.\n[[Special:UnusedCategories|ایستفاده اولمایان بولمه لر]] بورادا گؤستریلمه‌ییب.\nهم‌چی‌نین، [[Special:WantedCategories|لازیم اولان بولمه لره]] باخین.", "categoriesfrom": "شونونلا باشلایان بولمه لر باخ:", - "special-categories-sort-count": "میقدارا گؤره تنزیمله", - "special-categories-sort-abc": "الیفبا سیراسی ایله دوز", "deletedcontributions": "سیلینمیش ایستیفاده‌چی چالیشمالاری", "deletedcontributions-title": "سیلین‌میش ایستیفاده‌چی چالیشمالاری", "sp-deletedcontributions-contribs": "چالیشمالار", @@ -1775,7 +1777,7 @@ "deleting-backlinks-warning": "'''اخطار:''' بو سیلمگه قصدینیز اولان صفحه‌یه، [[Special:WhatLinksHere/{{FULLPAGENAME}}|باشقا صفحه‌لر]] باغلانتی وئریب یا اونو اؤزلرین‌ده ایشلدیب‌لر.", "rollback": "اوولکی نوسخه لر", "rollbacklink": "قایتار", - "rollbacklinkcount": "$1 دییشدیرمه‌نی قایتار", + "rollbacklinkcount": "{{PLURAL:$1|دییشدیرمه}}نی قایتار", "rollbacklinkcount-morethan": "$1-دن چوْخ دییشدیرمه‌نی قایتار", "rollbackfailed": "گئری قایتارما اوغورسوزدور", "cantrollback": "دییشدیر گئری قایتاریلا بیلمز؛ آخیرینجی دییشدیر صحیفه‌ده اولان یئگانه فالیت‌دیر.", @@ -1893,6 +1895,7 @@ "contributions": "{{GENDER:$1|ایشلدن}} چالیشمالاری", "contributions-title": "$1 ایشلدن چالیشمالاری", "mycontris": "چالیشمالار", + "anoncontribs": "چالیشمالار", "contribsub2": "{{GENDER:$3|$1}} اوچون ($2)", "contributions-userdoesnotexist": "«$1» ایشلدن حسابی ثبت اولونماییب‌دیر.", "nocontribs": "بو موشخصاتا اویغون دییشدیر تاپیلمادی", @@ -2196,19 +2199,15 @@ "import-logentry-upload-detail": "{{PLURAL:$1|بیر|$1}} نوسخه ایچری گتیریلدی", "import-logentry-interwiki-detail": "$2-دن {{PLURAL:$1|بیر|$1}} نوسخه ایچری گتیریلدی", "javascripttest": "جاوااسکریپت تِستی", - "javascripttest-pagetext-noframework": "بو صحیفه، جاوااسکریپت تِستلرینی ایشلدمگه ساخلانیلیب‌دیر.", - "javascripttest-pagetext-unknownframework": "تانینمامیش تِست ائتمه سیستِمی «$1».", "javascripttest-pagetext-unknownaction": "تانینمایان ایش «$1».", - "javascripttest-pagetext-frameworks": "لوطفاً بو تِست ائتمه سیستِملرین بیرینی سئچین: $1", - "javascripttest-pagetext-skins": "تِستلرین ایجرا ائتمک اوچون بیر قابیق سئچین:", "javascripttest-qunit-intro": "mediawiki.org-دا [$1 تِست ائتمه سندلندیرمه‌لری]نه باخین.", - "tooltip-pt-userpage": "ایشلدن صفحه‌نیز", + "tooltip-pt-userpage": "ایشلدن صفحه‌{{GENDER:|نیز}}", "tooltip-pt-anonuserpage": "سیز او آی‌پی آدرسیله دَییشیکلیک ائتدیگینیز ایستیفاده‌چی صحیفه‌سی", - "tooltip-pt-mytalk": "دانیشیق صفحه‌نیز", + "tooltip-pt-mytalk": "{{GENDER:|سیزین}} دانیشیق صفحه‌نیز", "tooltip-pt-anontalk": "بو آی‌پی آدرسینین دَییشیکلیکلرینه گؤره دانیشیق", - "tooltip-pt-preferences": "ترجیحلرینیز", + "tooltip-pt-preferences": "{{GENDER:|سیزین}} ترجیحلرینیز", "tooltip-pt-watchlist": "دییشمکلرینی ایزله‌دیگینیز صفحه‌لرین سیاهی‌سی", - "tooltip-pt-mycontris": "سیزین چالیشمالارینیزین لیستی", + "tooltip-pt-mycontris": "{{GENDER:|سیزین}} چالیشمالارینیزین لیستی", "tooltip-pt-login": "گیریش ائتمه‌یینیز توصیه اولونور؛ اما گرکلی دئییل", "tooltip-pt-logout": "چیخیش", "tooltip-pt-createaccount": "سیزدن دعوت اولونور ایشلدن حسابی آچیب و گیریش ائده‌سیز؛ آنجاق حساب یاراتماق ایستگه باغلی‌دیر", @@ -2239,7 +2238,7 @@ "tooltip-t-recentchangeslinked": "بو صفحه‌دن باغلانان صفحه‌لرین سون دَییشیکلیک‌لری", "tooltip-feed-rss": "بو صحیفه‌‌ اوچون آراس‌اس يايیمی", "tooltip-feed-atom": "بو صحیفه‌‌ اوچون آتوم يايیمی", - "tooltip-t-contributions": "بو ایستیفاده‌چی‌نین وئردیگی دییشیکلر سیاهی‌سی", + "tooltip-t-contributions": "{{GENDER:$1|بۇ ایشلدنین}} وئردیگی دییشیکلر لیستی", "tooltip-t-emailuser": "بو ایستیفاده‌چی‌یه بیر ایمیل گؤندر", "tooltip-t-info": "بو صفحه‌یه گؤره آرتیق بیلگی", "tooltip-t-upload": "فایل‌لار یوکله", @@ -2445,8 +2444,8 @@ "exif-colorspace": "رنگ ساحه‌سی", "exif-componentsconfiguration": "هر بیلشنین معناسی", "exif-compressedbitsperpixel": "شکیل سیخیشدیرما فورماتی", - "exif-pixelydimension": "شکیلین انی", - "exif-pixelxdimension": "شکیلین اوزوناسی", + "exif-pixelxdimension": "شکیلین انی", + "exif-pixelydimension": "شکیلین اوزوناسی", "exif-usercomment": "استفادچی شرحی", "exif-relatedsoundfile": "حاقیندا سس لی فایل", "exif-datetimeoriginal": "اورژینال یاراتما زامانی", @@ -2874,7 +2873,6 @@ "version-libraries-description": "آچیقلاما", "version-libraries-authors": "یازارلار", "redirect": "فایل، ایستیفاده‌چی، صفحه یا نوسخه آی‌دی-سی ایله یول‌لاندیرما", - "redirect-legend": "بیر فایل یا صحیفه‌یه یول‌لاندیرما", "redirect-summary": "بو اؤزل صحیفه، بیر فایلا (فایل آدی ایله)، صفحه‌یه (نوسخه یا صفحه آی‌دی-سی ایله) یا ایستیفاده‌چی صفحه‌سینه (ایستیفاده‌چی نومره آی‌دی-سی ایله) یول‌لاندیریر. ایشلتمک: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/page/64308]]، [[{{#Special:Redirect}}/revision/328429]]، یا [[{{#Special:Redirect}}/user/101]].", "redirect-submit": "گئت", "redirect-lookup": "آختار:", @@ -2886,7 +2884,6 @@ "redirect-not-exists": "دَگَر تاپیلمادی", "fileduplicatesearch": "دوبلیکات فايل آختاریشی", "fileduplicatesearch-summary": "تعمین ائتمک ديَری دؤشه‌مه‌سینده بنزر فايللاری آختار.", - "fileduplicatesearch-legend": "Dublikatı axtar", "fileduplicatesearch-filename": "فايل آدی:", "fileduplicatesearch-submit": "آختار", "fileduplicatesearch-info": "$1 × $2 پیکسِل
فایل اؤلچوسو: $3
MIME نوعو: $4", diff --git a/languages/i18n/ba.json b/languages/i18n/ba.json index 72e0a1671a..7fc7f1cfe8 100644 --- a/languages/i18n/ba.json +++ b/languages/i18n/ba.json @@ -18,20 +18,27 @@ "아라", "Ләйсән", "Macofe", - "Азат Хәлилов" + "Азат Хәлилов", + "Айбикә", + "З. ӘЙЛЕ", + "Янмурза Баки", + "Айсар", + "Lizalizaufa", + "Кутлубаева Кунсулу Закиевна", + "Вильданова Гюзель" ] }, "tog-underline": "Һылтанмалар аҫтына һыҙыу:", - "tog-hideminor": "Әһәмиәте ҙур булмаған төҙәтеүҙәрҙе һуңғы үҙгәртеүҙәр исемлегендә күрһәтмәҫкә", + "tog-hideminor": "Һуңғы үҙгәртеүҙәрҙең бәләкәй төҙәтеүҙәрен күрһәтмәҫкә", "tog-hidepatrolled": "Һуңғы үҙгәртеүҙәр исемлегендә тикшерелгән үҙгәртеүҙәрҙе йәшер", - "tog-newpageshidepatrolled": "Яңы биттәр исемлегендә тикшерелгән үҙгәртеүҙәрҙе йәшер", - "tog-hidecategorization": "Биттәр категоризацияһын йәшереү", + "tog-newpageshidepatrolled": "Тикшерелгән биттәрҙе яңы биттәр теҙмәһендә күрһәтмәҫкә", + "tog-hidecategorization": "Биттәрҙең категоризацияһын йәшерергә", "tog-extendwatchlist": "Барлыҡ үҙгәртеүҙәрҙе үҙ эсенә алған, киңәйтелгән күҙәтеү исемлеге", "tog-usenewrc": "Һуңғы төҙәтеүҙәр һәм күҙәтеү исемлегендәге үҙгәрештәрҙе төркөмдәргә бүлергә", - "tog-numberheadings": "Башисемдәрҙе автоматик рәүештә номерланһын", + "tog-numberheadings": "Атамалар автоматик рәүештә номерланһын", "tog-showtoolbar": "Мөхәррирләгән ваҡытта өҫкө ҡоралдар панелен күрһәтергә (JavaScript кәрәк)", "tog-editondblclick": "Биттәрҙе ике сиртеү менән мөхәррирләргә", - "tog-editsectiononrightclick": "Бүлектәрҙе исемдәренә төрткөнөң уң яғына сиртеп үҙгәртергә", + "tog-editsectiononrightclick": "Бүлектәрҙе исемдәрен төрткөнөң уң яғына баҫып үҙгәртергә", "tog-watchcreations": "Мин төҙөгән биттәрҙе һәм күсергән файлдарҙы күҙәтеү исемлегенә өҫтәргә", "tog-watchdefault": "Мин үҙгәрткән биттәр һәм файлдар аңлатмаһын күҙәтеү исемлегенә өҫтәргә", "tog-watchmoves": "Мин исемен үҙгәрткән биттәрҙе һәм файлдарҙы күҙәтеү исемлегенә өҫтәргә", @@ -159,7 +166,6 @@ "moredotdotdot": "Дауамы...", "morenotlisted": "Был исемлек тулы түгел", "mypage": "Бит", - "anonuserpage": "Билдәһеҙ ҡатнашыусы", "mytalk": "Әңгәмә", "anontalk": "Әңгәмә", "navigation": "Төп йүнәлештәр", @@ -234,7 +240,7 @@ "jumpto": "Унда күсергә:", "jumptonavigation": "төп йүнәлештәр", "jumptosearch": "эҙләү", - "view-pool-error": "Ғәфү итегеҙ, хәҙерге ваҡытта серверҙар артыҡ тейәлгән.\nБыл битте ҡарарға теләүселәр бик күп.\nЗинһар был биткә һуңырак кереп ҡарағыҙ.\n\n$1", + "view-pool-error": "Ғәфү итегеҙ, хәҙерге ваҡытта серверҙар артыҡ тейәлгән.\nБыл битте ҡарарға теләүселәр бик күп.\nБыл биткә һуңғарак кереп ҡарағыҙ.\n\n$1", "generic-pool-error": "Ғәфү итегеҙ, хәҙерге ваҡытта серверҙар көсөргәнешле эшләй.\nБыл болды ҡарарға теләүселәр бик күп.\nЗинһар, бер ни тиклем көтөгөҙ һәм һуңыраҡ тағы мөрәжәғәт итеп ҡарағыҙ.", "pool-timeout": "Блоклауҙы көтөү ваҡыты үтте", "pool-queuefull": "Һорауҙар сираты тулы", @@ -326,7 +332,7 @@ "readonly": "Мәғлүмәттәр базаһы бикләнгән", "enterlockreason": "Ябылыу сәбәбен һәм ваҡытын белдерегеҙ.", "readonlytext": "Яңы мәҡәләләр өҫтәү һәм мәғлүмәттәр базаһындағы башҡа үҙгәртеүҙәр хәҙер тыйылған. Был планлы хеҙмәтләндереү сәбәпле булыуы мөмкин, аҙаҡтан ғәҙәти хәлгә ҡайтасаҡ.\n\nЯбыусы хаким ҡалдырған аңлатма:\n$1", - "missing-article": "Мәғлүмәттәр базаһында «$1» $2 битенең һоралған тексты табылманы.\n\nБыл, ғәҙәттә, иҫкергән һылтанма буйынса юйылған биттең үҙгәртеү тарихына күскәндә килеп сыға.\n\nӘгәр хатаның сәбәбе ул булмаһа, тимәк һеҙ программала хата тапҡанһығыҙ.\nБыл турала зинһар URL-ды күрһәтеп, [[Special:ListUsers/sysop|хакимгә]] белдерегеҙ.", + "missing-article": "Мәғлүмәттәр базаһында «$1» $2 битенең һоралған тексы табылманы.\n\nБыл, ғәҙәттә, иҫкергән һылтанма буйынса юйылған биттең үҙгәртеү тарихына күскәндә килеп сыға.\n\nӘгәр хатаның сәбәбе ул булмаһа, тимәк, һеҙ программала хата тапҡанһығыҙ.\nБыл турала, URL-ды күрһәтеп, [[Special:ListUsers/sysop|хакимға]] белдерегеҙ.", "missingarticle-rev": "(версия № $1)", "missingarticle-diff": "(айырма: $1, $2)", "readonly_lag": "Өҫтәмә сервер төп сервер менән синхронлашҡанға тиклем мәғлүмәттәр базаһы автоматик рәүештә үҙгәрештәргә ҡаршы ябылған.", @@ -413,7 +419,7 @@ "cannotloginnow-title": "Хәҙер үк инеп булмай", "cannotloginnow-text": "$1 файҙалланған ваҡытта инергә ярамай", "yourdomainname": "Һеҙҙең домен", - "password-change-forbidden": "Был викила серһүҙегеҙҙе үҙгәртә алмайһығыҙ.", + "password-change-forbidden": "Был викиҙа серһүҙегеҙҙе үҙгәртә алмайһығыҙ.", "externaldberror": "Тышҡы мәғлүмәт базаһы менән танылғанда хата барлыҡҡа килде йәки тышҡы үҙ көйләүҙәрегеҙҙе үҙгәртер өсөн хоҡуҡтарығыҙ етәрле түгел.", "login": "Танылыу", "nav-login-createaccount": "Танылыу йәки теркәлеү", @@ -519,7 +525,7 @@ "botpasswords": "Роботтар серһүҙе.", "botpasswords-summary": "ПРобот пароле API иҫәп яҙмаһына логин һәм паролһыҙ инергә мөмкинлек бирә. Робот пароле менән ингәндә ҡулланыусы хоҡуғы сикләнгән булыуы мөмкин.\n\nНи өсөн икәнен белмәһәгеҙ, быны эшләмәүегеҙ яҡшыраҡ.", "botpasswords-disabled": "Роботтар серһүҙе һүндерелгән.", - "botpasswords-no-central-id": "Робот серһүҙен ғулланыу өсөн үҙәк иҫәп яҙмаһына инергә кәрәк.", + "botpasswords-no-central-id": "Робот серһүҙен ҡулланыу өсөн үҙәк иҫәп яҙмаһына инергә кәрәк.", "botpasswords-existing": "Робот серһүҙҙәре.", "botpasswords-createnew": "Робот өсөн яңы серһүҙ булдырырға.", "botpasswords-editexisting": "Робот серһүҙен мөхәррирләргә.", @@ -552,7 +558,7 @@ "resetpass-submit-loggedin": "Серһүҙҙе үҙгәртергә", "resetpass-submit-cancel": "Бөтөрөргә", "resetpass-wrong-oldpass": "Хаталы ваҡытлыса йәки ағымдағы серһүҙ.\nҺеҙ, бәлки, серһүҙегеҙҙе алмаштырғанһығыҙ йәки яңы серһүҙ һоратҡанһығыҙ.", - "resetpass-recycled": "Зинһар өсөн үҙегеҙҙекенән айырмалы серһүҙ һайлағыҙ.", + "resetpass-recycled": "Үҙегеҙҙекенән айырмалы серһүҙ һайлағыҙ.", "resetpass-temp-emailed": "Һеҙ электорон почта аша ебәрелгән ваҡытлыса серһүҙ менән индегеҙ. Инеүҙе башҡарыу өсөн яңы серһүҙ яҙығыҙ.", "resetpass-temp-password": "Ваҡытлыса серһүҙ", "resetpass-abort-generic": "Серһүҙҙе үҙгәртеү киңәйеү тарафынан өҙөлдө.", @@ -588,7 +594,7 @@ "changeemail-password": "{{SITENAME}} прокты өсөн серһүҙегеҙ:", "changeemail-submit": "Адресты үҙгәртергә", "changeemail-throttled": "Һеҙ системаға ҡат-ҡат танылырға тырыштығыҙ.\nТағы бер танылырҙан алда, зинһар, $1 көтөгөҙ.", - "changeemail-nochange": "Зинһар,башҡа яңы электрон почтағыҙ адресын яҙығыҙ.", + "changeemail-nochange": "Зинһар,башҡа яңы электрон почта адресын яҙығыҙ.", "resettokens": "Токендарҙы ташларға", "resettokens-text": "Иҫәп яҙмағыҙ менән бәйләнгән ҡайһы бер шәхси мәғлүмәттәрегеҙгә инеүгә юл асыусы токендарҙы ташлай алаһығыҙ.\n\nЯңылыштан уларҙы берәйһе менән уртаҡлашҡан йәки аккаунтығыҙ ваттырылған осраҡта быны эшләү мотлаҡ.", "resettokens-no-tokens": "Ташлар өсөн токендар юҡ.", @@ -718,17 +724,18 @@ "edit-already-exists": "Яңы бит яһап булмай.\nУл былай ҙа бар.", "defaultmessagetext": "Алдан билдәләнгән яҙма", "content-failed-to-parse": "$2 эстәлеге $1 төрөнә тура килмәй: $3.", - "invalid-content-data": "Ярамаған мәғлүмәт", + "invalid-content-data": "Тыйылған мәғлүмәт", "content-not-allowed-here": "\"$1\" эстәлеге [[$2]] бит өсөн ярамай", "editwarning-warning": "Икенсе биткә күсеү һеҙ индергән үҙгәрештәрҙең юғалыуына килтереүе мөмкин.\nӘгәр системала танылыу үтһәгеҙ, көйләүҙәрегеҙ битенең \"Мөхәррирләү\" бүлегендә был киҫәтеүҙе һүндерә алаһығыҙ.", - "editpage-notsupportedcontentformat-title": "Ярамаған эстәлек форматы", + "editpage-notsupportedcontentformat-title": "Йөкмәтке форматы асылмай", "editpage-notsupportedcontentformat-text": "$1 эстәлеге форматы $2 моделе форматы менән тап килмәй.", - "content-model-wikitext": "викияҙма", + "content-model-wikitext": "викитекст", "content-model-text": "ғәҙәти яҙма", "content-model-javascript": "JavaScript", "content-model-css": "CSS", - "content-json-empty-object": "Буш нәмә", + "content-json-empty-object": "Буш объект", "content-json-empty-array": "Буш массив", + "duplicate-args-warning": "Иғтибар: [[:$1]] берәүҙән артыҡ [[:$2]] параметры «$3» менән саҡыра. Һуңғы дәүмәл ҡулланыласаҡ.", "duplicate-args-category": "Ҡалыпты сығарғанда ҡабатланған аргументтарҙы ҡулланған биттәр", "duplicate-args-category-desc": "Түбәндәге ҡабатланған аргументтары {{foo|bar=1|bar=2}} или {{foo|bar|1=bar}} булған ҡалыпты сығарыу эстәлекле биттәр.", "expensive-parserfunction-warning": "Иғтибар: был биттә хәтерҙе күп ҡулланыусы функциялар ныҡ күп.\n\nҠуйылған сикләү: $2 {{PLURAL:$2|ҡулланыу}}, был осраҡта {{PLURAL:$1|$1 тапҡыр}} башҡарырға рөхсәт ителә.", @@ -866,8 +873,8 @@ "mergehistory-fail": "Бит тарихтарын берләштереп булманы, зирһар, бит һәм ваҡыт параметрҙарын яңынан тикшерегеҙ.", "mergehistory-fail-bad-timestamp": "Ваҡыт тамғаһы дөрөҫ түгел.", "mergehistory-fail-invalid-source": "Сығанаҡ бит дөрөҫ түгел.", - "mergehistory-fail-invalid-dest": "Маҡсат бите дҡрҡҫ түгел.", - "mergehistory-fail-no-change": "Бит таризы версиялары ҡушылманы. Зинһар өсөн, бит һәм ваҡыт параметрҙарын тикшерегеҙ.", + "mergehistory-fail-invalid-dest": "Маҡсат бите дөрөҫ түгел.", + "mergehistory-fail-no-change": "Бит тарихы версиялары ҡушылманы. Бит һәм ваҡыт параметрҙарын тикшерегеҙ.", "mergehistory-fail-permission": "Бит тарихын ҡушыу өсөн хоҡуҡтар етәрлек түгел.", "mergehistory-fail-self-merge": "Сығанаҡ һәм маҡсат бит бер төрлө.", "mergehistory-fail-timestamps-overlap": "Сығанаҡ версия ҡаплана йәки тәғәйенләнгән версиянан һуң килә.", @@ -892,7 +899,7 @@ "showhideselectedversions": "Һайланған версияларҙы күрһәтергә/йәшерергә", "editundo": "кире алыу", "diff-empty": "(айырмалар юҡ)", - "diff-multi-sameuser": "(Кәмендә {{PLURAL:$2|$2 ҡатнашыусының}} {{PLURAL:$1|ваҡытлы версияһы}} күрһәтелмәгән)", + "diff-multi-sameuser": "(был ҡулланыусының {{PLURAL:$1|аралағы версия $1|аралағы версиялары $1}} күрһәтелмәгән)", "diff-multi-otherusers": "({{PLURAL:$1|$1 ваҡытлы версия| $1 ваҡытлы версия}} күрһәтелмәгән {{PLURAL:$2|$2 ҡатнашыусы|$2 ҡатнашыусылар}})", "diff-multi-manyusers": "(Кәмендә {{PLURAL:$2|$2 ҡатнашыусының}} {{PLURAL:$1|ваҡытлы версияһы}} күрһәтелмәгән)", "difference-missing-revision": "$1 айырмаһының {{PLURAL:$2|1=бер өлгөһө|$2 өлгөһө}} табылманы.\n\nБыл хәл, ғәҙәттә, юйылған биткә яһалған айырма һылтанмаһының ваҡыты үтеүенән барлыҡҡа килә.\nТулыраҡ мәғлүмәт өсөн ҡарағыҙ: [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} юйыу яҙмалары].", @@ -1017,11 +1024,11 @@ "prefs-common-css-js": "Бөтә күренештәр өсөн дөйөм CSS/JS:", "prefs-reset-intro": "Был битте, көйләүҙәрегеҙҙе ғәҙәттәге көйләүҙәргә ташлатыу өсөн ҡулланып була.\nРаҫлағандан һуң ғәмәлде кире ҡайтарып булмаясаҡ.", "prefs-emailconfirm-label": "Электрон почтаны раҫлау:", - "youremail": "Электрон почта *", + "youremail": "Электрон почта :", "username": "{{GENDER:$1|Ҡулланыусы исеме}}:", "prefs-memberingroups": "{{GENDER:$2|Ағза}} {{PLURAL:$1|төркөмө|төркөмдәре}}:", "prefs-registration": "Теркәлеү ваҡыты:", - "yourrealname": "Һеҙҙең ысын исемегеҙ (*)", + "yourrealname": "Һеҙҙең ысын исемегеҙ:", "yourlanguage": "Тышҡы күренештә ҡулланылған тел:", "yourvariant": "Эстәлектең тел варианты:", "prefs-help-variant": "Вики биттәренең эстәлеген күрһәтеү өсөн өҫтөнлөк бирелгән тел йәки орфография.", @@ -1267,8 +1274,8 @@ "recentchanges-legend-heading": "Легенда:", "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} ([[Special:NewPages|Яңы биттәр исемлеген]] ҡарағыҙ)", "recentchanges-submit": "Күрһәтергә", - "rcnotefrom": "Аҫтарак $3, $4 өсөн {{PLURAL:$5|үҙгәртеүҙәр күрһәтелгән}} ($1 артыҡ түгел).", - "rclistfrom": "$3 $2 башлап яңы үҙгәртеүҙәрҙе күрһәт.", + "rcnotefrom": "Аҫта $3, $4 ҡарата {{PLURAL:$5|үҙгәртеүҙәр күрһәтелгән}} ($1 күберәк түгел).", + "rclistfrom": "$3 $2 алып яңы үҙгәртеүҙәрҙе күрһәт.", "rcshowhideminor": "бәләкәй төҙәтеүҙәрҙе $1", "rcshowhideminor-show": "Күрһәтергә", "rcshowhideminor-hide": "Йәшерергә", @@ -1314,6 +1321,10 @@ "recentchangeslinked-page": "Бит исеме:", "recentchangeslinked-to": "Киреһенсә, был биткә һылтанма яһаған биттәрҙәге үҙгәртеүҙәрҙе күрһәтергә", "recentchanges-page-added-to-category": "[[:$1]] категорияға өҫтәлгән", + "recentchanges-page-added-to-category-bundled": "[[:$1]] һәм [[Special:WhatLinksHere/$1|{{PLURAL:$2|one page|$2 pages}}]] категорияға өҫтәлгән", + "recentchanges-page-removed-from-category": "[[:$1]] категориянан алынған", + "recentchanges-page-removed-from-category-bundled": "[[:$1]] һәм [[Special:WhatLinksHere/$1|{{PLURAL:$2|one page|$2 pages}}]] категориянан алынған", + "autochange-username": "Автоматик рәүештә MediaWiki үҙгәртелә", "upload": "Файл тейәү", "uploadbtn": "Файлды тейәргә", "reuploaddesc": "Тейәү формаһына кире ҡайтырға", @@ -1326,7 +1337,7 @@ "upload-recreate-warning": "'''Иғтибар. Бындай исемле файл юйылған йәки күсерелгән. '''\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": "Уңайлы файл типтары: $1.", + "upload-preferred": "Уңайлы файл типтары: {{PLURAL:$2|type|types}}: $1.", "upload-prohibited": "{{PLURAL:$2|Тыйылған файл төрө|Тыйылған файл төрҙәре}}: $1.", "uploadlogpage": "Тейәү яҙмалары", "uploadlogpagetext": "Түбәндә, һуңғы файл тейәүҙәр исемлеге күрһәтелгән.\nШулай уҡ [[Special:NewFiles|яңы файлдар галереяһын]] ҡарағыҙ; һуңғы тейәүҙәр ентекле рәүештә күрһәтелгән.", @@ -1339,7 +1350,7 @@ "ignorewarning": "Киҫәтеүҙәрҙе иғтибарға алмаҫҡа һәм барыбер файлды һаҡларға", "ignorewarnings": "Бөтә иҫкәрмәләргә иғтибар итмәҫкә", "minlength1": "Файлдың исеме кәмендә бер хәрефтән торорға тейеш.", - "illegalfilename": "«$1» файлы исемендә рөхсәт ителмәгән символдар бар.\nЗинһар файл исемен үҙгәртегеҙ һәм яңынан тейәп ҡарағыҙ.", + "illegalfilename": "«$1» файлы исемендә рөхсәт ителмәгән символдар бар.\nФайл исемен үҙгәртегеҙ һәм яңынан тейәп ҡарағыҙ.", "filename-toolong": "Файл исемдәре 240 байтты үтергә тейеш түгел.", "badfilename": "Файлдың исеме $1 исеменә үҙгәртелде.", "filetype-mime-mismatch": "Файлдың «.$1» киңәйеүе файлдың ($2) MIME-төрөнә тап килмәй.", @@ -1361,17 +1372,18 @@ "tmp-write-error": "Ваҡытлы файлға яҙҙырыу хатаһы.", "large-file": "Дәүмәле $1 байттан артмаған файлдар ҡулланырға кәңәш ителә (был файлдың дәүмәле $2 байт тәшкил итә).", "largefileserver": "Был файлдың дәүмәле рөхсәт ителгәндән ҙурыраҡ.", - "emptyfile": "Һеҙ тейәгән файл буш булырға тейеш.\nБыл файлдың исемен кереткән ваҡытта ебәрелгән хата арҡаһында булыуы мөмкин.\nЗинһар, һеҙ ысынлап та был файлды теләргә теләйһегеҙме икәнен тикшерегеҙ.", + "emptyfile": "Һеҙ тейәгән файл буш булырға тейеш.\nБыл файлдың исемен кереткән ваҡытта хата булыуы мөмкин.\nБыл файлды тейәргә теләйгәнегеҙҙе тикшерегеҙ.", "windows-nonascii-filename": "Был вики махсус символ булған файл исемдәрен терәкләмәй.", "fileexists": "Бындай исемле файл бар инде, зинһар, уны алыштырырға теләүегеҙҙә шикләнһәгеҙ, [[:$1]]тикшерегеҙ.\n[[$1|thumb]]", "filepageexists": "Был файлдың тасуирламаһы бите булдырылған инде: [[:$1]], әммә бындай исемле файл юҡ.\nКеретелгән тасуирлама файлдың тасуирламаһы битендә сыҡмаясаҡ.\nЯңы тасуирлама өҫтәр өсөн, һеҙгә уны ҡул менән үҙгәртергә тура киләсәк.\n[[$1|thumb]]", - "fileexists-extension": "Оҡшаш исемле файл бар: [[$2|thumb]]\n* Тейәлгән файлдың исеме: [[:$1]]\n* Булған файлдың исеме: [[:$2]]\nЗинһар, башҡа исем һайлағыҙ.", + "fileexists-extension": "Оҡшаш исемле файл бар: [[$2|thumb]]\n* Тейәлгән файлдың исеме: [[:$1]]\n* Булған файлдың исеме: [[:$2]]\nБашҡа төрлө исем һайлпрға теләйһегеҙме?", "fileexists-thumbnail-yes": "Файл бәләкәйтелгән өлгө ''(шартлы рәсем)'' булырға тейеш.\n[[$1|thumb]]\nЗинһар, [[:$1]] файлын тикшерегеҙ.\nӘгәр ул ошо уҡ файлдың төп өлгөһө булһа, уның бәләкәйтелгән өлгөһөн айырым тейәүҙең кәрәге юҡ.", "file-thumbnail-no": "Файлдың исеме $1 менән башлана.\nБәлки, ул рәсемдең бәләкәйтелгән өлгөһөлөр ''(шартлы рәсем)''.\nӘгәр һеҙҙә был рәсемдең ҙур өлгөһө булһа, зинһар, уны керетегеҙ йәки файлдың исемен үҙгәртегеҙ.", "fileexists-forbidden": "Бындай исемле файл бар инде һәм ул үҙгәртелә алмай.\nӘгәр һеҙ шулай ҙа был файлды тейәргә теләһәгеҙ, зинһар, кире ҡайтығыҙ һәм уны икенсе исем аҫтында тейәгеҙ.\n[[File:$1|thumb|center|$1]]", "fileexists-shared-forbidden": "Бындай исемле файл дөйөм файл һаҡлағыста бар инде.\nӘгәр һеҙ шулай ҙа был файлды тейәргә теләһәгеҙ, зинһар, кире ҡайтығыҙ һәм яңы исем һайлағыҙ.\n[[File:$1|thumb|center|$1]]", "file-exists-duplicate": "Был файл түбәндәге {{PLURAL:$1|1=файл|файлдар}} менән тап килә:", "file-deleted-duplicate": "Оҡшаш файл ([[:$1]]) юйылғайны инде. Уны ҡайтанан тейәр алдынан, зинһар, файлды юйыу тарихын ҡарағыҙ.", + "file-deleted-duplicate-notitle": "Ошоға оҡшаған файл юйылған,ә исеме тыйылған булған. Яңынан тейәү алдынан администратор хоҡуғы булған кешенән тыйылған файлдарҙы ҡарап сығыуын һорарға кәрәк.", "uploadwarning": "Киҫәтеү", "uploadwarning-text": "Зинһар, түбәндәге файл тасуирламаһын үҙгәртегеҙ һәм яңынан ҡабатлап ҡарағыҙ.", "savefile": "Һөҙгөстө яҙҙырып ҡуйырға", @@ -1380,6 +1392,21 @@ "uploaddisabledtext": "Файлдар тейәү рөхсәт ителмәй.", "php-uploaddisabledtext": "Файлдар тейәү PHP көйләүҙәрендә рөхсәт ителмәй. Зинһар, file_uploads көйләүен тикшерегеҙ.", "uploadscripted": "Файлда булған HTML-кодты йәки скриптты браузер дөрөҫ эшкәртмәүе мөмкин.", + "upload-scripted-pi-callback": "XML стилендәге таблицаны эшкәртеү инструкцияһы булған файлды тейеп булмай.", + "uploaded-script-svg": "Тейәлгән SVG-файлында хәүефле «$1» элементы табылды.", + "uploaded-hostile-svg": "Тейәлгән SVG-файлда хәүефле CSS-код табылды.", + "uploaded-event-handler-on-svg": "SVG-файлдары өсөн $1=\"$2\" атрибуты ҡуйыу рөхсәт ителмәй.", + "uploaded-href-attribute-svg": "SVG-файлында href-атрибуты <$1 $2=\"$3\"> тик http:// йәки https:// башланған маҡсатҡа рөхсәт ителә.", + "uploaded-href-unsafe-target-svg": "Тейәлгән SVG-файлда хәүефле мәғлүмәт табылды: URI <$1 $2=\"$3\">.", + "uploaded-animate-svg": "Тейәлгән SVG-файлында тег «animate» табылды, «from»-атрибут <$1 $2=\"$3\"> ярҙамында һылтанманы үҙгәртә ала.", + "uploaded-setting-event-handler-svg": "Тейәлгән SVG-файлда <$1 $2=\"$3\"> коды табылды, атрибуттар ҡуйыу блокланды.", + "uploaded-setting-href-svg": "«href» атрибутына «set» тегын ҡуйыу блокланды.", + "uploaded-wrong-setting-svg": "«set» тегын файҙаланыу блокланды. Тейәлгән SVG-файлында <set to=\"$1\"> конструкцияһы табылды.", + "uploaded-setting-handler-svg": "SVG«handler» атрибутын өҫтәүсе SVG блокланды.Тейәлгән SVG-файлда $1=\"$2\" конструкцияһы табылды.", + "uploaded-remote-url-svg": "SVG«handler» атрибутын өҫтәүсе SVG блокланды.Тейәлгән SVG-файлда $1=\"$2\" конструкцияһы табылды.", + "uploaded-image-filter-svg": "Тейәлгән SVG-файлда рәсемдәр фильтры табылды URL-адресом <$1 $2=\"$3\">.", + "uploadscriptednamespace": " SVG-файлында ярамаған исем бар '$1'", + "uploadinvalidxml": "Тейәлгән файлда анализлап булмай XML .", "uploadvirus": "Файлда вирус бар!\nТулыраҡ мәғлүмәт: $1", "uploadjava": "Был, эсендә Java .class файлы булған ZIP-архив.\nИменлек өсөн Java-файлдарын тейәү тыйылған.", "upload-source": "Сығанаҡ файл", @@ -1391,6 +1418,7 @@ "upload-options": "Тейәү көйләүҙәре", "watchthisupload": "Файлды күҙәтергә", "filewasdeleted": "Бындай исемле файл бығаса булған һәм юйылған. Зинһар, ҡабаттан тейәр алдынан $1 битен ҡарағыҙ.", + "filename-thumb-name": "Файл исеме рәсемдең бәләкәйләтелгән исеменә оҡшаған. Зинһар, бындай миниатюраларҙы вики-проектҡа тейәмәгеҙ. Әгәр һеҙгә был файл бик кәрәк булһа, исемен эстәлегенә ярашлы үҙгәртегеҙ.", "filename-bad-prefix": "Тейәлә торған файлдың исеме ''«$1»''' менән башлана һәм ул цифрлы камераларҙа файлдарға уҙенән-үҙе бирелә торған исемгә оҡшаған.\nЗинһар, файлды яҡшыраҡ тасуирлаған исем һайлағыҙ.", "upload-proto-error": "Протокол дөрөҫ түгел", "upload-proto-error-text": "Алыҫтан тейәү өсөн http:// йәки ftp:// менән башланған адрес кәрәк.", @@ -1401,6 +1429,31 @@ "upload-too-many-redirects": "URL бигерәк күп йүнәлтмәләр яһай.", "upload-http-error": "HTTP хата килеп сыҡты: $1", "upload-copy-upload-invalid-domain": "Был доменға ҡараған сайттарҙан файл күсереү асыҡ түгел", + "upload-foreign-cant-upload": "Вики ситтәге репозиторийға файл тейәргә көйләнмәгән.", + "upload-dialog-title": "Файлды тейәргә", + "upload-dialog-button-cancel": "Кире алырға", + "upload-dialog-button-done": "Әҙер", + "upload-dialog-button-save": "Һаҡларға", + "upload-dialog-button-upload": "Тейәргә", + "upload-form-label-infoform-title": "Ентеклерәк", + "upload-form-label-infoform-name": "Исем", + "upload-form-label-infoform-name-tooltip": "Башлыҡтың үҙенсәләкле исеме һаҡланасаҡ. Ябай телдә яҙылған исем һәм пробелдар ҡулланырға була. Киңәйтеүҙәр ҡулланмағыҙ.", + "upload-form-label-infoform-description": "Тасуирлау", + "upload-form-label-infoform-description-tooltip": "Был әҫәр тураһында ҡыҫҡаса тасуирлама бирегеҙ. Фото өсөн - фотола нимә иң мөһиме, төшөрөлгән урынды яҙығыҙ.", + "upload-form-label-usage-title": "Ҡулланыу", + "upload-form-label-usage-filename": "Файл исеме", + "foreign-structured-upload-form-label-own-work": "Был минең эш", + "foreign-structured-upload-form-label-infoform-categories": "Категориялар", + "foreign-structured-upload-form-label-infoform-date": "Дата", + "foreign-structured-upload-form-label-own-work-message-local": "Тейәлгән файл {{SITENAME}} лицензия сәйәсәтенә ярашлы икәнен раҫлайым.", + "foreign-structured-upload-form-label-not-own-work-message-local": "{{SITENAME}} ҡағиҙәләренә ярашлы файлды тейәй алмаһағыҙ, диалог теҙерәһен ябығыҙ ҙа тейәү !с!н башҡа ысулды һайлағыҙ.", + "foreign-structured-upload-form-label-not-own-work-local-local": "Ошонда эшләп ҡарағыҙ[[Special:Upload|килешеү буйынса тейәү бите]].", + "foreign-structured-upload-form-label-own-work-message-default": "Был файлды дөйөм репозиторийға күсереүемде аңлайым. Быны ҡулланыусы килешеүе һәм лицензия сәйәсәтенә ярашлы эшләүемде раҫлайым.", + "foreign-structured-upload-form-label-not-own-work-message-default": "{{SITENAME}} ҡағиҙәләренә ярашлы файлды тейәй алмаһағыҙ, диалог теҙерәһен ябығыҙ ҙа тейәү өсөн башҡа ысулды һайлағыҙ.", + "foreign-structured-upload-form-label-not-own-work-local-default": "{{SITENAME}} талаптарына ярашлы файлы тейәп булһа, [[Special:Upload|тейәү битен]] ҡарағыҙ.", + "foreign-structured-upload-form-label-own-work-message-shared": "Мин ошо файлдың авторы икәнемде раҫлайым һәм был файлды Викискладта [https://creativecommons.org/licenses/by-sa/4.0/ Creative Commons Attribution-ShareAlike 4.0] лицензияһы аҫтынан кире алмаҫҡа урынлаштырырға ризалы! бирәм, шулай уҡ [https://wikimediafoundation.org/wiki/ҡулланыу шарттары] менән килешәм.", + "foreign-structured-upload-form-label-not-own-work-message-shared": "Әгәр ошо файлдың авторы түгелһегеҙ һәм уны икенсе лицензия аҫтында сығарырға теләйһегеҙ икән, [https://commons.wikimedia.org/wiki/Special:UploadWizard Викискладҡа күсереү оҫталары] мөмкинлеген файҙаланығыҙ.", + "foreign-structured-upload-form-label-not-own-work-local-shared": "{{SITENAME}} талаптарына ярашлы файлы тейәп булһа, [[Special:Upload|тейәү битен]] ҡарағыҙ.", "backend-fail-stream": "$1 файлын трансляциялап булмай.", "backend-fail-backup": "$1 файлының резерв күсермәһен эшләп булмай.", "backend-fail-notexists": "$1 файлы юҡ.", @@ -1418,7 +1471,7 @@ "backend-fail-closetemp": "Ваҡытлы файлды ябып булмай.", "backend-fail-read": "«$1» файлын уҡып булмай.", "backend-fail-create": "«$1» файлын яҙып булмай.", - "backend-fail-maxsize": "$1 файлын яҙып булманы, сөнки уның күләме {{PLURAL:$2|1=$2 байттан|$2 байттан}} күп.", + "backend-fail-maxsize": "$1 файлын яҙып булманы, сөнки уның күләме {{PLURAL:$2|1=$2 байттан|$2 байттан}} артыҡ.", "backend-fail-readonly": "$1 һаҡлағысы әлегә уҡыу өсөн генә асыҡ. Сәбәбе: $2", "backend-fail-synced": "$1 файлы эске һаҡлағыста ярашһыҙ хәлдә тора.", "backend-fail-connect": "\"$1\" һаҡлағысы менән бәйләнеш яһап булманы.", @@ -1449,6 +1502,7 @@ "uploadstash-badtoken": "Был ғәмәлде башҡарып булманы, һеҙҙең төҙәтеү яҙмағыҙ ғәмәлдән сыҡҡан булыуы ихтимал. Яңынан ҡабатлап ҡарағыҙ.", "uploadstash-errclear": "Файлдарҙы таҙартып булманы.", "uploadstash-refresh": "Файлдар исемлеген яңыртырға", + "uploadstash-thumbnail": "һүрәттәрҙе ҡарау", "invalid-chunk-offset": "Ҡабул ителмәгән фрагмент шылыуы", "img-auth-accessdenied": "Керергә рөхсәт ителмәй", "img-auth-nopathinfo": "PATH_INFO юҡ.\nҺеҙҙең сервер был мәғлүмәтте ебәреү өсөн көйләнмәгән.\nУның CGI нигеҙендә эшләүе һәм img_auth ҡулланмауы мөмкин.\nТулыраҡ мәғлүмәт: https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Image_Authorization", @@ -1477,7 +1531,8 @@ "licenses-edit": "Лицензия параметрҙарын үҙгәртергә", "license-nopreview": "(Ҡарап сығыу мөмкин түгел)", "upload_source_url": "(Дөрөҫ, дөйөм ҡулланыу өсөн асыҡ URL-адрес)", - "upload_source_file": "(һеҙҙең компьютерҙағы файл)", + "upload_source_file": "(һеҙ компьютерҙағы файлды һайланығыҙ)", + "listfiles-delete": "юйырға", "listfiles-summary": "Был ярҙамсы бит бөтә тейәлгән файлдарҙы күрһәтә.", "listfiles_search_for": "Файл исеме буйынса эҙләү:", "listfiles-userdoesnotexist": "\"$1\" иҫәп яҙмаһы теркәлмәгән.", @@ -1531,7 +1586,7 @@ "filerevert-legend": "Файлдың элекке өлгөһөнә ҡайтыу", "filerevert-intro": "Һеҙ '''[[Media:$1|$1]]''' файлын [$2 $3 булдырылған $4 өлгөһөнә] ҡайтараһығыҙ.", "filerevert-comment": "Сәбәп:", - "filerevert-defaultcomment": "$1 $2 өлгөһөнә ҡайтыу", + "filerevert-defaultcomment": "$1 $2 ($3) өлгөһөнә ҡайтыу", "filerevert-submit": "Кире алырға", "filerevert-success": "'''[[Media:$1|$1]]''' [$2 $3 булдырылған $4 өлгөһөнә] ҡайтарылды.", "filerevert-badversion": "Файлдың күрһәтелгән ваҡыт билдәһе менән алдағы урындағы өлгөһө юҡ.", @@ -1558,6 +1613,8 @@ "unwatchedpages": "Бер кем дә күҙәтмәгән биттәр", "listredirects": "Йүнәлтеүҙәр исемлеге", "listduplicatedfiles": "Күсермәләр менән файлдар исемлеге", + "listduplicatedfiles-summary": "Был файлдар исемлеге, һуңғы файл башҡа ҡайһы бер файлдарҙың дубликаты һанала. Тик локаль файрдар иҫәпләнә.", + "listduplicatedfiles-entry": " [[:File:$1|$1]] файлының — [[$3|{{PLURAL:$2|$2 дубликаты}}]] бар.", "unusedtemplates": "Ҡулланылмаған ҡалыптар", "unusedtemplatestext": "Был биттә {{ns:template}} исемдәр арауығының бөтә башҡа биттәргә индерелмәгән биттәре исемлеге килтерелгән.\nҠалыпты юйыр алдынан, уға башҡа һылтанмалар юҡлығын тикшерергә онотмағыҙ.", "unusedtemplateswlh": "Башҡа һылтанмалар", @@ -1568,6 +1625,7 @@ "randomincategory-nopages": "[[:Category:$1|$1]] категорияһында биттәр юҡ.", "randomincategory-category": "Категория:", "randomincategory-legend": "Категорияла осраҡлы файл", + "randomincategory-submit": "Күсергә", "randomredirect": "Осраҡлы биткә күсеү", "randomredirect-nopages": "\"$1\" исемдәр арауығында йүнәлтеүҙәр юҡ.", "statistics": "Статистика", @@ -1625,20 +1683,24 @@ "unusedimages": "Ҡулланылмаған файлдар", "wantedcategories": "Кәрәкле категориялар", "wantedpages": "Кәрәкле биттәр", + "wantedpages-summary": "Иң күп һылтанмалары булған ғәмәлдәге биттәр, булмаған биттәргә һылтанмаһы булған биттәр күрһәтермәгән. Ғәмәлдә булмаған биттәргә һылтанмаларҙы ҡарау өсөн [[{{#special:BrokenRedirects}}|ғәмәлдә булмаған йүнәлтеүҙәр]].", "wantedpages-badtitle": "Һорау һөҙөмтәләрендә дөрөҫ булмаған исем: $1", "wantedfiles": "Кәрәкле файлдар", "wantedfiletext-cat": "Киләһе файлдарҙы улар булмаған хәлдә ҡулланырға тырышыла. Тыш һаҡлағыстарҙа булған файлдар был исемлеккә яңылыш эләгеүе мөмкин. Бындай хаталы белдереүҙәр һыҙыҡ менән күрһәтеләсәк. Шулай уҡ, булмаған файлдарҙы алған биттәр киләһе исемлектә күрһәтелгән: [[:$1]]", + "wantedfiletext-cat-noforeign": "Түбәндәге файлдар ҡулланыла, әммә ғәмәлдә юҡ. Бынан тыш был файлға һылтаныусы биттәр ғәмәлдә юҡ һәм [[:$1]] битендә иҫәпләнә.", "wantedfiletext-nocat": "Киләһе файлдарҙы улар булмаған хәлдә ҡулланырға тырышыла. Тыш һаҡлағыстарҙа булған файлдар был исемлеккә яңылыш эләгеүе мөмкин. Бындай хаталы белдереүҙәр һыҙыҡ менән күрһәтеләсәк.", + "wantedfiletext-nocat-noforeign": "Түбәндәге файл ҡулланыла, әммә ул юҡ.", "wantedtemplates": "Кәрәкле ҡалыптар", "mostlinked": "Иң күп һылтанма яһалған биттәр", "mostlinkedcategories": "Иң күп һылтанма яһалған категориялар", - "mostlinkedtemplates": "Иң күп һылтанма яһалған ҡалыптар", + "mostlinkedtemplates": "Иң күп ҡулланылған биттәр", "mostcategories": "Күп категорияларға кертелгән биттәр", "mostimages": "Иң күп һылтанма яһалған рәсемдәр", "mostinterwikis": "Иң күп интервики-һылтанмалы биттәр", "mostrevisions": "Иң күп үҙгәртеү яһалған биттәр", "prefixindex": "Исемдәре башында ҡушымта торған биттәр", "prefixindex-namespace": "Префикслы бар биттәр ( $1 исемдәр арауығы)", + "prefixindex-submit": "Күрһәтергә", "prefixindex-strip": "Һөҙөмтәләр исемлегендә префиксты йәшерергә", "shortpages": "Ҡыҫҡа биттәр", "longpages": "Оҙон биттәр", @@ -1646,6 +1708,7 @@ "deadendpagestext": "Түбәндәге биттәр {{SITENAME}} проектының башҡа биттәренә һылтанма яһамай.", "protectedpages": "Һаҡланған биттәр", "protectedpages-indef": "Сикләнмәгән һаҡлауҙар ғына", + "protectedpages-summary": "Бында әлегә мәлдә булған һәм һаҡланыулы биттәр килтерелгән. Исемлекте ҡарау өсөн [[{{#special:ProtectedTitles}}|{{int:protectedtitles}}]].", "protectedpages-cascade": "Эҙмә-эҙлекле һаҡлауҙар ғына", "protectedpages-noredirect": "Йүнәлтеүҙәрҙе йәшерергә", "protectedpagesempty": "Әлеге ваҡытта күрһәтелгән шарттар менән һаҡланған биттәр юҡ.", @@ -1655,17 +1718,21 @@ "protectedpages-performer": "Ҡатнашыусыны һаҡлау", "protectedpages-params": "Һаҡ параметрҙары", "protectedpages-reason": "Сәбәп", + "protectedpages-submit": "Биттәрҙе күрһәтеү", "protectedpages-unknown-timestamp": "Билдәһеҙ", "protectedpages-unknown-performer": "Билдәһеҙ ҡатнашыусы", "protectedtitles": "Тыйылған исемдәр", + "protectedtitles-summary": "Бында яңынан булдырыуҙан һаҡланған атамалар килтерелгән. Исмелекте ҡарау өсөн: [[{{#special:ProtectedPages}}|{{int:protectedpages}}]].", "protectedtitlesempty": "Әлеге ваҡытта күрһәтелгән шарттар менән һаҡланған исемдәр юҡ.", + "protectedtitles-submit": "Күренгән исем", "listusers": "Ҡатнашыусылар исемлеге", "listusers-editsonly": "Кәмендә бер үҙгәртеү индергән ҡатнашыусыларҙы ғына күрһәтергә", "listusers-creationsort": "Булдырыу көнө буйынса тәртипкә килтерергә", "listusers-desc": "Кәмеү буйынса айырырға", - "usereditcount": "$1 {{PLURAL:$1|үҙгәртеү}}", + "usereditcount": "{{PLURAL:$1|үҙгәртеү}}", "usercreated": "$3 ҡулланыусыһының теркәлеү ваҡыты: $1 $2", "newpages": "Яңы биттәр", + "newpages-submit": "Күрһәтергә", "newpages-username": "Ҡатнашыусы:", "ancientpages": "Иң иҫке мәҡәләләр", "move": "Яңы исем биреү", @@ -1676,34 +1743,65 @@ "notargettext": "Һеҙ был ғәмәл өсөн кәрәкле битте йәки ҡатнашыусыны күрһәтмәгәнһегеҙ.", "nopagetitle": "Бындай бит юҡ", "nopagetext": "Һеҙ күрһәткән бит юҡ.", - "pager-newer-n": "{{PLURAL:$1|1=1 яңыраҡ|$1 яңыраҡ}}", + "pager-newer-n": "$1{{PLURAL:$1|1=1 яңыраҡ|$1 яңыраҡ}}", "pager-older-n": "{{PLURAL:$1|1=1 иҫкерәк|$1 иҫкерәк}}", "suppress": "Йәшереү", "querypage-disabled": "Был махсус бит һөҙөмтәлелекте арттырыу өсөн ябылған.", "apihelp": "API белешмәһе", "apihelp-no-such-module": "«$1» модуле табылмаған.", "apisandbox": "API һынау урыны", + "apisandbox-jsonly": " API-һынап ҡарау урыны өсөн JavaScript талап ителә.", "apisandbox-api-disabled": "Был сайтта API һүндерелгән.", - "apisandbox-intro": "''MediaWiki API''' өйрәнеү бите. API ҡулланыу тураһында белешмә алыу өсөн [//www.mediawiki.org/wiki/API:Main_page API документацияһы]на мөрәжәғәт итегеҙ. Мәҫәләң, [//www.mediawiki.org/wiki/API#A_simple_example Башбит эстәлеген нисек алырға]. Башҡа миҫалдарҙы күреү өсөн ғәмәлде ҡулланығыҙ.", + "apisandbox-intro": "Был битте MediaWiki API менән тәжрибәләр өсөн ҡулланығыҙ. API ҡулланыуҙа тулыраҡ мәғлүмәт өсөн [[mw:API:Main page| API документацияһы]] мөрәжәғәт итегеҙ. Мәҫәлән, [//www.mediawiki.org/wiki/API#A_simple_example Баш биттең йөкмәткеһен нисек алырға]. Башҡа миҫалдарҙы ҡарау өсөн ғәмәл һайлағыҙ. Иғтибар, тәжрибәләр өсөн ҡулланылһа ла, был биттә башҡарылған ғәмәлдәр викиға үҙгәрештәр индерә ала.", + "apisandbox-fullscreen": "Панелды асырға", + "apisandbox-fullscreen-tooltip": "Браузер тәҙрәһен тултырыу өсөн һынап ҡарау панелен асырға.", + "apisandbox-unfullscreen": "Битте күрһәтергә", + "apisandbox-unfullscreen-tooltip": "MediaWiki навигация һылтанмалары күренһен өсөн һынап ҡарау панелен бәләкәйләтергә.", "apisandbox-submit": "Һоратыу яһарға", "apisandbox-reset": "Таҙарт", - "apisandbox-examples": "Миҫал", + "apisandbox-retry": "Ҡабатлау", + "apisandbox-loading": " API-модуле өсөн мәғлүмәт тейәү «$1»…", + "apisandbox-load-error": "API-модуле өсөн мәғлүмәт тейәгәндә хата китте «$1»: $2", + "apisandbox-no-parameters": "API-модуленең параметрҙары юҡ.", + "apisandbox-helpurls": "Белешмәгә һылтанма", + "apisandbox-examples": "Миҫалдар", + "apisandbox-dynamic-parameters": "Өҫтәмә параметрҙар", + "apisandbox-dynamic-parameters-add-label": "Параметр өҫтәргә", + "apisandbox-dynamic-parameters-add-placeholder": "Параметр исеме", + "apisandbox-dynamic-error-exists": " «$1» исемле параметр бар.", + "apisandbox-deprecated-parameters": "Иҫкергән параметрҙар", + "apisandbox-fetch-token": "Торенды автоматик тултырыу", + "apisandbox-submit-invalid-fields-title": "Ҡайһы бер ҡырҙар дөрөҫ түгел", + "apisandbox-submit-invalid-fields-message": "Билдәләнгән ҡырҙырҙы тәҙәтегеҙ һәм яңынан эшләр ҡарағыҙ.", "apisandbox-results": "Һөҙөмтә", + "apisandbox-sending-request": "API-ғариза ебәреү", + "apisandbox-loading-results": "API-яуап алыу", + "apisandbox-results-error": " API-яуап алғанда хата китте: $1.", "apisandbox-request-url-label": "Һоратыуҙың URL-адресы:", - "apisandbox-request-time": "Мөрәжәғәт ваҡыты:$1", + "apisandbox-request-time": "Мөрәжәғәт ваҡыты:{{PLURAL:$1|$1 мс}}", + "apisandbox-results-fixtoken": "Токенды төҙөтегеҙ, ебәреүҙе ҡабатлағыҙ", + "apisandbox-results-fixtoken-fail": " «$1» токенына инеп булманы", + "apisandbox-alert-page": "Был биттә ҡайһы бер ҡырҙар дөрөҫ түгел.", + "apisandbox-alert-field": "Был ҡыр дәүмәле ярамай.", "booksources": "Китап сығанаҡтары", "booksources-search-legend": "Китап сығанаҡтарын эҙлә", "booksources-search": "Эҙләү", "booksources-text": "Түбәндәге исемлектә — китаптар һатыу менән шөғөлләнеүсе сайттарға һәм китапханаларҙың эҙләү системаларына һылтанмалар, һәм уларҙа һеҙ эҙләгән китаптар тураһында өҫтәмә мәғлүмәт булыуы мөмкин.", "booksources-invalid-isbn": "Күрһәтелгән ISBN номерҙа хата булырға тейеш. Зинһар, номерҙы сығанаҡтан дөрөҫ күсереүегеҙҙе тикшерегеҙ.", "specialloguserlabel": "Башҡарыусы:", - "speciallogtitlelabel": "Маҡсат (исем йәки ҡулланыусы):", + "speciallogtitlelabel": "Маҡсат (исем йәки ҡулланыусы {{ns:user}}):", "log": "Журналдар", + "logeventslist-submit": "Күрһәтергә", "all-logs-page": "Барлыҡ асыҡ журналдар", "alllogstext": "{{SITENAME}} проектының дөйөм яҙмалар журналы исемлеге. Һеҙ һөҙөмтәләрҙе журнал төрө буйынса, ҡатаншыусы исеме буйынса (ҙур/бәләкәй хәрефкә һиҙгер) йәки ҡағылған бит исеме буйынса (шулай уҡ ҙур/бәләкәй хәрефкә һиҙгер) һайлап ала алаһығыҙ.", "logempty": "Журнал яҙмаларында һайланған юлдар юҡ.", "log-title-wildcard": "Керетелгән хәрефтәр менән башланған исемдәрҙе табырға", "showhideselectedlogentries": "Журналдың һайланған яҙмаларын күрһәтергә/йәшерергә.", + "log-edit-tags": "Журналдағы яҙмала тэгты мөхәррирләргә", + "checkbox-select": "Һайланған: $1", + "checkbox-all": "Барыһы", + "checkbox-none": "Юҡ", + "checkbox-invert": "Әйләндерү", "allpages": "Бөтә биттәр", "nextpage": "Киләһе бит ($1)", "prevpage": "Алдағы бит ($1)", @@ -1720,10 +1818,9 @@ "cachedspecial-viewing-cached-ts": "Һеҙ биттең кэшланған өлгөһөн ҡарайһығыҙ. Уның хәҙерге өлгөнән бик ныҡ айырылыуы мөмкин.", "cachedspecial-refresh-now": "Һуңғы версияны ҡарарға", "categories": "Категориялар", - "categoriespagetext": "Түбәндәге {{PLURAL:$1|1=категорияла|категорияларҙа}} биттәр йәки файлдар бар.\n[[Special:UnusedCategories|Ҡулланылмаған категориялар]] бында күрһәтелмәгән.\nШулай уҡ [[Special:WantedCategories|кәрәкле категориялар исемлеген]] ҡарағыҙ.", + "categories-submit": "Күрһәтергә", + "categoriespagetext": "{{PLURAL:$1|1=Был категория}}ла биттәр һәм медиа-файллардар бар.\nАҫта [[Special:UnusedCategories|ҡулланылмаған категориялар]] күһәтелмәгән.\nШулай уҡ [[Special:WantedCategories|талап ителгән категориялар]] күһәтелгән.", "categoriesfrom": "Ошондай хәрефтәрҙән башланған категорияларҙы күрһәтергә:", - "special-categories-sort-count": "күләме буйынса тәртипкә килтерергә", - "special-categories-sort-abc": "алфавит буйынса тәртипкә килтерергә", "deletedcontributions": "Ҡулланыусыларҙың юйылған өлөшө", "deletedcontributions-title": "Ҡулланыусыларҙың юйылған өлөшө", "sp-deletedcontributions-contribs": "башҡарған эштәр", @@ -1745,6 +1842,7 @@ "activeusers-hidebots": "Боттарҙы йәшерергә", "activeusers-hidesysops": "Хакимдәрҙе йәшерергә", "activeusers-noresult": "Ҡатнашыусылар табылманы", + "activeusers-submit": "Әүҙем ҡулланыусыларҙы күрһәтергә", "listgrouprights": "Ҡатнашыусылар төркөмө хоҡуҡтары", "listgrouprights-summary": "Түбәндә был вики-проектта билдәләнгән ҡатнашыусы төркөмдәре килтерелгән һәм уларҙың хоҡуҡтары күрһәтелгән.\nШәхси хоҡуҡтар тураһында [[{{MediaWiki:Listgrouprights-helppage}}|өҫтәмә мәғлүмәт]] булыуы мөмкин.", "listgrouprights-key": "Легенда:\n* Бирелгән хоҡуҡтар\n* Алынған хоҡуҡтар", @@ -1762,7 +1860,25 @@ "listgrouprights-removegroup-self-all": "Үҙенең иҫәп яҙмаһынан бөтә төркөмдәрҙе юйыу", "listgrouprights-namespaceprotection-header": "Исемдәр арауығы сикләүҙәре", "listgrouprights-namespaceprotection-namespace": "Исемдәр арауығы", + "listgrouprights-namespaceprotection-restrictedto": "Ҡулланыусыға мәхәррирләү мөкинлеген биргән хоҡуҡтар", + "listgrants": "Рөхсәттәр", + "listgrants-summary": "Түбәндә ҡайһы ҡулланыусы хоҡуҡтарына бәйләнгәнлеген дә күрһәткән рөхсәт итеүҙәр исемлеге килтерелә. Ҡатнашыусылар ҡатнашыусы ҡушымталарға биргән сикле хоҡуҡтар менән ҡушымталарға үҙҙәренең иҫәп яҙмаларын ҡулланырға рөхсәт итә ала. Әммә ҡатнашыусы исеменән ғәмәлдә булған ҡушымта, иҫәп яҙмаһында булмаған хоҡуҡтар менән ҡуллана ала. Айырым хоҡуҡтар тураһында [[{{MediaWiki:Listgrouprights-helppage}}|өҫтәмә мөғлүмәт]] алырға була.", + "listgrants-grant": "Рөхсәт", + "listgrants-rights": "Хоҡуҡтар", + "trackingcategories": "Категорияларҙы күҙәтеү", + "trackingcategories-summary": "Был биттә MediaWiki программа тәьминиәте тарафынан автоматик рәүештә тултырылған күҙәтеүсе категориялар күрһәтелгән. Уларҙың исемен {{ns:8}} исемдәр киңлегендәге тейешле система хәбәрҙәрен үҙгәртеп алыштырырға була.", + "trackingcategories-msg": "Күҙәтеүсе категория", "trackingcategories-name": "Хәбәр исеме", + "trackingcategories-desc": "Категорияға индереү критерийҙары", + "noindex-category-desc": "Бит эҙләүсе роботтар тарафынан индексацияланмай, сөнки унда \"тылсымлы һүҙ\" __NOINDEX__ бар һәм ул был флаг рөхсәт ителгән исемдәр киңлегендә урынлашҡан.", + "index-category-desc": "Биттә «тылсымлы һүҙ» бар__INDEX__ (бит рөхсәт ителгән исемдәр арауығында ята), шуға күрә эҙләү системаһында индекслана.", + "post-expand-template-inclusion-category-desc": "Барлыҡ ҡалыптарҙы ла күрһәткәндән һуң биттең күләме арта$wgMaxArticleSize, шуға күрә ҡайһы берҙәре тулыһынса күрһәтелмәне.", + "post-expand-template-argument-category-desc": "Бит $wgMaxArticleSize ҡалып дәлиле асылғандан һуң ҙурыраҡ була(фигуралы өс йәйә, мәҫәлән({{{Foo}}})).", + "expensive-parserfunction-category-desc": "Биттә ресурс һыйҙырышлығы ҙур булған (#ifexist кеүек) функциялар күп ҡулланыла.Тулыраҡ -[https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgExpensiveParserFunctionLimit Manual:$wgExpensiveParserFunctionLimit] битендә.", + "broken-file-category-desc": "Был бит булмаған файлға һылтана", + "hidden-category-category-desc": "Был категорияла __HIDDENCAT__ тамғаһы бар, был категория бүлегендә битте күрһәтмәй.", + "trackingcategories-nodesc": "Тасуирлама юҡ.", + "trackingcategories-disabled": "Категория һүндерелгән.", "mailnologin": "Хат ебәреү өсөн адрес юҡ", "mailnologintext": "Башҡа ҡатнашыусыларға хат ебәреү өсөн, һеҙ [[Special:UserLogin|танылырға]] һәм [[Special:Preferences|көйләүҙәрегеҙҙә]] ысын электрон адрес почтаһы кереткән булырға тейешһегеҙ.", "emailuser": "Ҡатнашыусыға хат", @@ -1796,12 +1912,14 @@ "mywatchlist": "Күҙәтеү исемлеге", "watchlistfor2": "$1 $2 өсөн", "nowatchlist": "Һеҙҙең күҙәтеү исемлегегеҙ буш.", - "watchlistanontext": "Күҙәтеү исемлеген ҡарау йәки мөхәррирләү өсөн $1 кәрәк.", + "watchlistanontext": "Күҙәтеү исемлеген ҡарау йәки мөхәррирләү өсөн кәрәк.", "watchnologin": "Үҙегеҙҙе танытырға кәрәк", "addwatch": "Күҙәтеү исемлегенә өҫтәргә", "addedwatchtext": "\"[[:$1]]\" бите [[Special:Watchlist|күҙәтеү исемлегегеҙгә]] өҫтәлде.\nБыл биттә һәм уның фекер алышыу битендә буласаҡ бар үҙгәртеүҙәр ундағы исемлектә күрһәтеләсәк.", + "addedwatchtext-short": "\"$1\" бите Һеҙҙең күҙәтеү исемлегенә өҫтәлгән", "removewatch": "Күҙәтеү исемлегенән сығарырға", - "removedwatchtext": "«[[:$1]]» бите [[Special:Watchlist|күҙәтеү исемлегегеҙҙән]] сығарылды.", + "removedwatchtext": "«[[:$1]]» мәҡәләһе һәм уның фекер алышыу бите һеҙҙең [[Special:Watchlist|күҙәтеү исемлегенән]] сығарылды.", + "removedwatchtext-short": "\"$1\" бите һеҙҙең күҙәтеү исемлегенән алып ташланды.", "watch": "Күҙәтергә", "watchthispage": "Был битте күҙәтергә", "unwatch": "Күҙәтмәҫкә", @@ -1812,7 +1930,17 @@ "wlheader-enotif": "Электрон почта аша белдереү индерелгән.", "wlheader-showupdated": "Һеҙҙең аҙаҡҡы кереүегеҙҙән һуң үҙгәргән биттәр '''ҡалын''' шрифт менән күрһәтелгән.", "wlnote": "Түбәндә $3 $4 ваҡытына тиклем аҙаҡҡы {{PLURAL:$2|1=сәғәт|'''$2''' сәғәт}} эсендә эшләнгән {{PLURAL:$1|1=үҙгәртеү|'''$1''' үҙгәртеү}} күрһәтелгән.", - "wlshowlast": "Һуңғы $1 сәғәт $2 көн өсөн күрһәт", + "wlshowlast": "Һуңғы $1 сәғәт $2 көн эсендәгеһен күрһәтеү", + "watchlist-hide": "Йәшереү", + "watchlist-submit": "Күрһәтергә", + "wlshowtime": "Күрһәтеү өсөн ваҡыт арауығы", + "wlshowhideminor": "Әҙ генә үҙгәрештәр", + "wlshowhidebots": "Бот", + "wlshowhideliu": "танылған ҡулланыусылар", + "wlshowhideanons": "Аноним ҡулланыусылар", + "wlshowhidepatr": "Тикшерелгән төҙәтеүҙәр", + "wlshowhidemine": "Минең үҙгәртеүҙәр", + "wlshowhidecategorization": "Биттәрҙе категориялаштырыу", "watchlist-options": "Күҙәтеү исемлеге көйләүҙәре", "watching": "Күҙәтеү исемлегенә өҫтәү...", "unwatching": "Күҙәтеү исемлегенән сығарыу...", @@ -1838,11 +1966,12 @@ "deletepage": "Битте юйырға", "confirm": "Раҫларға", "excontent": "эстәлеге: \"$1\"", - "excontentauthor": "эстәлеге: \"$1\" (һәм берҙән-бер авторы \"[[Special:Contributions/$2|$2]]\" ине)", + "excontentauthor": "эстәлеге: \"$1\" (һәм берҙән-бер авторы \"[[Special:Contributions/$2|$2]] ([[User talk:$2|фекер алышыу]])\" ине)", "exbeforeblank": "юйыуға тиклемге эсләлеге: \"$1\"", "delete-confirm": "$1 — юйырға", "delete-legend": "Юйырға", - "historywarning": "'''Киҫәтеү:''' һеҙ юйырға йыйынған биттең тарихында яҡынса $1 {{PLURAL:$1|өлгө}} бар:", + "historywarning": "Иғтибар: һеҙ юйырға йыйынған биттең тарихында яҡынса $1 {{PLURAL:$1|өлгө}} бар:", + "historyaction-submit": "Күрһәтергә", "confirmdeletetext": "Һеҙ был биттең (йәки рәсемдең) һәм уның мәғлүмәттәр базаһындағы үҙгәртеүҙәр тарихының тулыһынса юйылыуын һоранығыҙ.\nЗинһар, быны эшләргә теләгәнегеҙҙе, үҙ хәрәкәттәрегеҙҙең һөҙөмтәләрен аңлағанығыҙҙы һәм [[{{MediaWiki:Policy-url}}]] бүлегендә белдереп кителгән ҡағиҙәләр буйынса эшләгәнегеҙҙе раҫлағыҙ.", "actioncomplete": "Ғәмәл үтәлде", "actionfailed": "Ғәмәл үтәлмәне", @@ -1858,6 +1987,8 @@ "delete-edit-reasonlist": "Сәбәптәр исемлеген мөхәррирләргә", "delete-toobig": "Был биттең үҙгәртеүҙәр тарихы бик оҙон, $1 {{PLURAL:$1|өлгөнән}} күберәк.\n{{SITENAME}} проектының эшмәкәрлеге боҙолмауы маҡсатында бындай биттәрҙе юйыу тыйылған.", "delete-warning-toobig": "Был биттең үҙгәртеүҙәр тарихы бик оҙон, $1 {{PLURAL:$1|өлгөнән}} күберәк.\nБитте юйыу {{SITENAME}} проектының эшмәкәрлеге боҙолоуына килтереүе мөмкин, һаҡлыҡ менән эш итегеҙ.", + "deleteprotected": "Был бит һаҡланған, уны юйҙыра алмайһығыҙ.", + "deleting-backlinks-warning": "Иҫкәртеү: [[Special:WhatLinksHere/{{FULLPAGENAME}}|Башҡа ҡатнашыусылар]] һеҙ юйырға теләгән биткә һылтана.", "rollback": "Үҙгәртеүҙәрҙе кире ҡайтарырға", "rollbacklink": "кире", "rollbacklinkcount": "$1 {{PLURAL:$1|1=төҙәтеүҙе|төҙәтеүҙе}} кире алырға", @@ -1871,6 +2002,22 @@ "rollback-success": "$1 уҙгәртеүҙәре кире алдынды;\n$2 өлгөһөнә ҡайтыу.", "sessionfailure-title": "Сеанс хатаһы", "sessionfailure": "Хәҙерге сеанста хаталар килеп сыҡҡан, булырға тейеш;\n\"сеансты баҫып алыу\"ға юл ҡуймау өсөн был ғәмәл үтәлмәне.\nАлдағы биткә кире ҡайтығыҙ, битте яңыртығыҙ һәм яңынан ҡабатлап ҡарағыҙ.", + "changecontentmodel": "Биттең контент моделен мөхәррирләү", + "changecontentmodel-legend": "Модель эстәлеген үҙгәртергә", + "changecontentmodel-title-label": "Бит исемдәре", + "changecontentmodel-model-label": "Эстәлектең яңы моделе", + "changecontentmodel-reason-label": "Сәбәп", + "changecontentmodel-submit": "Үҙгәртергә", + "changecontentmodel-success-title": "Эстәлек моделе үҙгәртелде", + "changecontentmodel-success-text": "[[:$1]] эстәлек моделе үҙгәртелде", + "changecontentmodel-cannot-convert": "[[:$1]] эстәлеге $2 тибына үҙгәртелә алмай", + "changecontentmodel-nodirectediting": "$1 эстәлеге моделен тураға мөхәррирләп булмай", + "log-name-contentmodel": "Эстәлек моделен үҙгәртеүҙәр журналы", + "log-description-contentmodel": "Эстәлек моделен үҙгәртеүҙәр менән бәйле ваҡиғалар", + "logentry-contentmodel-new": "$1 $3 {{GENDER:$2|}} битен булдырҙы, стандарт булмаған «$5» моделе ҡулланылды.", + "logentry-contentmodel-change": "$3 битендәге $1 {{GENDER:$2||}} эстәлек моделен $3 «$4» -тән «$5»-кә үҙгәртте.", + "logentry-contentmodel-change-revertlink": "кире алырға", + "logentry-contentmodel-change-revert": "кирегә", "protectlogpage": "Һаҡлау яҙмалары", "protectlogtext": "Түбәндә битте һаҡлауҙы үҙгәртеү яҙмалары килтерелгән.\nҺеҙ шулай уҡ хәҙерге ваҡытта [[Special:ProtectedPages|һаҡланған биттәр исемлеген]] ҡарай алаһығыҙ.", "protectedarticle": "«[[$1]]» битен һаҡлаған", @@ -1894,7 +2041,7 @@ "protect-locked-blocked": "Һеҙҙең исәп яҙмағыҙ бикләнгән ваҡытта һеҙ биттең һаҡлау дәрәжәһен үҙгәртә алмайһығыҙ.\n'''$1''' битенең хәҙерге һаҡлау көйләүҙәре:", "protect-locked-dblock": "Һаҡлау дәрәжәһе үҙгәртелә алмай, сөнки төп мәғлүмәттәр базаһы ваҡытлыса бикле.\n'''$1''' битенең хәҙерге һаҡлау көйләүҙәре:", "protect-locked-access": "Биттең һаҡлау дәрәжеһен үҙгәртер өсөн иҫәп яҙыуығыҙҙың хоҡуҡтары етәрле түгел. '''$1''' битенең хәҙерге һаҡлау көйләүҙәре:", - "protect-cascadeon": "Был бит һаҡланған, сөнки ул эҙмә-эҙлекле һаҡлау ҡуйылған {{PLURAL:$1|1=биткә|биттәргә}} керә. Һеҙ был биттең һаҡлау дәрәжәһен үҙгәртә алаһығыҙ, ләкин был эҙмә-эҙлекле һаҡлауға йоғонто яһамаясаҡ.", + "protect-cascadeon": "Был бит һаҡланған, сөнки ул эҙмә-эҙлекле һаҡлау ҡуйылған {{PLURAL:$1|1=биткә|биттәргә}} керә. Һеҙ был биттең һаҡлауға дәрәжәһен үҙгәртә алаһығыҙ, ләкин был эҙмә-эҙлекле һаҡлауға йоғонто яһамаясаҡ.", "protect-default": "Бар ҡулланыусыларға рөхсәт бирергә", "protect-fallback": "«$1» хоҡуҡлы ҡатнашыусыларға ғына рөхсәте ителгән", "protect-level-autoconfirmed": "Үҙенән-үҙе раҫланған ҡатнашыусыларға ғына рөхсәт ителгән", @@ -1908,6 +2055,7 @@ "protect-othertime": "Башҡа ваҡыт:", "protect-othertime-op": "башҡа ваҡыт", "protect-existing-expiry": "Хәҙерге тамамланыу ваҡыты: $2 $3", + "protect-existing-expiry-infinity": "Тамамланыу ваҡыты: сикләнмәгән", "protect-otherreason": "Башҡа/өҫтәмә сәбәп:", "protect-otherreason-op": "Башҡа сәбәп", "protect-dropdown": "*Ғәҙәттәге һаҡлау сәбәптәре:\n** Үтә ныҡлы вандаллыҡ\n** Үтә ныҡлы спам\n** Файҙаһыҙ үҙгәртеүҙәр ярышы\n** Киң танылған бит", @@ -1967,6 +2115,7 @@ "namespace": "Исемдәр арауығы:", "invert": "Һайланғандарҙы әйләндерергә", "tooltip-invert": "Һайланған исемдәр арауығындағы (һәм бәйле исемдәр арауығындағы, әгәр күрһәтелһә) биттәрҙәге үҙгәртеүҙәрҙе йәшерер өсөн был билдәне ҡуйығыҙ.", + "tooltip-whatlinkshere-invert": "Был тамғаны һайланған исемдәр арауығындағы һылтанмаларҙы йәшереү өсөн ҡуйығыҙ.", "namespace_association": "Бәйле арауыҡ", "tooltip-namespace_association": "Һайланған исемдәр арауығы менән бәйле әңгәмә(йәки тема) исем арауыҡтарын ҡушыр өсөн был билдәне ҡуйығыҙ.", "blanknamespace": "(Төп)", @@ -1975,6 +2124,7 @@ "mycontris": "Башҡарған эштәр", "anoncontribs": "Иғәнәләр", "contribsub2": "{{GENDER:$3|$1}} башҡарған эше ($2)", + "contributions-userdoesnotexist": "«$1» исемле иҫәп яҙыуы юҡ.", "nocontribs": "Күрһәтелгән шарттарға яуап биргән үҙгәртеүҙәр табылманы.", "uctop": "(ағымдағы)", "month": "Айҙан башлап (һәм элегерәк):", @@ -1983,6 +2133,7 @@ "sp-contributions-newbies-sub": "Яңы иҫәп яҙмалары өсөн", "sp-contributions-newbies-title": "Яңы теркәлгән ҡатнашыусылар башҡарған эш", "sp-contributions-blocklog": "блоклау яҙмалары", + "sp-contributions-suppresslog": "Ҡулланыусыларҙың юйылған өлөшө", "sp-contributions-deleted": "юйылған үҙгәртеүҙәр", "sp-contributions-uploads": "тейәүҙәр", "sp-contributions-logs": "журналдар", @@ -1993,6 +2144,7 @@ "sp-contributions-search": "Башҡарған эште эҙләү", "sp-contributions-username": "Ҡулланыусының IP-адресы йәки исеме:", "sp-contributions-toponly": "Һуңғы өлгөләрҙе генә күрһәтергә", + "sp-contributions-newonly": "Яңы бит яһаған төҙәтеүҙәрҙе генә күрһәтергә", "sp-contributions-submit": "Эҙлә", "whatlinkshere": "Бында һылтанмалар", "whatlinkshere-title": "«$1» битенә һылтанған биттәр", @@ -2011,12 +2163,13 @@ "whatlinkshere-hidelinks": "Һылтанмаларҙы $1", "whatlinkshere-hideimages": "файл һылтанмаларын $1", "whatlinkshere-filters": "Һайлау", + "whatlinkshere-submit": "Күсергә", "autoblockid": "Автобикләү #$1", "block": "Ҡатнашыусыны бикләү", "unblock": "Бикләнгән ҡатнашыусыны азат итеү", - "blockip": "Ҡатнашыусыны бикләү", + "blockip": "{{GENDER:$1|Ҡатнашыусыны}} бикләү", "blockip-legend": "Ҡатнашыусыны бикләү", - "blockiptext": "Билдәләнгән IP адрестан яҙыу мөмкинлеген бикләү өсөн, түбәндәге форманы ҡулланығыҙ.\nБыл бары тик вандаллыҡҡа юл ҡуймау өсөн генә һәм [[{{MediaWiki:Policy-url}}|ҡағиҙәләр]] буйынса ғына эшләнергә тейеш.\nТүбәндә бикләү сәбәбен күрһәтегеҙ (мәҫәлән, вандаллыҡ эҙҙәре булған бер нисә биттең цитатаһын килтерегеҙ).", + "blockiptext": "Билдәләнгән IP адрестан яҙыу мөмкинлеген бикләү өсөн, түбәндәге форманы ҡулланығыҙ.\nБыл бары тик вандаллыҡҡа юл ҡуймау өсөн генә һәм [[{{MediaWiki:Policy-url}}|ҡағиҙәләр]] буйынса ғына эшләнергә тейеш.\nТүбәндә бикләү сәбәбен күрһәтегеҙ (мәҫәлән, вандаллыҡ эҙҙәре булған бер нисә биттең цитатаһын килтерегеҙ).$1 $2", "ipaddressorusername": "Ҡатнашыусының IP-адресы йәки исеме:", "ipbexpiry": "Тамамлана:", "ipbreason": "Сәбәп:", @@ -2038,6 +2191,7 @@ "blockipsuccesstext": "[[Special:Contributions/$1|$1]] бикләнде.
\nБиктәрҙе күреү өсөн [[Special:BlockList|бикләнгән IP адрестарҙы]] ҡарағыҙ.", "ipb-blockingself": "Һеҙ үҙегеҙҙе бикләргә теләйһегеҙ! Быны эшләүҙе раҫлайһығыҙмы?", "ipb-confirmhideuser": "\"Ҡулланыусыны йәшер\" ғәмәлдә саҡта ҡулланыусыны блокларға теләйһегеҙ. Уның исеме исемлектәрҙә һәм журналдарҙа күренмәйәсәк. Быны эшләргә теләүегеҙҙе раҫлайһығыҙмы?", + "ipb-confirmaction": "Быны башҡарырға теләһегеҙ түбәндә тамға ҡуйығыҙ «{{int:ipb-confirm}}».", "ipb-edit-dropdown": "Бикләү сәбәптәрен мөхәррирләргә", "ipb-unblock-addr": "$1 биген алырға", "ipb-unblock": "Ҡатнашыусының йәки IP адрестың биген алырға", @@ -2049,6 +2203,7 @@ "unblocked": "[[User:$1|$1]] бикләнгән", "unblocked-range": "$1 биге сиселде", "unblocked-id": "$1 биге алынған", + "unblocked-ip": "[[Special:Contributions/$1|$1]] блоктан азат ителде", "blocklist": "Тыйылған ҡатнашыусылар", "ipblocklist": "Тыйылған ҡатнашыусылар", "ipblocklist-legend": "Бикләнгән ҡатнашыусыны эҙләү", @@ -2096,8 +2251,9 @@ "block-log-flags-hiddenname": "ҡатнашыусы исеме йәшерелгән", "range_block_disabled": "Хакимдәргә бикләү арауыҡтарын булдырыу тыйылған.", "ipb_expiry_invalid": "Тамамланыу ваҡыты дөрөҫ түгел.", + "ipb_expiry_old": "Һаҡлауҙың тамамланыу ваҡыты үткән көнгә ҡуйылған.", "ipb_expiry_temp": "Бикләү ваҡытында ҡатнашыусы исеме йәшерелһә, бикләү ваҡыты сикһеҙ булырға тейеш.", - "ipb_hide_invalid": "Иҫәп яҙмаһын йәшереү мөмкин түгел, ул бигерәк күп үҙгәртеүҙәр яһаған, булырға тейеш.", + "ipb_hide_invalid": "Иҫәп яҙмаһын йәшереү мөмкин түгел, {{PLURAL:$1|бер|$1 бер нисә}} төҙәтеү эшләнгән.", "ipb_already_blocked": "\"$1\" бикләнгән инде.", "ipb-needreblock": "$1 бикләнгән инде.\nБикләү көйләүҙәрен үҙгәртергә теләйһегеҙме?", "ipb-otherblocks-header": "Башҡа {{PLURAL:$1|1=бикләү|бикләүҙәр}}", @@ -2133,15 +2289,18 @@ "move-page": "$1 — исемен үҙгәртеү", "move-page-legend": "Биттең исемен үҙгәртеү", "movepagetext": "Аҫтағы ҡалыпты ҡулланып, биттең исемен үҙгәртә һәм уның үҙгәртеүҙәр журналын яңы урынға күсерә алаһығыҙ.\nБиттең элекке исеме яңы биткә йүнәлтеү булып ҡаласаҡ.\nҺеҙ элекке исемгә булған йүнәлтеүҙәрҙе автоматик рәүештә яңы исемгә күсерә алаһығыҙ.\nӘгәр быны эшләмәһәгеҙ, [[Special:DoubleRedirects|икеле]] һәм [[Special:BrokenRedirects|өҙөлгән йүнәлтеүҙәр]] барлығын тикшерегеҙ.\nҺылтанмаларҙың кәрәкле урынға күрһәтеүен дауам итеүе өсөн һеҙ яуаплы.\n\nИғтибар итегеҙ: әгәр яңы һайланған исемдәге тағы бер бит бар икән, биттең исеме '''үҙгәртелмәйәсәк'''; ул бит йүнәлтеүсе йәки буш булһа һәм төҙәтеүҙәр тарихына эйә булмаһа ғына, был мөмкин.\nТимәк, биттең исемен яңылыш үҙгәртһәгеҙ, битте элекке исеменә кире ҡайтара алаһығыҙ, ләкин булған битте юя алмайһығыҙ.\n\n'''Иҫкәртеү!'''\n\"Популяр\" биттәрҙең исемен үҙгәртеү күләмле һәм көтөлмәгән һөҙөмтәләргә килтерергә мөмкин.\nДауам итерҙән алда, ихтимал булған һөҙөмтәләрҙе аңлауығыҙға ышанығыҙ.", - "movepagetext-noredirectfixer": "Аҫтағы форманы ҡулланыу биттең исемен үҙгәртә һәм уның үҙгәртеүҙәр яҙмаһын яңы урынға күсерә.\nБиттең элекке исеме яңы биткә йүнәлтеү булып ҡаласаҡ.\nҺеҙ элекке исемгә булған йүнәлтеүҙәрҙе автоматик рәүештә яңы исемгә күсерә алаһығыз.\nӘгәр быны эшләмәһәгеҙ, [[Special:DoubleRedirects|икеле]] һәм [[Special:BrokenRedirects|өҙөлгән йүнәлтеүҙәрҙе]] тикшерегеҙ.\nҺылтанмаларҙың кәрәкле урынға күрһәтеүҙәренең дауам итеүе өсөн һеҙ яуаплы.\n\nИғтибар итегеҙ, әгәр яңы исемле бит бар икән, биттең исеме '''үҙгәртелмәйәсәк'''; элекке бит йүнәлтеү, буш һәм үҙгәртеү тарихына эйә булмаған осраҡтарҙан башҡа.\nБыл шуны аңлата: бит исемен яңылыш үҙгәртһәгеҙ, битте кире ҡайтара алаһығыҙ, ләкин булған битте юя алмайһығыҙ.\n\n'''Иғтибар!'''\nПопуляр биттәрҙең исемен үҙгәртеү көтмәгән һөҙөмтәләргә килтерүе мөмкин.\nДауам итерҙән алда, бөтә буласаҡ һөҙөмтәләрҙе аңлауығыҙҙы уйлағыҙ.", + "movepagetext-noredirectfixer": "Аҫтағы форманы ҡулланыу биттең исемен үҙгәртә һәм уның үҙгәртеүҙәр яҙмаһын яңы урынға күсерә.\nБиттең элекке исеме яңы биткә йүнәлтеү булып ҡаласаҡ.\nҺеҙ элекке исемгә булған йүнәлтеүҙәрҙе автоматик рәүештә яңы исемгә күсерә алаһығыз.\nӘгәр быны эшләмәһәгеҙ, [[Special:DoubleRedirects|икеле]] һәм [[Special:BrokenRedirects|өҙөлгән йүнәлтеүҙәрҙе]] тикшерегеҙ.\nҺылтанмаларҙың кәрәкле урынға күрһәтеүҙәренең дауам итеүе өсөн һеҙ яуаплы.\n\nИғтибар итегеҙ, әгәр яңы исемле бит бар икән, биттең исеме '''үҙгәртелмәйәсәк'''; элекке бит йүнәлтеү, буш һәм үҙгәртеү тарихына эйә булмаған осраҡтарҙан башҡа.\nБыл шуны аңлата: бит исемен яңылыш үҙгәртһәгеҙ, битте кире ҡайтара алаһығыҙ, ләкин булған битте юя алмайһығыҙ.\n\nИғтибар:\nПопуляр биттәрҙең исемен үҙгәртеү көтмәгән һөҙөмтәләргә килтерүе мөмкин.\nДауам итерҙән алда, бөтә буласаҡ һөҙөмтәләрҙе аңлауығыҙҙы уйлағыҙ.", "movepagetalktext": "Фекер алышыу битенең исеме лә үҙгәртеләсәк, '''киләһе осраҡтарҙан тыш''':\n*Бындай исемле фекер алышыу бите бар, йәки\n*Аҫтағы юлды билдәләмәгәнһегеҙ.\n\nБындай осраҡтарҙа, кәрәкле булһа, биттәрҙе үҙегеҙҙең күсереүегеҙ йәки исемен үҙгәртеүегеҙ кәрәк буласаҡ.", - "moveuserpage-warning": "'''Иғтибар:''' Һеҙ ҡатнашыусы битенең исемен үҙгәртергә йыйынаһығыҙ. Зинһар, биттең генә исеме үҙгәрәсәк, ҡатнашыусы исеме ''үҙгәрмәйәсәк'', икәнен күҙ үңында тотоғоҙ.", + "moveuserpage-warning": "'''Иғтибар:''' Һеҙ ҡатнашыусы битенең исемен үҙгәртергә йыйынаһығыҙ. Биттең генә исеме үҙгәрәсәк, ҡатнашыусы исеме ''үҙгәрмәйәсәген'' күҙ үңында тотоғоҙ.", + "movecategorypage-warning": "Иҫкәрмә: Һеҙ категория битенең атамаһын үҙгәртергә теләйһегеҙ.Зинһар, ошо бит кенә үҙгәртелеүенә иғтибар итегеҙ, ә иҫке категориялағы башҡа биттәрне яңынан категорияланасаҡ.", "movenologintext": "Биттең исемен үҙгәртеү өсөн, һеҙ [[Special:UserLogin|танылырға]] тейешһегеҙ.", "movenotallowed": "Һеҙҙең бит исемен үҙгәртергә хоҡуғығыҙ юҡ", "movenotallowedfile": "Һеҙҙең файл исемен үҙгәртергә хоҡуғығыҙ юҡ", "cant-move-user-page": "Һеҙҙең ҡатнашыусы битенең исемен үҙгәртергә хоҡуғығыҙ юҡ", "cant-move-to-user-page": "Һеҙҙең битте ҡатнашыусы бите итеп үҙгәртергә хоҡуғығыҙ юҡ (ҡатнашыусы биттәренән тыш).", - "newtitle": "Яңы исем", + "cant-move-category-page": "Һеҙҙең категория исемен үҙгәртергә хоҡуғығыҙ юҡ", + "cant-move-to-category-page": "Һеҙҙең битте категория бите тип төҙәтергә хоҡуғығыҙ юҡ.", + "newtitle": "Яңы атама", "move-watch": "Был битте күҙәтеү исемлегенә өҫтәргә", "movepagebtn": "Биттең исемен үҙгәртергә", "pagemovedsub": "Бит исеме үҙгәртелде", @@ -2159,12 +2318,12 @@ "movepage-max-pages": "$1 {{PLURAL:$1|биттең}} исеме үҙгәртелде, бынан күберәк биттең исемен автоматик рәүештә үҙгәртеү мөмкин түгел.", "movelogpage": "Исем үҙгәртеү яҙмалары", "movelogpagetext": "Түбәндә — исемдәре үҙгәртелгән биттәр.", - "movesubpage": "{{PLURAL:$1|кергән бит}}", - "movesubpagetext": "Был биткә түбәндә килтерелгән $1 {{PLURAL:$1|бит}} кергән.", + "movesubpage": "{{PLURAL:$1|ярҙамсы бит}}", + "movesubpagetext": "Был биттә $1 {{PLURAL:$1|ярҙамсы бит}}.", "movenosubpage": "Был биткә бер бит тә кермәгән.", "movereason": "Сәбәп:", "revertmove": "кирегә", - "delete_and_move_text": "==Юйыу талап ителә==\n[[:$1|«$1»]] исемле бит бар инде. Исем үҙгәртеүҙе дауам итеү өсөн, уны юйырға теләйһегеҙме?", + "delete_and_move_text": "[[:$1|«$1»]] исемле бит бар инде. Исем үҙгәртеүҙе дауам итеү өсөн, уны юйырға теләйһегеҙме?", "delete_and_move_confirm": "Эйе, битте юйырға", "delete_and_move_reason": "Исем үҙгәртеүҙе дауам итеү өсөн юйылды «[[$1]]»", "selfmove": "Хәҙерге һәм яңы исемдәр тап килә. Исем үҙгәртеү мөмкин түгел.", @@ -2198,6 +2357,7 @@ "export-download": "Файлды һаҡларға", "export-templates": "Ҡалыптарҙы индерергә", "export-pagelinks": "Бәйле биттәрҙе ошо тәрәнлек менән индерергә:", + "export-manual": "Битте ҡулдан өҫтәргә", "allmessages": "Система хәбәрҙәре", "allmessagesname": "Хәбәр", "allmessagesdefault": "Ғәҙәттәге яҙма", @@ -2222,24 +2382,30 @@ "thumbnail-temp-create": "Эскиздың ваҡытлыса файлын яһап булмай", "thumbnail-dest-create": "Маҡсат урында эскизды һаҡлап булмай", "thumbnail_invalid_params": "Шартлы рәсем шарттары дөрөҫ түгел", + "thumbnail_toobigimagearea": "Күләме $1 ҙур булған файл", "thumbnail_dest_directory": "Кәрәкле директорияны булдырып булмай", "thumbnail_image-type": "Был рәсем төрө ҡулланылмай", "thumbnail_gd-library": "GD йыйынтығының төҙөлөшө тулы түгел, $1 функцияһы юҡ", "thumbnail_image-missing": "$1 файлы юҡ, булырға тейеш", + "thumbnail_image-failure-limit": "Был эскизды булдырыу өсөн иң күп маташыу $1 булды. Һуңынан ғабатлап ҡарағыҙ.", "import": "Биттәрҙе тейәү", - "importinterwiki": "Вики проекттар-ара индереү", + "importinterwiki": "башҡа вики-проекттан биттәрҙе күсереү", "import-interwiki-text": "Вики проектты һәм тейәлә торған биттең исемен күрһәтегеҙ.\nҮҙгәртеү ваҡыттары һәм автор исемдәре һаҡланасаҡ.\nБөтә вики проекттары-ара тейәүҙәр [[Special:Log/import|тейәү яҙмалары журналында]] теркәлә.", + "import-interwiki-sourcewiki": "Сығанаҡ вики-проект:", "import-interwiki-sourcepage": "Сығанаҡ бит:", "import-interwiki-history": "Был биттең бөтә үҙгәртеү тарихын яҙҙырырға", "import-interwiki-templates": "Бөтә ҡалыптарҙы индерергә", "import-interwiki-submit": "Тейәргә", + "import-mapping-default": "Килешеү буйынса урынлашҡан ергә импортлау", + "import-mapping-namespace": "Исемдәр арауығына импортлау", + "import-mapping-subpage": "Ярҙамсы бит итеп киләһе биткә импортлау", "import-upload-filename": "Файл исеме:", "import-comment": "Иҫкәрмә:", "importtext": "Зинһар, файлды сығанаҡ викинан [[Special:Export|махсус ҡорал]] ярҙамында сығарығыҙ. Артабан уны компьютерығыҙға һаҡлағыҙ һәм бында тейәгеҙ.", "importstart": "Биттәрҙе тейәү...", "import-revision-count": "$1 {{PLURAL:$1|1=өлгө|өлгө}}", "importnopages": "Тейәү өсөн биттәр юҡ.", - "imported-log-entries": "Журналдан $1 {{PLURAL:$1|яҙма}} тейәлде.", + "imported-log-entries": "Журналдың {{PLURAL:$1| $1 яҙмаһы импортланды}}", "importfailed": "Тейәү хатаһы: $1", "importunknownsource": "Сығанаҡ биттең төрө билдәһеҙ", "importcantopen": "Тейәлә торған битте асып булмай", @@ -2255,7 +2421,7 @@ "import-nonewrevisions": "Бөтә өлгөләр бығаса тейәлгән булған.", "xml-error-string": "$2 юлда, $3 урында ($4 байт) $1: $5", "import-upload": "XML-мәғлүмәт тейәргә", - "import-token-mismatch": "Сессия мәғлүмәттәре юғалған.\nЗинһар, тағы ҡабатлап ҡарағыҙ.", + "import-token-mismatch": "Сессия мәғлүмәттәре юғалған.\nЗинһар, тағы ҡабатлап ҡарағыҙ. [[Special:UserLogout|системанан сығырға]]", "import-invalid-interwiki": "Күрһәтелгән вики проекттан тейәү мөмкин түгел.", "import-error-edit": "«$1» битен импортлап булманы, сөнки һеҙгә ул битте мөхәррирләү тыйылған.", "import-error-create": "«$1» битен импортлап булманы, сөнки һеҙгә ул битте яһау тыйылған.", @@ -2263,26 +2429,25 @@ "import-error-special": " «$1» бите импортҡа сығарылманы, сөнки ул биттәр яһау мөмкин булмаған исемдәр арауығына ҡарай.", "import-error-invalid": "\"$1\" бите яраҡһыҙ исеме өсөн импортланманы.", "import-error-unserialize": "«$1» битенең $2 өлгөһөн структуралаштырып (десериаялап) булмай. $4 форматында серияланған $3 эстәлегенең моделеның был өлгөлә ҡулланылыуы тураһында хәбәр алынды.", + "import-error-bad-location": "$3 моделе эстәлегендәге $2 төҙәтеүен $1 был викила һаҡлап булмай.", "import-options-wrong": "Хаталы {{PLURAL:$2|1=опция|опциялар}}: $1", "import-rootpage-invalid": "Төп биттең күрһәтелгән исеме яңылыш.", "import-rootpage-nosubpage": "Төп биттең \"$1\" исемдәр арауығы эске биттәргә рөхсәт бирмәй.", "importlogpage": "Тейәү яҙмалары журналы", "importlogpagetext": "Хакимдәр тарафынан башҡа вики проекттарҙан биттәрҙе һәм уларҙың үҙгәртеүҙәр тарихын тейәү.", - "import-logentry-upload-detail": "$1 {{PLURAL:$1|1=өлгө|өлгө}}", - "import-logentry-interwiki-detail": "$2 өлгөнән $1 {{PLURAL:$1|1=өлгө|өлгө}}", + "import-logentry-upload-detail": "$1 {{PLURAL:$1|версия күсерелгән|версиялар күсерелгән}}", + "import-logentry-interwiki-detail": "$2-нан $1 {{PLURAL:$1|өлгө импортланған}}", "javascripttest": "\nJavaScript тикшереү", - "javascripttest-pagetext-noframework": "Был бит JavaScript тикшеренеүҙәре үткәреү өсөн резервланған.", - "javascripttest-pagetext-unknownframework": "Билдәһеҙ тикшеренеүҙәр мөхитнамәһе \"$1\".", - "javascripttest-pagetext-frameworks": "Зинһар өсөн киләһе тикшеренеүҙәр мөхитнамәһенең береһен һайлап алығыҙ: $1", - "javascripttest-pagetext-skins": "Һынауҙы башлау өсөн тышса һыйлағыҙ.", + "javascripttest-pagetext-unknownaction": "$1 ғәмәле билдәһеҙ", "javascripttest-qunit-intro": "mediawiki.org адресы буйынса ҡарағыҙ [$1 тест үткәреү документацияһы].", - "tooltip-pt-userpage": "Ҡулланыусы битегеҙ", + "tooltip-pt-userpage": "{{GENDER:|Һеҙҙең}} ҡатнашыусы бите", "tooltip-pt-anonuserpage": "IP адресығыҙ өсөн ҡатнашыусы бите", - "tooltip-pt-mytalk": "Фекерләшеү битегеҙ", + "tooltip-pt-mytalk": "{{GENDER:|Һеҙҙең}} фекерләшеү битегеҙ", "tooltip-pt-anontalk": "IP адресығыҙ өсөн фекер алышыу бите", - "tooltip-pt-preferences": "Көйләүҙәрегеҙ", + "tooltip-pt-preferences": "{{GENDER:|Һеҙҙең}} көйләүҙәрегеҙ", "tooltip-pt-watchlist": "Һеҙ күҙәткән биттәр исемлеге", - "tooltip-pt-mycontris": "Кереткән өлөшөгөҙ", + "tooltip-pt-mycontris": "{{GENDER:|Һеҙҙең}} төҙәтеүҙәр исемлеге", + "tooltip-pt-anoncontribs": "Был IP-адрестан яһалған төҙәтеүҙәр", "tooltip-pt-login": "Бында теркәлеү үтергә була, әммә был эш мәжбүри түгел.", "tooltip-pt-logout": "Сығырға", "tooltip-pt-createaccount": "Мотлаҡ булмаһа ла, Һеҙгә иҫәп яҙмаһы төҙөргө һәм системала танылырға тәҡдим итәбеҙ.", @@ -2314,7 +2479,8 @@ "tooltip-feed-rss": "Был бит өсөн RSS-таҫма", "tooltip-feed-atom": "Был бит өсөн Atom-таҫма", "tooltip-t-contributions": "{{GENDER:$1|Был ҡулланыусының}} кереткән өлөшөн ҡарарға", - "tooltip-t-emailuser": "Был ҡулланыусыға хат ебәрергә", + "tooltip-t-emailuser": "{{GENDER:$1|был ҡулланыусыға}} хат ебәреү", + "tooltip-t-info": "Был бит тураһында ентекләберәк", "tooltip-t-upload": "Рәсем йәки тауыш эстәлекле файлдарҙы тейәргә", "tooltip-t-specialpages": "Барлыҡ махсус биттәр исемлеге", "tooltip-t-print": "Был биттең ҡағыҙға баҫыу өлгөһө", @@ -2343,14 +2509,14 @@ "tooltip-undo": "\"Кире ал\" төҙәтеүҙе кире ала һәм төҙәтеү формаһын \"алдан байҡау\"ҙа күрһәтә. Һәм кире алыуҙың сәбәбен белдерергә була.", "tooltip-preferences-save": "Көйләүҙәрҙе һаҡларға", "tooltip-summary": "Ҡыҫҡаса тасуирлама керетегеҙ", - "anonymous": "{{SITENAME}} проектының танылмаған {{PLURAL:$1|1=ҡатнашыусыһы|ҡатнашыусылары}}", + "anonymous": "{{PLURAL:$1|1=Аноним ҡатнашыусы|Аноним ҡатнашыусылар}} {{grammar:genitive|{{SITENAME}}}}", "siteuser": "{{SITENAME}} проектының ҡатнашыусыһы $1", "anonuser": "{{SITENAME}} проектының танылмаған ҡатнашыусыһы $1", "lastmodifiedatby": "Был бит һуңғы тапҡыр $1 $2 $3 тарафынан үҙгәртелгән.", "othercontribs": "Мөхәррирләүҙә ҡатнаштылар: $1.", "others": "башҡалар", - "siteusers": "{{SITENAME}} {{PLURAL:$2|1=ҡатнашыусы|ҡатнашыусылары}} $1", - "anonusers": "{{SITENAME}} проектының танылмаған {{PLURAL:$2|1=ҡатнашыусыһы|ҡатнашыусылары}} $1", + "siteusers": "{{PLURAL:$2|1={{GENDER:$1|ҡатнашыусы}}|ҡатнашыусылар}} {{grammar:genitive|{{SITENAME}}}} $1", + "anonusers": "{{PLURAL:$2|1=аноним ҡатнашыусы|аноним ҡатнашыусылар}} {{grammar:genitive|{{SITENAME}}}} $1", "creditspage": "Рәхмәт белдереү", "nocredits": "Был мәҡәләне мөхәррирләүҙә ҡатнашыусылар исемлеге юҡ.", "spamprotectiontitle": "Спамдан һаҡлау", @@ -2372,11 +2538,14 @@ "pageinfo-length": "Бит оҙонлоғо (байттарҙа)", "pageinfo-article-id": "Бит идентификаторы", "pageinfo-language": "Бит эстәлегенең теле", + "pageinfo-content-model": "Бит эстәлегенең моделе", "pageinfo-robot-policy": "Эҙләү роботтары тарафынан индексацияланыу", "pageinfo-robot-index": "Рөхсәт ителгән", "pageinfo-robot-noindex": "Рөхсәт ителмәй", "pageinfo-watchers": "Битте күҙәтеүселәр һаны", - "pageinfo-few-watchers": "Күп тигәндә $1 {{PLURAL:$1|күҙәтеүсе}}", + "pageinfo-visiting-watchers": "Битте күҙәтеүсе һәм һуңғы үҙгәртеүҙәрҙе күреүсе ҡатнашыусылар һаны", + "pageinfo-few-watchers": "$1 әҙерәк {{PLURAL:$1|күҙәтеүсе}}", + "pageinfo-few-visiting-watchers": "Битте күҙәтеүсе һәм һуңғы үҙгәртеүҙәрҙе күреүсе ҡатнашыусылар булыуы ла, булмауы ла ихтимал", "pageinfo-redirects-name": "Был биткә йүнәлтеүҙәр һаны", "pageinfo-subpages-name": "Был биттең эске биттәре", "pageinfo-subpages-value": "$1 ($2 {{PLURAL:$2|йүнәлтеү}}; $3 {{PLURAL:$3|ябай}})", @@ -2388,9 +2557,9 @@ "pageinfo-authors": "Төрлө авторҙар һаны", "pageinfo-recent-edits": "Һуңғы ваҡыттағы төҙәтеүҙәр ($1 эсендә)", "pageinfo-recent-authors": "Төрлө авторҙарҙың һуңғы һаны", - "pageinfo-magic-words": "Тылсымлы {{PLURAL:$1|1=һүҙ|һүҙҙәр}} ($1)", - "pageinfo-hidden-categories": "Йәшерен {{PLURAL:$1|1=категория|категориялар}} ($1)", - "pageinfo-templates": "Ҡулланылған {{PLURAL:$1|1=ҡалып|ҡалыптар}} ($1)", + "pageinfo-magic-words": "{{PLURAL:$1|1=Тылсымлы һүҙ|Тылсымлы һүҙҙәр}} ($1)", + "pageinfo-hidden-categories": "{{PLURAL:$1|1=Йәшерен категория|Йәшерен категориялар}} ($1)", + "pageinfo-templates": "{{PLURAL:$1|1=Ҡалып|Ҡалыптар}} ($1)", "pageinfo-transclusions": "{{PLURAL:$1|Индерелгән биттәр}} ($1)", "pageinfo-toolboxlink": "Бит мәғлүмәттәре", "pageinfo-redirectsto": "Йүнәлтеү", @@ -2401,11 +2570,13 @@ "pageinfo-protect-cascading-yes": "Эйе", "pageinfo-protect-cascading-from": "Бынан башлап һикәлтәле һаҡлау", "pageinfo-category-info": "Категория тураһында мәғлүмәт", + "pageinfo-category-total": "Ағзаларҙың дөйөм һаны", "pageinfo-category-pages": "Биттәр һаны", "pageinfo-category-subcats": "Категория бүлемдәре һаны", "pageinfo-category-files": "Файлдар һаны", "markaspatrolleddiff": "Тикшерелгән, тип билдәләргә", "markaspatrolledtext": "Бил битте тикшерелгән, тип билдәләргә", + "markaspatrolledtext-file": "Был өлөгөнө патрулләнгән тип ҡуйырға", "markedaspatrolled": "Тикшерелгән тип билдәнгән", "markedaspatrolledtext": "[[:$1]] битенең һайланған өлгөһө тикшерелгән тип билдәләнгән.", "rcpatroldisabled": "Һуңғы үҙгәртеүҙәрҙе тикшереү рөхсәт ителмәй", @@ -2418,6 +2589,7 @@ "patrol-log-page": "Тикшереү яҙмалары журналы", "patrol-log-header": "Был — тикшерелгән өлгөләр яҙмалары журналы.", "log-show-hide-patrol": "тикшереү яҙмалары журналын $1", + "log-show-hide-tag": "$1 билдәләр журналы", "deletedrevision": "Иҫке $1 өлгөһө юйылды", "filedeleteerror-short": "Файлды юйыу хатаһы: $1", "filedeleteerror-long": "Файлды юйыу ваҡытында хаталар килеп сыҡты:\n\n$1", @@ -2430,23 +2602,24 @@ "mediawarning": "'''Иғтибар''': был төр файлда зыян килтереүсе программа коды булыуы мөмкин.\nУны башҡарған саҡта һеҙҙең системағыҙға хәүеф янауы мөмкин.", "imagemaxsize": "Рәсем дәүмәле өсөн сик:
''(файл тасуирламаһы биттәре өсөн)''", "thumbsize": "Шартлы рәсем дәүмәле:", - "widthheightpage": "$1 × $2, $3 {{PLURAL:$3|бит}}", + "widthheightpage": "$1 × $2, $3 {{PLURAL:$3 бит}}", "file-info": "файлдың дәүмәле: $1, MIME төрө: $2", "file-info-size": "$1 × $2 нөктә, файлдың дәүмәле: $3, MIME төрө: $4", - "file-info-size-pages": "$1 × $2 пиксель, файл күләме: $3, MIME төр: $4, $5 {{PLURAL:$5|бит}}", + "file-info-size-pages": "$1 × $2 пиксель, файл күләме: $3, MIME-тибы: $4, $5 {{PLURAL:$5|бит|биттәр}}", "file-nohires": "Юғары асыҡлыҡтағы өлгө юҡ.", "svg-long-desc": "SVG файлы, номиналь $1 × $2 нөктә, файлдың дәүмәле: $3", "svg-long-desc-animated": "Анимациялы SVG файлы, номиналь $1 × $2 нөктә, файлдың дәүмәле: $3", "svg-long-error": "Яңылыш SVG файл: $1", "show-big-image": "Башланғыс файл", "show-big-image-preview": "Байҡау ваҡытындағы күләм: $1.", + "show-big-image-preview-differ": " $3-превью размеры $2-файлы өсөн: $1.", "show-big-image-other": "{{PLURAL:$2|1=Башҡа сиселеш|Башҡа сиселештәр}}: $1.", "show-big-image-size": "$1 × $2 пиксель", "file-info-gif-looped": "әйләнешле", - "file-info-gif-frames": "$1 {{PLURAL:$1|фрейм}}", + "file-info-gif-frames": "$1 {{PLURAL:$1|фрейм|фреймдар}}", "file-info-png-looped": "әйләнешле", "file-info-png-repeat": "$1 {{PLURAL:$1|тапҡыр}} уйнала", - "file-info-png-frames": "$1 {{PLURAL:$1|фрейм}}", + "file-info-png-frames": "$1 {{PLURAL:$1|кадр}}", "file-no-thumb-animation": "\n'''Иғтибар: Техник сикләүҙәр арҡаһында, был файлдың бәләкәй рәсемдәре анимацияланмаясаҡ.'''", "file-no-thumb-animation-gif": "'''Иғтибар: Техник сикләүҙәр арҡаһында, бының һымаҡ юғары асыҡлыҡтағы GIF рәсемдәрҙең бәләкәй рәсемдәре анимацияланмаясаҡ.'''", "newimages": "Яңы файлдар йыйылмаһы", @@ -2454,22 +2627,24 @@ "newimages-summary": "Был махсус бит һуңғы тейәлгән файлдарҙы күрһәтә.", "newimages-legend": "Һайлау", "newimages-label": "Файл исеме (йәки өлөшө):", + "newimages-showbots": "Роботтан тейегәнде күрһәтергә", + "newimages-hidepatrolled": "Патрулләнгән күсереүҙәрҙе йәшерергә", "noimages": "Рәсемдәр юҡ.", "ilsubmit": "Эҙләү", "bydate": "булдырыу көнө буйынса", "sp-newimages-showfrom": "$1 $2 ваҡытынан башлап яңы файлдарҙы күрһәтергә", - "seconds": "{{PLURAL:$1|1=$1 секунд|$1 секунд}}", - "minutes": "{{PLURAL:$1|1=$1 минут|$1 минут}}", - "hours": "{{PLURAL:$1|1=$1 сәғәт|$1 сәғәт}}", - "days": "{{PLURAL:$1|1=$1 көн|$1 көн}}", + "seconds": "{{PLURAL:$1|$1 секунд|$1 секундтар|$1 секунд}}", + "minutes": "{{PLURAL:$1|$1 минут}}", + "hours": "{{PLURAL:$1|$1 сәғәт}}", + "days": "{{PLURAL:$1|1=$1 көн}}", "weeks": "{{PLURAL:$1|$1 аҙна}}", "months": "{{PLURAL:$1|$1 ай}}", "years": "{{PLURAL:$1|$1 йыл}}", "ago": "$1 элек", "just-now": "яңы ғына", - "hours-ago": "$1 {{PLURAL:$1|сәғәт}} элек", - "minutes-ago": "$1 {{PLURAL:$1|минут}} элек", - "seconds-ago": "$1 {{PLURAL:$1|секунд}} элек", + "hours-ago": "$1 {{PLURAL:$1сәғәт}} элек", + "minutes-ago": "$1 {{PLURAL:$1|минут}} алда", + "seconds-ago": "$1 {{PLURAL:$1|секунд}} алда", "monday-at": "дүшәмбе $1", "tuesday-at": "шишәмбе $1", "wednesday-at": "шаршамбы $1", @@ -2517,8 +2692,8 @@ "exif-colorspace": "Төҫтәр киңлеге", "exif-componentsconfiguration": "Төҫ өлөштәренең төҙөлөшө", "exif-compressedbitsperpixel": "Рәсемде ҡыҫыу ысулы", - "exif-pixelydimension": "Рәсем киңлеге", - "exif-pixelxdimension": "Рәсем бейеклеге", + "exif-pixelxdimension": "Рәсем киңлеге", + "exif-pixelydimension": "Рәсем бейеклеге", "exif-usercomment": "Ҡулланыусы иҫкәрмәһе", "exif-relatedsoundfile": "Бәйле аудио файл", "exif-datetimeoriginal": "Төп көнө һәм ваҡыты", @@ -2666,6 +2841,7 @@ "exif-compression-4": "CCITT Group 4, факслы кодлау", "exif-copyrighted-true": "Авторлыҡ хоҡуҡтары менән һаҡлана", "exif-copyrighted-false": "Авторлыҡ-хоҡуҡи статус индерелмәгән", + "exif-photometricinterpretation-1": "Ҡара һәм аҡ (ҡара — 0)", "exif-unknowndate": "Билдәһеҙ көн", "exif-orientation-1": "Ғәҙәти", "exif-orientation-2": "X күсәре буйынса сағылдырылған", @@ -2857,10 +3033,14 @@ "confirm-watch-top": "Был битте күҙәтеү исемлегенә өҫтәргәме?", "confirm-unwatch-button": "Тамам", "confirm-unwatch-top": "Был битте күҙәтеү исемлегенән сығарырғамы?", + "quotation-marks": "\"$1\"", "imgmultipageprev": "← алдағы бит", "imgmultipagenext": "киләһе бит →", "imgmultigo": "Күсеү!", "imgmultigoto": "$1 биткә күсеү", + "img-lang-default": "(килешеү буйынса тел)", + "img-lang-info": "Был рәсемде $1 $2 телдәрендә күрһәтергә", + "img-lang-go": "Күсергә", "ascending_abbrev": "үҫеүгә табан", "descending_abbrev": "кәмеүгә табан", "table_pager_next": "Киләһе бит", @@ -2875,6 +3055,7 @@ "autosumm-replace": "Биттең эстәлеге \"$1\" менән алыштырылған", "autoredircomment": "[[$1]] битенә йүнәлтелгән", "autosumm-new": "\"$1\" исемле яңы бит булдырылған", + "autosumm-newblank": "Буш бит булдырылған", "lag-warn-normal": "$1 {{PLURAL:$1|секундтан}} кәмерәк ваҡыт элек эшләнгән үҙгәртеүҙәр был исемлектә күрһәтелә алмай.", "lag-warn-high": "Мәғлүмәттәр базаларын синхронлаштырыуҙың күпкә артта ҡалыуы сәбәпле, $1 {{PLURAL:$1|секундтан}} кәмерәк ваҡыт элек эшләнгән үҙгәртеүҙәр был исемлектә күрһәтелә алмай.", "watchlistedit-normal-title": "Күҙәтеү исемлеген мөхәррирләү", @@ -2890,11 +3071,23 @@ "watchlistedit-raw-done": "Һеҙҙең күҙәтеү исемлеге яңырҙы.", "watchlistedit-raw-added": "{{PLURAL:$1|1=1 яҙма|$1 яҙма}} өҫтәлде:", "watchlistedit-raw-removed": "{{PLURAL:$1|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 {{PLURAL:$1|яҙма}}:", + "watchlistedit-too-many": "Бында күрһәтеү өсөн биттәр бик күп", + "watchlisttools-clear": "Күҙәтеүҙәр исемлеген таҙартыу", "watchlisttools-view": "Исемлектәге биттәрҙәге үҙгәрештәр", "watchlisttools-edit": "Күҙәтеү исемлеген ҡарарға/төҙәтергә", "watchlisttools-raw": "Текст һымаҡ үҙгәртеү", "signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|әңгәмә]])", + "timezone-local": "Локаль", "duplicate-defaultsort": "'''Иҫкәртеү:''' \"$2\" ғәҙәттәге тәпртипкә килтереү асҡысы элекке \"$1\" ғәҙәттәге тәртипкә килтереү асҡысын үҙгәртә.", + "duplicate-displaytitle": "Иғтибар: Күрһәтелгән «$2» алдағы «$1» исемде ҡабатлай.", + "invalid-indicator-name": "Хата: Биттең торошон күрһәтеүсе атрибут индикаторы name буш була алмай.", "version": "MediaWiki өлгөһө", "version-extensions": "Ҡуйылған киңәйтеүҙәр", "version-skins": "Күренештәр", @@ -2910,7 +3103,19 @@ "version-hook-name": "Эләктереп алыусы исеме", "version-hook-subscribedby": "Яҙҙырылған", "version-version": "($1)", - "version-license": "Рөхсәтнамә", + "version-no-ext-name": "[исеме юҡ]", + "version-license": "MediaWiki лицензияһы", + "version-ext-license": "Лицензия", + "version-ext-colheader-name": "Киңәйтеү", + "version-skin-colheader-name": "Күренеш", + "version-ext-colheader-version": "Версия", + "version-ext-colheader-license": "Лицензия", + "version-ext-colheader-description": "Тасуирлама", + "version-ext-colheader-credits": "Автор", + "version-license-title": "$1 өсөн лицензия", + "version-license-not-found": "Был ҡушымта өсөн оҡшаған лицензиялар юҡ", + "version-credits-title": "$1 авторҙар исемлеге", + "version-credits-not-found": "Был ҡушымта өсөн авторҙар тураһында мәғлүмәт юҡ", "version-poweredby-credits": "Был вики проект '''[https://www.mediawiki.org/ MediaWiki]''' нигеҙендә эшләй, copyright © 2001-$1 $2.", "version-poweredby-others": "башҡалар", "version-poweredby-translators": "translatewiki.net тәржемәселәре", @@ -2922,19 +3127,25 @@ "version-entrypoints": "Инеш өсөн URL адрестар", "version-entrypoints-header-entrypoint": "Инеш урыны", "version-entrypoints-header-url": "URL", + "version-libraries": "Урынлаштырылған китапханалар", + "version-libraries-library": "Китапхана", + "version-libraries-version": "Версия", + "version-libraries-license": "Лицензия", + "version-libraries-description": "Тасуирлама", + "version-libraries-authors": "Авторҙар", "redirect": "Файлдан, файҙаланыусынан йә версияның тиңләштереүсеһенән артабан йүнәлтеү", - "redirect-legend": "Файлға йәки биткә йүнәлтеү", "redirect-summary": "Был махсус бит файлға (файлдың исеменән), биткә (версияның тиңләштереүсеһенән) йәки ҡатнашыусының битенә (ҡатнашыусының һанлы тиңләштереүсеһенән) йүнәлтә.", "redirect-submit": "Күсергә", "redirect-lookup": "Эҙләү", "redirect-value": "Мәғәнәһе:", "redirect-user": "Ҡатнашыусының тиңләштереүсеһе", + "redirect-page": "Бит идентификаторы", "redirect-revision": "Биттең версияһы", "redirect-file": "Файлдың исеме", + "redirect-logid": "ID журнал", "redirect-not-exists": "Мәғәнәһе табылманы", "fileduplicatesearch": "Бер иш файлдарҙы эҙләү", "fileduplicatesearch-summary": "Бер иш файлдарҙы хэш-кодтары буйынса эҙләү.", - "fileduplicatesearch-legend": "Бер иш файлдарҙы эҙләү", "fileduplicatesearch-filename": "Файл исеме:", "fileduplicatesearch-submit": "Эҙләү", "fileduplicatesearch-info": "$1 × $2 пиксел
Файлдың дәүмәле: $3
MIME төрө: $4", @@ -2942,6 +3153,7 @@ "fileduplicatesearch-result-n": "\"$1\" файлы менән $2 {{PLURAL:$2|файл}} тап килә.", "fileduplicatesearch-noresults": "\"$1\" исемле файл табылманы", "specialpages": "Махсус биттәр", + "specialpages-note-top": "Легенда", "specialpages-note": "* Ябай махсус биттәр.\n* Сикле махсус биттәр.\n* Кешланған махсус биттәр (иҫкергән булыуы мөмкин).", "specialpages-group-maintenance": "Техник хеҙмәтләндереү хисапламалары", "specialpages-group-other": "Башҡа махсус биттәр", @@ -2968,12 +3180,87 @@ "tags-tag": "Билдә исеме", "tags-display-header": "Үҙгәртеүҙәр исемлегендә күрһәтеү", "tags-description-header": "Мәғәнәһенең тулы тасуирламаһы", + "tags-source-header": "Сығанаҡ", "tags-active-header": "Әүҙемме?", "tags-hitcount-header": "Билдәләнгән үҙгәртеүҙәр", + "tags-actions-header": "Ғәмәлдәр", "tags-active-yes": "Эйе", "tags-active-no": "Юҡ", + "tags-source-extension": "Ҡушымта билдәләй", + "tags-source-manual": "Ҡатнашыусы йәки робот ҡулдан индерә", + "tags-source-none": "Башҡа ҡулланылмай", "tags-edit": "үҙгәртергә", + "tags-delete": "юйырға", + "tags-activate": "активлаштырырға", + "tags-deactivate": "һүндерергә", "tags-hitcount": "$1 {{PLURAL:$1|1=үҙгәртеү|үҙгәртеү}}", + "tags-manage-no-permission": "Тамға исемен үҙгәртергә хоҡуғығыҙ юҡ", + "tags-manage-blocked": "Һеҙгә блок ҡуйылған, тамғалар менән идара итә алмайһығыҙ.", + "tags-create-heading": "Яңы тамға булдырырға", + "tags-create-explanation": "яңы булдырылған билдәләр боттар һәм ҡатнашыусылар ҡуллана алырлыҡ итеп эшләнәсәк", + "tags-create-tag-name": "Тамға исеме", + "tags-create-reason": "Сәбәп:", + "tags-create-submit": "Яһау", + "tags-create-no-name": "Тамға исемен яҙығыҙ", + "tags-create-invalid-chars": "Тамға исемдәрендә өтөр (,) йәки һыҙыҡ (/) булмаҫҡа тейеш.", + "tags-create-invalid-title-chars": "Билдә исемдәрендә бит атамаларында файҙаланып булмаған символдар булмаҫҡа тейеш", + "tags-create-already-exists": "$1 тамғаһы бар инде.", + "tags-create-warnings-above": "«$1» билдәһен яһарға тырышҡанда асыҡлана{{PLURAL:$2|о киләһе иҫкәрмә|ы киләһе иҫкәрмә}}:", + "tags-create-warnings-below": "Тамға булдырыуҙы дауам итергә теләйһегеҙме?", + "tags-delete-title": "Тамғаны юйырға", + "tags-delete-explanation-initial": " «$1» тамғаһын мәғлүмәттәр базаһынан юйырға теләйһегеҙме?", + "tags-delete-explanation-in-use": "Ул әлеге ваҡытта ҡулланылған {{PLURAL:$2|$2 версияһынан йәки журналдағы яҙманан|барлыҡ $2 версияһынан йәки журналдағы яҙмаларҙан}} юйыласаҡ", + "tags-delete-explanation-warning": "Был ғәмәл кире ҡайтарылғыһыҙ һәм мәғлүмәттәр базаһы хакимдары тарафынан да үҙгәртелә алмай. Һеҙ ысынлап та был билдәне юйырға теләүегеҙгә инанырға тейешһегеҙ.", + "tags-delete-explanation-active": " «$1» билдәһе элеккесә актив һәм киләсәктә лә ҡулланыласаҡ. Шулай булыуын теләмәйһегеҙ икән, билдәне ҡулланыу урынына күсеп, уны һүндерегеҙ.", + "tags-delete-reason": "Сәбәп:", + "tags-delete-submit": "Тамғаны кире ҡайтарылмаҫлыҡ итеп юйырға.", + "tags-delete-not-allowed": "Ҡушымталағы тамғалар юйылмай, әгәр ҡушымта асыҡ рөхсәт бирмәһә.", + "tags-delete-not-found": "$1 тамғаһы юҡ.", + "tags-delete-too-many-uses": " «$1» тамғаһы $2 {{PLURAL:$2|өлгөлә}} артығыраҡ ҡулланыла, был юйылмаясаҡ тигәнде аңлата.", + "tags-delete-warnings-after-delete": " «$1» тамғаһы юйылды, әммә {{PLURAL:$2|түбәндәге киҫәтеүҙәр алында}}:", + "tags-activate-title": "Тамғаны активлаштырырға", + "tags-activate-question": "«$1» тамғаһын активлыштырырға теләйһегеҙме?", + "tags-activate-reason": "Сәбәп:", + "tags-activate-not-allowed": "«$1» тамғаһын активлаштырып булмай.", + "tags-activate-not-found": "$1 тамғаһы юҡ.", + "tags-activate-submit": "активлаштырырға", + "tags-deactivate-title": "Тамғаны активлаштырырға", + "tags-deactivate-question": "«$1» тамғаһын һүндерергә теләйһегеҙме?", + "tags-deactivate-reason": "Сәбәп:", + "tags-deactivate-not-allowed": "«$1» тамғаһын һүндереп булмай.", + "tags-deactivate-submit": "һүндерергә", + "tags-apply-no-permission": "Һеҙҙең үҙгәртеү тамғаһы ҡуйыу хоҡуғы юҡ.", + "tags-apply-blocked": "Үҙгәртеүҙәргә тамға ҡуфырға һеҙҙең хоҡуҡ юҡ, һеҙ бикләнгән.", + "tags-apply-not-allowed-one": " «$1» тамғаһын ҡулдан файҙаланып булмай", + "tags-apply-not-allowed-multi": "Ҡулдан {{PLURAL:$2|түбәндәге тамғаны өҫтәп булмай}}: $1", + "tags-update-no-permission": "Һеҙҙең айырым өлгөләрҙә һәм журнал яҙмаларында тамға йәки үҙгәртеү тамғаһы ҡуйырға хоҡуғығыҙ юҡ.", + "tags-update-blocked": "Һеҙгә блок ҡуйылған, үҙһәртеү тамғалары менән идара итә алмайһығыҙ.", + "tags-update-add-not-allowed-one": " «$1» тамғаһын ҡулдан файҙаланып булмай", + "tags-update-add-not-allowed-multi": "{{PLURAL:$2|түбәндәге тег}} ҡулдан өҫтәлмәй: $1", + "tags-update-remove-not-allowed-one": " «$1» тамғаһын юйып булмай", + "tags-update-remove-not-allowed-multi": "Ҡулдан {{PLURAL:$2|түбәндәге тамғаны юйып булмай}}: $1", + "tags-edit-title": "Тамғаны мөхәррирләү", + "tags-edit-manage-link": "Тамғаларҙы идаралау", + "tags-edit-revision-selected": "{{PLURAL:$1|Һайланған версия}} [[:$2]]:", + "tags-edit-logentry-selected": "Журналда {{PLURAL:$1|1=Һайланған яҙма}}:", + "tags-edit-revision-legend": "{{PLURAL:$1|1=Был өлгөлә}} өҫтәргә йәки юйырға", + "tags-edit-logentry-legend": "{{PLURAL:$1|this log entry|all $1 log entries}} тамғаны өҫтәргә йәки юйырға", + "tags-edit-existing-tags": "Булған тамға:", + "tags-edit-existing-tags-none": "Юҡ", + "tags-edit-new-tags": "Яңы тамғалар:", + "tags-edit-add": "Был тамғаларҙы өҫтәргә", + "tags-edit-remove": "Был билдәне юйырғамы?", + "tags-edit-remove-all-tags": "(бөтә тамғаны юйырға)", + "tags-edit-chosen-placeholder": "Бер йәки бер нисә тэг һайлағыҙ", + "tags-edit-chosen-no-results": "Тап килгән тамғалар табылманы", + "tags-edit-reason": "Сәбәп:", + "tags-edit-revision-submit": "Был {{PLURAL:$1|өлгөгә}} ҡулланырға", + "tags-edit-logentry-submit": "Үҙгәртеһгә {{PLURAL:$1|журналдағы яҙма}} ҡулланырға", + "tags-edit-success": "Үҙгәртеүҙәр ҡабул ителде", + "tags-edit-failure": "Үҙгәртеүҙәрҙе ҡабул итеп булманы $1", + "tags-edit-nooldid-title": "Маҡсат версия билдәләнмәгән", + "tags-edit-nooldid-text": "Һеҙ маҡсат версияһын күрһәтмәнегеҙ, йәки ул версия ғәмәлдә юҡ.", + "tags-edit-none-selected": "Бер йәки артығыраҡ тег һайлағыҙ.", "comparepages": "Биттәрҙе сағыштырыу", "compare-page1": "Беренсе бит", "compare-page2": "Икенсе бит", @@ -3005,6 +3292,12 @@ "htmlform-chosen-placeholder": "Вариант һайлағыҙ", "htmlform-cloner-create": "Тағы өҫтәргә", "htmlform-cloner-delete": "Юйырға", + "htmlform-cloner-required": "Кәм тигәндә бер дәүмәл кәрәк", + "htmlform-title-badnamespace": "[[:$1]] исемдәр арауығында түгел «{{ns:$2}}».", + "htmlform-title-not-creatable": "«$1» — бит исеме, быны булдырып булмай", + "htmlform-title-not-exists": "$1 юҡ", + "htmlform-user-not-exists": "$1 ғәмәлдә юҡ", + "htmlform-user-not-valid": "$1 — ярамаған иҫәп яҙмаһы", "sqlite-has-fts": "$1, тулы текст буйынса эҙләү мөмкинлеге менән", "sqlite-no-fts": "$1, тулы текст буйынса эҙләү мөмкинлекһеҙ", "logentry-delete-delete": "$1 $3 битен {{GENDER:$2|юйҙы}}", @@ -3026,6 +3319,16 @@ "revdelete-uname-unhid": "ҡатнашыусы исеме күрһәтелде", "revdelete-restricted": "хакимдәргә ҡаршы ҡулланылған сикләүҙәр", "revdelete-unrestricted": "хакимдәрҙән алынған сикләүҙәр", + "logentry-block-block": "$1 блокланы{{GENDER:$2||}} {{GENDER:$4|$3}} $5 $6", + "logentry-block-unblock": "$1 блоктан азат итте{{GENDER:$2||а}} {{GENDER:$4|$3}}", + "logentry-block-reblock": "Блоклау ваҡытын $1 {{GENDER:$2|үҙгәртте}} {{GENDER:$4|$3}} $5 $6", + "logentry-suppress-block": "$1 блокланы{{GENDER:$2||}} {{GENDER:$4|$3}} $5 $6", + "logentry-suppress-reblock": "$1 бикләү ваҡытын {{GENDER:$2|үҙгәртте}} {{GENDER:$4|$3}} $5 $6", + "logentry-import-upload": "Файл тейәү ысулы менән $1 импортиртланы {{GENDER:$2||а}} $3", + "logentry-import-upload-details": "Файл тейәү ысулы менән $1 импортланы {{GENDER:$2||а}} $3 ($4 {{PLURAL:$4|версияһын}})", + "logentry-import-interwiki": "$1 башҡа викинан{{GENDER:$2||а}} $3 импортланы", + "logentry-import-interwiki-details": "$1 {{GENDER:$2||а}} $3 $5 импортланы ($4 {{PLURAL:$4|версиларын}})", + "logentry-merge-merge": "$1 берләштерҙе{{GENDER:$2||а}} $3 $4 ($5 версияһына тиклем)", "logentry-move-move": "$1 $3 битенең исемен {{GENDER:$2| үҙгәртте}}. Яңы исеме: $4", "logentry-move-move-noredirect": "$1 $3 битенең исемен йүнәлтеү ҡуймайынса {{GENDER:$2|үҙгәртте}}. Яңы исеме: $4", "logentry-move-move_redir": "$1 $3 битенең исемен йүнәлтеү өҫтөнән {{GENDER:$2|үҙгәртте}}. Яңы исеме: $4", @@ -3037,26 +3340,57 @@ "logentry-newusers-create2": "$1 {{GENDER:$2|ҡатнашыусы}} $3 иҫәп яҙмаһын булдырҙы", "logentry-newusers-byemail": "$1 {{GENDER:$2|}} $3 иҫәп яҙмаһын булдырҙы һәм серһүҙ электрон почта аша ебәрелде", "logentry-newusers-autocreate": "Автоматик рәүештә {{GENDER:$2| ҡатнашыусының}} $1 иҫәп яҙмаһы яһалды", + "logentry-protect-move_prot": "$1 һаҡлау көйәләүен $4 $3 {{GENDER:$2|күсерҙе}}", + "logentry-protect-unprotect": "$1 $3-нан һаҡлауҙы {{GENDER:$2||алды}}", + "logentry-protect-protect": "$1 һаҡланы{{GENDER:$2||а}} $3 $4", + "logentry-protect-protect-cascade": "$1 һаҡланы{{GENDER:$2||}} $3 $4 [каскадлы]", + "logentry-protect-modify": "$1$ һаҡлау кимәлен {{GENDER:$2||үҙгәртте}} $3 $4", + "logentry-protect-modify-cascade": "$1 һаҡлау кимәлен{{GENDER:$2||үҙгәртте}} $3 $4 [каскадлы]", "logentry-rights-rights": "$1 $3 файҙаланыусының төркөмдәрҙәге ағзалығын $4 урынына $5 тип {{GENDER:$2|үҙгәртте}}", "logentry-rights-rights-legacy": "$1 $3 өсөн төркөмдәрҙәге ағзалыҡты {{GENDER:$2|үҙгәртте}}", "logentry-rights-autopromote": "$1 {{GENDER:$2|}} автоматик рәүештә {{GENDER:$2|}} $4 урынына $5 ителде.", "logentry-upload-upload": "$1 $3 {{GENDER:$2|күсерҙе}}", + "logentry-upload-overwrite": "$1 яңы өлгә{{GENDER:$2||тейәне}} $3", + "logentry-upload-revert": "$1 {{GENDER:$2||тейәне}} $3", + "log-name-managetags": "Тамғалар менән идара итеү журналы", + "log-description-managetags": "Был биттә [[Special:Tags|метками]] идара итеү мәсьәләләре килтерелгән. Журналда администратор ҡулдан эшләгән ғәмәл генә бар. Тамғаларыҙа, журналға яҙмайынса ғына, вики-программалар ярҙамында ҡуйырға йәки юйырға мөмкин.", + "logentry-managetags-create": "$1 «$4» тамғаһын {{GENDER:$2||булдырҙы}}", + "logentry-managetags-delete": "$1 «$4» тамғаһын {{GENDER:$2||юйҙы}} ($5 {{PLURAL:$5|журнал яҙмаһынан}} юйылды)", + "logentry-managetags-activate": "$1 «$4» тамғаһын{{GENDER:$2||активлаштырҙы}}, ҡатнашыусылар һәм роботтар ҡуллана торған тамға.", + "logentry-managetags-deactivate": "$1 «$4» тамғаһы өсөн{{GENDER:$2||һүндерҙе}} ҡатнашыусылар һәм роботтар ҡуллана торған тамғаны", + "log-name-tag": "Тамғалар журналы", + "log-description-tag": "Был биттә ҡасан ҡатнашыусылар айырым өлгөләрҙә һәм журналдарҙы [[Special:Tags|тамғалар]] ҡуйғаны һәм юйғаны күренә. Үҙгәртеү, юйыу һәм шуға оҡшаған ғәмәлдәргә ҡуйылған тамға күренмәй.", + "logentry-tag-update-add-revision": "$1 {{GENDER:$2||}} {{PLURAL:$7|тамғаһын}} өҫтәне $6 $4 өлгөһөнә $3 битенә", + "logentry-tag-update-add-logentry": "$1 {{GENDER:$2||}} {{PLURAL:$7|тамғаһын}} өҫтәне$6 $5 журнал яҙмаһына $3 битендә", + "logentry-tag-update-remove-revision": "$1 {{GENDER:$2||}} {{PLURAL:$9|тамғаһын}} юйҙы $8 $4 өлгөһөнә $3 битенә", + "logentry-tag-update-remove-logentry": "$1 {{GENDER:$2||}} {{PLURAL:$9|тамғаһын}} юйҙы $8 $5 өлгөһөнә $3 битенә", + "logentry-tag-update-revision": "$1 {{GENDER:$2||яңыртты}} $4 өлгөһөнөң тамғаларын $3 битендә ({{PLURAL:$7|өҫтәне}} $6; {{PLURAL:$9|юйылған}} $8)", + "logentry-tag-update-logentry": "$1 {{GENDER:$2||а}}журналда билдәләнгән яҙмаларҙы яңыртты $5 биттәр $3 (өҫтәлгән{{PLURAL:$7|а|ы}} $6; юйылған{{PLURAL:$9|а|ы}} $8)", "rightsnone": "(юҡ)", "revdelete-summary": "үҙгәртеүҙәр тасуирламаһы", "feedback-adding": "Биткә кире белдереү өҫтәлә", + "feedback-back": "Артҡа", "feedback-bugcheck": "Шәп! Тик [$1 билдәле хаталар] исемлегендә оҡшаш белдереүҙең булмауына иғтибар итегеҙ.", "feedback-bugnew": "Тикшерҙем. Яңы хата тураһында белдерергә", "feedback-bugornote": "Әгәр Һеҙ техник проблеманы ентекле рәүештә аңлатырға теләһәгеҙ, зинһар, [$1 хата тураһында белдерегеҙ].\nБашҡа осраҡта, ошо ябай форманы ҡуллана алаһығыҙ. Комментарийығыҙ «[$3 $2]» битенә ҡулланыусы исемегеҙ һәм браузер мәғлүмәте менән өҫтәләсәк.", "feedback-cancel": "Кире алырға", "feedback-close": "Әҙер", + "feedback-external-bug-report-button": "Техник эш еберергә", + "feedback-dialog-title": "Баһалама ебәрергә", + "feedback-dialog-intro": "Баһалама ебәреү өсөн түбәндәге форманы файҙаланығыҙ. Һеҙҙең исем менән комментарий «$1» битендә буласаҡ.", "feedback-error-title": "Хата", "feedback-error1": "Хата: API-нан беленмәгән хата", "feedback-error2": "Хата: Мөхәррирләү хатаһы", "feedback-error3": "Хата: API-нан яуап юҡ", + "feedback-error4": "Хата: Баһаламала был баш һүҙ аҫтындағы яҙманы урынлаштырап булмай.", "feedback-message": "Хәбәр:", "feedback-subject": "Тема:", - "feedback-submit": "Кире белдереү ебәрергә", + "feedback-submit": "Ебәрергә", + "feedback-terms": "Ҡатнашыусы агенты мәғлүмәтендә минең браузер һәм операцион система турыһанда мәғлүмәт булыуы миңә билдәле, минең баһаламала был мәғлүмәт асыҡ буласаҡ.", + "feedback-termsofuse": "Минең Ҡулланыу шарттары буйынса кире бәйленеш булдырырға риза.", "feedback-thanks": "Рәхмәт! Һеҙҙең фекерегеҙ «[$2 $1]» битенә өҫтәлде.", + "feedback-thanks-title": "Рәхмәт!", + "feedback-useragent": "Браузер:", "searchsuggest-search": "Эҙләү", "searchsuggest-containing": "эстәлегендә...", "api-error-badaccess-groups": "Һеҙгә был викиға файлдар күсереү рөхсәт ителмәй", @@ -3089,6 +3423,14 @@ "api-error-overwrite": "Булған файлды алыштырыу рөхсәт ителмәй.", "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»", @@ -3100,10 +3442,10 @@ "duration-seconds": "$1 {{PLURAL:$1|1=секунд|секунд}}", "duration-minutes": "$1 {{PLURAL:$1|1=минут|минут}}", "duration-hours": "$1 {{PLURAL:$1|1=сәғәт|сәғәт}}", - "duration-days": "$1 {{PLURAL:$1|1=көн|көн}}", - "duration-weeks": "$1 {{PLURAL:$1|аҙна|аҙналар|аҙна}}", - "duration-years": "$1 {{PLURAL:$1|1=йыл|йылдар}}", - "duration-decades": "$1 {{PLURAL:$1|1=ун көнлөк|ун көнлөктәр}}", + "duration-days": "$1 {{PLURAL:$1|көн}}", + "duration-weeks": "$1 {{PLURAL:$1|аҙна}}", + "duration-years": "$1 {{PLURAL:$1|йыл}}", + "duration-decades": "$1 {{PLURAL:$1|1=ун йыллыҡ|ун йыллыҡтар}}", "duration-centuries": "$1 {{PLURAL:$1|1=быуат|быуаттар}}", "duration-millennia": "$1 {{PLURAL:$1|1=меңйыллыҡ|меңйыллыҡтар}}", "rotate-comment": "Рәсем сәғәт йөрөшө буйынса $1{{PLURAL:$1|}} градусҡа боролдо", @@ -3126,16 +3468,68 @@ "expand_templates_input": "Сығанаҡ текст:", "expand_templates_output": "Һөҙөмтә", "expand_templates_xml_output": "XML һөҙөмтә", + "expand_templates_html_output": "HTML-сығарыу", "expand_templates_ok": "Тамам", "expand_templates_remove_comments": "Аңлатмаларҙы юйырға", "expand_templates_remove_nowiki": "Һөҙөмтәлә билдәләрен йәшерергә", "expand_templates_generate_xml": "XML уҡыу ағасын күрһәтергә", + "expand_templates_generate_rawhtml": "Күрһәтергә HTML", "expand_templates_preview": "Ҡарап сығыу", + "expand_templates_preview_fail_html": "'''Ҡыҙғанысҡа ҡаршы, һеҙҙең ултырыш мәғлүмәттәрегеҙ юғалды. Һөҙөмтәлә, сервер үҙгәрештерегеҙҙе ҡабул итә алмай.'''\n\n''{{SITENAME}} тик таҙа HTML ҡулланыуҙы ғына рөхсәт итә; алдан ҡарау, JavaScript-атакаларҙан һаҡланыу маҡсаты менән ябылған.''\n\n'''Әгәр һеҙ үҙгәртеүҙе яҡшы ниәт менән башҡараһағыҙ икән, тағы бер тапҡыр ҡабатлап ҡарағыҙ. Хата ҡабатланһа, сайттан [[Special:UserLogout|сығығыҙ]] һәм яңынан керегеҙ.'''", + "expand_templates_preview_fail_html_anon": "Сайт {{SITENAME}} «һоро» HTML исемлегендә, һеҙ танылманығыҙ, шуға алдан ҡарау JavaScript-атакаһынан һаҡланыу сараһы буларыҡ йәшерелгән\n\n [[Special:UserLogin|Танылығыҙ]] һәм тағы бер мәртәбә эшләп ҡарағыҙ.", + "expand_templates_input_missing": "Һеҙ ниндәй ҙә булһа һөйләм ҡуйырға тейешһегеҙ", + "pagelanguage": "Биттең телен үҙгәртеү", + "pagelang-name": "Бит", + "pagelang-language": "Тел", + "pagelang-use-default": "Ҡуйылған тел ҡулланырға", + "pagelang-select-lang": "Тел һайлау:", + "pagelang-submit": "Ебәрергә", + "right-pagelang": "Биттең телен үҙгәртеү", + "action-pagelang": "Биттең телен үҙгәртеү", + "log-name-pagelang": "Телде үҙгәртеү дәфтәре", + "log-description-pagelang": "Был бит телдәрендә үҙгәреүҙәр дәфтәре", + "logentry-pagelang-pagelang": "$1 {{GENDER:$2|үҙгәртте}} язык страницы $3 биттең телен $4-тән $5-кә.", + "default-skin-not-found": "Уп-па! Викиҙы биҙәү темаһы рөхсәт ителмәгән $wgDefaultSkin, $1.\n\nҺеҙең ҡоролмала {{PLURAL:$4|түбәндәге}} биҙәү темалары бар. [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual:Skin configuration] {{PLURAL:$4|Килешеү буйынса тема һайларға}}.\n\n$2\n\n; Әгәр яңы ғына MediaWiki урынлаштарған булһығыҙ:\n:Һеҙ быны Git-тан йәки сығанаҡ кодтан башға ысул ҡулланып эшләгәнһегеҙ. Ул ваҡытта был мөмкин. Ҡайһы бер темаларҙы урынлаштырып ҡарағыҙ[https://www.mediawiki.org/wiki/Category:All_skins сайт биҙәү өсөн каталог mediawiki.org]:\n:* [https://www.mediawiki.org/wiki/Download урынлаштырырға йүнәлеш биреүсе файлдар архивын] тейәп алып skins/ папкаһының күсермәһен алығыҙ;\n:* биҙәү өсөн айырым темалар архивын [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org];\n:* [https://www.mediawiki.org/wiki/Download_from_Git#Using_Git_to_download_MediaWiki_skins Git-ты ҡулланып тейәргә].\n: Git, MediaWiki-ны эшләүсе булһағыҙ һеҙҙең репозиторға зыян килтерергә тейеш түгел. [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual:Skin configuration] килешеү буйынса тема һайлау тарыһында мәғлүмәт.\n; MediaWiki-ны әле генә яңыртҡан булһағыҙ:\n: MediaWiki версиһында 1.24 автоматик яүыртыу булмаясаҡ. ([https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Manual: Skin autodiscovery]).\n{{PLURAL:$5|Түбендәге юлды}} ҡуйығыҙ LocalSettings.php, {{PLURAL:$5|урынлаштырылған темаларҙы}} биҙәү өсөн: \n\n
$3
\n\n;Әгәр яңы ғына үҙгәрткән булһағыҙ LocalSettings.php:\n: Тема исемендә хата булмаһын, тикшерегеҙ.", + "default-skin-not-found-no-skins": "Уп-па! Викины биҙәү темаһы рөхсәт ителмәгән $wgDefaultSkin, $1.\n\nҺеҙең ҡоролмала түбәндәге биҙәү темалары бар. [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual:Skin configuration] \n\n\n; Әгәр яңы ғына MediaWiki урынлаштарған булһығыҙ:\n:Һеҙ быны Git-тан йәки сығанаҡ кодтан башҡа ысул ҡулланып эшләгәнһегеҙ. Ул ваҡытта был мөмкин. Ҡайһы бер темаларҙы урынлаштырып ҡарағыҙ[https://www.mediawiki.org/wiki/Category:All_skins сайт биҙәү өсөн каталог mediawiki.org]:\n:* [https://www.mediawiki.org/wiki/Download урынлаштырырға йүнәлеш биреүсе файлдар архивын] тейәп алып skins/ папкаһының күсермәһен алығыҙ;\n:* биҙәү өсөн айырым темалар архивын [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org];\n:* [https://www.mediawiki.org/wiki/Download_from_Git#Using_Git_to_download_MediaWiki_skins Git-ты ҡулланып тейәргә].\n: Git, MediaWiki-ны эшләүсе булһағыҙ һеҙҙең репозиторға зыян килтерергә тейеш түгел. [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual:Skin configuration] килешеү буйынса тема һайлау тарыһында мәғлүмәт.\n; MediaWiki-ны әле генә яңыртҡан булһағыҙ:\n: MediaWiki версиһында 1.24 автоматик яүыртыу булмаясаҡ. ([https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Manual: Skin autodiscovery]).\n \n\n\n;Әгәр яңы ғына үҙгәрткән булһағыҙ LocalSettings.php:\n: Тема исемендә хата булмаһын, тикшерегеҙ.", + "default-skin-not-found-row-enabled": "* $1 / $2 (рөхсәт ителгән)", + "default-skin-not-found-row-disabled": "* $1 / $2 (рөхсәт ителмәгән)", + "mediastatistics": "Медиа-статистика", + "mediastatistics-summary": "Тейәләгән файлдар тибы тураһында статистика. Файлдың һуңғы версия тураһында мәғлүмәт бар. Иҫке һәм юйылған файлдар иҫәпкә алынмай.", + "mediastatistics-nbytes": "$1 байт{{PLURAL:$1|}} ($2; $3%)", + "mediastatistics-bytespertype": "Был бүлек өсөн файлдың дөйөм күләме: $1 байт{{PLURAL:$1|}} ($2; $3%).", + "mediastatistics-allbytes": "Бөтә файлдар күләме: $1 байт{{PLURAL:$1|}} ($2).", + "mediastatistics-table-mimetype": "MIME-төрҙәре", + "mediastatistics-table-extensions": "Рөхсәт ителгән ҡушылмалар", + "mediastatistics-table-count": "Биттәр һаны", + "mediastatistics-table-totalbytes": "Дөйөм күләме", + "mediastatistics-header-unknown": "Билдәһеҙ", + "mediastatistics-header-bitmap": "Растр рәсем", + "mediastatistics-header-drawing": "Рәсемдәр (вектор рәсем)", + "mediastatistics-header-audio": "Аудио", + "mediastatistics-header-video": "Видео", + "mediastatistics-header-multimedia": "Мультимедиа", + "mediastatistics-header-office": "Офис", + "mediastatistics-header-text": "Текст", + "mediastatistics-header-executable": "Башҡарылыусы", + "mediastatistics-header-archive": "Ҡыҫылған формат", + "mediastatistics-header-total": "Барлыҡ файлдар", + "json-warn-trailing-comma": "$1 {{PLURAL:$1|һөйләм аҙаҡында артыҡ өтөр юйылды}} JSON", + "json-error-unknown": "JSON менән проблемалар бар. Хата: $1", + "json-error-depth": "Стек өсөн максималь тәрәнлек артып киткән.", + "json-error-state-mismatch": "Ярамаған йәки дөрөҫ төҙөлмәгән JSON", + "json-error-ctrl-char": "Идара символында хата, кодировка дөрөҫ төҙөлмәгән булыуы ихтимал.", + "json-error-syntax": "Синтаксик хата", + "json-error-utf8": "Хаталы UTF-8 символдары, кодировка дөрөҫ булмауы изтимал.", + "json-error-recursion": "Бер йәки бер нисә рекурсив һылтанма кодланҡан булырға тейеш.", + "json-error-inf-or-nan": "Бер йәки бер нисә NAN- йәки INF-дәүмәле код ҡуйылған булырға тейеш.", + "json-error-unsupported-type": "Код ҡуйып булмаҫлыҡ дәүмәл бирелгән.", + "headline-anchor-title": "Был бүлеккә һылтанма", "special-characters-group-latin": "Латин", "special-characters-group-latinextended": "Латин (киңәйтелгән)", "special-characters-group-ipa": "ХАФӘ (IPA)", "special-characters-group-symbols": "Тамғалар", "special-characters-group-greek": "Грек", + "special-characters-group-greekextended": "Грек телендә киңәйтелгән", "special-characters-group-cyrillic": "Кириллик", "special-characters-group-arabic": "Ғәрәп", "special-characters-group-arabicextended": "Ғәрәп (киңәйтелгән)", @@ -3152,5 +3546,34 @@ "special-characters-group-khmer": "Кһмер", "special-characters-title-endash": "уртаса һыҙыҡ", "special-characters-title-emdash": "оҙон һыҙыҡ", - "special-characters-title-minus": "минус билдәһе" + "special-characters-title-minus": "минус билдәһе", + "mw-widgets-dateinput-no-date": "Дата һайланмаған", + "mw-widgets-titleinput-description-new-page": "Был бит юҡ", + "mw-widgets-titleinput-description-redirect": "$1 йүнәлтеү", + "api-error-blacklisted": "Башҡа аңлайышлы исем һайлағыҙ.", + "sessionmanager-tie": "Бер юлы бер нисә ғаризаның төп нөсхәһен тикшереп булмай: $1.", + "sessionprovider-generic": "$1 сессия", + "sessionprovider-mediawiki-session-cookiesessionprovider": "куки нигеҙендә сессиялар", + "sessionprovider-nocookies": "Ярҙам кәрәкме?", + "randomrootpage": "Ярҙам кәрәкме?", + "log-action-filter-block": "Блоклау төрө:", + "log-action-filter-delete": "Юйҙырыу төрө:", + "log-action-filter-patrol": "Патруль төрө:", + "log-action-filter-protect": "Һаҡлау төрө:", + "log-action-filter-upload": "Күсереү төрө:", + "log-action-filter-all": "Барыһы", + "log-action-filter-block-block": "Бикләргә", + "log-action-filter-block-reblock": "Бикте үҙгәртеү", + "log-action-filter-block-unblock": "Бикте алырға", + "log-action-filter-delete-delete": "Битте юйыуҙар", + "log-action-filter-delete-restore": "Битте тергеҙеү", + "log-action-filter-delete-event": "Журналды юйыу", + "log-action-filter-delete-revision": "Версияны алып ташларға", + "log-action-filter-patrol-patrol": "Ҡулдан патруль яһау", + "log-action-filter-patrol-autopatrol": "Автоматик патруль", + "log-action-filter-protect-protect": "Һаҡлау", + "log-action-filter-protect-modify": "Яңынан тейәү", + "log-action-filter-protect-unprotect": "Һаҡты алып ташлау", + "log-action-filter-upload-upload": "Яңы күсереү", + "log-action-filter-upload-overwrite": "Ҡабаттан тейәү" } diff --git a/languages/i18n/bcc.json b/languages/i18n/bcc.json index 943b13f25f..d228878a2a 100644 --- a/languages/i18n/bcc.json +++ b/languages/i18n/bcc.json @@ -1552,8 +1552,6 @@ "categories": "تهرئان", "categoriespagetext": "جهلیگین {{PLURAL:$1|دسته شامل|دسته جات شامل}} صفحات یا مدیا انت\n[[Special:UnusedCategories|دسته جات بی استفاده]] ادان پیشدارگ نه بنت.\n هنچوش بچار[[Special:WantedCategories|لوٹتگین دسته]].", "categoriesfrom": "پیشدار دسته جات که شروع بنت گون:", - "special-categories-sort-count": "ترتیب په اساس شمار", - "special-categories-sort-abc": "ترتیب الفبی", "deletedcontributions": "مشارکتان کابر حذف بوتء", "deletedcontributions-title": "مشارکتان کابر حذف بوتء", "sp-deletedcontributions-contribs": "مشارکتان", @@ -2192,8 +2190,8 @@ "exif-colorspace": "فضا رنگ", "exif-componentsconfiguration": "معنی هر جز", "exif-compressedbitsperpixel": "مدل کمپرس کتن عکس", - "exif-pixelydimension": "معتبرین پهنات عکس", - "exif-pixelxdimension": "معتبرین ارتفاع عکس", + "exif-pixelxdimension": "معتبرین پهنات عکس", + "exif-pixelydimension": "معتبرین ارتفاع عکس", "exif-usercomment": "نظرات کاربر", "exif-relatedsoundfile": "مربوطین فایل صوتی", "exif-datetimeoriginal": "تاریح و وهد شرکتن دیتا", @@ -2540,7 +2538,6 @@ "redirect-submit": "برا", "fileduplicatesearch": "گردگ په کپی فایلان", "fileduplicatesearch-summary": "گردگ په کپی فایلان په اساس درهمین ارزش.", - "fileduplicatesearch-legend": "گردگ په کپی", "fileduplicatesearch-filename": ":نام فایل", "fileduplicatesearch-submit": "گردگ", "fileduplicatesearch-info": "$1 × $2 پیکسل
اندازه فایل: $3
نوع مایم: $4", diff --git a/languages/i18n/bcl.json b/languages/i18n/bcl.json index 99c880f822..a9a1d7551e 100644 --- a/languages/i18n/bcl.json +++ b/languages/i18n/bcl.json @@ -1537,8 +1537,6 @@ "categories": "Mga Kategoriya", "categoriespagetext": "An minasunod {{PLURAL:$1|kategorya na may laog na|mga kategorya na may laog na}} mga pahina o midya.\n[[Special:UnusedCategories|Dae ginamit na mga kategorya]] dae ipinapahiling digde.\nAsin man hilnga an [[Special:WantedCategories|kinakaipong mga kategorya]].", "categoriesfrom": "Pahilnga an mga kategorya magpoon sa:", - "special-categories-sort-count": "salansana sa paagi nin bilang", - "special-categories-sort-abc": "salansana sa paagi nin alpabetiko", "deletedcontributions": "Parâon an mga kontribusyon kan parágamit", "deletedcontributions-title": "Parâon an mga kontribusyon kan parágamit", "sp-deletedcontributions-contribs": "mga kontribusyon", @@ -2083,10 +2081,6 @@ "import-logentry-upload-detail": "$1 {{PLURAL:$1|rebisyon|mga rebisyon}}", "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|rebisyon|mga rebisyon}} gikan sa $2", "javascripttest": "Testing sa JavaScript", - "javascripttest-pagetext-noframework": "An pahinang ini reserbado para sa pagpapadalagan kan mga pagtesting sa JavaScript.", - "javascripttest-pagetext-unknownframework": "Bakong bistadong modelo para sa pagtesting kan \"$1\".", - "javascripttest-pagetext-frameworks": "Pakipili tabi nin saro sa minasunod na mga modelo sa pagtesting: $1", - "javascripttest-pagetext-skins": "Magpili nin sarong kublit tanganing padalaganon an mga pagtesting sa:", "javascripttest-qunit-intro": "Hilngon [$1 dokumentasyon sa pagtesting] sa mediawiki.org.", "tooltip-pt-userpage": "An saimong paragamit na pahina", "tooltip-pt-anonuserpage": "An páhina nin páragamit para sa ip na pighihira mo bilang", @@ -2332,8 +2326,8 @@ "exif-colorspace": "Espasyong kulay", "exif-componentsconfiguration": "Panabot kan lambang komponente", "exif-compressedbitsperpixel": "Moda nin kompresyon sa imahe", - "exif-pixelydimension": "Lakbang kan imahe", - "exif-pixelxdimension": "Langkaw kan imahe", + "exif-pixelxdimension": "Lakbang kan imahe", + "exif-pixelydimension": "Langkaw kan imahe", "exif-usercomment": "Mga komento kan paragamít", "exif-relatedsoundfile": "Kaakibay kan sagunson na pandangog", "exif-datetimeoriginal": "Petsa asin oras kan henerasyon nin datos", @@ -2749,7 +2743,6 @@ "version-entrypoints-header-entrypoint": "Puntong pan-entrada", "version-entrypoints-header-url": "Kilyawan", "redirect": "Palikwata sa paagi nin sagunson, paragamit, pahina o rebisyon kan ID", - "redirect-legend": "Palikwatong pasiring sa sarong sagunson o pahina", "redirect-summary": "Ining espesyal na pahina minalikwat pasiring sa sarong sagunson (ipinagtao an pangaran nin sagunson), sarong pahina (ipinagtao an sarong rebisyon nin ID o pahina nin ID), o sarong pahina nin paragamit (ipinagtao an numerikong ID nin paragamit). Pinagkagamitan: [[{{#Special:Redirect}}/sagunson/Example.jpg]], [[{{#Special:Redirect}}/rebisyon/328429]], or [[{{#Special:Redirect}}/paragamit/101]].", "redirect-submit": "Dumani", "redirect-lookup": "Hanapon mo", @@ -2761,7 +2754,6 @@ "redirect-not-exists": "Halaga dae nanagboan", "fileduplicatesearch": "Maghanap kan duplikadong mga sagunson", "fileduplicatesearch-summary": "Maghanap kan duplikadong mga sagunson na pinagbasihan an mga kahalagahan nin hash.", - "fileduplicatesearch-legend": "Maghanap kan sarong duplikado", "fileduplicatesearch-filename": "Ngaran nin sagunson:", "fileduplicatesearch-submit": "Maghanap", "fileduplicatesearch-info": "$1 × $2 piksel
Sukol nin sagunson: $3
MIME tipo: $4", diff --git a/languages/i18n/be-tarask.json b/languages/i18n/be-tarask.json index 329e64c687..30b4dede2f 100644 --- a/languages/i18n/be-tarask.json +++ b/languages/i18n/be-tarask.json @@ -33,6 +33,7 @@ "tog-watchdefault": "Дадаваць у мой сьпіс назіраньня старонкі і файлы, якія я {{GENDER:|рэдагаваў|рэдагавала}}", "tog-watchmoves": "Дадаваць у мой сьпіс назіраньня перанесеныя мною старонкі і файлы", "tog-watchdeletion": "Дадаваць у мой сьпіс назіраньня старонкі і файлы, якія я выдаляю", + "tog-watchuploads": "Дадаваць файлы, якія я загружаю, у мой сьпіс назіраньня", "tog-watchrollback": "Дадаваць у мой сьпіс назіраньня старонкі, дзе я {{GENDER:|зрабіў|зрабіла}} адкат", "tog-minordefault": "Па змоўчаньні пазначаць усе мае праўкі дробнымі", "tog-previewontop": "Паказваць папярэдні прагляд старонкі над полем рэдагаваньня", @@ -156,7 +157,6 @@ "moredotdotdot": "Далей…", "morenotlisted": "Гэта ня поўны сьпіс.", "mypage": "Старонка", - "anonuserpage": "Невядомы ўдзельнік", "mytalk": "Гутаркі", "anontalk": "Гутаркі", "navigation": "Навігацыя", @@ -475,7 +475,7 @@ "noemail": "{{GENDER:$1|Удзельнік «$1» не пазначыў|Удзельніца «$1» не пазначыла}} ніякага адрасу электроннай пошты.", "noemailcreate": "Вы павінны пазначыць слушны адрас электроннай пошты", "passwordsent": "Новы пароль быў дасланы на адрас электроннай пошты ўдзельніка «$1».\nКалі ласка, увайдзіце ў сыстэму пасьля яго атрыманьня.", - "blocked-mailpassword": "З Вашага IP-адрасу забароненыя рэдагаваньні, а таму таксама для прадухіленьня шкоды недаступная функцыя аднаўленьня паролю.", + "blocked-mailpassword": "З Вашага IP-адрасу забароненыя рэдагаваньні. Каб пазьбегнуць злоўжываньняў, з гэтага IP-адрасу забаронена аднаўляць пароль.", "eauthentsent": "Пацьверджаньне было дасланае на пазначаны адрас электроннай пошты.\nУ лісьце ўтрымліваюцца інструкцыі, па выкананьні якіх Вы зможаце пацьвердзіць, што адрас сапраўды належыць Вам, і на гэты адрас будзе дасылацца пошта адсюль.", "throttled-mailpassword": "Ліст пра скіданьне паролю ўжо было даслана за {{PLURAL:$1|$1 апошнюю гадзіну|$1 апошнія гадзіны|$1 апошніх гадзінаў}}.\nДля прадухіленьня злоўжываньняў напамін будзе дасылацца не часьцей як аднойчы ў $1 {{PLURAL:$1|гадзіну|гадзіны|гадзінаў}}.", "mailerror": "Памылка пры адпраўцы электроннай пошты: $1", @@ -536,9 +536,9 @@ "botpasswords-created-title": "Пароль робата створаны", "botpasswords-created-body": "Пароль робата для робата з назвай «$1» удзельніка «$2» быў створаны.", "botpasswords-updated-title": "Пароль робата абноўлены", - "botpasswords-updated-body": "Пароль робата «$1» быў пасьпяхова абноўлены.", + "botpasswords-updated-body": "Пароль робата для робата «$1» удзельніка «$2» быў абноўлены.", "botpasswords-deleted-title": "Пароль робата выдалены", - "botpasswords-deleted-body": "Пароль робата «$1» быў выдалены.", + "botpasswords-deleted-body": "Пароль робата для робата «$1» удзельніка «$2» быў выдалены.", "botpasswords-newpassword": "Новы пароль для ўваходу пад $1 — $2. Калі ласка, запішыце яго для далейшага выкарыстаньня.", "botpasswords-no-provider": "BotPasswordsSessionProvider недаступны.", "botpasswords-restriction-failed": "Уваход ня выкананы праз абмежаваньні на пароль робата", @@ -548,7 +548,7 @@ "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-password": "Часовы пароль:", @@ -831,9 +831,9 @@ "revdelete-unsuppress": "Зьняць абмежаваньні з адноўленых вэрсіяў", "revdelete-log": "Прычына:", "revdelete-submit": "Ужыць для {{PLURAL:$1|1=выбранай вэрсіі|выбраных вэрсіяў}}", - "revdelete-success": "'''Бачнасьць вэрсіі пасьпяхова абноўленая.'''", + "revdelete-success": "Бачнасьць вэрсіі абноўленая.", "revdelete-failure": "'''Немагчыма абнавіць бачнасьць вэрсіі:'''\n$1", - "logdelete-success": "'''Бачнасьць падзеі пасьпяхова зьмененая.'''", + "logdelete-success": "Бачнасьць падзеі ўсталяваная.", "logdelete-failure": "'''Немагчыма ўстанавіць бачнасьць у журнале:'''\n$1", "revdel-restore": "Зьмяніць бачнасьць", "pagehist": "Гісторыя старонкі", @@ -884,7 +884,7 @@ "revertmerge": "Разьяднаць", "mergelogpagetext": "Ніжэй знаходзіцца сьпіс апошніх аб'яднаньняў гісторыяў старонак.", "history-title": "$1 — гісторыя зьменаў", - "difference-title": "$1: розьніца паміж вэрсіямі", + "difference-title": "Розьніца паміж вэрсіямі «$1»", "difference-title-multipage": "«$1» і «$2» — розьніца паміж старонкамі", "difference-multipage": "(Розьніца паміж старонкамі)", "lineno": "Радок $1:", @@ -1076,7 +1076,7 @@ "userrights-changeable-col": "Групы, якія Вы можаце мяняць", "userrights-unchangeable-col": "Групы, якія Вы ня можаце мяняць", "userrights-conflict": "Канфлікт пры зьмене правоў удзельнікаў! Калі ласка, праверце і захавайце вашыя зьмены.", - "userrights-removed-self": "Вы пасьпяхова пазбавілі сябе ўласных правоў. З гэтай прычыны вы больш ня маеце доступу да гэтай старонкі.", + "userrights-removed-self": "Вы пазбавілі сябе ўласных правоў. З гэтай прычыны вы больш ня маеце доступу да гэтай старонкі.", "group": "Група:", "group-user": "Удзельнікі", "group-autoconfirmed": "Аўтаматычна пацьверджаныя ўдзельнікі", @@ -1172,7 +1172,7 @@ "right-applychangetags": "дадаваць [[Special:Tags|меткі]] пры рэдагаваньні", "right-changetags": "дадаваць і выдаляць адвольныя [[Special:Tags|меткі]] да асобных вэрсіяў і запісаў у журнале падзеяў", "grant-generic": "Набор правоў «$1»", - "grant-group-page-interaction": "Узаемадзеньне з старонкамі", + "grant-group-page-interaction": "Узаемадзеяньне з старонкамі", "grant-group-file-interaction": "Узаемадзеяньне з мэдыяфайламі", "grant-group-watchlist-interaction": "Узаемадзеяньне з вашым сьпісам назіраньня", "grant-group-email": "Адпраўка лістоў электроннай пошты", @@ -1197,6 +1197,10 @@ "grant-rollback": "Адкат зьменаў старонак", "grant-sendemail": "Адпраўка лістоў электроннай пошты іншым удзельнікам", "grant-uploadeditmovefile": "Загрузка, замена і перайменаваньне файлаў", + "grant-uploadfile": "Загрузка новых файлаў", + "grant-basic": "Асноўныя правы", + "grant-viewdeleted": "Прагляд выдаленых файлаў і старонак", + "grant-viewmywatchlist": "Прагляд вашага сьпісу назіраньня", "newuserlogpage": "Журнал стварэньня рахункаў", "newuserlogpagetext": "Гэта журнал стварэньня рахункаў удзельнікаў і ўдзельніц.", "rightslog": "Журнал правоў удзельнікаў", @@ -1206,6 +1210,7 @@ "action-createpage": "стварэньне старонак", "action-createtalk": "стварэньне старонак абмеркаваньняў", "action-createaccount": "стварэньне гэтага рахунку ўдзельніка", + "action-autocreateaccount": "аўтаматычнае стварэньне гэтага рахунку вонкавага ўдзельніка", "action-history": "прагляд гісторыі гэтай старонкі", "action-minoredit": "пазначэньне гэтай праўкі як дробнай", "action-move": "перанос гэтай старонкі", @@ -1309,9 +1314,9 @@ "recentchangeslinked-page": "Назва старонкі:", "recentchangeslinked-to": "Замест гэтага паказваць зьмены на старонках, што спасылаюцца на гэтую старонку", "recentchanges-page-added-to-category": "[[:$1]] дададзеная да катэгорыі", - "recentchanges-page-added-to-category-bundled": "[[:$1]] і яшчэ {{PLURAL:$2|$2 старонка была дададзеная|$2 старонкі былі дададзеныя|$2 старонак былі дададзеныя}} да катэгорыі", + "recentchanges-page-added-to-category-bundled": "[[:$1]] і яшчэ [[Special:WhatLinksHere/$1|{{PLURAL:$2|$2 старонка была дададзеная|$2 старонкі былі дададзеныя|$2 старонак былі дададзеныя}}]] да катэгорыі", "recentchanges-page-removed-from-category": "[[:$1]] выдаленая з катэгорыі", - "recentchanges-page-removed-from-category-bundled": "[[:$1]] і яшчэ $2 {{PLURAL:$2|старонка была выдаленая|старонкі былі выдаленыя|старонак былі выдаленыя}} з катэгорыі", + "recentchanges-page-removed-from-category-bundled": "[[:$1]] і яшчэ [[Special:WhatLinksHere/$1|$2 {{PLURAL:$2|старонка была выдаленая|старонкі былі выдаленыя|старонак былі выдаленыя}}]] з катэгорыі", "autochange-username": "Аўтаматычная зьмена MediaWiki", "upload": "Загрузіць файл", "uploadbtn": "Загрузіць файл", @@ -1384,6 +1389,7 @@ "uploaded-script-svg": "У загружаным SVG-файле знойдзены небясьпечны элемэнт з падтрымкай сцэнароў «$1».", "uploaded-hostile-svg": "Знойдзены небясьпечны CSS у элемэнце стылю загружанага SVG-файла.", "uploaded-event-handler-on-svg": "Усталёўваць атрыбуты апрацоўніка падзеяў $1=\"$2\" не дазволена для SVG-файлаў.", + "uploaded-href-attribute-svg": "href-атрыбутам у SVG-файлах дазволена весьці толькі на http:// ці https://, знойдзена <$1 $2=\"$3\">.", "uploaded-href-unsafe-target-svg": "У загружаным SVG-файле знойдзеная спасылка на небясьпечныя зьвесткі: URI-мэты <$1 $2=\"$3\">.", "uploaded-animate-svg": "У загружаным SVG-файле знойдзены тэг «animate», які можа зьмяняць спасылку з дапамогай атрыбуту «from» <$1 $2=\"$3\">.", "uploaded-setting-event-handler-svg": "Усталёўка атрыбутаў апрацоўкі падзеяў заблякаваная, у загружаным SVG-файле знойдзены код <$1 $2=\"$3\">.", @@ -1416,6 +1422,7 @@ "upload-too-many-redirects": "URL-адрас утрымлівае зашмат перанакіраваньняў", "upload-http-error": "Узьнікла памылка HTTP: $1", "upload-copy-upload-invalid-domain": "Капіяваньне загрузак не дазволенае ў гэтым дамэне.", + "upload-foreign-cant-upload": "Гэтая вікі не наладжаная для загрузкі файлаў у запытанае вонкавае сховішча файлаў.", "upload-dialog-title": "Загрузка файла", "upload-dialog-button-cancel": "Адмяніць", "upload-dialog-button-done": "Зроблена", @@ -1485,9 +1492,10 @@ "uploadstash-summary": "Гэтая старонка прадстаўляе доступ да файлаў, якія загружаныя (ці знаходзяцца ў працэсе загрузкі), але яшчэ не апублікаваныя ў {{GRAMMAR:месны|{{SITENAME}}}}. Гэтыя файлы нябачныя нікому, акрамя ўдзельнікаў, якія іх загрузілі.", "uploadstash-clear": "Ачысьціць схаваныя файлы", "uploadstash-nofiles": "Вы ня маеце схаваных файлаў.", - "uploadstash-badtoken": "Немагчыма выканаць гэтае дзеяньне, верагодна скончыўся тэрмін дзеяньня Вашага дазволу на рэдагаваньне. Паспрабуйце зноў.", - "uploadstash-errclear": "Немагчыма ачысьціць файлы.", + "uploadstash-badtoken": "Не атрымалася выканаць гэтае дзеяньне. Верагодна, скончыўся тэрмін дзеяньня вашых уліковых зьвестак. Калі ласка, паспрабуйце зноў.", + "uploadstash-errclear": "Не атрымалася ачысьціць файлы.", "uploadstash-refresh": "Абнавіць сьпіс файлаў.", + "uploadstash-thumbnail": "прагляд мініятуры", "invalid-chunk-offset": "Няслушнае зрушэньне фрагмэнту", "img-auth-accessdenied": "Доступ забаронены", "img-auth-nopathinfo": "Адсутнічае PATH_INFO.\nВаш сэрвэр не ўстаноўлены на пропуск гэтай інфармацыі.\nМагчма, ён працуе праз CGI і не падтрымлівае img_auth.\nГлядзіце https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Image_Authorization.", @@ -1736,11 +1744,25 @@ "apihelp": "Даведка API", "apihelp-no-such-module": "Модуль «$1» ня знойдзены.", "apisandbox": "Пясочніца API", + "apisandbox-jsonly": "Для выкарыстаньня API-пясочніцы патрэбны JavaScript.", "apisandbox-api-disabled": "API забаронены на гэтым сайце.", "apisandbox-intro": "Выкарыстоўвайце гэтую старонку для экспэрымэнтаў з API вэб-сэрвісу MediaWiki.\nЗьвяртайцеся да [[mw:API:Main page|дакумэнтацыі API]] для дадатковай інфармацыі па выкарыстаньні API. Напрыклад, [//www.mediawiki.org/wiki/API#A_simple_example як атрымаць зьмест галоўнай старонкі]. Абярыце дзеяньне, каб пабачыць болей узораў.\n\nЗьвярніце ўвагу, што нягледзячы на тое, што гэта пясочніца, вашыя дзеяньні могуць унесьці зьмены ў вікі.", + "apisandbox-fullscreen": "Разгарнуць панэль", + "apisandbox-fullscreen-tooltip": "Разгарнуць панэль пясочніцы, каб запоўніць акно браўзэра.", + "apisandbox-unfullscreen": "Паказаць старонку", + "apisandbox-unfullscreen-tooltip": "Паменшыць панэль пясочніцы, каб былі даступныя навігацыйныя спасылкі MediaWiki.", "apisandbox-submit": "Зрабіць запыт", "apisandbox-reset": "Ачысьціць", + "apisandbox-retry": "Паўтарыць", + "apisandbox-loading": "Загрузка інфармацыі для API-модуля «$1»…", + "apisandbox-load-error": "Пры загрузцы інфармацыі для API-модуля «$1» адбылася памылка: $2", + "apisandbox-no-parameters": "Гэты API-модуль ня мае парамэтраў.", + "apisandbox-helpurls": "Спасылкі на даведку", "apisandbox-examples": "Прыклады", + "apisandbox-dynamic-parameters": "Дадатковыя парамэтры", + "apisandbox-dynamic-parameters-add-label": "Дадаць парамэтар:", + "apisandbox-dynamic-parameters-add-placeholder": "Назва парамэтру", + "apisandbox-dynamic-error-exists": "Парамэтар з назвай «$1» ужо існуе.", "apisandbox-results": "Вынікі", "apisandbox-request-url-label": "URL-адрас запыту:", "apisandbox-request-time": "Час запыту: {{PLURAL:$1|$1 мс}}", @@ -1760,7 +1782,10 @@ "log-title-wildcard": "Шукаць назвы, якія пачынаюцца з гэтага тэксту", "showhideselectedlogentries": "Паказаць/схаваць выбраныя запісы ў журнале", "log-edit-tags": "Рэдагаваць меткі да абраных запісаў у журнале падзеяў", - "checkbox-all": "Усе", + "checkbox-select": "Выбраць: $1", + "checkbox-all": "усе", + "checkbox-none": "нічога", + "checkbox-invert": "адваротна", "allpages": "Усе старонкі", "nextpage": "Наступная старонка ($1)", "prevpage": "Папярэдняя старонка ($1)", @@ -1780,8 +1805,6 @@ "categories-submit": "Паказаць", "categoriespagetext": "{{PLURAL:$1|1=Наступная катэгорыя зьмяшчае|Наступныя катэгорыі зьмяшчаюць}} старонкі альбо мэдыяфайлы.\nТут не паказаныя [[Special:UnusedCategories|катэгорыі, якія не выкарыстоўваюцца]].\nГлядзіце таксама [[Special:WantedCategories|сьпіс запатрабаваных катэгорыяў]].", "categoriesfrom": "Паказаць катэгорыі, пачынаючы з:", - "special-categories-sort-count": "сартаваць паводле колькасьці", - "special-categories-sort-abc": "сартаваць паводле альфабэту", "deletedcontributions": "Выдалены ўнёсак удзельніка", "deletedcontributions-title": "Выдалены ўнёсак удзельніка", "sp-deletedcontributions-contribs": "унёсак", @@ -2392,11 +2415,7 @@ "import-logentry-upload-detail": "$1 {{PLURAL:$1|вэрсія імпартаваная|вэрсіі імпартаваныя|вэрсіяў імпартаваныя}}", "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|вэрсія імпартаваная|вэрсіі імпартаваныя|вэрсіяў імпартаваныя}} з $2", "javascripttest": "Тэставаньне JavaScript", - "javascripttest-pagetext-noframework": "Гэтая старонка трымаецца для правядзеньня тэстаў JavaScript.", - "javascripttest-pagetext-unknownframework": "Невядомая бібліятэка тэставаньня «$1».", "javascripttest-pagetext-unknownaction": "Невядомае дзеяньне «$1».", - "javascripttest-pagetext-frameworks": "Калі ласка, выберыце адну з прапанаваных бібліятэка тэставаньня: $1", - "javascripttest-pagetext-skins": "Выберыце афармленьне для тэставаньня:", "javascripttest-qunit-intro": "Глядзіце [$1 дакумэнтацыю па тэставаньні] на mediawiki.org.", "tooltip-pt-userpage": "{{GENDER:|Вашая ўласная}} старонка", "tooltip-pt-anonuserpage": "Старонка ўдзельніка для IP-адрасу, зь якога Вы рэдагуеце", @@ -2655,8 +2674,8 @@ "exif-colorspace": "Колеравая прастора", "exif-componentsconfiguration": "Канфігурацыя колеравых кампанэнтаў", "exif-compressedbitsperpixel": "Глыбіня колеру пасьля сьцісканьня", - "exif-pixelydimension": "Шырыня выявы", - "exif-pixelxdimension": "Вышыня выявы", + "exif-pixelxdimension": "Шырыня выявы", + "exif-pixelydimension": "Вышыня выявы", "exif-usercomment": "Камэнтары карыстальніка", "exif-relatedsoundfile": "Датычны аўдыё-файл", "exif-datetimeoriginal": "Дата і час утварэньня зьвестак", @@ -3114,7 +3133,6 @@ "version-libraries-description": "Апісаньне", "version-libraries-authors": "Аўтары", "redirect": "Перанакіраваньне да файла, удзельніка, старонкі, вэрсіі або журнала", - "redirect-legend": "Перанакіраваньне да файла або старонкі", "redirect-summary": "Гэтая спэцыяльная старонка перанакіруе да файла (паводле імя файла), старонкі (паводле нумару вэрсіі або старонкі), старонкі ўдзельніка (паводле нумару ўдзельніка) або запісу ў журнале падзеяў (паводле нумару ў журнале). Ужываньне: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/page/64308]], [[{{#Special:Redirect}}/revision/328429]],[[{{#Special:Redirect}}/user/101]] або [[{{#Special:Redirect}}/logid/186]].", "redirect-submit": "Перайсьці", "redirect-lookup": "Шукаць паводле:", @@ -3126,7 +3144,6 @@ "redirect-not-exists": "Значэньне ня знойдзена", "fileduplicatesearch": "Пошук дублікатаў файлаў", "fileduplicatesearch-summary": "Пошук аднолькавых файлаў на падставе іх хэшаў.", - "fileduplicatesearch-legend": "Пошук аднолькавых файлаў", "fileduplicatesearch-filename": "Назва файла:", "fileduplicatesearch-submit": "Шукаць", "fileduplicatesearch-info": "$1 × $2 піксэляў
Памер файла: $3
Тып MIME: $4", @@ -3198,7 +3215,7 @@ "tags-delete-not-allowed": "Меткі, вызначаныя пашырэньнем, ня могуць быць выдаленыя, акрамя выпадку, калі пашырэньне дазваляе гэта.", "tags-delete-not-found": "Метка «$1» не існуе.", "tags-delete-too-many-uses": "Метка «$1» выкарыстаная ў больш чым $2 {{PLURAL:$2|вэрсіі|вэрсіях}}, адпаведна, яна ня можа быць выдаленая.", - "tags-delete-warnings-after-delete": "Метка «$1» была пасьпяхова выдаленая, але {{PLURAL:$2|1=атрыманае наступнае папярэджаньне|атрыманыя наступныя папярэджаньні}}:", + "tags-delete-warnings-after-delete": "Метка «$1» была выдаленая, але {{PLURAL:$2|1=атрыманае наступнае папярэджаньне|атрыманыя наступныя папярэджаньні}}:", "tags-activate-title": "Актываваць метку", "tags-activate-question": "Вы зьбіраецеся актываваць метку «$1».", "tags-activate-reason": "Прычына:", @@ -3237,7 +3254,7 @@ "tags-edit-reason": "Прычына:", "tags-edit-revision-submit": "Дастасаваць зьмены да {{PLURAL:$1|1=гэтай вэрсіі|$1 вэрсіяў}}", "tags-edit-logentry-submit": "Дастасаваць зьмены да {{PLURAL:$1|$1 журнальнага запісу|$1 журнальных запісаў}}", - "tags-edit-success": "Зьмены былі пасьпяхова дастасаваныя.", + "tags-edit-success": "Зьмены былі дастасаваныя.", "tags-edit-failure": "Гэтыя зьмены ня могуць быць дастасаваныя:\n$1", "tags-edit-nooldid-title": "Няслушная мэтавая вэрсія", "tags-edit-nooldid-text": "Вы або не пазначылі мэтавую вэрсію для выкананьня гэтай функцыі, або пазначаная вэрсія не існуе.", @@ -3327,7 +3344,7 @@ "logentry-protect-protect-cascade": "$1 {{GENDER:$2|абараніў|абараніла}} $3 $4 [каскадна]", "logentry-protect-modify": "$1 {{GENDER:$2|зьмяніў узровень|зьмяніла ўзровень}} абароны для $3 $4", "logentry-protect-modify-cascade": "$1 {{GENDER:$2|зьмяніў узровень|зьмяніла ўзровень}} абароны для $3 $4 [каскадна]", - "logentry-rights-rights": "$1 {{GENDER:$1|зьмяніў|зьмяніла}} прыналежнасьць $3 да групы з $4 на $5", + "logentry-rights-rights": "$1 {{GENDER:$2|зьмяніў|зьмяніла}} прыналежнасьць {{GENDER:$3|$3}} да групы з $4 на $5", "logentry-rights-rights-legacy": "$1 {{GENDER:$1|зьмяніў|зьмяніла}} прыналежнасьць $3 да групаў", "logentry-rights-autopromote": "$1 {{GENDER:$1|быў аўтаматычна пераведзены|была аўтаматычна пераведзеная}} з групы $4 ў $5", "logentry-upload-upload": "$1 {{GENDER:$2|загрузіў|загрузіла}} $3", diff --git a/languages/i18n/be.json b/languages/i18n/be.json index 822a0ddbf4..a2fbb19821 100644 --- a/languages/i18n/be.json +++ b/languages/i18n/be.json @@ -25,7 +25,9 @@ "Artificial123", "Macofe", "Matma Rex", - "Goshaproject" + "Goshaproject", + "Nemo bis", + "SamGold" ] }, "tog-underline": "Падкрэсліваць спасылкі:", @@ -43,6 +45,7 @@ "tog-watchdefault": "Дабаўляць старонкі і файлы пасля маіх правак у мой спіс назірання", "tog-watchmoves": "Дабаўляць перайменаваныя мной старонкі і файлы ў мой спіс назірання", "tog-watchdeletion": "Дабаўляць сцёртыя мной старонкі і файлы ў мой спіс назірання", + "tog-watchuploads": "Дадаваць файлы, якія я ўкладаю, у мой спіс назірання.", "tog-watchrollback": "Дадаваць старонкі, дзе я {{GENDER:|зрабіў|зрабіла}} адкат, у мой спіс назірання", "tog-minordefault": "Пачынаць кожную праўку як дробную", "tog-previewontop": "Папярэдні паказ — над рэдактарскім полем", @@ -166,7 +169,6 @@ "moredotdotdot": "Яшчэ...", "morenotlisted": "Гэты спіс не поўны.", "mypage": "Старонка", - "anonuserpage": "Нявызначаны ўдзельнік", "mytalk": "Размовы", "anontalk": "Размовы", "navigation": "Навігацыя", @@ -485,7 +487,7 @@ "noemail": "Ва ўдзельніка \"$1\" няма запісанага адраса электроннай пошты.", "noemailcreate": "Вам неабходна паказаць дзеючы адрас электроннай пошты", "passwordsent": "На адрас электроннай пошты, зарэгістраваны для \"$1\",\nбыў дасланы новы пароль.\nКалі ласка, увайдзіце ў сістэму зноў пасля яго атрымання.", - "blocked-mailpassword": "Для адрасу IP, з якога вы працуеце, забароненыя праўкі, а значыць, у мэтах абароны ад злоўжывання нельга карыстацца і функцыяй аднаўлення паролю.", + "blocked-mailpassword": "Для адраса IP, з якога вы працуеце, забаронены праўкі. У мэтах абароны ад злоўжывання нельга карыстацца і функцыяй аднаўлення пароля.", "eauthentsent": "Пацверджанне было адасланае электроннай поштай на азначаны адрас эл.пошты.\nКаб туды, у далейшым, трапляла іншая пошта адсюль, патрабуецца выканаць інструкцыі, выкладзеныя ў тым эл.паведамленні, каб пацвердзіць сваё права на рахунак эл.пошты.", "throttled-mailpassword": "Нагаданне пра пароль ужо адсылалася на працягу апошн{{PLURAL:$1|яй гадзіны|іх $1 гадзін}}. Дзеля абароны ад злоўжыванняў, дазваляецца атрымліваць толькі адно такое нагаданне за {{PLURAL:$1|гадзіну|$1 гадзіны|$1 гадзін}}.", "mailerror": "Памылка адсылання эл.пошты: $1", @@ -1000,6 +1002,7 @@ "prefs-help-recentchangescount": "Гэта ўключае ў сябе апошнія змены, гісторыі старонак, журналы.", "prefs-help-watchlist-token2": "Гэта сакрэтны ключ к сеціўнай стужцы з вашага спіса назірання.\nКожны, хто ведае гэты ключ, будзе мець магчымасць чытаць ваш спіс назірання, таму не дзяліцеся ім.\nКалі трэба, можна [[Special:ResetTokens|скінуць яго]].", "savedprefs": "Настройкі замацаваныя.", + "savedrights": "Дазволы {{GENDER:$1|ўдзельніка|ўдзельніцы}} $1 захаваныя.", "timezonelegend": "Часавы пояс:", "localtime": "Мясцовы час:", "timezoneuseserverdefault": "Карыстацца настаўленнямі серверу ($1)", @@ -1065,6 +1068,7 @@ "prefs-tokenwatchlist": "Токен", "prefs-diffs": "Розніцы", "prefs-help-prefershttps": "Гэта настройка пачне дзейнічаць па наступным уваходзе ў сістэму.", + "prefswarning-warning": "Вы зрабілі змены ў сваіх настройках, якія яшчэ не былі запісаныя.\nКалі вы закрыеце гэту старонку, не націснуўшы \"$1\", вашы настройкі не будуць абноўлены.", "prefs-tabs-navigation-hint": "Падказка: Вы можаце карыстацца клавішамі са стрэлкамі ўлева і ўправа для навігацыі паміж карткамі ў спісе картак.", "userrights": "Распараджэнне правамі ўдзельніка", "userrights-lookup-user": "Распараджацца групамі ўдзельнікаў", @@ -1192,6 +1196,8 @@ "grant-createaccount": "Ствараць уліковыя запісы", "grant-createeditmovepage": "Ствараць, правіць і пераносіць старонкі", "grant-delete": "Сціраць старонкі, версіі і запісы ў журналах", + "grant-editinterface": "Правіць прасторы назваў МедыяВікі і CSS/JavaScript удзельніка", + "grant-editmycssjs": "Правіць ваш CSS/JavaScript", "grant-editmyoptions": "Змяняць вашы настройкі", "grant-editmywatchlist": "Правіць ваш спіс назірання", "grant-editpage": "Правіць наяўныя старонкі", @@ -1253,6 +1259,10 @@ "action-viewmywatchlist": "глядзець свой спіс назірання", "action-viewmyprivateinfo": "бачыць свае асабістыя звесткі", "action-editmyprivateinfo": "правіць свае асабістыя звесткі", + "action-editcontentmodel": "правіць мадэль змесціва старонкі", + "action-managechangetags": "ствараць і выдаляць біркі з базы даных", + "action-applychangetags": "прымяняць біркі з сваімі праўкамі", + "action-changetags": "дадаваць і выдаляць адвольныя біркі да асобных версій і запісаў у журнале падзей", "nchanges": "$1 {{PLURAL:$1|змена|змены|змен}}", "enhancedrc-since-last-visit": "$1 {{PLURAL:$1|з часу апошняга наведвання}}", "enhancedrc-history": "гісторыя", @@ -1268,6 +1278,7 @@ "recentchanges-label-plusminus": "Аб'ём старонкі змяніўся на гэтую лічбу байтаў", "recentchanges-legend-heading": "Легенда:", "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (гл. асобна [[Special:NewPages|новыя старонкі]])", + "recentchanges-submit": "Паказаць", "rcnotefrom": "Ніжэй {{PLURAL:$5|паказана змяненне|паказаны змены}} з $3, $4 (не больш за $1).", "rclistfrom": "Паказаць змены з $3 $2", "rcshowhideminor": "$1 дробныя праўкі", @@ -1288,6 +1299,9 @@ "rcshowhidemine": "$1 уласныя праўкі", "rcshowhidemine-show": "Паказаць", "rcshowhidemine-hide": "Схаваць", + "rcshowhidecategorization": "$1 катэгарызацыю старонак", + "rcshowhidecategorization-show": "Паказаць", + "rcshowhidecategorization-hide": "Схаваць", "rclinks": "Паказаць апошнія $1 змен за мінулыя $2 дзён
$3", "diff": "розн.", "hist": "гіст.", @@ -1298,7 +1312,7 @@ "boteditletter": "р", "number_of_watching_users_pageview": "[$1 {{PLURAL:$1|назіральнік|назіральнікі|назіральнікаў}}]", "rc_categories": "Абмежаваць катэгорыямі (размяжоўваць знакам \"|\"):", - "rc_categories_any": "Усе", + "rc_categories_any": "Любая з абраных", "rc-change-size-new": "$1 {{PLURAL:$1|байт|байты|байтаў}} пасля змены", "newsectionsummary": "/* $1 */ новы падраздзел", "rc-enhanced-expand": "Паказаць падрабязнасці", @@ -1311,6 +1325,11 @@ "recentchangeslinked-summary": "Гэта пералік нядаўніх змяненняў старонак, на якія спасылаецца азначаная старонка, або змяненняў складнікаў азначанай катэгорыі.\nСтаронкі, якія ўваходзяць у [[Special:Watchlist|лік назіраных вамі]], выдзелены стылем.", "recentchangeslinked-page": "Назва старонкі:", "recentchangeslinked-to": "Паказваць, замест гэтага, змяненні на старонках, што спасылаюцца сюды", + "recentchanges-page-added-to-category": "[[:$1]] дададзена ў катэгорыю", + "recentchanges-page-added-to-category-bundled": "[[:$1]] дададзена ў катэгорыю, [[Special:WhatLinksHere/$1|гэтая старонка ўключана ў іншыя старонкі]]", + "recentchanges-page-removed-from-category": "[[:$1]] выдалена з катэгорыі", + "recentchanges-page-removed-from-category-bundled": "[[:$1]] выдалена з катэгорыі, [[Special:WhatLinksHere/$1|гэтая старонка ўключана ў іншыя старонкі]]", + "autochange-username": "Аўтаматычная змена MediaWiki", "upload": "Укласці файл", "uploadbtn": "Укласці файл", "reuploaddesc": "Спыніць укладанне і вярнуцца да пачатковага фармуляра.", @@ -1378,6 +1397,13 @@ "uploaddisabledtext": "Не дазваляюцца ўкладанні файлаў.", "php-uploaddisabledtext": "Укладанне файлаў не дазволена ў асяроддзі PHP. Праверце настаўленне file_uploads.", "uploadscripted": "У файле ўтрымліваецца код HTML або Яваскрыпту, які можа быць памылкова апрацаваны браўзерам.", + "upload-scripted-pi-callback": "Немагчыма ўкласці файл, які ўтрымлівае інструкцыі апрацоўкі табліцы стыляў XML.", + "uploaded-script-svg": "У ўкладзеным SVG-файле знойдзены небяспечны элемент з падтрымкай скрыптаў \"$1\".", + "uploaded-hostile-svg": "У ўкладзеным SVG файле знойдзены небяспечны CSS у элеменце стылю.", + "uploaded-event-handler-on-svg": "Устаноўка атрыбутаў апрацоўшчыка падзей $1=\"$2\" у SVG файле не дазваляецца.", + "uploaded-href-attribute-svg": "у SVG файлах атрыбутам href дазволены толькі мэты віду http:// або https://, знойдзена <$1 $2=\"$3\">.", + "uploaded-href-unsafe-target-svg": "У ўкладзеным SVG файле знойдзена спасылка на небяспечныя звесткі: URI мэты <$1 $2=\"$3\">.", + "uploaded-animate-svg": "У ўкладзеным SVG файле знойдзены тэг \"animate\", здольны змяніць спасылку з дапамогай атрыбута \"from\" <$1 $2=\"$3\">.", "uploadscriptednamespace": "Гэты файл SVG утрымлівае недапушчальную прастору імёнаў \"$1\".", "uploadinvalidxml": "Немагчыма прааналізаваць XML ва ўкладзеным файле.", "uploadvirus": "Файл утрымлівае вірус! Падрабязнасці: $1", @@ -1391,6 +1417,7 @@ "upload-options": "Магчымасці ўкладання", "watchthisupload": "Назіраць за файлам", "filewasdeleted": "Файл з такою назвай быў раней укладзены сюды, а потым сцёрты. Варта паглядзець у $1 перад тым, як укладаць яго нанова.", + "filename-thumb-name": "Выглядае як назва мініяцюры. Калі ласка, не загружайце мініяцюры назад у тую ж вікі. Калі вам неабходны гэты файл, выпраўце назву на больш асэнсаваную, каб яна не ўтрымлівала прэфікс мініяцюры.", "filename-bad-prefix": "Назва файла, які вы ўкладаеце, пачынаецца з \"$1\", што падобна на аўтаматычныя, неінфарматыўныя назвы файлаў, якія робяць лічбавыя фотаапараты. Калі ласка, змяніце назву на больш зразумелую.", "upload-proto-error": "Няправільны пратакол", "upload-proto-error-text": "Укладанне файла зводдаль патрабуе URL, які пачынаецца з http:// або ftp://.", @@ -1401,6 +1428,7 @@ "upload-too-many-redirects": "Занадта шмат перасылак за гэтым адрасам (URL)", "upload-http-error": "Памылка HTTP: $1", "upload-copy-upload-invalid-domain": "Капіраванне загрузак не дазволенае ў гэтым дамене.", + "upload-foreign-cant-upload": "Гэта вікі не настроена для ўкладання файлаў у запытанае старонняе сховішча файлаў.", "upload-dialog-title": "Укласці файл", "upload-dialog-button-cancel": "Нічога", "upload-dialog-button-done": "Гатова", @@ -1408,12 +1436,20 @@ "upload-dialog-button-upload": "Укласці", "upload-form-label-infoform-title": "Падрабязнасці", "upload-form-label-infoform-name": "Назва", + "upload-form-label-infoform-name-tooltip": "Унікальны апісальны загаловак для файла, які будзе служыць яго назвай. Можаце выкарыстоўваць звычайную мову з прабеламі. Не дадавайце канчатак назвы файла.", "upload-form-label-infoform-description": "Апісанне", + "upload-form-label-infoform-description-tooltip": "Коратка апішыце ўсё значнае пра гэту працу.\nДля фатаграфіі ўкажыце галоўныя аб'екты, нагоду або месца.", "upload-form-label-usage-title": "Выкарыстанне", "upload-form-label-usage-filename": "Назва файла", "foreign-structured-upload-form-label-own-work": "Гэта мая ўласная праца", "foreign-structured-upload-form-label-infoform-categories": "Катэгорыі", "foreign-structured-upload-form-label-infoform-date": "Дата", + "foreign-structured-upload-form-label-own-work-message-local": "Я пацвярджаю, што ўкладваю гэты файл згодна з правіламі і ліцэнзійнай палітыкай {{GRAMMAR:родны|{{SITENAME}}}}.", + "foreign-structured-upload-form-label-not-own-work-message-local": "Калі вы не можаце ўкладваць гэты файл згодна з правіламі пляцоўкі {{SITENAME}}, калі ласка, закрыйце гэта акно і паспрабуйце іншы метад.", + "foreign-structured-upload-form-label-not-own-work-local-local": "Вы таксама можаце паспрабаваць [[Special:Upload|прадвызначаную старонку ўкладвання]].", + "foreign-structured-upload-form-label-own-work-message-default": "Я разумею, што ўкладваю гэты файл у агульнае сховішча. Я пацвярджаю, што раблю гэта ў адпаведнасці з умовамі выкарыстання і ліцэнзійнай палітыкай.", + "foreign-structured-upload-form-label-not-own-work-message-default": "Калі вы не можаце ўкладваць гэты файл згодна з правіламі агульнага сховішча, калі ласка, закрыйце гэта акно і паспрабуйце іншы метад.", + "foreign-structured-upload-form-label-not-own-work-local-default": "Вы таксама можаце паспрабаваць скарыстацца [[Special:Upload|старонкай укладанняў пляцоўкі {{SITENAME}}]], калі гэты файл можна укладваць туды згодна з іх палітыкай.", "backend-fail-stream": "Не атрымалася трансляваць файл $1.", "backend-fail-backup": "Немагчыма зрабіць рэзервную копію $1.", "backend-fail-notexists": "Файл $1 не існуе.", @@ -1494,6 +1530,7 @@ "listfiles-delete": "сцерці", "listfiles-summary": "Гэтая службовая старонка паказвае ўсе загружаныя файлы.", "listfiles_search_for": "Знайсці назву выявы:", + "listfiles-userdoesnotexist": "Уліковы запіс удзельніка \"$1\" не зарэгістраваны.", "imgfile": "файл", "listfiles": "Усе файлы", "listfiles_thumb": "Драбніца", @@ -1707,14 +1744,25 @@ "apihelp": "Даведка па API", "apihelp-no-such-module": "Модуль \"$1\" не знойдзены.", "apisandbox": "Пясочніца API", + "apisandbox-jsonly": "Каб выкарыстоўваць пясочніцу API, патрэбен JavaScript.", + "apisandbox-api-disabled": "API адключаны на гэтым сайце.", "apisandbox-fullscreen": "Разгарнуць панэль", + "apisandbox-fullscreen-tooltip": "Разгарнуць панэль пясочніцы, каб запоўніць акно браўзера.", "apisandbox-unfullscreen": "Паказаць старонку", "apisandbox-submit": "Зрабіць запыт", "apisandbox-reset": "Ачысціць", "apisandbox-retry": "Паўтарыць", + "apisandbox-no-parameters": "Гэты модуль API не мае параметраў.", + "apisandbox-helpurls": "Спасылкі на даведку", "apisandbox-examples": "Прыклады", "apisandbox-dynamic-parameters": "Дадатковыя параметры", "apisandbox-dynamic-parameters-add-label": "Дадаць параметр:", + "apisandbox-dynamic-parameters-add-placeholder": "Назва параметра", + "apisandbox-dynamic-error-exists": "Параметр з назвай \"$1\" ужо існуе.", + "apisandbox-deprecated-parameters": "Састарэлыя параметры", + "apisandbox-results": "Вынікі", + "apisandbox-alert-page": "Палі на гэтай старонцы недапушчальныя.", + "apisandbox-alert-field": "Значэнне гэтага поля недапушчальнае.", "booksources": "Кнігі", "booksources-search-legend": "Знайсці, дзе купіць кнігі", "booksources-search": "Пошук", @@ -1729,6 +1777,8 @@ "logempty": "Нічога адпаведнага ў журнале не знойдзена.", "log-title-wildcard": "Знайсці назвы, якія пачынаюцца з гэтага тэксту", "showhideselectedlogentries": "Паказаць/схаваць выбраныя запісы журнала", + "log-edit-tags": "Правіць біркі да выбраных запісаў журнала", + "checkbox-select": "Выбраць: $1", "checkbox-all": "Усе", "allpages": "Усе старонкі", "nextpage": "Наступная старонка ($1)", @@ -1746,10 +1796,9 @@ "cachedspecial-viewing-cached-ts": "Вы праглядаеце кэшаваную версію старонкі, якая можа быць не зусім актуальнай.", "cachedspecial-refresh-now": "Глядзець найноўшую.", "categories": "Катэгорыі", + "categories-submit": "Паказаць", "categoriespagetext": "Наступн{{PLURAL:$1|ая катэгорыя ўтрымлівае|ыя $1 катэгорыі(-й) утрымліваюць}} старонкі або мультымедыю.\nТут не паказаныя [[Special:UnusedCategories|катэгорыі без складнікаў]].\nГл. таксама [[Special:WantedCategories|патрэбныя катэгорыі]].", "categoriesfrom": "Паказаць катэгорыі, пачынаючы з:", - "special-categories-sort-count": "пд. колькасці", - "special-categories-sort-abc": "пд. алфавіту", "deletedcontributions": "Выдалены ўклад удзельніка", "deletedcontributions-title": "Выдалены ўклад удзельніка", "sp-deletedcontributions-contribs": "Уклад", @@ -1771,6 +1820,7 @@ "activeusers-hidebots": "Без робатаў", "activeusers-hidesysops": "Без адміністратараў", "activeusers-noresult": "Няма такіх удзельнікаў.", + "activeusers-submit": "Паказаць актыўных удзельнікаў", "listgrouprights": "Дазволы для груп удзельнікаў", "listgrouprights-summary": "Гэты пералік вызначаных у гэтай вікі груп удзельнікаў, разам з прыпісанымі ім дазволамі.\nДаведацца больш пра асабістыя дазволы можна на старонцы [[{{MediaWiki:Listgrouprights-helppage}}]].", "listgrouprights-key": "Легенда:\n* Дадзены дазвол\n* Адкліканы дазвол", @@ -1855,6 +1905,16 @@ "wlheader-showupdated": "Старонкі, якія былі зменены пасля вашага апошняга наведвання, паказаны абрысам шрыфту.", "wlnote": "Ніжэй {{PLURAL:$1|паказана апошняя $1 змена|паказаны апошнія $1 змены|паказаны апошнія $1 змен}} за {{PLURAL:$2|апошнюю|апошнія|апошнія}} $2 {{PLURAL:$2|гадзіну|гадзіны|гадзін}}, на момант часу $3 $4.", "wlshowlast": "Паказваць апошнія $1 гадз. $2 дзён", + "watchlist-hide": "Схаваць", + "watchlist-submit": "Паказаць", + "wlshowtime": "Перыяд часу для паказу:", + "wlshowhideminor": "дробныя праўкі", + "wlshowhidebots": "робатаў", + "wlshowhideliu": "пазнаных удзельнікаў", + "wlshowhideanons": "ананімных удзельнікаў", + "wlshowhidepatr": "ухваленыя праўкі", + "wlshowhidemine": "мае праўкі", + "wlshowhidecategorization": "катэгарызацыю старонак", "watchlist-options": "Магчымасці назірання", "watching": "Дапісваецца ў спіс назірання...", "unwatching": "Спыняем назіранне...", @@ -1916,7 +1976,12 @@ "rollback-success": "Адкочаны праўкі $1; вернута апошняя версія $2.", "sessionfailure-title": "Памылка сеансу", "sessionfailure": "Магчыма, ёсць праблемы з вашым сеансам працы ў сістэме. Таму вам было адмоўлена ў выкананні дзеяння, каб засцерагчыся ад захопу сеанса.\n\nВярніцеся на папярэднюю старонку, перазагрузіце яе і тады паспрабуйце зноў.", + "changecontentmodel-title-label": "Назва старонкі", + "changecontentmodel-model-label": "Новая мадэль змесціва", "changecontentmodel-reason-label": "Прычына:", + "changecontentmodel-submit": "Змяніць", + "logentry-contentmodel-change-revertlink": "адкаціць", + "logentry-contentmodel-change-revert": "адкат", "protectlogpage": "Журнал аховы", "protectlogtext": "Ніжэй прыведзены журнал змен абароны старонкі.\nВы можаце таксама прагледзець [[Special:ProtectedPages|пералік старонак пад аховай]].", "protectedarticle": "пад аховай «[[$1]]»", @@ -1954,6 +2019,7 @@ "protect-othertime": "Іншы час:", "protect-othertime-op": "іншы час", "protect-existing-expiry": "Вызначаны час сканчэння: $3, $2", + "protect-existing-expiry-infinity": "Наяўны тэрмін дзеяння: бясконца", "protect-otherreason": "Іншая ці дадатковая прычына:", "protect-otherreason-op": "Іншая прычына", "protect-dropdown": "*Звычайныя прычыны пастаноўкі аховы\n** Празмерны ўзровень вандалізму\n** Празмерны ўзровень спаму\n** Шкодная вайна правак\n** Старонка з высокай наведвальнасцю", @@ -2093,12 +2159,14 @@ "ipb-unblock": "Разблакіраваць удзельніка ці IP-адрас", "ipb-blocklist": "Паказаць наяўныя блокі", "ipb-blocklist-contribs": "Уклад {{GENDER:$1|$1}}", + "ipb-blocklist-duration-left": "засталося $1", "unblockip": "Зняць блок з удзельніка", "unblockiptext": "З дапамогай формы ніжэй можна вярнуць дазвол на праўкі для раней заблакіраванага IP-адраса або ўдзельніка.", "ipusubmit": "Зняць гэты блок", "unblocked": "[[User:$1|$1]] быў адблакаваны", "unblocked-range": "$1 быў разблакаваны.", "unblocked-id": "Блок $1 быў зняты", + "unblocked-ip": "[[Special:Contributions/$1|$1]] быў разблакіраваны.", "blocklist": "Заблакаваныя ўдзельнікі", "ipblocklist": "Заблакаваныя ўдзельнікі", "ipblocklist-legend": "Знайсці заблакаванага ўдзельніка", @@ -2146,6 +2214,7 @@ "block-log-flags-hiddenname": "схаванае імя ўдзельніка", "range_block_disabled": "Не дазволена адміністратарская магчымасць ставіць блокі на адрасныя дыяпазоны.", "ipb_expiry_invalid": "Некарэктны час сканчэння.", + "ipb_expiry_old": "Час сканчэння — у мінулым.", "ipb_expiry_temp": "Скрытыя блокі на імёны ўдзельнікаў мусяць быць сталымі.", "ipb_hide_invalid": "Немагчыма заглушыць гэты рахунак; для яго маецца больш за {{PLURAL:$1|адну праўку|$1 праўкі|$1 правак}}.", "ipb_already_blocked": "\"$1\" ужо знаходзіцца пад блокам", @@ -2288,6 +2357,9 @@ "import-interwiki-history": "Капіраваць усе гістарычныя версіі гэтай старонкі", "import-interwiki-templates": "Разам з усімі шаблонамі", "import-interwiki-submit": "Імпартаваць", + "import-mapping-default": "Імпартаваць у прадвызначанае месца", + "import-mapping-namespace": "Імпартаваць у прастору назваў:", + "import-mapping-subpage": "Імпартаваць як падстаронкі наступнай старонкі:", "import-upload-filename": "Назва файла:", "import-comment": "Каментарый:", "importtext": "Калі ласка, экспартуйце файл з крынічнай вікі з дапамогай [[Special:Export|прылады экспарту]].\nЗахавайце яго на свой камп'ютар, а потым загрузіце сюды.", @@ -2327,10 +2399,7 @@ "import-logentry-upload-detail": "$1 {{PLURAL:$1|версія|версіі|версій}} імпартавана", "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|версія|версіі|версій}} імпартавана з $2", "javascripttest": "JavaScript-тэсты", - "javascripttest-pagetext-noframework": "Гэта старонка зарэзервавана для запуску тэстаў JavaScript", - "javascripttest-pagetext-unknownframework": "Невядомая бібліятэка тэставання «$1».", - "javascripttest-pagetext-frameworks": "Калі ласка, выберыце адну з прапанаваных бібліятэк тэставання: $1", - "javascripttest-pagetext-skins": "Выберыце афармленне для тэставання:", + "javascripttest-pagetext-unknownaction": "Невядомае дзеянне \"$1\".", "javascripttest-qunit-intro": "Глядзіце [$1 дакументацыю па тэставанні] на mediawiki.org.", "tooltip-pt-userpage": "Ваша ўласная старонка", "tooltip-pt-anonuserpage": "Старонка ўдзельніка для таго IP, з якога вы зараз працуеце", @@ -2372,6 +2441,7 @@ "tooltip-feed-atom": "Струмень навін Atom для гэтай старонкі", "tooltip-t-contributions": "Пералік укладаў {{GENDER:$1|гэтага ўдзельніка|гэтай удзельніцы}}", "tooltip-t-emailuser": "Адаслаць {{GENDER:$1|удзельніку|удзельніцы}} ліст эл.пошты", + "tooltip-t-info": "Больш звестак пра гэту старонку", "tooltip-t-upload": "Укласці файлы", "tooltip-t-specialpages": "Пералік усіх адмысловых старонак", "tooltip-t-print": "Друкавальная версія гэтай старонкі", @@ -2436,7 +2506,9 @@ "pageinfo-robot-index": "Дазволена", "pageinfo-robot-noindex": "Не дазволена", "pageinfo-watchers": "Колькасць назіральнікаў старонкі", + "pageinfo-visiting-watchers": "Колькасць удзельнікаў, якія назіраюць за старонкай і бачылі апошнія змены", "pageinfo-few-watchers": "Менш чым $1 {{PLURAL:$1|назіральнік|назіральнікі|назіральнікаў}}", + "pageinfo-few-visiting-watchers": "Могуць быць, а можа і не быць удзельнікаў, якія назіраюць за старонкай і бачылі апошнія змены", "pageinfo-redirects-name": "Колькасць перасылак на гэту старонку", "pageinfo-subpages-name": "Колькасць падстаронак гэтай старонкі", "pageinfo-subpages-value": "$1 ($2 {{PLURAL:$2|перасылка|перасылкі|перасылак}}; $3 {{PLURAL:$3|прамая спасылка|прамыя спасылкі|прамых спасылак}})", @@ -2461,11 +2533,13 @@ "pageinfo-protect-cascading-yes": "Да", "pageinfo-protect-cascading-from": "Каскадная ахова ад", "pageinfo-category-info": "Звесткі аб катэгорыі", + "pageinfo-category-total": "Агульная колькасць членаў", "pageinfo-category-pages": "Колькасць старонак", "pageinfo-category-subcats": "Колькасць падкатэгорый", "pageinfo-category-files": "Колькасць файлаў", "markaspatrolleddiff": "Пазначыць як ухваленае", "markaspatrolledtext": "Пазначыць старонку як ухваленую", + "markaspatrolledtext-file": "Пазначыць версію файла як ухваленую", "markedaspatrolled": "Пазначана як ухваленае", "markedaspatrolledtext": "Азначаная версія [[:$1]] пазначана як ухваленая.", "rcpatroldisabled": "Не працуе Ухваленне Нядаўніх Правак", @@ -2478,6 +2552,7 @@ "patrol-log-page": "Журнал ухваленых", "patrol-log-header": "Журнал ухваленых версій", "log-show-hide-patrol": "$1 журнал ухваленняў", + "log-show-hide-tag": "$1 журнал бірак", "deletedrevision": "Сцёрта старая версія $1", "filedeleteerror-short": "Памылка пры сціранні файла: $1", "filedeleteerror-long": "Памылкі пры спробе сцірання файла:\n\n$1", @@ -2500,6 +2575,7 @@ "svg-long-error": "Няспраўны файл SVG: $1", "show-big-image": "Арыгінальны файл", "show-big-image-preview": "Памер пры папярэднім праглядзе: $1.", + "show-big-image-preview-differ": "Памер гэтага $3-прагляду для $2-файла: $1.", "show-big-image-other": "{{PLURAL:$2|Іншы дазвол|Іншыя дазволы}}: $1.", "show-big-image-size": "$1 × $2 піхеляў", "file-info-gif-looped": "закальцаваныя", @@ -2515,6 +2591,7 @@ "newimages-legend": "Фільтр", "newimages-label": "Назва файла (або яе частка):", "newimages-showbots": "Паказваць укладанні ботамі", + "newimages-hidepatrolled": "Без паказу ўхваленых ўкладанняў", "noimages": "Тут нічога няма.", "ilsubmit": "Знайсці", "bydate": "п. датаў", @@ -2578,8 +2655,8 @@ "exif-colorspace": "Каляровая прастора", "exif-componentsconfiguration": "Значэнні кампанентаў", "exif-compressedbitsperpixel": "Лад сціскання выявы", - "exif-pixelydimension": "Шырыня выявы", - "exif-pixelxdimension": "Вышыня выявы", + "exif-pixelxdimension": "Шырыня выявы", + "exif-pixelydimension": "Вышыня выявы", "exif-usercomment": "Заўвагі карыстальніка", "exif-relatedsoundfile": "Дачынены гукавы файл", "exif-datetimeoriginal": "Дата і час стварэння дадзеных", @@ -2728,6 +2805,7 @@ "exif-compression-4": "CCITT Group 4, факсавае кадзіраванне", "exif-copyrighted-true": "Ахоўваецца аўтарскім правам", "exif-copyrighted-false": "Статус аўтарства не ўстаноўлены", + "exif-photometricinterpretation-1": "Чорны і белы (чорны — 0)", "exif-unknowndate": "Невядомая дата", "exif-orientation-1": "Звычайна", "exif-orientation-2": "Адлюстравана злева ўправа", @@ -2909,7 +2987,7 @@ "scarytranscludefailed-httpstatus": "[Не ўдалося атрымаць шаблон для $1: HTTP $2]", "scarytranscludetoolong": "[Занадта доўгі URL]", "deletedwhileediting": "'''Увага''': гэтая старонка была сцёрта пасля таго, як вы пачалі з ёй працаваць!", - "confirmrecreate": "Удзельнік [[User:$1|$1]] ([[User talk:$1|размова]]) сцёр гэты артыкул пасля таго, як вы пачалі працу з ім, падаўшы прычыну:\n: ''$2''\nПацвердзіце свой намер аднавіць гэты артыкул.", + "confirmrecreate": "{{GENDER:$1|Удзельнік|Удзельніца}} [[User:$1|$1]] ([[User talk:$1|размова]]) {{GENDER:$1|сцёр|сцерла}} гэты артыкул пасля таго, як вы пачалі працу з ім, падаўшы прычыну:\n: $2\nПацвердзіце свой намер аднавіць гэты артыкул.", "confirmrecreate-noreason": "{{GENDER:$1|Удзельнік|Удзельніца}} [[User:$1|$1]] ([[User talk:$1|размовы]]) {{GENDER:$1|сцёр|сцёрла}} гэту старонку пасля таго, як вы пачалі яе рэдагаваць.\nКалі ласка, пацвердзіце, што вы сапраўды жадаеце аднавіць гэтую старонку.", "recreate": "Аднавіць", "unit-pixel": "крпк", @@ -2971,8 +3049,10 @@ "watchlisttools-edit": "Паказаць спіс назірання", "watchlisttools-raw": "Паказаць нефарматаваны спіс назірання", "signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|размовы]])", + "timezone-local": "Мясцовы", "duplicate-defaultsort": "Увага: прадвызначаная клавіша ўпарадкавання \"$2\" замяніла ранейшую такую клавішу \"$1\".", "duplicate-displaytitle": "Папярэджанне: Паказаная назва \"$2\" перасягае ранейшую назву \"$1\".", + "invalid-indicator-name": "Памылка: Атрыбут name індыкатараў статусу старонкі не можа быць пустым.", "version": "Версія", "version-extensions": "Устаноўленыя прыстаўкі", "version-skins": "Устаноўленыя вокладкі", @@ -3012,12 +3092,13 @@ "version-entrypoints": "Уваходныя адрасы", "version-entrypoints-header-entrypoint": "Кропка ўваходу", "version-entrypoints-header-url": "URL", + "version-libraries": "Устаноўленыя бібліятэкі", + "version-libraries-library": "Бібліятэка", "version-libraries-version": "Версія", "version-libraries-license": "Ліцэнзія", "version-libraries-description": "Апісанне", "version-libraries-authors": "Аўтары", "redirect": "Перасылка да файла, ID удзельніка, старонкі, версіі ці журнала", - "redirect-legend": "Перасылка да файла ці старонкі", "redirect-summary": "Гэта адмысловая старонка перасылае да файла (з назвы файла), на старонку (з ідэнтыфікатара версіі ці старонкі), ці на старонку ўдзельніка (калі дадзены лічбавы ID удзельніка). Ужыванне: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/page/64308]], [[{{#Special:Redirect}}/revision/328429]], ці [[{{#Special:Redirect}}/user/101]].", "redirect-submit": "Перайсці", "redirect-lookup": "Шукаць:", @@ -3026,10 +3107,10 @@ "redirect-page": "Ідэнтыфікатар старонкі", "redirect-revision": "Версія старонкі", "redirect-file": "Назва файла", + "redirect-logid": "ID журнала", "redirect-not-exists": "Значэнне не знойдзена", "fileduplicatesearch": "Пошук дублікатных файлаў", "fileduplicatesearch-summary": "Пошук дублікатных файлах на падставе іх хэшаў.", - "fileduplicatesearch-legend": "Знайсці дублікаты", "fileduplicatesearch-filename": "Назва файла:", "fileduplicatesearch-submit": "Знайсці", "fileduplicatesearch-info": "$1 × $2 кропак
Аб'ём файла: $3
Тып MIME: $4", @@ -3051,6 +3132,7 @@ "specialpages-group-wiki": "Вікізвесткі і прылады", "specialpages-group-redirects": "Адмысловыя старонкі-перасылкі", "specialpages-group-spam": "Прылады супраць спама", + "specialpages-group-developer": "Інструменты распрацоўшчыка", "blankpage": "Пустая старонка", "intentionallyblankpage": "Старонка наўмысна пакінута пустой, і ўжываецца для вымярэння хуткасці і падобнага.", "external_image_whitelist": " #Гэты радок пакіньце ў такім самым выглядзе
\n#Упішыце часткі рэгулярных выразаў (тое, што пішуць паміж знакамі //) ніжэй\n#Гэта будзе параўноўвацца з адрасамі URL вонкавых выяваў, на якія ёсць спасылкі\n#Тыя з іх, дзе атрымаецца адпаведнасць, будуць паказаныя як выявы, а іначай толькі як спасылкі\n#Радкі, якія пачынаюцца з знака #, лічацца каментарамі\n#Малыя і вялікія літары не адрозніваюцца\n\n#Усе часткі рэгулярных выразаў павінны быць над гэтым радком. Сам радок пакіньце ў такім самым выглядзе
", @@ -3069,8 +3151,63 @@ "tags-actions-header": "Дзеянні", "tags-active-yes": "Да", "tags-active-no": "Не", + "tags-source-extension": "Вызначаецца канчаткам назвы", + "tags-source-manual": "Ставіцца ўручную ўдзельнікамі і робатамі", + "tags-source-none": "Больш не выкарыстоўваецца", "tags-edit": "правіць", + "tags-delete": "сцерці", + "tags-activate": "актываваць", + "tags-deactivate": "адключыць", "tags-hitcount": "$1 {{PLURAL:$1|змена|змены|змен}}", + "tags-create-heading": "Стварыць новую бірку", + "tags-create-explanation": "Калі не ўказана іншае, новыя біркі будуць даступны для выкарыстання ўдзельнікам і робатам.", + "tags-create-tag-name": "Назва біркі:", + "tags-create-reason": "Прычына:", + "tags-create-submit": "Стварыць", + "tags-create-no-name": "Вы мусіце ўказаць назву біркі.", + "tags-create-invalid-chars": "Назвы бірак не павінны ўтрымліваць коскі (,) або касыя рысы (/).", + "tags-create-invalid-title-chars": "Назвы бірак не павінны ўтрымліваць сімвалы, якія нельга выкарыстоўваць у назвах старонак.", + "tags-create-already-exists": "Бірка \"$1\" ужо ёсць.", + "tags-create-warnings-below": "Вы хочаце прадоўжыць стварэнне біркі?", + "tags-delete-title": "Сцерці бірку", + "tags-delete-explanation-initial": "Вы збіраецеся выдаліць бірку \"$1\" з базы звестак.", + "tags-delete-explanation-warning": "Гэта дзеянне незваротнае і не можа быць адкочана нават адміністратарамі базы звестак. Упэўніцеся, што гэта тая бірка, што вы хочаце выдаліць.", + "tags-delete-reason": "Прычына:", + "tags-delete-submit": "Незваротна сцерці гэту бірку", + "tags-delete-not-allowed": "Біркі, вызначаныя пашырэннем, нельга прыбраць, акрамя выпадкаў, калі гэта дазволена яўна.", + "tags-delete-not-found": "Бірка \"$1\" не існуе.", + "tags-delete-too-many-uses": "Бірка \"$1\" прыменена ў больш чым $2 {{PLURAL:$2|версіі|версіях}}, а значыць, яна не можа быць сцёрта.", + "tags-delete-warnings-after-delete": "Бірка \"$1\" была сцёрта, але {{PLURAL:$2|1=атрымана наступнае папярэджанне|атрыманы наступныя папярэджанні}}:", + "tags-activate-title": "Актываваць бірку", + "tags-activate-question": "Вы збіраецеся актываваць бірку \"$1\".", + "tags-activate-reason": "Прычына:", + "tags-activate-not-allowed": "Немагчыма актываваць бірку \"$1\".", + "tags-activate-not-found": "Бірка \"$1\" не існуе.", + "tags-activate-submit": "Актываваць", + "tags-deactivate-title": "Дэактываваць бірку", + "tags-deactivate-question": "Вы збіраецеся дэактываваць бірку \"$1\".", + "tags-deactivate-reason": "Прычына:", + "tags-deactivate-not-allowed": "Немагчыма дэактываваць бірку \"$1\".", + "tags-deactivate-submit": "Дэактываваць", + "tags-update-add-not-allowed-one": "Бірку \"$1\" нельга дадаваць уручную.", + "tags-update-remove-not-allowed-one": "Бірку \"$1\" нельга выдаляць.", + "tags-update-remove-not-allowed-multi": "{{PLURAL:$2|Наступную бірку|Наступныя біркі}} нельга выдаляць уручную: $1", + "tags-edit-title": "Правіць біркі", + "tags-edit-manage-link": "Кіраванне біркамі", + "tags-edit-revision-selected": "{{PLURAL:$1|Выбраная версія|Выбраныя версіі}} [[:$2]]:", + "tags-edit-logentry-selected": "{{PLURAL:$1|Выбраны запіс|Выбраныя запісы}} журнала:", + "tags-edit-revision-legend": "Дадаць ці прыбраць біркі з {{PLURAL:$1|1=гэтай версіі|усіх $1 версій}}", + "tags-edit-logentry-legend": "Дадаць ці прыбраць біркі з {{PLURAL:$1|1=гэтага запісу|усіх $1 запісаў}} журнала", + "tags-edit-existing-tags": "Наяўныя біркі:", + "tags-edit-existing-tags-none": "Няма", + "tags-edit-new-tags": "Новыя біркі:", + "tags-edit-add": "Дадаць гэтыя біркі:", + "tags-edit-remove": "Сцерці гэтыя біркі:", + "tags-edit-remove-all-tags": "(сцерці ўсе біркі)", + "tags-edit-chosen-placeholder": "Выберыце біркі", + "tags-edit-chosen-no-results": "Не знойдзена бірак, якія б адпавядалі запыту", + "tags-edit-reason": "Прычына:", + "tags-edit-nooldid-title": "Недапушчальная мэтавая версія", "comparepages": "Параўнанне старонак", "compare-page1": "Старонка 1", "compare-page2": "Старонка 2", @@ -3103,6 +3240,8 @@ "htmlform-cloner-create": "Дадаць яшчэ", "htmlform-cloner-delete": "Сцерці", "htmlform-cloner-required": "Неабходна хаця б адно значэнне.", + "htmlform-title-not-exists": "$1 не існуе.", + "htmlform-user-not-exists": "$1 не існуе.", "sqlite-has-fts": "$1 з падтрымкай поўна-тэкставага пошуку", "sqlite-no-fts": "$1 без падтрымкі поўна-тэкставага пошуку", "logentry-delete-delete": "$1 {{GENDER:$2|сцёр|сцёрла}} старонку $3", @@ -3144,14 +3283,19 @@ "logentry-upload-upload": "$1 {{GENDER:$2|уклаў|уклала}} $3", "logentry-upload-overwrite": "$1 {{GENDER:$2|уклаў|уклала}} новую версію $3", "logentry-upload-revert": "$1 {{GENDER:$2|уклаў|уклала}} $3", + "log-name-managetags": "Журнал кіравання біркамі", + "log-name-tag": "Журнал бірак", "rightsnone": "(няма)", "revdelete-summary": "тлумачэнне праўкі", "feedback-adding": "Даданне водгуку на старонку…", + "feedback-back": "Назад", "feedback-bugcheck": "Выдатна! Толькі праверце, што ў спісе [$1 вядомых памылак] яе няма падобнага запісу.", "feedback-bugnew": "Я праверыў. Паведаміць пра новую памылку", "feedback-bugornote": "Калі вы гатовыя падрабязна апісаць тэхнічную праблему, калі ласка, [$1 паведаміце пра памылку].\nУ адваротным выпадку вы можаце выкарыстоўваць гэтую простую форму. Ваш каментар будзе дададзены на старонку «[$3 $2]» разам з вашым імем удзельніка і выкарыстоўваемым браўзерам.", "feedback-cancel": "Адмена", "feedback-close": "Зроблена.", + "feedback-dialog-title": "Даслаць водгук", + "feedback-error-title": "Памылка", "feedback-error1": "Памылка. Невядомы вынік з API", "feedback-error2": "Памылка. Збой праўкі", "feedback-error3": "Памылка. Няма адказу ад API", @@ -3159,6 +3303,7 @@ "feedback-subject": "Тэма:", "feedback-submit": "Даслаць", "feedback-thanks": "Дзякуй! Ваш водгук размешчаны на старонцы «[$2 $1]».", + "feedback-thanks-title": "Дзякуем!", "searchsuggest-search": "Знайсці", "searchsuggest-containing": "змяшчае...", "api-error-badaccess-groups": "У Вас няма дазволу загружаць файлы ў гэтую вікі.", @@ -3241,15 +3386,24 @@ "pagelang-language": "Мова", "pagelang-use-default": "Прадвызначаная мова", "pagelang-select-lang": "Выберыце мову", + "pagelang-submit": "Адправіць", "right-pagelang": "Змяняць мову старонкі", "action-pagelang": "змяняць мову старонкі", "log-name-pagelang": "Журнал змянення мовы", "log-description-pagelang": "Гэта журнал змяненняў у мовах старонкі.", - "logentry-pagelang-pagelang": "$1 {{GENDER:$2|змяніў|змяніла}} мову старонкі $3 з $4 на $5.", + "logentry-pagelang-pagelang": "$1 {{GENDER:$2|змяніў|змяніла}} мову $3 з $4 на $5.", "default-skin-not-found": "Упс! Прадвызначаная вокладка для вашай вікі ($wgDefaultSkin), $1, недаступна.\n\nВыглядае на тое, што ваша інсталяцыя ўключае наступныя вокладкі. Гл. [https://www.mediawiki.org/wiki/Manual:Skin_configuration Інструкцыя: Устаноўка вокладак] дзеля інфармацыі па ўключэнні і выбару прадвызначанай вокладкі.\n\n$2\n\n; Калі вы толькі што ўстанавілі MediaWiki:\n: Магчыма, вы ўстанавілі з git, ці наўпрост з зыходнага коду, выкарыстаўшы іншы метад. Гэта нармальна. Паспрабуйце ўстанавіць некалькі вокладак з [https://www.mediawiki.org/wiki/Category:All_skins каталога вокладак mediawiki.org], такім чынам:\n:* Узяўшы [https://www.mediawiki.org/wiki/Download tarball-інсталятар], які ўтрымлівае некалькі вокладак і прыставак. Вы можаце скапіяваць і ўставіць каталог skins/ з яго.\n:* Зрабіўшы клон аднаго з сховішчаў mediawiki/skins/* праз git у каталог skins/ вашай інсталяцыі MediaWiki.\n: Калі вы распрацоўшчык MediaWiki, гэта не павінна ўплываць на ваша git-сховішча.\n\n; Калі вы толькі што абнавілі MediaWiki:\n: MediaWiki 1.24 і навейшыя больш не падключаюць вокладкі аўтаматычна (гл. [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Інструкцыя: Аўтавызначэнне вокладак]). Вы можаце ўставіць наступныя радкі ў LocalSettings.php, каб падключыць усе ўстаноўленыя вокладкі:\n\n
$3
\n\n; Калі вы толькі што змянілі LocalSettings.php:\n: Пераправерце назвы вокладак на прадмет памылак.", "default-skin-not-found-no-skins": "Упс! Прадвызначаная вокладка для вашай вікі ($wgDefaultSkin), $1, недаступна.\n\nВы не ўстанавілі вокладкі.\n\n; Калі вы толькі што ўстанавілі ці абнавілі MediaWiki:\n: Магчыма, вы ўстанавілі з git, ці наўпрост з зыходнага коду, выкарыстаўшы іншы метад. Гэта нармальна. MediaWiki 1.24 і навейшыя не ўключаюць вокладкі ў асноўнае сховішча. Паспрабуйце ўстанавіць некалькі вокладак з [https://www.mediawiki.org/wiki/Category:All_skins каталога вокладак mediawiki.org], такім чынам:\n:* Узяўшы [https://www.mediawiki.org/wiki/Download tarball-інсталятар], які ўтрымлівае некалькі вокладак і прыставак. Вы можаце скапіяваць і ўставіць каталог skins/ адтуль.\n:* Зрабіўшы клон аднаго з сховішчаў mediawiki/skins/* праз git у каталог skins/ вашай інсталяцыі MediaWiki.\n: Калі вы распрацоўшчык MediaWiki, гэта не павінна адбіцца на вашым git-сховішчы. Гл. [https://www.mediawiki.org/wiki/Manual:Skin_configuration Інструкцыя: Настройка вокладак] дзеля інфармацыі па ўключэнні вокладак і выбары прадвызначэння.", "default-skin-not-found-row-enabled": "* $1 / $2 (уключана)", "default-skin-not-found-row-disabled": "* $1 / $2 (выключана)", + "mediastatistics-table-count": "Колькасць файлаў", + "mediastatistics-table-totalbytes": "Агульны памер", + "mediastatistics-header-unknown": "Невядомыя", + "mediastatistics-header-bitmap": "Растравыя выявы", + "mediastatistics-header-drawing": "Рысункі (вектарныя выявы)", + "mediastatistics-header-total": "Усе файлы", + "json-error-state-mismatch": "Недапушчальны або некарэктны JSON", + "json-error-syntax": "Памылка сінтаксісу", "special-characters-group-latin": "Лацінскія", "special-characters-group-latinextended": "Лацінскія дадатковыя", "special-characters-group-ipa": "IPA", diff --git a/languages/i18n/bg.json b/languages/i18n/bg.json index 7d8303e6c4..f14a77be76 100644 --- a/languages/i18n/bg.json +++ b/languages/i18n/bg.json @@ -275,7 +275,7 @@ "versionrequired": "Изисква се версия $1 на МедияУики", "versionrequiredtext": "Използването на тази страница изисква версия $1 на софтуера МедияУики. Вижте [[Special:Version|текущата версия]].", "ok": "Добре", - "pagetitle": "$1 — {{SITENAME}}", + "pagetitle": "$1 – {{SITENAME}}", "retrievedfrom": "Взето от „$1“.", "youhavenewmessages": "{{PLURAL:$3|Имате}} $1 ($2).", "youhavenewmessagesfromusers": "Имате $1 от {{PLURAL:$3|друг потребител|$3 потребители}} ($2).", @@ -472,6 +472,7 @@ "wrongpassword": "Въведената парола е невалидна. Опитайте отново.", "wrongpasswordempty": "Не е въведена парола. Опитайте отново.", "passwordtooshort": "Необходимо е паролата да съдържа поне {{PLURAL:$1|1 знак|$1 знака}}.", + "passwordtoolong": "Паролата не може да бъде по-дългa от {{PLURAL:$1|1 символ|$1 символа}}.", "passwordtoopopular": "Често използвани пароли не могат да бъдат ползвани. Моля, изберете по-уникална парола.", "password-name-match": "Паролата ви трябва да се различава от потребителското ви име.", "password-login-forbidden": "Използването на това потребителско име и парола е забранено.", @@ -481,7 +482,7 @@ "noemail": "Няма записана електронна поща за потребителя „$1“.", "noemailcreate": "Необходимо е да въведете валиден адрес за е-поща", "passwordsent": "Нова парола беше изпратена на електронната поща на „$1“.\nСлед като я получите, влезте отново.", - "blocked-mailpassword": "Редактирането от вашия IP-адрес е забранено, затова не ви е позволено да използвате възможността за възстановяване на парола.", + "blocked-mailpassword": "Редактирането от Вашия IP-адрес е забранено, затова не Ви се позволява да използвате възможността за възстановяване на парола.", "eauthentsent": "Писмото за потвърждение е изпратено на посочения адрес. В него са описани действията, които трябва да се извършат, за да потвърдите, че този адрес за електронна поща действително е ваш.", "throttled-mailpassword": "Функцията за напомняне на паролата е използвана през {{PLURAL:$1|последния един час|последните $1 часа}}.\nЗа предотвратяване на злоупотреби е разрешено да се изпраща не повече от едно напомняне в рамките на {{PLURAL:$1|един час|$1 часа}}.", "mailerror": "Грешка при изпращане на писмо: $1", @@ -933,7 +934,7 @@ "rows": "Редове:", "columns": "Колони:", "searchresultshead": "Търсене", - "stub-threshold": "Праг за форматиране на препратки към мъничета:", + "stub-threshold": "Праг за форматиране на препратки към мъничета ($1):", "stub-threshold-sample-link": "пример", "stub-threshold-disabled": "Изключено", "recentchangesdays": "Брой дни в последни промени:", @@ -1615,8 +1616,6 @@ "categories-submit": "Показване", "categoriespagetext": "{{PLURAL:$1|Следната категория съдържа|Следните категории съдържат}} страници или медийни файлове.\n[[Special:UnusedCategories|Неизползваните категории]] не са показани тук.\nВижте също списъка с [[Special:WantedCategories|желани категории]].", "categoriesfrom": "Показване на категориите, като се започне от:", - "special-categories-sort-count": "сортиране по брой", - "special-categories-sort-abc": "сортиране по азбучен ред", "deletedcontributions": "Изтрити приноси на потребител", "deletedcontributions-title": "Изтрити приноси на потребител", "sp-deletedcontributions-contribs": "приноси", @@ -1699,10 +1698,10 @@ "watchlistanontext": "За преглеждане и редактиране на списъка за наблюдение се изисква влизане в системата.", "watchnologin": "Не сте влезли", "addwatch": "Добавяне към списъка за наблюдение", - "addedwatchtext": "Страницата „'''[[:$1]]'''“ и беседата й бяха добавени към [[Special:Watchlist|списъка ви за наблюдение]].", + "addedwatchtext": "Страницата „'''[[:$1]]'''“ и беседата ѝ бяха добавени към [[Special:Watchlist|списъка ви за наблюдение]].", "addedwatchtext-short": "Страницата „$1“ беше добавена към списъка Ви за наблюдение.", "removewatch": "Премахване от списъка за наблюдение", - "removedwatchtext": "Страницата „[[:$1]]“ и беседата й бяха премахнати от [[Special:Watchlist|списъка ви за наблюдение]].", + "removedwatchtext": "Страницата „[[:$1]]“ и беседата ѝ бяха премахнати от [[Special:Watchlist|списъка ви за наблюдение]].", "removedwatchtext-short": "Страницата „$1“ беше премахната от списъка Ви за наблюдение.", "watch": "Наблюдение", "watchthispage": "Наблюдаване на страницата", @@ -2186,10 +2185,7 @@ "import-logentry-upload-detail": "$1 {{PLURAL:$1|версия беше внесена|версии бяха внесени}}", "import-logentry-interwiki-detail": "{{PLURAL:$1|една версия беше внесена|$1 версии бяха внесени}} от $2", "javascripttest": "Тестване на JavaScript", - "javascripttest-pagetext-noframework": "Тази страница е запазена за изпълнение на Джаваскрипт тестове.", "javascripttest-pagetext-unknownaction": "Неизвестно действие \"$1\".", - "javascripttest-pagetext-frameworks": "Моля, изберете една от предложените тестови структури: $1", - "javascripttest-pagetext-skins": "Избор на облик за тестванията:", "javascripttest-qunit-intro": "Вижте [$1 тестовата документация] на mediawiki.org.", "tooltip-pt-userpage": "Вашата потребителска страница", "tooltip-pt-anonuserpage": "Потребителската страница за адреса, от който редактирате", @@ -2437,8 +2433,8 @@ "exif-colorspace": "Цветово пространство", "exif-componentsconfiguration": "Значение на всеки компонент", "exif-compressedbitsperpixel": "Режим на компресия на образа", - "exif-pixelydimension": "Ширина на изображението", - "exif-pixelxdimension": "Височина на изображението", + "exif-pixelxdimension": "Ширина на изображението", + "exif-pixelydimension": "Височина на изображението", "exif-usercomment": "Допълнителни коментари", "exif-relatedsoundfile": "Свързан звуков файл", "exif-datetimeoriginal": "Дата и час на създаване", @@ -2843,7 +2839,6 @@ "redirect-not-exists": "Стойността не е намерена", "fileduplicatesearch": "Търсене на повтарящи се файлове", "fileduplicatesearch-summary": "Търсене на повтарящи се файлове на база хеш стойности.", - "fileduplicatesearch-legend": "Търсене на повтарящ се файл", "fileduplicatesearch-filename": "Име на файл:", "fileduplicatesearch-submit": "Търсене", "fileduplicatesearch-info": "$1 × $2 пиксела
Размер на файла: $3
MIME тип: $4", @@ -2960,6 +2955,7 @@ "htmlform-chosen-placeholder": "Избиране", "htmlform-cloner-create": "Добавяне на още", "htmlform-cloner-delete": "Премахване", + "htmlform-title-not-exists": "$1 не съществува.", "sqlite-has-fts": "$1 с поддръжка на пълнотекстово търсене", "sqlite-no-fts": "$1 без поддръжка на пълнотекстово търсене", "logentry-delete-delete": "$1 {{GENDER:$2|изтри}} страницата $3", @@ -3081,6 +3077,7 @@ "pagelang-language": "Език", "pagelang-use-default": "Използване на езика по подразбиране", "pagelang-select-lang": "Избиране на език", + "pagelang-submit": "Изпращане", "right-pagelang": "Промяна езика на страница", "action-pagelang": "промяна езика на страницата", "log-name-pagelang": "Дневник на езиковите промени", @@ -3121,5 +3118,13 @@ "mw-widgets-titleinput-description-new-page": "страницата все още не съществува", "mw-widgets-titleinput-description-redirect": "пренасочване към $1", "api-error-blacklisted": "Моля, изберете различно, описателно заглавие.", - "randomrootpage": "Случайна начална страница" + "randomrootpage": "Случайна начална страница", + "log-action-filter-protect": "Тип защита:", + "log-action-filter-upload": "Тип качване:", + "log-action-filter-all": "Всички", + "log-action-filter-block-block": "Блокиране", + "log-action-filter-block-reblock": "Промяна на блокирането", + "log-action-filter-block-unblock": "Отблокиране", + "log-action-filter-upload-upload": "Ново качване", + "log-action-filter-upload-overwrite": "Повторно качване" } diff --git a/languages/i18n/bgn.json b/languages/i18n/bgn.json index bae6d56025..a54966c984 100644 --- a/languages/i18n/bgn.json +++ b/languages/i18n/bgn.json @@ -367,7 +367,7 @@ "filereadonlyerror": "«$1» ئی فایلئ تغیر داتین ممکن نه اینت چون ه «$2» ئی فایلي مخزن فقط بی وانتینی ئین حالت ئی تا قرار داریت.\n\nمدیری که آیرا قُلپ کورته ایرنگ توضیح داته: «$3».", "invalidtitle-knownnamespace": "نا موتبرین ئنوان گو نامئ فضای «$2» و متن ئی «$3»", "invalidtitle-unknownnamespace": "ناموتبرین ئنوان گو نا زاتین نامئ فضای شماره $1 و متن ئی «$2»", - "exception-nologin": "لاگین نه بوته ئیت", + "exception-nologin": "لاگین نه بوته‌ئیت", "exception-nologin-text": "مهربانی بئ [[Special:Userlogin|تا داخل بیئت]] تا بتوانیت بئ ای تاکدیما دسترسی داشته بئیت.", "exception-nologin-text-manual": "مهربانئ بکنیت $1 تا بتوانیت بئ ای تاکدیم یا عمل ئا دسترسی داشته بئیت .", "virus-badscanner": "بدین پیکربندی: نازانتین ویروس ئی سکن کورتین: ''$1''", @@ -399,7 +399,7 @@ "userloginnocreate": "داخل بوتین", "logout": "در بوتین", "userlogout": "در بوتین", - "notloggedin": "لاگین نه بوته ئیت", + "notloggedin": "لاگین نه بوته‌ئیت", "userlogin-noaccount": "شما کار زوروکین حسابئ نداریت؟", "userlogin-joinproject": "بی {{SITENAME}} تا نام‌نویسی کنیت!", "nologin": "شما کار زوروکین حسابئ نداریت ؟ $1.", @@ -1495,8 +1495,6 @@ "cachedspecial-refresh-now": "دیستین آخرین ئانی.", "categories": "تهرئان", "categoriesfrom": "تهرهانئ نشان داتین شرو شه:", - "special-categories-sort-count": "ترتیت کورتین بئ اساس اندازگ", - "special-categories-sort-abc": "ترتیب کورتین سیاهگانی", "deletedcontributions": "پاک بوته ئین مشارکتانی", "deletedcontributions-title": "پاک بوته ئین مشارکتانی", "sp-deletedcontributions-contribs": "مشارکت ئان", @@ -1961,9 +1959,7 @@ "import-logentry-upload-detail": "$1 {{PLURAL:$1|نسخه|نسخه}} وارد بوته", "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|نسخه|نسخه}} داخل بوته شه $2", "javascripttest": "جاوا اسکریپتی آزمایش", - "javascripttest-pagetext-noframework": "ای تاکدیم په جاوا اسکریپتی آزمایشی خاتیرا ایشته بوته.", "javascripttest-pagetext-unknownaction": "نازانتین اکشن \"$1\".", - "javascripttest-pagetext-skins": "پوسته‌ای ئا په آزمایشانی اجرا ئا انتخاب کنیت:", "javascripttest-qunit-intro": "[$1 آزمایشی مشتندانا] بئ mediawiki.org تا بگیندیت.", "tooltip-pt-userpage": "{{GENDER:|شمئ کار زُورۆکین}} تاکدیم", "tooltip-pt-mytalk": "{{GENDER:|شمئ}} حبر و گپئ تاکدیم", @@ -2191,8 +2187,8 @@ "exif-colorspace": "رنگاني فضا", "exif-componentsconfiguration": "هریک شه مووله په ئانی مانا", "exif-compressedbitsperpixel": "اکس ئی پشرده ئی هالت", - "exif-pixelydimension": "اکسئ گۆر", - "exif-pixelxdimension": "اکسئ بُرزی", + "exif-pixelxdimension": "اکسئ گۆر", + "exif-pixelydimension": "اکسئ بُرزی", "exif-usercomment": "کار زوروکئ توضیحات", "exif-relatedsoundfile": "مربوتین توارین پایل", "exif-datetimeoriginal": "دیتائانی ودئ بوتین ئی تاریخ و وخت", @@ -2559,6 +2555,18 @@ "watchlisttools-view": "مربوتین تغیرانی دیستین", "watchlisttools-edit": "دیدارلیست ئی دیستین و ایڈیٹ کورتین", "watchlisttools-raw": "واچلیستئ آمگین لیستانی ایڈیٹ", + "iranian-calendar-m1": "مولمان", + "iranian-calendar-m2": "کرا", + "iranian-calendar-m3": "سوچکان", + "iranian-calendar-m4": "جلکان", + "iranian-calendar-m5": "جلکشان", + "iranian-calendar-m6": "سچان", + "iranian-calendar-m7": "تۆمشان", + "iranian-calendar-m8": "سرتان", + "iranian-calendar-m9": "گوبشان", + "iranian-calendar-m10": "تاکشان", + "iranian-calendar-m11": "بهاران", + "iranian-calendar-m12": "اوسته‌مان", "signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|گپ و حبر]])", "version": "نخسه", "version-extensions": "لچیته گین اپزونه ئان", @@ -2603,7 +2611,6 @@ "version-libraries-license": "اجازه نامه", "version-libraries-description": "توضیحان", "version-libraries-authors": "نویسوکان", - "redirect-legend": "گردینتین په یک پایل یا تاکدیمئ", "redirect-submit": "برا", "redirect-lookup": "گشتین:", "redirect-value": "اندازه گ:", @@ -2614,7 +2621,6 @@ "redirect-not-exists": "اندازه گ ودی نه بوت", "fileduplicatesearch": "گشتین په تکرارین فایلان", "fileduplicatesearch-summary": "گشتین په تکرارین پایلان بي اساس آوانی درهم بوته اندازه گ ئا سورت ئه گیت.", - "fileduplicatesearch-legend": "گشتین په تکرارین موریدان", "fileduplicatesearch-filename": "فایلئ نام:", "fileduplicatesearch-submit": "گشتین", "fileduplicatesearch-info": "$1 × $2 پیکسل
فایلئ اندازه گ: $3
نوع MIME: $4", diff --git a/languages/i18n/bjn.json b/languages/i18n/bjn.json index 9648250b6a..a87d235393 100644 --- a/languages/i18n/bjn.json +++ b/languages/i18n/bjn.json @@ -1342,8 +1342,6 @@ "categories": "Tutumbung", "categoriespagetext": "{{PLURAL:$1|tumbung mangandung|tutumbung mangandung}} barikut baisi tutungkaran atawa midia.\n[[Special:UnusedCategories|Tumbung kada dipuruk]] kada ditampaiakan di sia.\nJanaki jua [[Special:WantedCategories|tutumbung nang dihandaki]].", "categoriesfrom": "Manampaiakan tutumbung mulai matan:", - "special-categories-sort-count": "susun ulih rikinan", - "special-categories-sort-abc": "susun abjad", "deletedcontributions": "Hapus sumbangan pamuruk", "deletedcontributions-title": "Hapus sumbangan pamuruk", "sp-deletedcontributions-contribs": "Sumbangan", @@ -1872,7 +1870,6 @@ "import-logentry-upload-detail": "$1 {{PLURAL:$1|ralatan|raralatan}}", "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|ralatan|raralatan}} matan $2", "javascripttest": "Mantis JavaScript", - "javascripttest-pagetext-skins": "Pilih kulit nang cagar Pian cubai:", "tooltip-pt-userpage": "Tungkaran pamakai Pian", "tooltip-pt-anonuserpage": "Tungkaran pamuruk matan alamat IP Pian mambabak sawagai", "tooltip-pt-mytalk": "Tungkaran pamandiran Pian", @@ -2093,8 +2090,8 @@ "exif-colorspace": "Kamar kalir", "exif-componentsconfiguration": "Arti matan tiap kumpunin", "exif-compressedbitsperpixel": "Muda kumprasi gambar", - "exif-pixelydimension": "Lingai gambar", - "exif-pixelxdimension": "Pancau gambar", + "exif-pixelxdimension": "Lingai gambar", + "exif-pixelydimension": "Pancau gambar", "exif-usercomment": "Kumintar pamuruk", "exif-relatedsoundfile": "Barkas suara bahubung", "exif-datetimeoriginal": "Tanggal wan wayah paulahan data", @@ -2496,7 +2493,6 @@ "version-entrypoints-header-url": "URL", "fileduplicatesearch": "Gagai gasan babarakas baganda", "fileduplicatesearch-summary": "Gagai gasan babarakas baganda bapandal nilai hash.", - "fileduplicatesearch-legend": "Gagai gasan sabuah panggandaan", "fileduplicatesearch-filename": "Ngaran barakas:", "fileduplicatesearch-submit": "Gagai", "fileduplicatesearch-info": "$1 × $2 piksel,
takaran barakas: $3,
macam MIME: $4", diff --git a/languages/i18n/bn.json b/languages/i18n/bn.json index 570797afd5..55e4cf2fd1 100644 --- a/languages/i18n/bn.json +++ b/languages/i18n/bn.json @@ -150,7 +150,7 @@ "category-media-header": "\"$1\" বিষয়শ্রেণীতে অন্তর্ভুক্ত মিডিয়া ফাইলগুলি", "category-empty": "''এই বিষয়শ্রণীতে বর্তমানে কোন পাতা বা মিডিয়া ফাইল নেই।''", "hidden-categories": "{{PLURAL:$1|লুকায়িত বিষয়শ্রেণী|লুকায়িত বিষয়শ্রেণীসমূহ}}", - "hidden-category-category": "লুক্কায়িত বিষয়শ্রেণীসমূহ", + "hidden-category-category": "লুকায়িত বিষয়শ্রেণীসমূহ", "category-subcat-count": "{{PLURAL:$2|এই বিষয়শ্রেণীতে কেবলমাত্র নিচের উপবিষয়শ্রেণীটি আছে।|এই বিষয়শ্রেণীতে অন্তর্ভুক্ত মোট $2টি উপবিষয়শ্রেণীর মধ্যে {{PLURAL:$1|টি উপবিষয়শ্রেণী|$1টি উপবিষয়শ্রেণী}} নিচে দেখানো হয়েছে।}}", "category-subcat-count-limited": "এই বিষয়শ্রেণীতে নিচের {{PLURAL:$1|টি উপবিষয়শ্রেণী|$1টি উপবিষয়শ্রেণী আছে}}।", "category-article-count": "{{PLURAL:$2|এই বিষয়শ্রেণীতে কেবল নিচের পাতাটি আছে।|এই বিষয়শ্রেণীতে অন্তর্ভুক্ত মোট $2টি পাতার মধ্যে {{PLURAL:$1|টি পাতা|$1টি পাতা}} নিচে দেখানো হল।}}", @@ -168,7 +168,6 @@ "moredotdotdot": "আরও...", "morenotlisted": "এটি একটি অসম্পূর্ণ তালিকা।", "mypage": " পাতা", - "anonuserpage": "অজানা ব্যবহারকারী", "mytalk": "আলোচনা", "anontalk": "আলাপ", "navigation": "পরিভ্রমণ", @@ -466,8 +465,8 @@ "nocookieslogin": "ব্যবহারকারীদের প্রবেশ সম্পন্ন করতে {{SITENAME}} কুকি ব্যবহার করে। আপনার ব্রাউজারে কুকি নিষ্ক্রিয় করা আছে। কুকি চালু করে আবার চেষ্টা করুন।", "nocookiesfornew": "ব্যবহারকারীর অ্যাকাউন্ট তৈরি হয়নি, কারণ এর উৎস সম্পর্কে আমরা নিশ্চিত নই।\nনিশ্চিত করুন আপনার কুকি সক্রিয় রয়েছে, পাতাটি পুনরায় লোড করে আবার চেষ্টা করুন।", "noname": "আপনি সঠিক ব্যবহারকারী নাম নির্দিষ্ট করেননি।", - "loginsuccesstitle": "প্রবেশ সফল", - "loginsuccess": "'''আপনি এইমাত্র \"$1\" নামে {{SITENAME}}-তে প্রবেশ করেছেন।'''", + "loginsuccesstitle": "প্রবেশ করেছেন", + "loginsuccess": "আপনি এইমাত্র \"$1\" নামে {{SITENAME}}-তে প্রবেশ করেছেন।", "nosuchuser": "\"$1\" নামে কোন ব্যবহারকারী নেই।\nব্যবহারকারী নামের আকার সংবেদনশীল।\nআপনার বানান পরীক্ষা করে দেখুন, অথবা [[Special:UserLogin/signup|নতুন একটি অ্যাকাউন্ট খুলুন]]।", "nosuchusershort": "\"$1\" নামের কোন ব্যবহারকারী নেই। নামের বানান পরীক্ষা করুন।", "nouserspecified": "আপনাকে অবশ্যই ব্যবহারকারী নাম নির্দিষ্ট করতে হবে।", @@ -485,7 +484,7 @@ "noemail": "\"$1\" ব্যবহারকারীর জন্য কোন ই-মেইল ঠিকানা সংরক্ষিত নেই।", "noemailcreate": "আপনাকে অবশ্যই একটি সঠিক ইমেইল ঠিকানা দিতে হবে", "passwordsent": "একটি নতুন পাসওয়ার্ড \"$1\" ব্যবহারকারীর ই-মেইল ঠিকানায় পাঠানো হয়েছে। দয়াকরে তা পাওয়ার পর আবার লগ-ইন করুন।", - "blocked-mailpassword": "আপনার আইপি ঠিকানাটি থেকে সম্পাদনা করতে বাধা আছে, তাই এই ঠিকানার অপব্যবহার করে পাসওয়ার্ড ফেরত আনতে দেয়া যাবে না।", + "blocked-mailpassword": "আপনার আইপি ঠিকানাটি থেকে সম্পাদনা করতে বাধা আছে। অপব্যবহার রোধ করার জন্য, এই আইপি ঠিকানা থেকে পাসওয়ার্ড পুনরুদ্ধার করার অনুমতি দেয়া হয়নি।", "eauthentsent": "মনোনীত ই-মেইল ঠিকানায় একটি নিশ্চিতকরণ ই-মেইল পাঠানো হয়েছে।\nঐ অ্যাকাউন্টটে অন্য কোন ই-মেইল পাঠানোর আগে আপনাকে ই-মেইলের নির্দেশগুলি অনুসরণ করতে হবে, যাতে অ্যাকাউন্টটি যে আসলেই আপনার, তা নিশ্চিত হয়।", "throttled-mailpassword": "বিগত {{PLURAL:$1|ঘণ্টার|$1 ঘণ্টার}} মধ্যে ইতিমধ্যেই একবার পাসওয়ার্ড বদলের তথ্য পাঠানো হয়েছে। অপব্যবহার রোধে প্রতি {{PLURAL:$1|ঘণ্টায়|$1 ঘণ্টায়}} কেবল একবার পাসওয়ার্ড বদলের তথ্য পাঠানো যাবে।", "mailerror": "ইমেইল পাঠাতে সমস্যা: $1", @@ -502,7 +501,7 @@ "createaccount-title": "{{SITENAME}}-এর জন্য অ্যাকাউন্ট সৃষ্টি", "createaccount-text": "কেউ $2-এর জন্য {{SITENAME}}-এ একটি অ্যাকাউন্ট সৃষ্টি করেছেন ($4)। \"$2\"-এর জন্য পাসওয়ার্ড হল \"$3\"। আপনার এখন অ্যাকাউন্টে প্রবেশ করে পাসওয়ার্ড পরিবর্তন করা উচিত।\n\nযদি ভুল করে অ্যাকাউন্টটি সৃষ্টি হয়ে থাকে, তাহলে এই বার্তাটি উপেক্ষা করুন।", "login-throttled": "আপনি সাম্প্রতিক সময়ে পরপর বেশ কয়েকবার প্রবেশের চেষ্টা করেছেন।\nপুনরায় চেষ্টা করার পূর্বে অনুগ্রহ করে $1 অপেক্ষা করুন।", - "login-abort-generic": "আপনার লগইন সফল ছিলো না - বাতিল করা হয়েছে", + "login-abort-generic": "আপনার প্রবেশ ব্যর্থ হয়েছে - বাতিল করা হয়েছে", "login-migrated-generic": "আপনার অ্যাকাউন্ট স্থানান্তরিত করা হয়েছে, এবং আপনার ব্যবহারকারী নাম আর এই উইকিতে বিদ্যমান নয়।", "loginlanguagelabel": "ভাষা: $1", "suspicious-userlogout": "আপনার প্রস্থানের অনুরোধ বাতিল হয়েছে কারণ অনুমিত যে আপনার ব্রাউজার অসম্পূর্ণ অথবা পূবর্বতী তথ্য প্রেরণ করেছে।", @@ -522,7 +521,7 @@ "newpassword": "নতুন পাসওয়ার্ড:", "retypenew": "নতুন পাসওয়ার্ড আবার লিখুন:", "resetpass_submit": "পাসওয়ার্ড দাও এবং লগ-ইন করো", - "changepassword-success": "আপনার পাসওয়ার্ড সাফলভাবে পরিবর্তীত হয়েছে।", + "changepassword-success": "আপনার পাসওয়ার্ড পরিবর্তন করা হয়েছে!", "changepassword-throttled": "আপনি সম্প্রতি পরপর বেশ কয়েকবার প্রবেশের চেষ্টা করেছেন। পুনরায় চেষ্টা করার পূর্বে অনুগ্রহ করে $1 অপেক্ষা করুন।", "botpasswords": "বট পাসওয়ার্ড", "botpasswords-disabled": "বট পাসওয়ার্ড নিষ্ক্রিয় করা।", @@ -541,17 +540,17 @@ "botpasswords-insert-failed": "\"$1\" নামের বট যুক্ত করা যায়নি। আগে থেকেই তালিকায় রয়েছে?", "botpasswords-update-failed": "\"$1\" নামের বট যুক্ত করা যায়নি। আগে অপসারণ করা হয়েছিল?", "botpasswords-created-title": "বট পাসওয়ার্ড তৈরী করা হয়েছে", - "botpasswords-created-body": "\"$1\", বট পাসওয়ার্ড তৈরী করা হয়েছে।", + "botpasswords-created-body": "ব্যবহারকারী \"$2\"-এর \"$1\" নামের বটের জন্য বট পাসওয়ার্ড তৈরী করা হয়েছে।", "botpasswords-updated-title": "বট পাসওয়ার্ড আপডেট করা হয়েছে", - "botpasswords-updated-body": "\"$1\" বট পাসওয়ার্ডটি সফলভাবে হালনাগাদ করা হয়েছে।", + "botpasswords-updated-body": "ব্যবহারকারী \"$2\"-এর \"$1\" নামের বটের জন্য বট পাসওয়ার্ড হালনাগাদ করা হয়েছে।", "botpasswords-deleted-title": "বট পাসওয়ার্ড অপসারণ করা হয়েছে", - "botpasswords-deleted-body": "\"$1\" বটের পাসওয়ার্ড মুছে ফেলা হয়েছিল", + "botpasswords-deleted-body": "ব্যবহারকারী \"$2\"-এর \"$1\" নামের বটের জন্য বট পাসওয়ার্ড মুছে ফেলা হয়েছিল।", "botpasswords-no-provider": "BotPasswordsSessionProvider উপলব্ধ নয়।", "resetpass_forbidden": "পাসওয়ার্ড পরিবর্তন করা সম্ভব নয়", "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-password": "অস্থায়ী পাসওয়ার্ড:", @@ -666,7 +665,7 @@ "previewnote": "'''খেয়াল করুন, এটি একটি প্রাকদর্শন মাত্র।'''\nআপনার পরিবর্তন এখনও সংরক্ষণ করা হয়নি!", "continue-editing": "সম্পাদনা করুন", "previewconflict": "এই প্রাকদর্শনটি সম্পাদনা ক্ষেত্রের উপরের অংশটির টেক্সট সংরক্ষণ করলে যেরকম দেখাবে, তা দেখাচ্ছে।", - "session_fail_preview": "'''দুঃখিত! সেশন ডাটা হারিয়ে যাওয়ার কারণে আপনার সম্পাদনাটি সংরক্ষণ করা সম্ভব হয়নি। দয়া করে লেখাটি আবার জমা দেয়ার চেষ্টা করুন। যদি এতেও কাজ না হয়, তবে অ্যাকাউন্ট থেকে বেরিয়ে গিয়ে আবার অ্যাকাউন্টে প্রবেশ করে চেষ্টা করুন।'''", + "session_fail_preview": "দুঃখিত! সেশন ডাটা হারিয়ে যাওয়ার কারণে আপনার সম্পাদনাটি সংরক্ষণ করা সম্ভব হয়নি।\n\nআপনি সম্ভবত সংযোগ হারিয়েছন। দয়া করে যাচাই করুন যে আপনি এখনও প্রবেশরত রয়েছেন এবং আবার চেষ্টা করুন। যদি এটি এখনও কাজ না করে, তাহলে দয়া করে [[Special:UserLogout|অ্যাকাউন্ট থেকে প্রস্থান করুন]] এবং আবার অ্যাকাউন্টে প্রবেশ করে চেষ্টা করুন এবং এবং পরীক্ষা করুন যে আপনার ব্রাউজার এই সাইটে কুকি ব্যবহারের অনুমতি দেয়।", "session_fail_preview_html": "'''দুঃখিত! সেশন উপাত্ত হারিয়ে যাওয়ার কারণে আমরা আপনার সম্পাদনাটি প্রক্রিয়া করতে পারিনি।'''\n\n''{{SITENAME}}-এ raw HTML সক্রিয় আছে বলে জাভাস্ক্রিপ্টভিত্তিক আক্রমণ থেকে প্রতিরক্ষার জন্য প্রাকদর্শনটি দেখানো হচ্ছে না।''\n\n'''যদি এটি সম্পাদনার একটি বৈধ প্রচেষ্টা হয়, তবে অনুগ্রহ করে আবার চেষ্টা করুন। যদি তারপরেও কাজ না হয়, তবে অ্যাকাউন্ট থেকে বেরিয়ে গিয়ে আবার প্রবেশ করে চেষ্টা করুন।'''", "token_suffix_mismatch": "'''আপনার সম্পাদনাটি প্রত্যাখ্যান করা হয়েছে, কারণ আপনার ক্লায়েন্ট প্রোগ্রামটি সম্পাদনা টেক্সটের বিরামচিহ্নগুলি গুলিয়ে ফেলেছে। পাতাটির টেক্সটে যাতে ক্ষতি না হয় সেজন্য সম্পাদনাটি প্রত্যাখ্যান করা হয়েছে। আপনি কোন ত্রুটিপূর্ণ ওয়েব-ভিত্তিক বেনামী প্রক্সি সেবা ব্যবহার করলে এরকম হতে পারে।'''", "edit_form_incomplete": "'''আপনার সম্পাদনার কিছু অংশ সার্ভারে পৌছায় নি; আপনার সম্পাদনা সম্পূর্ণরুপে আছে কিনা নিশ্চিত হয়ে আবার চেষ্টা করুন'''", @@ -1076,7 +1075,7 @@ "userrights-changeable-col": "দল যা আপনি পরিবর্তন করতে পারেন", "userrights-unchangeable-col": "দল যা আপনি পরিবর্তন করতে পারবেন না", "userrights-conflict": "ব্যবহারকারী অধিকার দ্বন্দ্ব! অনুগ্রহ করে নিশ্চিত হোন এবং পুনরায় চেষ্টা করুন।", - "userrights-removed-self": "আপনি সফলভাবে আপনার নিজের অধিকার পরিবর্তন করেছেন। এর ফলে এখন থেকে আপনি আর এই পাতায় প্রবেশ করতে পারবেন না।", + "userrights-removed-self": "আপনি আপনার নিজের অধিকার পরিবর্তন করেছেন। এর ফলে এখন থেকে আপনি আর এই পাতায় প্রবেশ করতে পারবেন না।", "group": "দল:", "group-user": "ব্যবহারকারীগণ", "group-autoconfirmed": "স্বয়ংক্রিয়ভাবে নিশ্চিতকৃত ব্যবহারকারীরা", @@ -1295,9 +1294,9 @@ "recentchangeslinked-page": "পাতার নাম:", "recentchangeslinked-to": "প্রদত্ত পাতায় সংযুক্ত আছে এমন পাতাগুলোর পরিবর্তন দেখাও", "recentchanges-page-added-to-category": "বিষয়শ্রেণীতে [[:$1]] যোগ করা হয়েছে", - "recentchanges-page-added-to-category-bundled": "বিষয়শ্রেণীতে [[:$1]] এবং {{PLURAL:$2|একটি পাতা|$2টি পাতা}} যোগ করা হয়েছে", + "recentchanges-page-added-to-category-bundled": "বিষয়শ্রেণীতে [[:$1]] ও [[Special:WhatLinksHere/$1|{{PLURAL:$2|একটি পাতা|$2টি পাতা}}]] যোগ করা হয়েছে", "recentchanges-page-removed-from-category": "বিষয়শ্রেণী থেকে [[:$1]] সরানো হয়েছে", - "recentchanges-page-removed-from-category-bundled": "বিষয়শ্রেণী থেকে [[:$1]] এবং {{PLURAL:$2|একটি পাতা|$2টি পাতা}} সরানো হয়েছে", + "recentchanges-page-removed-from-category-bundled": "বিষয়শ্রেণী থেকে [[:$1]] ও [[Special:WhatLinksHere/$1|{{PLURAL:$2|একটি পাতা|$2টি পাতা}}]] সরানো হয়েছে", "autochange-username": "মিডিয়াউইকি স্বয়ংক্রিয় পরিবর্তন", "upload": "আপলোড", "uploadbtn": "ফাইল আপলোড করুন", @@ -1457,6 +1456,7 @@ "uploadstash-badtoken": "আপনার অনুরোধকৃত কাজটি সম্পন্ন হয়নি, হয়তো আপনার সম্পাদনার অনুমতি মেয়াদ উত্তীর্ণ হয়েছে। পুনরায় চেষ্টা করুন।", "uploadstash-errclear": "ফাইলগুলো পরিষ্কারকরণ ব্যর্থ হয়েছে।", "uploadstash-refresh": "ফাইলের তালিকা রিফ্রেশ করুন", + "uploadstash-thumbnail": "থাম্বনেইল দেখুন", "invalid-chunk-offset": "ত্রুটিপূর্ণ চাংক অফসেট", "img-auth-accessdenied": "প্রবেশাধিকার নাই", "img-auth-nopathinfo": "PATH_INFO পাওয়া যাচ্ছে না।\nআপনার সার্ভার থেকে এই তথ্য পাঠানোর জন্য কনফিগার করা হয়নি।\nএটি হয়তো CGI ভিত্তিক এবং img_auth সমর্থন করে না।\nবিস্তারিত দেখুন https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Image_Authorization।", @@ -1717,6 +1717,8 @@ "apisandbox-dynamic-parameters-add-label": "প্যারামিটার যোগ করুন:", "apisandbox-dynamic-parameters-add-placeholder": "প্যারামিটারের নাম", "apisandbox-results": "ফলাফল", + "apisandbox-sending-request": "API অনুরোধ পাঠানো হচ্ছে...", + "apisandbox-loading-results": "API ফলাফল গ্রহণ করা হচ্ছে...", "apisandbox-request-url-label": "অনুরোধের URL:", "apisandbox-request-time": "অনুরোধের সময়: {{PLURAL:$1|$1 মি.সে.}}", "booksources": "বইয়ের উৎস", @@ -1729,7 +1731,7 @@ "speciallogtitlelabel": "লক্ষ্য (শিরোনাম বা {{ns:user}}:ব্যবহারকারীর জন্য ব্যবহারকারী নাম):", "log": "লগগুলি", "logeventslist-submit": "দেখাও", - "all-logs-page": "সব পাবলিক লগ", + "all-logs-page": "সব প্রকাশ্য লগ", "alllogstext": "{{SITENAME}}-এর সবগুলো লগের সম্মিলিত প্রদর্শন।\nআপনি লগের ধরন, ব্যবহারকারীর নাম, বা পাতার নাম নির্বাচন করে প্রদর্শনটির আকার কমিয়ে আনতে পারেন।", "logempty": "মিলে যায় এমন কিছু লগে পাওয়া যায়নি।", "log-title-wildcard": "এই টেক্সট দিয়ে শুরু হওয়া শিরোনামগুলি অনুসন্ধান করা হোক", @@ -1757,8 +1759,6 @@ "categories-submit": "দেখাও", "categoriespagetext": "এই {{PLURAL:$1|বিষয়শ্রেণীতে|বিষয়শ্রেণীসমূহে}} পাতা বা মিডিয়া রয়েছে।\n[[Special:UnusedCategories|অব্যবহৃত বিষয়শ্রেণীসমূহ]] এখানে দেখানো হয়েছে।\nআরও দেখুন [[Special:WantedCategories|আবশ্যক বিষয়শ্রেণীসমূহ]]।", "categoriesfrom": "এই অক্ষর দিয়ে শুরু হওয়া বিষয়শ্রেণীগুলো দেখাও:", - "special-categories-sort-count": "গণনার ভিত্তিতে সাজাও", - "special-categories-sort-abc": "বর্ণানুক্রমে সাজান", "deletedcontributions": "মুছে ফেলা ব্যবহারকারী অবদান", "deletedcontributions-title": "মুছে ফেলা ব্যবহারকারী অবদান", "sp-deletedcontributions-contribs": "অবদানসমূহ", @@ -2119,6 +2119,7 @@ "ipb-unblock": "ব্যবহারকারী বা আইপি ঠিকানার উপর থেকে বাধা তুলে নেওয়া হোক", "ipb-blocklist": "বিদ্যমান বাধাগুলি দেখুন", "ipb-blocklist-contribs": "{{GENDER:$1|$1}}-এর অবদানসমূহ", + "ipb-blocklist-duration-left": "$1 বাকি", "unblockip": "ব্যবহারকারীর উপর থেকে বাধা তুলে নেওয়া হোক", "unblockiptext": "নিচের ফর্মটি ব্যবহার করে পূর্বে বাধা দেওয়া কোন আইপি ঠিকানা বা ব্যবহারকারীর সাইটে লেখার অধিকার পুনঃপ্রতিষ্ঠা করুন।", "ipusubmit": "বাধা তুলে নেওয়া হোক", @@ -2153,7 +2154,7 @@ "ipblocklist-no-results": "অনুরুদ্ধ আইপি ঠিকানা বা ব্যবহারকারী নামটির উপর কোন বাধা নেই।", "blocklink": "বাধা দাও", "unblocklink": "বাধা তুলে নেওয়া হোক", - "change-blocklink": "ব্লক অবস্থার পরিবর্তন করুন", + "change-blocklink": "বাধা পরিবর্তন করুন", "contribslink": "অবদান", "emaillink": "ই-মেইল পাঠাও", "autoblocker": "আপনাকে স্বয়ংক্রিয়ভাবে বাধা দেওয়া হয়েছে, কারণ আপনার আইপি ঠিকানাটি সম্প্রতি \"[[User:$1|$1]]\" ব্যবহার করেছেন। $1-কে বাধাদানের কারণ \"$2\"", @@ -2177,7 +2178,7 @@ "ipb_expiry_temp": "লুকানো ব্যবহারকারীনাম বাধা চিরস্থায়ী হতে হবে।", "ipb_hide_invalid": "এই অ্যাকাউন্ট বাধা দেয়া সম্ভব নয়; এটি {{PLURAL:$1|একের অধিক|$1টি}} সম্পাদনা করেছে।", "ipb_already_blocked": "\"$1\" ইতিমধ্যে ব্লক", - "ipb-needreblock": "$1 পূর্বেই ব্লক রয়েছেন। আপনি কি সেটিংস পরিবর্তন করতে চান?", + "ipb-needreblock": "$1 ইতিমধ্যেই বাধাপ্রাপ্ত আছেন। আপনি কি সেটিংস পরিবর্তন করতে চান?", "ipb-otherblocks-header": "অন্যান্য {{PLURAL:$1|বাধাঁ|বাধাঁসমূহ}}", "unblock-hideuser": "আপনি এই ব্যবহারকারীকে বাধা মুক্ত করতে পারবেন না, কারণ এই ব্যবহারকারীদের ব্যবহারকারী নাম লুকানো রয়েছে।", "ipb_cant_unblock": "ত্রুটি: $1 ব্লক আইডি খুঁজে পাওয়া যায়নি। হয়ত ইতিমধ্যেই এটির উপর থেকে বাধা তুলে নেওয়া হয়েছে।", @@ -2358,11 +2359,7 @@ "import-logentry-upload-detail": "$1টি {{PLURAL:$1|সংশোধন}} আমদানি করা হয়েছে", "import-logentry-interwiki-detail": "$2 থেকে $1টি {{PLURAL:$1|সংশোধন}} আমদানি করা হয়েছে", "javascripttest": "জাভাস্ক্রিপ্ট পরীক্ষা", - "javascripttest-pagetext-noframework": "এই পাতাটি জাভাস্ক্রিপ্ট পরীক্ষার জন্য সংরক্ষিত।", - "javascripttest-pagetext-unknownframework": "পরীক্ষার অজানা ফ্রেমওয়ার্ক \"$1\"।", "javascripttest-pagetext-unknownaction": "অজানা কার্য \"$1\"।", - "javascripttest-pagetext-frameworks": "অনুগ্রহ করে নিচের কোনো একটি ফ্রেমওয়ার্ক নির্ধারণ করুন: $1", - "javascripttest-pagetext-skins": "পরীক্ষার জন্য একটি স্কীন নির্ধারণ করুন:", "javascripttest-qunit-intro": "mediawiki.org থেকে [$1 পরীক্ষার ডলুমেন্টেশন] দেখুন।", "tooltip-pt-userpage": "{{GENDER:|আপনার ব্যবহারকারী}} পাতা", "tooltip-pt-anonuserpage": "যে আইপি ঠিকানা থেকে আপনি সম্পাদনা করছেন, তার ব্যবহারকারী পাতা", @@ -2619,8 +2616,8 @@ "exif-colorspace": "রঙ জগৎ", "exif-componentsconfiguration": "প্রতিটি উপাদানের অর্থ", "exif-compressedbitsperpixel": "ছবি সংকোচন মোড", - "exif-pixelydimension": "চিত্রের প্রস্থ", - "exif-pixelxdimension": "চিত্রের উচ্চতা", + "exif-pixelxdimension": "চিত্রের প্রস্থ", + "exif-pixelydimension": "চিত্রের উচ্চতা", "exif-usercomment": "ব্যবহারকারীর মন্তব্য", "exif-relatedsoundfile": "সংশ্লিষ্ট অডিও ফাইল", "exif-datetimeoriginal": "উপাত্ত উৎপাদনের তারিখ ও সময়", @@ -2767,8 +2764,10 @@ "exif-compression-2": "সিসিআইটিটি গ্রুপ ৩ ১-ডাইমেনশনাম মডিফাইড হাফম্যান রান লেংক্থ এনকোডিং", "exif-compression-3": "সিসিআইটিটি গ্রুপ ৩ ফ্যাক্স এনকোডিং", "exif-compression-4": "সিসিআইটিটি গ্রুপ ৪ ফ্যাক্স এনকোডিং", + "exif-compression-6": "JPEG (পুরনো)", "exif-copyrighted-true": "কপিরাইটকৃত", "exif-copyrighted-false": "কপিরাইট সংক্রান্ত তথ্য নেই", + "exif-photometricinterpretation-0": "কালো এবং সাদা (সাদা হল 0)", "exif-photometricinterpretation-1": "কালো এবং সাদা (কালো হল 0)", "exif-unknowndate": "অজানা তারিখ", "exif-orientation-1": "সাধারণ", @@ -3097,6 +3096,7 @@ "version-entrypoints-header-entrypoint": "শুরু", "version-entrypoints-header-url": "ইউআরএল", "version-entrypoints-articlepath": "[https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgArticlePath নিবন্ধের পথ]", + "version-entrypoints-scriptpath": "[https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgScriptPath স্ক্রিপ্টের পথ]", "version-libraries": "ইনস্টল লাইব্রেরি", "version-libraries-library": "লাইব্রেরী", "version-libraries-version": "সংস্করণ", @@ -3104,7 +3104,6 @@ "version-libraries-description": "বিবরণ", "version-libraries-authors": "লেখক", "redirect": "পাতা, ফাইল, ব্যবহারকরী, সংশোধন বা লগ আইডি দ্বারা পুনঃনির্দেশ করা হয়েছে", - "redirect-legend": "একটি ফাইল অথবা পাতায় পুনঃনির্দেশ করা হয়েছে", "redirect-summary": "এই বিশেষ পাতাটি একটি ফাইলে (প্রদত্ত ফাইলের নাম), একটি পাতায় (প্রদত্ত সংস্করণ আইডি বা পাতা আইডি), একটি ব্যবহারকরী পাতায় (প্রদত্ত সংখ্যায় লেখা ব্যবহারকারী আইডি) বা একটি লগ ভুক্তিতে (প্রদত্ত লগ ভুক্তি) পুনঃনির্দেশিত হয়েছে। ব্যবহার: [[{{#Special:Redirect}}/file/উদাহরণ.jpg]], [[{{#Special:Redirect}}/page/64308]], [[{{#Special:Redirect}}/revision/328429]], [[{{#Special:Redirect}}/user/101]], বা [[{{#Special:Redirect}}/logid/186]]।", "redirect-submit": "যাও", "redirect-lookup": "দেখুন:", @@ -3117,7 +3116,6 @@ "redirect-not-exists": "মান পাওয়া যায়নি", "fileduplicatesearch": "সদৃশ ফাইলের জন্য অনুসন্ধান", "fileduplicatesearch-summary": "হ্যাশ ভ্যালুর ওর ভিত্তি করে একই ছবিগুলো খুঁজুন।", - "fileduplicatesearch-legend": "অনুলিপির জন্য অনুসন্ধান", "fileduplicatesearch-filename": "ফাইলনাম:", "fileduplicatesearch-submit": "অনুসন্ধান", "fileduplicatesearch-info": "$1 × $2 পিক্সেল
ফাইলের আকার: $3
এমআইএমই প্রকার: $4", @@ -3199,7 +3197,7 @@ "tags-edit-chosen-no-results": "কোন ট্যাগ মিল পাওয়া যায়নি", "tags-edit-reason": "কারণ:", "tags-edit-revision-submit": "Apply changes to {{PLURAL:$1|এই সংশোধনে|$1 সংশোধনসমূহে}} পরিবর্তন প্রয়োগ করুন", - "tags-edit-success": "পরিবর্তন সফলভাবে প্রয়োগ করা হয়েছে।", + "tags-edit-success": "পরিবর্তন প্রয়োগ করা হয়েছে।", "tags-edit-failure": "পরিবর্তন প্রয়োগ করা যায়নি: $1", "tags-edit-nooldid-title": "লক্ষ্য সংশোধন অবৈধ", "tags-edit-none-selected": "যোগ করতে অথবা অপসারণ করতে অন্ততপক্ষে একটি ট্যাগ দয়া করে নির্বাচন করুন।", @@ -3290,12 +3288,13 @@ "logentry-protect-modify-cascade": "$1 $3-এর জন্য সুরক্ষা স্তর {{GENDER:$2|পরিবর্তন করেছেন}} $4 [প্রপাতাকার]", "logentry-rights-rights": "$1 ব্যবহারকারী, $3 এর দলগত সদস্যপদ $4 থেকে $5 এ {{GENDER:$2|পরিবর্তন}} করেছেন", "logentry-rights-rights-legacy": "$1 দলের সদস্যপদ পরিবর্তন করেছেন {{GENDER:$2|changed}} এর জন্য $3", - "logentry-rights-autopromote": "$1 সয়ংক্রিয়ভাবে $4 থেকে $5 এ {{GENDER:$2|উন্নীত}} হয়েছে", + "logentry-rights-autopromote": "$1 স্বয়ংক্রিয়ভাবে $4 থেকে $5-এ {{GENDER:$2|উন্নীত}} হয়েছেন", "logentry-upload-upload": "$1 $3 {{GENDER:$2|আপলোড করেছেন}}", "logentry-upload-overwrite": "$1 $3-এর একটি নতুন সংস্করণ {{GENDER:$2|আপলোড করেছেন}}", "logentry-upload-revert": "$1 $3 {{GENDER:$2|আপলোড করেছেন}}", "log-name-managetags": "ট্যাগ ব্যবস্থাপনা লগ", "logentry-managetags-create": "$1 \"$4\" ট্যাগ {{GENDER:$2|তৈরি করেছে}}", + "logentry-managetags-delete": "$1 \"$4\" ট্যাগটি {{GENDER:$2|অপসারণ করেছেন}} ($5টি {{PLURAL:$5|সংস্করণ বা লগ ভুক্তি|সংস্করণ ও/বা লগ ভুক্তি}} সরানো হয়েছে)", "log-name-tag": "ট্যাগ লগ", "rightsnone": "(কিছু নাই)", "revdelete-summary": "সম্পাদনা সারাংশ", @@ -3443,6 +3442,7 @@ "special-characters-group-ipa": "আইপিএ", "special-characters-group-symbols": "চিহ্নসমূহ", "special-characters-group-greek": "গ্রিক", + "special-characters-group-greekextended": "সম্প্রসারিত গ্রিক", "special-characters-group-cyrillic": "সিরিলিক", "special-characters-group-arabic": "আরবি", "special-characters-group-arabicextended": "সম্প্রসারিত আরবি", @@ -3470,5 +3470,25 @@ "sessionprovider-generic": "$1টি সেশন", "sessionprovider-mediawiki-session-cookiesessionprovider": "কুকি-ভিত্তিক সেশন", "sessionprovider-nocookies": "কুকি নিষ্ক্রিয় করা। নিশ্চিত করুন যে আপনার কুকি সক্রিয় আছে এবং আবার শুরু করুন।", - "randomrootpage": "অজানা মূল পাতা" + "randomrootpage": "অজানা মূল পাতা", + "log-action-filter-block": "বাধাদানের ধরন:", + "log-action-filter-delete": "অপসারণের ধরন:", + "log-action-filter-patrol": "টহলের ধরন:", + "log-action-filter-protect": "সুরক্ষার ধরন:", + "log-action-filter-upload": "আপলোডের ধরন:", + "log-action-filter-all": "সব", + "log-action-filter-block-block": "বাধাদান", + "log-action-filter-block-reblock": "বাধাদান পরিবর্তন", + "log-action-filter-block-unblock": "বাধা অপসারণ", + "log-action-filter-delete-delete": "পাতা অপসারণ", + "log-action-filter-delete-restore": "পাতা পুনঃরুদ্ধার", + "log-action-filter-delete-event": "লগ অপসারণ", + "log-action-filter-delete-revision": "সংশোধন অপসারণ", + "log-action-filter-patrol-patrol": "ম্যানুয়াল টহল", + "log-action-filter-patrol-autopatrol": "স্বয়ংক্রিয় টহল", + "log-action-filter-protect-protect": "সুরক্ষা", + "log-action-filter-protect-modify": "সুরক্ষা পরিমার্জন", + "log-action-filter-protect-unprotect": "অসুরক্ষা", + "log-action-filter-upload-upload": "নতুন আপলোড", + "log-action-filter-upload-overwrite": "পুনঃআপলোড" } diff --git a/languages/i18n/br.json b/languages/i18n/br.json index c542737eb5..03a0f881d8 100644 --- a/languages/i18n/br.json +++ b/languages/i18n/br.json @@ -1618,8 +1618,6 @@ "categories": "Roll ar rummadoù", "categoriespagetext": "Er {{PLURAL:$1|rummad|rummadoù}} da-heul ez eus pajennoù pe restroù media.\nNe ziskouezer ket amañ ar [[Special:UnusedCategories|Rummadoù dizimplij]].\nGwelet ivez ar [[Special:WantedCategories|rummadoù goulennet a vank]].", "categoriesfrom": "Diskouez ar rummadoù en ur gregiñ gant :", - "special-categories-sort-count": "Urzhiañ dre gont", - "special-categories-sort-abc": "urzh al lizherenneg", "deletedcontributions": "Degasadennoù diverket un implijer", "deletedcontributions-title": "Degasadennoù diverket un implijer", "sp-deletedcontributions-contribs": "Degasadennoù", @@ -2184,10 +2182,6 @@ "import-logentry-upload-detail": "$1 {{PLURAL:$1|adweladenn}} enporzhiet", "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|adweladenn}} enporzhiet eus $2", "javascripttest": "Amprouadenn JavaScript", - "javascripttest-pagetext-noframework": "Miret eo ar bajenn-mañ evit amprouiñ JavaScript.", - "javascripttest-pagetext-unknownframework": "Framm amprouiñ \"$1\" dianav.", - "javascripttest-pagetext-frameworks": "Diuzit unan eus ar frammoù amprouiñ da-heul : $1", - "javascripttest-pagetext-skins": "Diuzit ar gwiskadur da vezañ implijet evit an amprouadennoù :", "javascripttest-qunit-intro": "Sellet ouzh [$1 an teulioù amprouiñ] e mediawiki.org.", "tooltip-pt-userpage": "Ho pajenn implijer", "tooltip-pt-anonuserpage": "Ar bajenn implijer evit ar c'homlec'h IP implijet ganeoc'h", @@ -2436,8 +2430,8 @@ "exif-colorspace": "Lec'h al livioù", "exif-componentsconfiguration": "Talvoudegezh pep parzh", "exif-compressedbitsperpixel": "Doare gwaskañ ar skeudenn", - "exif-pixelydimension": "Ledander ar skeudenn", - "exif-pixelxdimension": "Sav ar skeudenn", + "exif-pixelxdimension": "Ledander ar skeudenn", + "exif-pixelydimension": "Sav ar skeudenn", "exif-usercomment": "Evezhiadennoù", "exif-relatedsoundfile": "Restr son stag", "exif-datetimeoriginal": "Deiziad hag eur ar sevel roadoù", @@ -2884,7 +2878,6 @@ "version-libraries-version": "Stumm", "version-libraries-license": "Aotre-implijout", "version-libraries-description": "Deskrivadur", - "redirect-legend": "Adkas d'ur restr pe d'ur bajenn", "redirect-submit": "Mont", "redirect-lookup": "Klask :", "redirect-value": "Talvoud :", @@ -2895,7 +2888,6 @@ "redirect-not-exists": "Talvoud n'eo ket bet kavet", "fileduplicatesearch": "Klask ar restroù e doubl", "fileduplicatesearch-summary": "Klask restroù e doubl war diazez talvoudennoù krennet.", - "fileduplicatesearch-legend": "Klask un doubl", "fileduplicatesearch-filename": "Anv ar restr :", "fileduplicatesearch-submit": "Klask", "fileduplicatesearch-info": "$1 × $2 piksel
Ment ar restr : $3
seurt MIME : $4", diff --git a/languages/i18n/bs.json b/languages/i18n/bs.json index e531009c84..7d3500a4db 100644 --- a/languages/i18n/bs.json +++ b/languages/i18n/bs.json @@ -58,6 +58,7 @@ "tog-watchlisthidebots": "Sakrij izmjene botova sa spiska praćenih članaka", "tog-watchlisthideminor": "Sakrij manje izmjene sa spiska praćenih članaka", "tog-watchlisthideliu": "Sakrij izmjene prijavljenih korisnika sa spiska praćenih članaka", + "tog-watchlistreloadautomatically": "Automatski osvježi spisak praćenja kad god se izmijeni filter (potreban JavaScript)", "tog-watchlisthideanons": "Sakrij izmjene anonimnih korisnika sa spiska praćenih članaka", "tog-watchlisthidepatrolled": "Sakrij patrolirane izmjene sa spiska praćenja", "tog-watchlisthidecategorization": "Sakrij kategorizaciju stranica", @@ -380,7 +381,7 @@ "mypreferencesprotected": "Nemate dozvolu da uređujete svoje postavke.", "ns-specialprotected": "Specijalne stranice se ne mogu uređivati.", "titleprotected": "Ovaj naslov stranice je od pravljenja [[User:$1|{{GENDER:$1|zaštitio $1|zaštitila $1}}]].\nRazlog: $2.", - "filereadonlyerror": "Ne mogu promijeniti datoteku \"$1\" jer je skladište datoteka \"$2\" zaključano samo za čitanje.\n\nAdministrator koji ga je zaključao naveo je ovo objašnjenje: \"$3\".", + "filereadonlyerror": "Ne mogu promijeniti datoteku \"$1\" jer je skladište datoteka \"$2\" zaključano samo za čitanje.\n\nSistemski administrator koji ga je zaključao naveo je ovo objašnjenje: \"$3\".", "invalidtitle-knownnamespace": "Neispravan naslov s imenskim prostorom \"$2\" i tekstom \"$3\"", "invalidtitle-unknownnamespace": "Neispravan naslov s imenskim prostorom br. $1 i tekstom \"$2\"", "exception-nologin": "Niste prijavljeni", @@ -453,7 +454,7 @@ "nocookieslogin": "{{SITENAME}} koristi kolačiće (''cookies'') da bi se korisnici prijavili. Vi ste onemogućili kolačiće na Vašem kompjuteru. Molimo Vas da ih omogućite i da pokušate ponovo sa prijavom.", "nocookiesfornew": "Korisnički račun nije napravljen, jer nismo mogli da potvrdimo njegov izvor.\nProvjerite da li su cookies omogućeni, ponovo učitajte ovu stranicu i pokušajte ponovo.", "noname": "Niste izabrali ispravno korisničko ime.", - "loginsuccesstitle": "Prijavljivanje uspješno", + "loginsuccesstitle": "Prijavljen", "loginsuccess": "'''Sad ste prijavljeni na {{SITENAME}} kao \"$1\".'''", "nosuchuser": "Ne postoji korisnik s imenom \"$1\".\nKorisnička imena razlikuju velika i mala slova.\nProvjerite Vaš unos ili [[Special:UserLogin/signup|napravite novi korisnički račun]].", "nosuchusershort": "Ne postoji korisnik s imenom \"$1\".\nProvjerite jeste li dobro ukucali.", @@ -463,17 +464,17 @@ "wrongpasswordempty": "Lozinka koju ste unijeli je bila prazna.\nMolimo Vas da pokušate ponovno.", "passwordtooshort": "Lozinka mora imati najmanje {{PLURAL:$1|1 znak|$1 znaka|$1 znakova}}.", "passwordtoolong": "Lozinke ne mogu biti duže od {{PLURAL:$1|jednog znaka|$1 znaka|$1 znakova}}.", - "password-name-match": "Vaša šifra mora biti različita od Vašeg korisničkog imena.", + "password-name-match": "Vaša lozinka mora biti različita od Vašeg korisničkog imena.", "password-login-forbidden": "Korištenje ovih korisničkih imena i šifara je zabranjeo.", "mailmypassword": "Poništi lozinku", - "passwordremindertitle": "{{SITENAME}} - privremena šifra", - "passwordremindertext": "Neko (vjerovatno Vi, sa IP adrese $1) je zahtjevao da vam pošaljemo novu šifru za {{SITENAME}} ($4). Privremena šifra za korisnika \"$2\" je napravljena i glasi \"$3\". Ako ste to željeli, sad treba da se prijavite i promjenite šifru.\nVaša privremena šifra će isteči za {{PLURAL:$5|$5 dan|$5 dana}}.\n\nAko je neko drugi napravio ovaj zahtjev ili ako ste se sjetili vaše šifre i ne želite više da je promjenite, možete da ignorišete ovu poruku i da nastavite koristeći vašu staru šifru.", + "passwordremindertitle": "Privremena lozinka za {{GRAMMAR:akuzativ|{{SITENAME}}}}", + "passwordremindertext": "Neko (vjerovatno Vi, s IP adrese $1) zathijevao je da Vam pošaljemo novu lozinku za {{GRAMMAR:akuzativ|{{SITENAME}}}} ($4). Privremena lozinka za korisnika \"$2\" napravljena je i glasi \"$3\". Ako ste to željeli, sad se trebate prijaviti i promijeniti lozinku.\nVaša privremena lozinku isteći će za {{PLURAL:$5|$5 dan|$5 dana}}.\n\nAko je neko drugi napravio ovaj zahtjev ili ako ste se u međuvremenu sjetili Vaše lozinke i više je ne želite promijeniti, možete ignorirati ovu poruku i nastaviti da koristite Vašu staru lozinku.", "noemail": "Ne postoji adresa e-pošte za korisnika \"$1\".", "noemailcreate": "Morate da navedete validnu e-mail adresu", - "passwordsent": "Nova šifra je poslata na adresu e-pošte korisnika \"$1\".\nMolimo Vas da se prijavite nakon što je primite.", - "blocked-mailpassword": "Da bi se spriječila nedozvoljena akcija, Vašoj IP adresi je onemogućeno uređivanje stranica kao i mogućnost zahtijevanje nove šifre.", + "passwordsent": "Nova lozinka poslana je na adresu e-pošte korisnika \"$1\".\nMolimo Vas da se prijavite nakon što je primite.", + "blocked-mailpassword": "Da bi se spriječila nedozvoljena akcija, Vašoj IP adresi je onemogućeno uređivanje stranica kao i mogućnost zahtijevanje nove lozinke.", "eauthentsent": "Na navedenu adresu e-pošte poslana je poruka s potvrdom.\nPrije nego što pošaljemo daljnje poruke, pratite uputstva s e-pošte da biste potvrdili da je račun zaista Vaš.", - "throttled-mailpassword": "Već Vam je poslan e-mail za promjenu šifre u {{PLURAL:$1|posljednjih sat vremena|posljednja $1 sata|posljednjih $1 sati}}.\nDa bi se spriječila zloupotreba, može se poslati samo jedan e-mail za promjenu šifre {{PLURAL:$1|svakih sat vremena|svaka $1 sata|svakih $1 sati}}.", + "throttled-mailpassword": "Već Vam je poslana e-poruka za promjenu lozinke u {{PLURAL:$1|posljednjih sat vremena|posljednja $1 sata|posljednjih $1 sati}}.\nDa bi se spriječila zloupotreba, može se poslati samo jedna e-poruka za promjenu lozinke {{PLURAL:$1|svakih sat vremena|svaka $1 sata|svakih $1 sati}}.", "mailerror": "Greška pri slanju e-pošte: $1", "acct_creation_throttle_hit": "Posjetioci na ovoj wiki koji koriste Vašu IP adresu su već napravili {{PLURAL:$1|$1 račun|$1 računa}} u zadnjih nekoliko dana, što je najveći broj dopuštenih napravljenih računa za ovaj period.\nKao rezultat, posjetioci koji koriste ovu IP adresu ne mogu trenutno praviti više računa.", "emailauthenticated": "Vaša adresa e-pošte potvrđena je $2 u $3.", @@ -486,9 +487,9 @@ "accountcreated": "Korisnički račun je napravljen", "accountcreatedtext": "Korisnički račun za [[{{ns:User}}:$1|$1]] ([[{{ns:User talk}}:$1|razgovor]]) je napravljen.", "createaccount-title": "Pravljenje korisničkog računa za {{SITENAME}}", - "createaccount-text": "Neko je napravio korisnički račun za vašu e-mail adresu na {{SITENAME}} ($4) sa imenom \"$2\", i sa šifrom \"$3\".\nTrebali biste se prijaviti i promijeniti šifru.\n\nMožete ignorisati ovu poruku, ako je korisnički račun napravljen greškom.", + "createaccount-text": "Neko je napravio korisnički račun za Vašu adresu e-pošte na {{GRAMMAR:dativ|{{SITENAME}}}} ($4) s imenom \"$2\", i s lozinkom \"$3\".\nTrebali biste se prijaviti i promijeniti lozinku.\n\nMožete ignorirati ovu poruku, ako je korisnički račun napravljen greškom.", "login-throttled": "Previše puta ste se pokušali prijaviti.\nMolimo Vas da sačekate $1 prije nego što pokušate ponovo.", - "login-abort-generic": "Vaša prijava nije bila uspješna – Prekinuto", + "login-abort-generic": "Neuspješna prijava – Prekinuto", "login-migrated-generic": "Vaš račun je premješten, a vaše korisničko ime više ne postoji na ovoj wiki.", "loginlanguagelabel": "Jezik: $1", "suspicious-userlogout": "Vaš zahtjev za odjavu je odbijen jer je poslan preko pokvarenog preglednika ili keširanog proksija.", @@ -500,32 +501,32 @@ "php-mail-error-unknown": "Nepoznata greška u PHP funkciji mail()", "user-mail-no-addy": "Pokušaj slanja e-maila bez navedene e-mail adrese.", "user-mail-no-body": "Pokušano slanje e-poruke s praznim ili nerazumno kratkim sadržajem.", - "changepassword": "Promijeni šifru", - "resetpass_announce": "Da biste završili prijavu, morate postaviti novu šifru.", + "changepassword": "Promijeni lozinku", + "resetpass_announce": "Da biste završili prijavu, morate podesiti novu lozinku.", "resetpass_text": "", - "resetpass_header": "Obnovi šifru za račun", - "oldpassword": "Stara šifra:", - "newpassword": "Nova šifra:", - "retypenew": "Ponovo upišite novu šifru:", - "resetpass_submit": "Odredi šifru i prijavi se", - "changepassword-success": "Vaša šifra/lozinka je uspiješno promjenjena!", + "resetpass_header": "Promjena lozinke računa", + "oldpassword": "Stara lozinka:", + "newpassword": "Nova lozinka:", + "retypenew": "Ponovo upišite novu lozinku:", + "resetpass_submit": "Postavi lozinku i prijavi se", + "changepassword-success": "Vaša lozinka je promijenjena.", "changepassword-throttled": "Previše puta ste se pokušali prijaviti.\nMolimo Vas da sačekate $1 prije nego što pokušate ponovo.", - "resetpass_forbidden": "Šifre ne mogu biti promjenjene", + "resetpass_forbidden": "Lozinke ne mogu biti promijenjene", "resetpass-no-info": "Morate biti prijavljeni da biste pristupili ovoj stranici direktno.", - "resetpass-submit-loggedin": "Promijeni šifru", + "resetpass-submit-loggedin": "Promijeni lozinku", "resetpass-submit-cancel": "Odustani", - "resetpass-wrong-oldpass": "Privremena ili trenutna šifra nije validna.\nMožda ste već uspješno promijenili Vašu šifru ili ste tražili novu privremenu šifru.", + "resetpass-wrong-oldpass": "Privremena ili trenutna lozinka nije validna.\nMožda ste već promijenili Vašu lozinku ili ste tražili novu privremenu lozinku.", "resetpass-recycled": "Molimo resetirajte vašu lozinku u nešto drugo od vaše trenutne lozinke.", "resetpass-temp-emailed": "Prijavili ste se sa privremenim kodom iz e-pošte.\nDa biste završili prijavljivanje morate postaviti novu lozinku ovdje:", - "resetpass-temp-password": "Privremena šifra:", - "resetpass-abort-generic": "Promjenu šifre/lozinke je prekinula ekstenzija.", + "resetpass-temp-password": "Privremena lozinka:", + "resetpass-abort-generic": "Promjenu lozinke prekinulo je proširenje.", "resetpass-expired": "Vaša lozinka je istekla. Postavite novu lozinku da biste se prijavili.", - "resetpass-expired-soft": "Vaša šifra je istekla i mora se resetirati. Molimo odaberite sada novu šifru ili kliknite \"{{int:resetpass-submit-cancel}}\" da je resetirate kasnije.", - "resetpass-validity-soft": "Vaša šifra nije valjana: $1\n\nMolimo odaberite novu šifru ili kliknite \"{{int:resetpass-submit-cancel}}\" da je resetirate kasnije.", - "passwordreset": "Poništavanje šifre", - "passwordreset-text-one": "Ispunite ovaj obrazac da biste resetovali Vašu šifru/lozinku.", + "resetpass-expired-soft": "Vaša lozinka je istekla i mora se resetirati. Molimo odaberite sada novu lozinka ili kliknite \"{{int:resetpass-submit-cancel}}\" da je resetirate kasnije.", + "resetpass-validity-soft": "Vaša lozinka nije valjana: $1\n\nMolimo odaberite novu lozinku ili kliknite \"{{int:resetpass-submit-cancel}}\" da je resetirate kasnije.", + "passwordreset": "Ponovo postavljanje lozinke", + "passwordreset-text-one": "Ispunite ovaj obrazac da biste dobili privremenu lozinku na Vašu adresu e-pošte.", "passwordreset-text-many": "{{PLURAL:$1|Ispunite jedno od polja kako biste dobili privremenu lozinku putem e-pošte.}}", - "passwordreset-disabled": "Poništavanje šifre je onemogućeno na ovoj wiki.", + "passwordreset-disabled": "Ponovo postavljanje lozinke je onemogućeno na ovom wikiju.", "passwordreset-emaildisabled": "E-pošta je onemogućena na ovom wikiju.", "passwordreset-username": "Korisničko ime:", "passwordreset-domain": "Domen:", @@ -611,7 +612,7 @@ "newarticle": "(Novi)", "newarticletext": "Došli ste na stranicu koja još nema sadržaja.\n*Ako želite unijeti sadržaj, počnite tipkati u prozor ispod ovog teksta.\n*Ako Vam treba pomoć, idite na [$1 stranicu za pomoć].\n*Ako ste ovamo dospjeli slučajno, kliknite na dugme \"Nazad\" (''Back'') u Vašem internetskom pregledniku.", "anontalkpagetext": "----''Ovo je stranica za razgovor za anonimnog korisnika koji još nije napravio nalog ili ga ne koristi.\nZbog toga moramo da koristimo brojčanu IP adresu kako bismo identifikovali njega ili nju.\nTakvu adresu može dijeliti više korisnika.\nAko ste anonimni korisnik i mislite da su vam upućene nebitne primjedbe, molimo Vas da [[Special:UserLogin/signup|napravite nalog]] ili se [[Special:UserLogin|prijavite]] da biste izbjegli buduću zabunu sa ostalim anonimnim korisnicima.''", - "noarticletext": "Na ovoj stranici trenutno nema teksta.\nMožete [[Special:Search/{{PAGENAME}}|tražiti naslov ove stranice]] na drugim stranicama.\n[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} tražiti u povezanim zapisnicima] ili [{{fullurl:{{FULLPAGENAME}}|action=edit}} urediti ovu stranicu].", + "noarticletext": "Na ovoj stranici trenutno nema teksta.\nMožete [[Special:Search/{{PAGENAME}}|tražiti naslov ove stranice]] na drugim stranicama,\n[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} tražiti u povezanim zapisnicima] ili [{{fullurl:{{FULLPAGENAME}}|action=edit}} napraviti ovu stranicu].", "noarticletext-nopermission": "Trenutno nema teksta na ovoj stranici.\nMožete [[Special:Search/{{PAGENAME}}|tražiti ovaj naslov stranice]] na drugim stranicama ili [{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} pretražiti povezane zapisnike], ali nemate dozvolu da napravite ovu stranicu.", "missing-revision": "Uređivanje broj $1 na stranici \"{{FULLPAGENAME}}\" ne postoji.\n\nOvo se obično dešava kad pratite zastarjelu vezu na stranicu koja je obrisana.\nViše informacija možete pronaći u [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} protokolu brisanja].", "userpage-userdoesnotexist": "Korisnički račun \"$1\" nije registrovan.\nMolimo provjerite da li želite napraviti/izmijeniti ovu stranicu.", @@ -1020,7 +1021,7 @@ "userrights": "Postavke korisničkih prava", "userrights-lookup-user": "Menadžment korisničkih grupa", "userrights-user-editname": "Upišite korisničko ime:", - "editusergroup": "Uredi korisničke grupe", + "editusergroup": "Uredi {{GENDER:$1|korisničke}} grupe", "editinguser": "Mijenjate korisnička prava korisnika [[User:$1|$1]] $2", "userrights-editusergroup": "Uredi korisničke grupe", "saveusergroups": "Sačuvaj korisničke grupe", @@ -1035,7 +1036,7 @@ "userrights-changeable-col": "Grupe koje možete mijenjati", "userrights-unchangeable-col": "Grupe koje ne možete mijenjati", "userrights-conflict": "Sukob u izmjeni korisničkih prava! Molimo da razmotrite i potvrdite Vaše promjene.", - "userrights-removed-self": "Uspješno ste uklonili vlastite prava. Zbog toga više niste u stanju pristupiti ovoj stranici.", + "userrights-removed-self": "Uklonili ste vlastita prava. Zbog toga više ne možete pristupiti ovoj stranici.", "group": "Grupa:", "group-user": "Korisnici", "group-autoconfirmed": "Potvrđeni korisnici", @@ -1129,13 +1130,22 @@ "right-managechangetags": "Napravi i briši [[Special:Tags|oznake]] iz baze podataka", "right-applychangetags": "Primijeni [[Special:Tags|oznake]] na nečije izmjene", "right-changetags": "Dodavanje ili uklanjanje raznih [[Special:Tags|oznaka]] na pojedinačnim verzijama i unosima zapisnika", + "grant-group-page-interaction": "Upravljanje stranicama", + "grant-group-watchlist-interaction": "Upravljanje Vašim spiskom praćenja", + "grant-group-high-volume": "Izvršavanje velikog broja radnji", + "grant-group-customization": "Prilagodbe i postavke", + "grant-group-other": "Raznovrsno djelovanje", "grant-createeditmovepage": "Pravljenje, uređivanje i premještanje stranica", + "grant-editmycssjs": "Uređivanje Vašeg korisničkog CSS-a ili JavaScripta", + "grant-editmyoptions": "Uređivanje Vaših postavki", "grant-editmywatchlist": "Uređivanje Vašeg spiska praćenja", "grant-editpage": "Uređivanje postojećih stranica", "grant-editprotected": "Uređivanje zaštićenih stranica", - "grant-highvolume": "Uređivanja velikog opsega", + "grant-highvolume": "Veliki broj izmjena", + "grant-patrol": "Patroliranje izmjena stranica", "grant-uploadeditmovefile": "Postavljanje, zamjena i premještanje datoteka", "grant-uploadfile": "Postavljanje novih datoteka", + "grant-basic": "Osnovna prava", "grant-viewmywatchlist": "Pregled Vašeg spiska praćenja", "newuserlogpage": "Zapisnik novih korisnika", "newuserlogpagetext": "Ovo je zapisnik o registraciji novih korisnika.", @@ -1203,7 +1213,7 @@ "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} ([[Special:NewPages|spisak novih stranica]])", "recentchanges-submit": "Prikaži", "rcnotefrom": "Ispod {{PLURAL:$5|je izmjena|su izmjene}} od $3, $4 (do $1 prikazano).", - "rclistfrom": "Prikaži nove izmjene počev od $3 $2", + "rclistfrom": "Prikaži nove izmjene počev od $3 u $2", "rcshowhideminor": "$1 manje izmjene", "rcshowhideminor-show": "Prikaži", "rcshowhideminor-hide": "Sakrij", @@ -1249,7 +1259,7 @@ "recentchangeslinked-page": "Naslov stranice:", "recentchangeslinked-to": "Pokaži promjene stranica koji su povezane sa datom stranicom", "recentchanges-page-added-to-category": "[[:$1]] dodana je u kategoriju", - "recentchanges-page-added-to-category-bundled": "[[:$1]] i još {{PLURAL:$2|jedna stranica|$2 stranice|$2 stranica}} su dodane u kategoriju", + "recentchanges-page-added-to-category-bundled": "[[:$1]] i još [[Special:WhatLinksHere/$1|{{PLURAL:$2|jedna stranica|$2 stranice|$2 stranica}}]] su dodane u kategoriju", "recentchanges-page-removed-from-category": "[[:$1]] je uklonjena iz kategorije", "recentchanges-page-removed-from-category-bundled": "[[:$1]] i još {{PLURAL:$2|jedna stranica|$2 stranice|$2 stranica}} su uklonjene iz kategorije", "autochange-username": "Automatska promjena MediaWikija", @@ -1370,15 +1380,15 @@ "foreign-structured-upload-form-label-own-work": "Ovo je moje djelo", "foreign-structured-upload-form-label-infoform-categories": "Kategorije", "foreign-structured-upload-form-label-infoform-date": "Datum", - "foreign-structured-upload-form-label-own-work-message-local": "Potvrđujem da postavljam ovu datoteku u skladu s uvjetima korištenja i pravilima o licenciranju na {{GRAMMAR:dativ|{{SITENAME}}}}.", + "foreign-structured-upload-form-label-own-work-message-local": "Potvrđujem da postavljam ovu datoteku u skladu s uslovima korištenja i pravilima o licenciranju na {{GRAMMAR:dativ|{{SITENAME}}}}.", "foreign-structured-upload-form-label-not-own-work-message-local": "Ako niste u stanju postaviti ovu datoteku pod pravilima {{GRAMMAR:genitiv|{{SITENAME}}}}, molimo zatvorite ovaj prozor i pokušajte drugom metodom.", "foreign-structured-upload-form-label-not-own-work-local-local": "Također možete pokušati [[Special:Upload|na standardnoj stranici za postavljanje]].", - "foreign-structured-upload-form-label-own-work-message-default": "Shvatam da postavljam ovu datoteku na zajedničko spremište. Potvrđujem da to činim u skladu s uvjetima korištenja i ovdašnjim pravilima licenciranja.", + "foreign-structured-upload-form-label-own-work-message-default": "Shvatam da postavljam ovu datoteku na zajedničko spremište. Potvrđujem da to činim u skladu s uslovima korištenja i ovdašnjim pravilima licenciranja.", "foreign-structured-upload-form-label-not-own-work-message-default": "Ako niste u stanju postaviti ovu datoteku pod pravilima zajedničkog skladišta, molimo zatvorite ovaj prozor i pokušajte drugom metodom.", "foreign-structured-upload-form-label-not-own-work-local-default": "Možete također pokušati koristeći [[Special:Upload|stranicu za postavljanje na {{GRAMMAR:dativ|{{SITENAME}}}}]], ako se ova datoteka može postaviti pod tamošnjim pravilima.", - "foreign-structured-upload-form-label-own-work-message-shared": "Potvrđujem da posjedujem autorska prava za ovu datoteku i slažem se da ću je neopozivo postaviti na Wikimedia Commons pod licencom [https://creativecommons.org/licenses/by-sa/4.0/ Creative Commons Attribution-ShareAlike 4.0], te se slažem s [https://wikimediafoundation.org/wiki/Terms_of_Use Uvjetima korištenja].", + "foreign-structured-upload-form-label-own-work-message-shared": "Potvrđujem da posjedujem autorska prava za ovu datoteku i slažem se da ću je neopozivo postaviti na Wikimedia Commons pod licencom [https://creativecommons.org/licenses/by-sa/4.0/ Creative Commons Attribution-ShareAlike 4.0], te se slažem s [https://wikimediafoundation.org/wiki/Terms_of_Use uslovima korištenja].", "foreign-structured-upload-form-label-not-own-work-message-shared": "Ako ne posjedujete autorska prava za ovu datoteku ili je želite postaviti pod drugom licencom, imajte na umu da možete koristiti [https://commons.wikimedia.org/wiki/Special:UploadWizard čarobnjak za postavljanje datoteka na Commonsu].", - "foreign-structured-upload-form-label-not-own-work-local-shared": "Također možete koristiti [[Special:Upload|stranicu za postavljanje datoteka na projektu {{SITENAME}}]] ako politika stranice dozvoljava postavljanje ove datoteke.", + "foreign-structured-upload-form-label-not-own-work-local-shared": "Također možete koristiti [[Special:Upload|stranicu za postavljanje datoteka na {{GRAMMAR:dativ|{{SITENAME}}}}]] ako pravila te stranice dozvoljavaju postavljanje ove datoteke.", "backend-fail-stream": "Ne mogu emitirati datoteku $1.", "backend-fail-backup": "Ne može sigurnosno kopirati datoteku $1.", "backend-fail-notexists": "Datoteka $1 ne postoji.", @@ -1705,8 +1715,6 @@ "categories-submit": "Prikaži", "categoriespagetext": "{{PLURAL:$1|Slijedeća kategorija sadrži|Slijedeće kategorije sadrže}} stranice ili multimedijalne datoteke.\n[[Special:UnusedCategories|Nekorištene kategorije]] nisu prikazane ovdje.\nVidi također [[Special:WantedCategories|zatražene kategorije]].", "categoriesfrom": "Prikaži kategorije počev od:", - "special-categories-sort-count": "sortiranje po broju", - "special-categories-sort-abc": "sortiraj po abecedi", "deletedcontributions": "Obrisani doprinosi korisnika", "deletedcontributions-title": "Obrisani doprinosi korisnika", "sp-deletedcontributions-contribs": "doprinosi", @@ -1815,7 +1823,7 @@ "wlshowlast": "Prikaži posljednjih $1 sati $2 dana", "watchlist-hide": "Sakrij", "watchlist-submit": "Prikaži", - "wlshowtime": "Prikaži posljednjih:", + "wlshowtime": "Vremensko razdoblje za prikaz:", "wlshowhideminor": "manje izmjene", "wlshowhidebots": "botove", "wlshowhideliu": "registrovane korisnike", @@ -2315,19 +2323,15 @@ "import-logentry-upload-detail": "{{PLURAL:$1|Uvezena jedna revizija|Uvezene $1 revizije|Uvezeno $1 revizija}}", "import-logentry-interwiki-detail": "{{PLURAL:$1|Uvezena $1 revizija|Uvezene $1 revizije|Uvezeno $1 revizija}} od $2", "javascripttest": "Testiranje JavaScript-e", - "javascripttest-pagetext-noframework": "Ova stranica je određena za pokretanje JavaScript testova.", - "javascripttest-pagetext-unknownframework": "Nepoznat radni okvir testiranja\"$1\".", "javascripttest-pagetext-unknownaction": "Nepoznata radnja \"$1\".", - "javascripttest-pagetext-frameworks": "Molimo Vas izaberite jednu od sljedećih testnih okvira: $1", - "javascripttest-pagetext-skins": "Izaberite s kojom temom želite da pokrenete probu:", "javascripttest-qunit-intro": "Pogledajte [$1 dokumentaciju za testiranje] na mediawiki.org.", - "tooltip-pt-userpage": "Vaša korisnička stranica", + "tooltip-pt-userpage": "{{GENDER:|Vaša}} korisnička stranica", "tooltip-pt-anonuserpage": "Korisnička stranica za ip koju Vi uređujete kao", - "tooltip-pt-mytalk": "Vaša stranica za razgovor", + "tooltip-pt-mytalk": "{{GENDER:|Vaša}} stranica za razgovor", "tooltip-pt-anontalk": "Razgovor o doprinosu sa ove IP adrese", - "tooltip-pt-preferences": "Vaše postavke", + "tooltip-pt-preferences": "{{GENDER:|Vaše}} postavke", "tooltip-pt-watchlist": "Spisak stranica koje pratite", - "tooltip-pt-mycontris": "Spisak vaših doprinosa", + "tooltip-pt-mycontris": "Spisak {{GENDER:|Vaših}} doprinosa", "tooltip-pt-login": "Predlažemo da se prijavite, ali nije obvezno.", "tooltip-pt-logout": "Odjavi me", "tooltip-pt-createaccount": "Ohrabrujemo vas da otvorite nalog i prijavite se, međutim to nije obavezno", @@ -2358,8 +2362,8 @@ "tooltip-t-recentchangeslinked": "Nedavne izmjene na stranicama koje su povezane sa ovom", "tooltip-feed-rss": "RSS za ovu stranicu", "tooltip-feed-atom": "Atom za ovu stranicu", - "tooltip-t-contributions": "Pogledajte spisak doprinosa ovog korisnika", - "tooltip-t-emailuser": "Pošaljite pismo ovom korisniku", + "tooltip-t-contributions": "Pogledajte spisak doprinosa {{GENDER:$1|ovog korisnika|ove korisnice|ove osobe}}", + "tooltip-t-emailuser": "Pošaljite e-poruku {{GENDER:$1|ovom korisniku}}", "tooltip-t-info": "Više informacija o ovoj stranici", "tooltip-t-upload": "Postavi slike i druge medije", "tooltip-t-specialpages": "Spisak svih posebnih stranica", @@ -2573,8 +2577,8 @@ "exif-colorspace": "Prostor boje", "exif-componentsconfiguration": "Značenje svake komponente", "exif-compressedbitsperpixel": "Način kompresije slike", - "exif-pixelydimension": "Širina slike", - "exif-pixelxdimension": "Visina slike", + "exif-pixelxdimension": "Širina slike", + "exif-pixelydimension": "Visina slike", "exif-usercomment": "Korisnički komentari", "exif-relatedsoundfile": "Povezana zvučna datoteka", "exif-datetimeoriginal": "Datum i vrijeme generisanja podataka", @@ -3061,7 +3065,7 @@ "version-poweredby-others": "ostali", "version-poweredby-translators": "translatewiki.net prevodioci", "version-credits-summary": "Željeli bismo se zahvaliti sljedećim ljudima na njihovom doprinosu [[Special:Version|MediaWikiju]].", - "version-license-info": "Mediawiki je slobodni softver; možete ga redistribuirati i(li) mijenjati pod uvjetima opće javne GNU licence kao što je objavljeno od strane \"Free Software Foundationa\", bilo u verziji 2 licence ili (po Vašoj volji) nekoj od kasnijih verzija.\n\nMediawiki se distribuira u nadi da će biti korisna, ali BEZ IKAKVIH GARANCIJA, čak i bez ikakvih posrednih garancija o KOMERCIJALNOSTI ili DOSTUPNOSTI ZA ODREĐENU SVRHU. Pogledajte opću javnu GNU licencu za više detalja.\n\nTrebali biste dobiti [{{SERVER}}{{SCRIPTPATH}}/KOPIJU opće javne GNU licence] zajedno s ovim programom. Ako niste, pišite \"Free Software Foundationu\" na adresu: Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA ili je pročitajte [//www.gnu.org/licenses/old-licenses/gpl-2.0.html ovdje].", + "version-license-info": "Mediawiki je slobodni softver; možete ga redistribuirati i(li) mijenjati pod uslovima opće javne GNU licence kao što je objavljeno od strane \"Free Software Foundationa\", bilo u verziji 2 licence ili (po Vašoj volji) nekoj od kasnijih verzija.\n\nMediawiki se distribuira u nadi da će biti korisna, ali BEZ IKAKVIH GARANCIJA, čak i bez ikakvih posrednih garancija o KOMERCIJALNOSTI ili DOSTUPNOSTI ZA ODREĐENU SVRHU. Pogledajte opću javnu GNU licencu za više detalja.\n\nTrebali biste dobiti [{{SERVER}}{{SCRIPTPATH}}/KOPIJU opće javne GNU licence] zajedno s ovim programom. Ako niste, pišite \"Free Software Foundationu\" na adresu: Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA ili je pročitajte [//www.gnu.org/licenses/old-licenses/gpl-2.0.html ovdje].", "version-software": "Instalirani softver", "version-software-product": "Proizvod", "version-software-version": "Verzija", @@ -3075,7 +3079,6 @@ "version-libraries-description": "Opis", "version-libraries-authors": "Autori", "redirect": "Preusmjerenje na datoteku, korisnika, stranicu ili oznaku izmjene", - "redirect-legend": "Preusmjeri na datoteku ili stranicu", "redirect-summary": "Ova posebna stranica preusmjerava na datoteku (datog imena), stranicu (date oznake izmjene) ili korisničku stranicu (datog numeričkog identifikatora korisnika). Oznake se koriste na sljedeći način: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/page/64308]], [[{{#Special:Redirect}}/revision/328429]] ili [[{{#Special:Redirect}}/user/101]].", "redirect-submit": "Idi", "redirect-lookup": "Tip vrijednosti:", @@ -3087,7 +3090,6 @@ "redirect-not-exists": "Vrijednost nije pronađena", "fileduplicatesearch": "Pretraga duplikata", "fileduplicatesearch-summary": "Pretraga za duplim datotekama na bazi njihove haš vrijednosti.", - "fileduplicatesearch-legend": "Pretraga za dvojnicima", "fileduplicatesearch-filename": "Ime datoteke:", "fileduplicatesearch-submit": "Traži", "fileduplicatesearch-info": "$1 × $2 piksel
Veličina datoteke: $3
MIME vrsta: $4", @@ -3185,7 +3187,7 @@ "tags-edit-revision-legend": "Dodaj ili ukloni oznake sa {{PLURAL:$1|ove verzije|svih $1 verzija}}", "tags-edit-logentry-legend": "Dodaj ili ukloni oznake sa {{PLURAL:$1|ove zapisničke stavke|svih $1 zapisničkih stavki}}", "tags-edit-existing-tags": "Postojeće oznake:", - "tags-edit-existing-tags-none": "\"Nema\"", + "tags-edit-existing-tags-none": "Nema", "tags-edit-new-tags": "Nove oznake:", "tags-edit-add": "Dodaj ove oznake:", "tags-edit-remove": "Ukloni ove oznake:", @@ -3195,7 +3197,7 @@ "tags-edit-reason": "Razlog:", "tags-edit-revision-submit": "Primijeni izmjene {{PLURAL:$1|ovoj verziji|svim $1 verzijama}}", "tags-edit-logentry-submit": "Primijeni izmjene {{PLURAL:$1|ovom zapisničkom unosu|svim $1 zapisničkim unosima}}", - "tags-edit-success": "Izmjene su uspješno primijenjene.", + "tags-edit-success": "Izmjene su primijenjene.", "tags-edit-failure": "Nije bilo moguće primijeniti izmjene:\n$1", "tags-edit-nooldid-title": "Neispravna odredišna verzija", "tags-edit-nooldid-text": "Niste izabrali odredišnu verziju na koju treba primijeniti ovu funkciju, ili odredišna verzija na postoji.", diff --git a/languages/i18n/ca.json b/languages/i18n/ca.json index a3dd1b45dd..754af74839 100644 --- a/languages/i18n/ca.json +++ b/languages/i18n/ca.json @@ -196,7 +196,6 @@ "moredotdotdot": "Més...", "morenotlisted": "Aquesta llista no és completa.", "mypage": "Pàgina", - "anonuserpage": "Usuari desconegut", "mytalk": "Discussió", "anontalk": "Discussió", "navigation": "Navegació", @@ -569,8 +568,13 @@ "botpasswords-label-cancel": "Cancel·la", "botpasswords-label-delete": "Suprimeix", "botpasswords-label-resetpassword": "Reinicia la contrasenya", + "botpasswords-label-grants": "Permisos aplicables:", "botpasswords-label-restrictions": "Restriccions d'ús:", - "botpasswords-bad-appid": "", + "botpasswords-label-grants-column": "Concedit", + "botpasswords-bad-appid": "El nom del bot «$1» no és vàlid.", + "botpasswords-insert-failed": "No s'ha pogut afegir el nom del bot «$1». Ja hi estava afegit?", + "botpasswords-update-failed": "No s'ha pogut actualitzar el nom del bot «$1». Hi estava suprimit?", + "botpasswords-created-title": "S'ha creat la contrasenya del bot", "resetpass_forbidden": "No poden canviar-se les contrasenyes", "resetpass-no-info": "Heu d'estar registrats en un compte per a poder accedir directament a aquesta pàgina.", "resetpass-submit-loggedin": "Canvia la contrasenya", @@ -1206,15 +1210,23 @@ "grant-group-file-interaction": "Interacció amb fitxes multimèdia", "grant-group-watchlist-interaction": "Interacció amb la vostra llista de seguiment", "grant-group-email": "Enviament de correu", + "grant-group-customization": "Personalització i preferències", + "grant-group-administration": "Realitza accions administratives", + "grant-group-other": "Activitat miscel·lània", + "grant-blockusers": "Bloca i desbloca usuaris", "grant-createaccount": "Crea comptes", "grant-createeditmovepage": "Crea, modifica i reanomena pàgines", "grant-delete": "Suprimeix pàgines, revisions i entrades de registre", + "grant-editinterface": "Modifica l'espai de noms MediaWiki i els CSS/JavaScript d'usuari", "grant-editmywatchlist": "Modifica la llista de seguiment", "grant-editpage": "Modifica les pàgines existents", "grant-editprotected": "Modifica pàgines protegides", "grant-highvolume": "Edició d'alt volum", "grant-oversight": "Amaga usuaris i suprimeix revisions", "grant-uploadfile": "Carrega fitxers nous", + "grant-basic": "Permisos bàsics", + "grant-viewdeleted": "Mostra fitxers eliminats i pàgines", + "grant-viewmywatchlist": "Modifica la llista de seguiment", "newuserlogpage": "Registre de creació d'usuaris", "newuserlogpagetext": "Aquest és un registre de creació de nous usuaris.", "rightslog": "Registre dels permisos d'usuari", @@ -1224,6 +1236,7 @@ "action-createpage": "crear pàgines", "action-createtalk": "crear pàgines de discussió", "action-createaccount": "crear aquest compte d'usuari", + "action-autocreateaccount": "crea automàtica aquest compte d'usuari extern", "action-history": "mostra l'historial de la pàgina", "action-minoredit": "marcar aquesta modificació com a menor", "action-move": "moure aquesta pàgina", @@ -1330,7 +1343,7 @@ "recentchangeslinked-page": "Nom de la pàgina:", "recentchangeslinked-to": "Mostra els canvis de les pàgines enllaçades amb la pàgina donada", "recentchanges-page-added-to-category": "[[:$1]] afegida a la categoria", - "recentchanges-page-added-to-category-bundled": "[[:$1]] i {{PLURAL:$2|una pàgina|$2 pàgines}} més afegides a la categoria", + "recentchanges-page-added-to-category-bundled": "[[:$1]] i [[Special:WhatLinksHere/$1|{{PLURAL:$2|una pàgina|$2 pàgines}}]] més afegides a la categoria", "recentchanges-page-removed-from-category": "[[:$1]] treta de la categoria", "recentchanges-page-removed-from-category-bundled": "[[:$1]] i {{PLURAL:$2|una pàgina|$2 pàgines}} més tretes de la categoria", "autochange-username": "Canvi automàtic del MediaWiki", @@ -1491,7 +1504,7 @@ "uploadstash-clear": "Esborra els fitxers en reserva", "uploadstash-nofiles": "No teniu fitxers en reserva", "uploadstash-badtoken": "No s'ha pogut realitzar l'acció, possiblement perquè han caducat la vostra identificació. Intenteu-ho de nou.", - "uploadstash-errclear": "No s'ha pogut suprimir els fitxers.", + "uploadstash-errclear": "S'estan netejant els fitxers que han fallat.", "uploadstash-refresh": "Actualitza la llista de fitxers", "invalid-chunk-offset": "El desplaçament del fragment no és vàlid", "img-auth-accessdenied": "Accés denegat", @@ -1742,12 +1755,21 @@ "apisandbox": "Pàgina de proves de l'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 [//www.mediawiki.org/wiki/API:Main_page la documentació de l'API] per a més informació sobre l'ús de l'API. Exemple: [//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-unfullscreen": "Mostra la pàgina", "apisandbox-submit": "Fes sol·licitud", "apisandbox-reset": "Neteja", - "apisandbox-examples": "Exemple", + "apisandbox-retry": "Torna a provar", + "apisandbox-loading": "S'està carregant la informació del mòdul d'API «$1»...", + "apisandbox-helpurls": "Enllaços d'ajuda", + "apisandbox-examples": "Exemples", + "apisandbox-dynamic-parameters": "Paràmetres adicionals", + "apisandbox-dynamic-parameters-add-label": "Afegeix un paràmetre:", + "apisandbox-dynamic-parameters-add-placeholder": "Nom del paràmetre", + "apisandbox-deprecated-parameters": "Paràmetres obsolets", + "apisandbox-submit-invalid-fields-title": "Alguns camps no són vàlids", "apisandbox-results": "Resultats", "apisandbox-request-url-label": "Sol·licita URL:", - "apisandbox-request-time": "Temps de sol·licitud: $1", + "apisandbox-request-time": "Temps de sol·licitud: {{PLURAL:$1|$1 ms}}", "booksources": "Obres de referència", "booksources-search-legend": "Cerca fonts de llibres", "booksources-isbn": "ISBN:", @@ -1787,8 +1809,6 @@ "categories-submit": "Mostra", "categoriespagetext": "{{PLURAL:$1|La següent categoria conté|Les següents categories contenen}} pàgines, o fitxers multimèdia.\n[[Special:UnusedCategories|Les categories no usades]] no s'hi mostren.\nVegeu també [[Special:WantedCategories|les categories sol·licitades]].", "categoriesfrom": "Mostra les categories que comencen a:", - "special-categories-sort-count": "ordena per recompte", - "special-categories-sort-abc": "ordena alfabèticament", "deletedcontributions": "Contribucions esborrades", "deletedcontributions-title": "Contribucions esborrades", "sp-deletedcontributions-contribs": "contribucions", @@ -1832,7 +1852,7 @@ "listgrouprights-namespaceprotection-namespace": "Espai de noms", "listgrouprights-namespaceprotection-restrictedto": "Permisos que permeten modificar a l'usuari", "listgrants": "Autoritzacions", - "listgrants-grant": "Autoritza", + "listgrants-grant": "Concedeix", "listgrants-rights": "Permisos", "trackingcategories": "Categories de seguiment", "trackingcategories-summary": "Aquesta pàgina llista les categories de seguiment que s'omplen automàticament pel programari MediaWiki. Es poden canviar els seus noms modificant els missatges del sistema corresponents en l'espai de noms {{ns:8}}.", @@ -1884,10 +1904,10 @@ "watchlistanontext": "Inicieu una sessió per a visualitzar o modificar elements de la vostra llista de seguiment.", "watchnologin": "No heu iniciat la sessió", "addwatch": "Afegeix a llista de seguiment", - "addedwatchtext": "S'ha afegit la pàgina \"[[:$1]]\" a la vostra [[Special:Watchlist|llista de seguiment]].\nS'hi mostraran els canvis futurs que tinguin lloc en aquesta pàgina i la corresponent discussió.", + "addedwatchtext": "S'ha afegit «[[:$1]]» i la seva pàgina de discussió a la vostra [[Special:Watchlist|llista de seguiment]].", "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 la pàgina «[[:$1]]» de la vostra [[Special:Watchlist|llista de seguiment]].", + "removedwatchtext": "S'ha tret «[[:$1]]» i la seva pàgina de discussió 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", @@ -1902,6 +1922,7 @@ "wlshowlast": "Mostra les darreres $1 hores, els darrers $2 dies", "watchlist-hide": "Amaga", "watchlist-submit": "Mostra", + "wlshowtime": "Període de temps per mostrar:", "wlshowhideminor": "edicions menors", "wlshowhidebots": "bots", "wlshowhideliu": "usuaris registrats", @@ -1975,6 +1996,7 @@ "changecontentmodel-title-label": "Títol de la pàgina", "changecontentmodel-model-label": "Nou model de contingut", "changecontentmodel-reason-label": "Motiu:", + "changecontentmodel-submit": "Canvia", "changecontentmodel-success-title": "S'ha canviat el model de contingut", "changecontentmodel-success-text": "S'ha canviat el tipus de contingut de [[:$1]].", "changecontentmodel-cannot-convert": "El contingut a [[:$1]] no es pot convertir a un tipus de $2.", @@ -2136,7 +2158,7 @@ "unblock": "Desblocatge d'usuaris", "blockip": "Bloca {{GENDER:$1|l'usuari|la usuària}}", "blockip-legend": "Bloca l'usuari", - "blockiptext": "Empreu el següent formulari per blocar l'accés\nd'escriptura des d'una adreça IP específica o des d'un usuari determinat.\naixò només s'hauria de fer per prevenir el vandalisme, i\nd'acord amb la [[{{MediaWiki:Policy-url}}|política del projecte]].\nEmpleneu el diàleg de sota amb un motiu específic (per exemple, citant\nquines pàgines en concret estan sent vandalitzades).", + "blockiptext": "Empreu el següent formulari per blocar l'accés\nd'escriptura des d'una adreça IP específica o des d'un usuari determinat.\naixò només s'hauria de fer per prevenir el vandalisme, i\nd'acord amb la [[{{MediaWiki:Policy-url}}|política del projecte]].\nEmpleneu el diàleg de sota amb un motiu específic (per exemple, citant\nquines pàgines en concret estan sent vandalitzades).\nPodeu blocar uns rangs d'adreces IP fent servir la sintaxi [https://en.wikipedia.org/wiki/Classless_Inter-Domain_Routing CIDR]. El rang superior permès és /$1 per a IPv4 i /$2 per a IPv6.", "ipaddressorusername": "Adreça IP o nom de l'usuari", "ipbexpiry": "Venciment", "ipbreason": "Motiu:", @@ -2404,11 +2426,7 @@ "import-logentry-upload-detail": "$1 {{PLURAL:$1|revisió|revisions}} importades", "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|revisió|revisions}} importades de $2", "javascripttest": "Proves de JavaScript", - "javascripttest-pagetext-noframework": "Es reserva la pàgina per a l'execució de tests amb JavaScript.", - "javascripttest-pagetext-unknownframework": "L'entorn de proves «$1» és desconegut.", "javascripttest-pagetext-unknownaction": "Acció desconeguda «$1».", - "javascripttest-pagetext-frameworks": "Trieu un dels següents entorns de prova: $1", - "javascripttest-pagetext-skins": "Trieu un tema per a executar-hi els tests:", "javascripttest-qunit-intro": "Consulteu la [documentació de tests de $1] a mediawiki.org.", "tooltip-pt-userpage": "{{GENDER:|La vostra}} pàgina d'usuari", "tooltip-pt-anonuserpage": "La pàgina d'usuari per la ip que utilitzeu", @@ -2448,7 +2466,7 @@ "tooltip-feed-rss": "Canal RSS d'aquesta pàgina", "tooltip-feed-atom": "Canal Atom d'aquesta pàgina", "tooltip-t-contributions": "Llista de les contribucions d'{{GENDER:$1|aquest usuari|aquesta usuària}}", - "tooltip-t-emailuser": "Envia un correu en aquest usuari.", + "tooltip-t-emailuser": "Envia un correu a {{GENDER:$1|aquest usuari|aquesta usuària}}", "tooltip-t-info": "Més informació sobre aquesta pàgina", "tooltip-t-upload": "Carregueu fitxers", "tooltip-t-specialpages": "Llista de totes les pàgines especials", @@ -2499,7 +2517,7 @@ "lastmodifiedatby": "Aquesta pàgina s'ha modificat per darrera vegada el dia $1 a les $2 per $3.", "othercontribs": "Basat en les contribucions de $1.", "others": "altres", - "siteusers": "Usuari{{PLURAL:$2||s}} $1 de {{SITENAME}}", + "siteusers": "{{PLURAL:$2|{{GENDER:$1|L'usuari|La usuària}}|{{GENDER:$1|Els usuaris|Les usuàries}}}} $1 de {{SITENAME}}", "anonusers": "$1, {{PLURAL:$2|usuari anònim|usuaris anònims}} de {{SITENAME}}", "creditspage": "Crèdits de la pàgina", "nocredits": "No hi ha títols disponibles per aquesta pàgina.", @@ -2611,6 +2629,7 @@ "newimages-legend": "Nom del fitxer", "newimages-label": "Nom de fitxer (o part d'ell):", "newimages-showbots": "Mostra les càrregues dels bots", + "newimages-hidepatrolled": "Amaga les càrregues patrullades", "noimages": "Res per veure.", "ilsubmit": "Cerca", "bydate": "per data", @@ -2694,8 +2713,8 @@ "exif-colorspace": "Espai de color", "exif-componentsconfiguration": "Significat de cada component", "exif-compressedbitsperpixel": "Mode de compressió d'imatge", - "exif-pixelydimension": "Amplada de la imatge", - "exif-pixelxdimension": "Alçada de la imatge", + "exif-pixelxdimension": "Amplada de la imatge", + "exif-pixelydimension": "Alçada de la imatge", "exif-usercomment": "Comentaris de l'usuari", "exif-relatedsoundfile": "Fitxer d'àudio relacionat", "exif-datetimeoriginal": "Dia i hora de generació de les dades", @@ -3090,6 +3109,7 @@ "watchlisttools-edit": "Visualitza i edita la llista de seguiment", "watchlisttools-raw": "Edita la llista de seguiment sense format", "signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|discussió]])", + "timezone-local": "Local", "duplicate-defaultsort": "Atenció: La clau d'ordenació per defecte \"$2\" invalida l'anterior clau \"$1\".", "duplicate-displaytitle": "Avís: El títol a mostrar «$2» sobreescriu l'anterior títol a mostrar «$1».", "invalid-indicator-name": "Error: No pot estar buit l'atribut name dels indicadors d'estat de la pàgina.", @@ -3139,7 +3159,6 @@ "version-libraries-description": "Descripció", "version-libraries-authors": "Autors", "redirect": "Redirigeix per fitxer, usuari, pàgina o ID de la revisió", - "redirect-legend": "Redirigeix a un fitxer o a una pàgina", "redirect-summary": "Aquesta pàgina especial redirigeix a un fitxer (donat el nom del fitxer), una pàgina (donats un ID de la revisió o un ID de pàgina), o a una pàgina d'usuari (donat un ID numèric d'usuari). Ús: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/page/64308]], [[{{#Special:Redirect}}/revision/328429]], or [[{{#Special:Redirect}}/user/101]].", "redirect-submit": "Vés-hi", "redirect-lookup": "Consulta:", @@ -3151,7 +3170,6 @@ "redirect-not-exists": "No s'ha trobat el valor", "fileduplicatesearch": "Cerca fitxers duplicats", "fileduplicatesearch-summary": "Cerca fitxers duplicats d'acord amb el seu valor de resum.", - "fileduplicatesearch-legend": "Cerca duplicats", "fileduplicatesearch-filename": "Nom del fitxer:", "fileduplicatesearch-submit": "Cerca", "fileduplicatesearch-info": "$1 × $2 píxels
Mida del fitxer: $3
Tipus MIME: $4", @@ -3247,7 +3265,7 @@ "tags-edit-revision-selected": "{{PLURAL:$1|Revisió seleccionada|Revisions seleccionades}} de [[:$2]]:", "tags-edit-logentry-legend": "Afegeix o suprimeix etiquetes {{PLURAL:$1|d'aquesta entrada del registre|de totes les entrades del registre}}", "tags-edit-existing-tags": "Etiquetes existents:", - "tags-edit-existing-tags-none": "''Cap''", + "tags-edit-existing-tags-none": "Cap", "tags-edit-new-tags": "Etiquetes noves:", "tags-edit-add": "Afegeix aquestes etiquetes:", "tags-edit-remove": "Treu aquestes etiquetes:", @@ -3257,7 +3275,7 @@ "tags-edit-reason": "Motiu:", "tags-edit-revision-submit": "Aplica els canvis a {{PLURAL:$1|a aquesta revisió|$1 revisions}}", "tags-edit-logentry-submit": "Aplica els canvis a {{PLURAL:$1|aquesta entrada de registre|$1 entrades de registre}}", - "tags-edit-success": "S’han aplicat els canvis correctament.", + "tags-edit-success": "S’han aplicat els canvis.", "tags-edit-failure": "No s’han pogut aplicar els canvis:\n$1", "tags-edit-nooldid-title": "Revisió de l'objectiu no vàlida", "tags-edit-none-selected": "Seleccioneu com a mínim una etiqueta per afegir o suprimir.", @@ -3462,8 +3480,9 @@ "expand_templates_generate_xml": "Mostra l'arbre XML", "expand_templates_generate_rawhtml": "Mostra l'HTML sense filtrar", "expand_templates_preview": "Previsualitza", - "expand_templates_preview_fail_html": "Atès que {{SITENAME}} té HTML cru i hi ha hagut una pèrdua de dades de la sessió, s'ha amagat la vista prèvia com a mesura de precaució contra atacs en JavaScript.\n\nSi això és un intent de previsualització legítim, torneu-ho a provar.\nSi encara no funciona, intenteu [[Special:UserLogout|finalitzar la sessió]] i iniciar-la de nou.", + "expand_templates_preview_fail_html": "Atès que {{SITENAME}} té HTML cru habilitat i s'ha produït una pèrdua de dades de la sessió, s'ha amagat la vista prèvia com a mesura de precaució contra atacs en JavaScript.\n\nSi això és un intent de previsualització legítim, torneu-ho a provar.\nSi encara no funciona, intenteu [[Special:UserLogout|finalitzar la sessió]] i comproveu si el vostre navegador permet galetes d'aquest lloc.", "expand_templates_preview_fail_html_anon": "Atès que {{SITENAME}} té l'HTML cru habilitat i no heu iniciat una sessió, s'ha amagat la previsualització com a prevenció d'atacs en JavaScript.\n\nSi això és un intent de previsualització legítim, [[Special:UserLogin|inicieu una sessió]] i torneu-ho a provar.", + "expand_templates_input_missing": "Cal que proporcioneu al menys algun text d'entrada.", "pagelanguage": "Canvia l'idioma de la pàgina", "pagelang-name": "Pàgina", "pagelang-language": "Idioma", @@ -3472,9 +3491,9 @@ "pagelang-submit": "Envia", "right-pagelang": "Canvia l'idioma de la pàgina", "action-pagelang": "canvia l'idioma de la pàgina", - "log-name-pagelang": "Canvia el registre de llengua", + "log-name-pagelang": "Registre de canvi de llengua", "log-description-pagelang": "Aquest és un registre dels canvis en les llengües de les pàgines.", - "logentry-pagelang-pagelang": "$1 {{GENDER:$2|ha canviat}} la llengua de la pàgina per a $3 de $4 a $5.", + "logentry-pagelang-pagelang": "$1 {{GENDER:$2|ha canviat}} la llengua de $3 de $4 a $5", "default-skin-not-found": "Òndia! L'aparença per defecte per al wiki, definit en $wgDefaultSkin com $1, no està disponible.\n\nLa vostra instal·lació sembla que inclou les següents aparences. Consulteu [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual: Configuració d'aparences] per a la informació de com habilitar-les i triar-ne el valor per defecte.\n\n$2\n\n; Si heu acabat d'instal·lar MediaWiki:\n: Probablement l'instal·làveu des de git, o directament des del codi font utilitzant algun altre mètode. Això és l'esperat. Intenteu instal·lar algunes aparences des del [https://www.mediawiki.org/wiki/Category:All_skins directori d'aparences de mediawiki.org], per:\n: * Descarregar l'[https://www.mediawiki.org/wiki/Download instal·lador tarball], que ve amb diverses aparences i ampliacions. Podeu copiar i enganxar el directori skins/ des d'aquí.\n: * Clonar un dels repositoris mediawiki/skins/* a través de git en el directori skins/ de la vostra instal·lació de MediaWiki.\n: Fent això no s'hauria d'interferir amb el vostre dipòsit git si sou un desenvolupador de MediaWiki.\n\n; Si només heu actualitzat MediaWiki:\n: Per MediaWiki 1.24 i posteriors ja no permet aparences instal·lades automàticament (consulteu [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Manual: Aparences autodiscovery]). Podeu enganxar les línies següents en LocalSettings.php per permetre totes les aparences instal·lades actualment:\n\n
$3
\n\n; Si només heu modificat LocalSettings.php:\n: Reviseu els noms de l'aparença per errors tipogràfics.", "default-skin-not-found-no-skins": "Òndia! L'aparença per defecte pel vostre wiki, definida a $wgDefaultSkin com $1, no està disponible.\n\nNo teniu cap aparença instal·lada.\n\n\n; Si heu acabat d'instal·lar o actualitzar MediaWiki:\n: Probablement l'heu instal·lat des de git, o directament des del codi font utilitzant algun altre mètode. Això és l'esperat. Per MediaWiki 1.24 i posteriors ja no s'inclouen aparences en el repositori principal. Proveu d'instal·lar algunes aparences des del [https://www.mediawiki.org/wiki/Category:All_skins directori d'aparences de mediawiki.org] per:\n: * Descarregar l'[https://www.mediawiki.org/wiki/Download instal·lador ''tarball''], que ve amb diverses aparences i extensions. Podeu copiar i enganxar el directori skins/ des d'aquí.\n: * Clonar un dels repositoris mediawiki/skins/* a través de git en el directori skins/ de la vostra instal·lació de MediaWiki.\n: Fent això no s'hauria d'interferir amb el vostre repositori de git si sou un desenvolupador de MediaWiki. Consulteu [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual:Skin configuration] per a més informació sobre com permetre aparences i triar-ne per defecte.", "default-skin-not-found-row-enabled": "* $1 / $2 (habilitat)", @@ -3513,6 +3532,7 @@ "special-characters-group-ipa": "AFI", "special-characters-group-symbols": "Símbols", "special-characters-group-greek": "Grec", + "special-characters-group-greekextended": "Grec estès", "special-characters-group-cyrillic": "Ciríl·lic", "special-characters-group-arabic": "Aràbic", "special-characters-group-arabicextended": "Aràbic estès", @@ -3536,7 +3556,29 @@ "mw-widgets-titleinput-description-new-page": "la pàgina no existeix encara", "mw-widgets-titleinput-description-redirect": "redirigeix a $1", "api-error-blacklisted": "Trieu un títol diferent, més descriptiu.", + "sessionmanager-tie": "No es poden combinar diferents tipus de sol·licituds d'autenticació: $1.", "sessionprovider-generic": "$1 sessions", "sessionprovider-mediawiki-session-cookiesessionprovider": "sessions basades en galetes", - "sessionprovider-nocookies": "Pot ser que les galetes estiguin inhabilitades. Assegureu-vos que teniu les galetes habilitades i inicieu de nou." + "sessionprovider-nocookies": "Pot ser que les galetes estiguin inhabilitades. Assegureu-vos que teniu les galetes habilitades i inicieu de nou.", + "randomrootpage": "Pàgina arrel aleatòria", + "log-action-filter-block": "Tipus de blocatge:", + "log-action-filter-delete": "Tipus de supressió:", + "log-action-filter-patrol": "Tipus de patrullatge:", + "log-action-filter-protect": "Tipus de protecció:", + "log-action-filter-upload": "Tipus de càrrega:", + "log-action-filter-all": "Tota", + "log-action-filter-block-block": "Bloca", + "log-action-filter-block-reblock": "Bloca la modificació", + "log-action-filter-block-unblock": "Desbloca", + "log-action-filter-delete-delete": "Supressió de pàgines", + "log-action-filter-delete-restore": "Restauració de pàgines", + "log-action-filter-delete-event": "Registre de supressió", + "log-action-filter-delete-revision": "Supressió de revisions", + "log-action-filter-patrol-patrol": "Patrullatge manual", + "log-action-filter-patrol-autopatrol": "Patrullatge automàtic", + "log-action-filter-protect-protect": "Protecció", + "log-action-filter-protect-modify": "Modificació de la protecció", + "log-action-filter-protect-unprotect": "Desprotecció", + "log-action-filter-upload-upload": "Nova càrrega", + "log-action-filter-upload-overwrite": "Torna a carregar" } diff --git a/languages/i18n/ce.json b/languages/i18n/ce.json index e92e4165fa..e0543f0eea 100644 --- a/languages/i18n/ce.json +++ b/languages/i18n/ce.json @@ -10,7 +10,8 @@ "아라", "Kaganer", "Исмаил Садуев", - "Macofe" + "Macofe", + "Nemo bis" ] }, "tog-underline": "КӀел сиз хьакха хьажорган:", @@ -1063,7 +1064,7 @@ "grant-createaccount": "Декъашхочун дӀаяздарш кхоллар", "grant-createeditmovepage": "АгӀонашна хийцам бар", "grant-delete": "АгӀонаш а, нисдарш а, декъашхойн дӀаяздар а дӀадахар", - "grant-editinterface": "MediaWiki цӀерийн ана а, долара CSS/JavaScript нисъяр", + "grant-editinterface": "MediaWiki цӀерийн меттиг а, долара CSS/JavaScript а нисъяр", "grant-editmycssjs": "Долара CSS/JavaScript нисъяр", "grant-editmyoptions": "Табе хьай гӀирс", "grant-editmywatchlist": "Хьан тергаме могӀам табар", @@ -1187,7 +1188,7 @@ "recentchangeslinked-page": "АгӀон цӀе:", "recentchangeslinked-to": "Кхечу агӀор, гайта хийцамаш агӀонашца, хӀоттийначу агӀонтӀе хьажорг йолуш", "recentchanges-page-added-to-category": "[[:$1]] категори чу тоьхна", - "recentchanges-page-added-to-category-bundled": "[[:$1]] а, {{PLURAL:$2|цхьа агӀо|$2 агӀо}} а категорин тӀетоьхна", + "recentchanges-page-added-to-category-bundled": "[[:$1]] а, [[Special:WhatLinksHere/$1|{{PLURAL:$2|цхьа агӀо|$2 агӀо}}]] а категорин тӀетоьхна", "recentchanges-page-removed-from-category": "[[:$1]] дӀаяьккхина категори чура", "recentchanges-page-removed-from-category-bundled": "[[:$1]] а, {{PLURAL:$2|цхьа агӀо|$2 агӀо}} а категорин чура дӀаяьккхина", "autochange-username": "MediaWiki авто-хийцамбар", @@ -1242,7 +1243,7 @@ "uploaddisabled": "Чуяккхар магийна дац", "copyuploaddisabled": "URL тӀера чуяккхар дӀадайина ду.", "uploaddisabledtext": "Файлаш чуяхар дӀадайина ду.", - "uploadscriptednamespace": "ХӀокху SVG-файлан цӀерийн ана нийса яц '$1'", + "uploadscriptednamespace": "ХӀокху SVG-файлан цӀерийн меттиг нийса яц '$1'", "upload-source": "ДIайолалун файл", "sourcefilename": "ДIайолалун файл:", "sourceurl": "Хьостан URL-адрес:", @@ -1558,11 +1559,11 @@ "allpagesfrom": "Гучé яха агӀонаш, йолалуш йолу оцу:", "allpagesto": "Араяхар сацадé тӀе:", "allarticles": "Массо агӀонаш", - "allinnamespace": "Массо агӀонаш оцу цӀерийн анахь «$1»", + "allinnamespace": "Массо агӀонаш «$1» цӀерийн меттигехь", "allpagessubmit": "Кхочушдé", "allpagesprefix": "Лаха агӀонаш, дӀайолалуш йолу:", "allpagesbadtitle": "Цамагош йолу агӀон цӀе. Коьрта могӀан юкъах ю юкъарвики меттанийн юкъе тӀечӀагӀйина йолу хьаьрк я магийна доцу оцу коьрта моӀанца символаш я кхин.", - "allpages-bad-ns": "{{SITENAME}} кху чохь ана цӀерш яц «$1».", + "allpages-bad-ns": "{{SITENAME}} кху чохь цӀерийн меттиг яц «$1».", "allpages-hide-redirects": "Къайлаяха дӀасахьажийнарш", "cachedspecial-viewing-cached-ttl": "Хьо хьоьжу агӀона верси кэш чура ю, иза карлаяьккхина хила мега $1 хьалха.", "cachedspecial-refresh-now": "Хьажа тӀехьарчу версега.", @@ -1570,8 +1571,6 @@ "categories-submit": "Гайта", "categoriespagetext": "{{PLURAL:$1|1=Лахара категореш чохь ю|Лахара категореш чохь ю}} агӀонаш я медиа-файлаш.\nКхузахь гойтуш яц [[Special:UnusedCategories|лелош йоцу категореш]].\nКхин дӀа [[Special:WantedCategories| хийла еза категореш]].", "categoriesfrom": "Гучé яха категореш, тӀера:", - "special-categories-sort-count": "нисъе дукхаллица", - "special-categories-sort-abc": "нисъе абатца", "deletedcontributions": "Декъашхочун дӀабяккхина къинхьегам", "deletedcontributions-title": "ДӀабаьккхина къинхьегам", "sp-deletedcontributions-contribs": "къинхьегам", @@ -1604,7 +1603,7 @@ "listgrouprights-addgroup-all": "массо тобанийн юкъатоха йиш ю", "listgrouprights-removegroup-all": "тобан чура дӀабаха ло", "listgrouprights-namespaceprotection-header": "ЦӀеран анан бехкам", - "listgrouprights-namespaceprotection-namespace": "ЦӀерийн ана", + "listgrouprights-namespaceprotection-namespace": "ЦӀерийн меттиг", "listgrouprights-namespaceprotection-restrictedto": "Декъашхочун хийцамаш бан таро хуьлуьйту бакъонаш", "listgrants": "Бакъо", "listgrants-grant": "Бакъо", @@ -1742,7 +1741,7 @@ "protect-title": "Ларъяр: «$1»", "protect-title-notallowed": "ГӀораллин бараме хьажар «$1»", "prot_1movedto2": "«[[$1]]» цӀе хийцина → «[[$2]]»", - "protect-badnamespace-title": "ГӀораладан цалуш йолу цӀерийн ана", + "protect-badnamespace-title": "Ларъян цалуш йолу цӀерийн меттиг", "protect-badnamespace-text": "ХӀокху цӀерийн меттигехь йолу агӀонашна гӀараладан цало.", "protect-norestrictiontypes-title": "ГӀараладан цалуш йолу агӀо", "protect-legend": "Бакъде агӀо ларъяр", @@ -1819,8 +1818,8 @@ "namespace": "ЦӀерийн меттигаш:", "invert": "Хаьржинарг къайлаяккха", "tooltip-invert": "ХӀоттае хӀара билгало, хаьржинчу цӀерийн анан агӀонийн хийцамаш къайлабаха (кхин дихкина цӀерийн анаш, гайтина елахь)", - "namespace_association": "Йихкина ана", - "tooltip-namespace_association": "ХӀоттае хӀара билгало, иштта дийцарийн (я кхин) цӀерийн ана юкъахь хилийта", + "namespace_association": "Йихкина меттиг", + "tooltip-namespace_association": "ХӀоттае хӀара билгало, иштта дийцарийн (я кхин) цӀерийн меттиг юкъахь хилийта", "blanknamespace": "(Коьрта)", "contributions": "{{GENDER:$1|Декъашхочун}} къинхьегам", "contributions-title": "{{GENDER:$1|Декъашхочун}} къинхьегам $1", @@ -1854,7 +1853,7 @@ "whatlinkshere-page": "АгӀо:", "linkshere": "ТӀаьхьайогӀу агӀонаш оцу '''[[:$1]]''': хьажоргца ю", "nolinkshere": "ХӀокху '''[[:$1]]''' агӀона тӀе кхечу агӀонашкахь хьажоргаш яц.", - "nolinkshere-ns": "Хаьржинчу анахь яц '''[[:$1]]''' цӀе йолу агӀонаш", + "nolinkshere-ns": "Хаьржинчу меттигехь яц '''[[:$1]]''' цӀе йолу агӀонаш", "isredirect": "агӀо-дӀасахьажорг", "istemplate": "юкъаялийнарш", "isimage": "Файлан хьажорг", @@ -2318,8 +2317,8 @@ "exif-colorspace": "Беснашан хьал", "exif-componentsconfiguration": "Бесара компонентин конфигураци", "exif-compressedbitsperpixel": "Бесан кIоргалла дацдина чул тӀехьа", - "exif-pixelydimension": "Суьртан шоралла", - "exif-pixelxdimension": "Суьртан локхалла", + "exif-pixelxdimension": "Суьртан шоралла", + "exif-pixelydimension": "Суьртан локхалла", "exif-usercomment": "Кхин тӀе къамел", "exif-relatedsoundfile": "Къамелан аьзнийн файл", "exif-datetimeoriginal": "Дуьххьарлера терахь а хан", @@ -2632,7 +2631,6 @@ "version-libraries-description": "Цуьнах лаьцна", "version-libraries-authors": "Автораш", "redirect": "Декъашхочун файлан тӀера дӀасхьажор", - "redirect-legend": "Файлан я агӀона тӀера дӀасхьажор", "redirect-summary": "ХӀара агӀо лело йиш ю файлан я агӀона тӀера дӀасхьажош.", "redirect-submit": "Дехьа гӀо", "redirect-lookup": "Лахар:", @@ -2645,7 +2643,6 @@ "redirect-not-exists": "МаьӀна цакарий", "fileduplicatesearch": "Лаха цхьатерра йолу файлаш", "fileduplicatesearch-summary": "Хэш-кодаца цхьатерра файлаш лахар.", - "fileduplicatesearch-legend": "Цхьатерра ерш лахар", "fileduplicatesearch-filename": "Файлан цӀе:", "fileduplicatesearch-submit": "Лахар", "fileduplicatesearch-info": "$1 × $2 пиксель
Файлан барам: $3
MIME-тайп: $4", @@ -2681,7 +2678,7 @@ "tags-hitcount-header": "Билгалдина нисдарш", "tags-actions-header": "Дийраш", "tags-active-yes": "ХӀаъ", - "tags-active-no": "ХӀахӀа", + "tags-active-no": "ХӀан-хӀа", "tags-source-extension": "Билгалйо шоралица", "tags-source-none": "Кхий лелош яц", "tags-edit": "нисъе", diff --git a/languages/i18n/ckb.json b/languages/i18n/ckb.json index 928a791493..696fffe5a9 100644 --- a/languages/i18n/ckb.json +++ b/languages/i18n/ckb.json @@ -17,13 +17,15 @@ "Ebraminio", "Macofe", "Pirehelokan", - "Diyariq" + "Diyariq", + "Sarchia" ] }, "tog-underline": "ھێڵ ھێنان بەژێر بەستەرەکان:", "tog-hideminor": "دەستکارییە بچووکەکان لە دوایین گۆڕانکارییەکاندا بشارەوە", "tog-hidepatrolled": "لە دوایین گۆڕانکارییەکاندا دەستکارییە پاس دراوەکان بشارەوە", "tog-newpageshidepatrolled": "لە پێرستی پەڕە نوێکاندا پەڕە پاس دراوەکان بشارەوە", + "tog-hidecategorization": "شاردنەوەی پۆلێنکردنی پەڕەکان", "tog-extendwatchlist": "لیستی چاودێری درێژبکەرەوە بۆ نیشان دانی ھەموو گۆڕانکارییەکان، نەک تەنھا دوایینەکان.", "tog-usenewrc": "گۆڕانکارییەکان لە دوایین گۆڕانکارییەکان و پێرستی چاودێریدا بەپێی پەڕە پۆلێن بکە", "tog-numberheadings": "ژمارەکردنی خۆگەڕی سەردێڕەکان", @@ -52,6 +54,7 @@ "tog-watchlisthideliu": "دەستکارییەکانی ئەو بەکارهێنەرانەی لە ژوورەوەن بشارەوە لە لیستی چاودێری", "tog-watchlisthideanons": "دەستکارییەکانی بەکارهێنەرە نەناسراوەکان لە لیستی چاودێریدا بشارەوە", "tog-watchlisthidepatrolled": "لە پێرستی چاودێرییەکاندا دەستکارییە پاس دراوەکان بشارەوە", + "tog-watchlisthidecategorization": "شاردنەوەی پۆلێنکردنی پەڕەکان", "tog-ccmeonemails": "کۆپییەک لەو ئیمەیلانە کە بۆ بەکارھێنەرانی تر دەنێرم بۆ خۆشم بنێرە", "tog-diffonly": "ناوەرۆکی پەڕە لە ژێرەوەی جیاوازییەکاندا نیشان مەدە", "tog-showhiddencats": "پۆلە شاردراوەکان نیشان بدە", @@ -128,6 +131,8 @@ "october-date": "$1ی تشرینی یەکەم", "november-date": "$1ی تشرینی دووەم", "december-date": "$1ی کانوونی یەکەم", + "period-am": "پێش نیوەڕۆ", + "period-pm": "پاش نیوەڕۆ", "pagecategories": "{{PLURAL:$1|پۆل|پۆلەکان}}", "category_header": "پەڕەکانی پۆلی «$1»", "subcategories": "ژێرپۆلەکان", @@ -154,7 +159,7 @@ "morenotlisted": "ئەم لیستەیە تەواو نییە", "mypage": "پەڕە", "mytalk": "لێدوان", - "anontalk": "لێدوان بۆ ئەم ئایپییە", + "anontalk": "لێدوان", "navigation": "ڕێدۆزی", "and": " و", "qbfind": "بدۆزەرەوە", @@ -412,7 +417,7 @@ "createacct-reason": "ھۆکار", "createacct-reason-ph": "بۆ ھەژمارێکی تر دروست دەکەی", "createacct-submit": "ھەژمارەکەت دروست بکە", - "createacct-another-submit": "ھەژمارێکی تر دروست بکە", + "createacct-another-submit": "ھەژمار دروست بکە", "createacct-benefit-heading": "{{SITENAME}} لە لایەن کەسانێک وەکوو خۆت دروست کراوە.", "createacct-benefit-body1": "{{PLURAL:$1|دەستکاری}}", "createacct-benefit-body2": "{{PLURAL:$1|پەڕە}}", @@ -426,7 +431,7 @@ "nocookieslogin": "{{SITENAME}} بۆ چوونەژوورەوە لە کووکی‌یەکان کەڵک وەرئەگرێت.\nڕێگەت نەداوە بە کووکی‌یەکان.\nڕێگەیان پێ بدەو و دیسان تێبکۆشە.", "nocookiesfornew": "ھەژماری بەکارھێنەری دروست نەکرا، چون ناتوانین سەرچاوەکەی پشتڕاست بکەینەوە.\nدڵنیا بە کوکییەکانت چالاک کردووە، پەڕەکە بار بکەوە و دیسان ھەوڵ بدە.", "noname": "ناوی بەکارهێنەرییەکی گۆنجاوت دیاری نەکردووه.", - "loginsuccesstitle": "سەرکەوتی بۆ چوونە ژوورەوە", + "loginsuccesstitle": "چوویە ناوەوە", "loginsuccess": "'''ئێستا بە ناوی «$1»ەوە لە {{SITENAME}} چوویتەتەژوورەوە.'''", "nosuchuser": "بەکارھێنەرێک بە ناوی «$1» نیە.\nناوی بەکارھێنەر بە گەورە و بچووک بوونی پیتەکان ھەستیارە.\nڕێنووسەکەت چاولێکەرەوە، یان [[Special:UserLogin/signup|ھەژمارێکی نوێ دروست بکە]].", "nosuchusershort": "بەکارھێنەرێک بە ناوی «$1»ەوە نیە.\nبە نووسراوەکەتدا بچۆرەوە.", @@ -474,6 +479,11 @@ "retypenew": "تێپەڕوشەی نوێ دوبارە بنووسەوە:", "resetpass_submit": "تێپەڕوشە رێکخە و بچۆ ژوورەوە", "changepassword-success": "تێپەروشەکەت بە سەرکەوتوویی گۆڕدرا!", + "botpasswords-label-create": "دروستکردن", + "botpasswords-label-update": "نوێکردنەوە", + "botpasswords-label-cancel": "ھەڵوەشاندنەوە", + "botpasswords-label-delete": "سڕینەوە", + "botpasswords-label-resetpassword": "ڕێکخستنەوەی تێپەڕوشە", "resetpass_forbidden": "تێپەڕوشەکە ناگۆڕدرێت", "resetpass-no-info": "بۆ گەیشتنی راستەوخۆ بەم پەڕە ئەشێ بچیتە ژوورەوە.", "resetpass-submit-loggedin": "تێپەڕوشە بگۆڕە", @@ -1093,7 +1103,9 @@ "rcshowhidemine": "دەستکارییەکانم $1", "rcshowhidemine-show": "نیشان بدە", "rcshowhidemine-hide": "بشارەوە", + "rcshowhidecategorization": "$1 پۆلێنکردنی پەڕە", "rcshowhidecategorization-show": "نیشانی بدە", + "rcshowhidecategorization-hide": "شاردراوە", "rclinks": "دوایین $1 گۆڕانکاریی $2 ڕۆژی ڕابردوو نیشان بدە
$3", "diff": "جیاوازی", "hist": "مێژوو", @@ -1193,6 +1205,7 @@ "upload-misc-error-text": "هەڵەیەکی نەناسراو لە کاتی بارکردن ڕووی‌دا.\nتکایە لە درووست‌بوون و دەست‌پێ گەیشتنی URL ئەرخەیان ببە و دیسان تاقی‌بکەوە.\nگەر کێشەکە هەر بەردەوام بوو پەیوەندی بکە بە [[Special:ListUsers/sysop|بەڕێوبەر]].", "upload-too-many-redirects": "URL ڕەوانەکەری زۆری لەخۆ گرتووە", "upload-http-error": "هەڵەیەکی HTTP ڕووئ داوە: $1", + "upload-dialog-button-upload": "بارکردن", "backend-fail-stream": "نەکرا پەڕگەی $1 بنێردرێت.", "backend-fail-notexists": "پەڕگەی $1 بوونی نییە.", "backend-fail-delete": "نەکرا پەڕگەی $1 بسڕدرێتەوە.", @@ -1364,6 +1377,7 @@ "mostrevisions": "پەڕەکان بە زۆرترین پێداچوونەوەکان", "prefixindex": "ھەموو پەڕەکان بە پێشگرەوە", "prefixindex-namespace": "هەموو پەڕەکان بەپێشگری (بۆشایی ناوی $1)", + "prefixindex-submit": "نیشاندان", "prefixindex-strip": "پێشگری ناو پێرست بقرتێنە", "shortpages": "پەڕە کورتەکان", "longpages": "پەڕە درێژەکان", @@ -1386,6 +1400,7 @@ "usereditcount": "$1 {{PLURAL:$1|دەستکاری|دەستکاری}}", "usercreated": "لە $1، $2 {{GENDER:$3|دروست کراوە}}", "newpages": "پەڕە نوێکان", + "newpages-submit": "نیشاندان", "newpages-username": "ناوی بەکارھێنەر:", "ancientpages": "کۆنترین پەڕەکان", "move": "گواستنەوە", @@ -1399,6 +1414,7 @@ "pager-newer-n": "{{PLURAL:$1|یەکێکی نوێتر|$1ی نوێتر}}", "pager-older-n": "{{PLURAL:$1|یەکێک کۆنتر|$1ی کۆنتر}}", "suppress": "چاودێری", + "apisandbox-unfullscreen": "نیشاندانی پەڕە", "booksources": "سەرچاوەکانی کتێب", "booksources-search-legend": "بۆ سەرچاوەی کتێب بگەڕێ", "booksources-search": "بگەڕێ", @@ -1407,11 +1423,13 @@ "specialloguserlabel": "بەجێھێنەر:", "speciallogtitlelabel": "مەبەست (سەرناو یان بەکارھێنەر):", "log": "لۆگەکان", + "logeventslist-submit": "نیشاندان", "all-logs-page": "ھەموو لۆگە گشتییەکان", "alllogstext": "نیشاندانی تێکڕای هەموو لۆگە بەردەستەکانی {{SITENAME}}.\nدەتوانی بە ھەڵبژاردنی جۆرە لۆگێک، ناوی بەکارھێنەرەکە (ھەستیار بە گەورە و بچووکی پیتەکان) یان پەڕە کارتێکراوەکە (ھەستیار بە گەورە و بچووکی پیتەکان)\nبینینەکە سنووردار بکەیتەوە.", "logempty": "هیچ بابەتێکی هاوتا لە لۆگەکاندا نەدۆزرایەوە.", "log-title-wildcard": "گەڕانی ئەو سەرناوانە بەم دەقەوە دەست پێدەکەن", "showhideselectedlogentries": "دیاریکردنی بابەتە ھەڵبژێردراوەکانی لۆگ بگۆڕە", + "checkbox-none": "هیچ", "allpages": "ھەموو پەڕەکان", "nextpage": "پەڕەی پاشەوە ($1)", "prevpage": "پەڕەی پێشەوە ($1)", @@ -1427,10 +1445,9 @@ "cachedspecial-viewing-cached-ttl": "خەریکیت وەشانێکی حەشارکراوی ئەم پەڕەیە دەبینی کە دەتوانێت ھی $1 لەمەوبەر بێت.", "cachedspecial-refresh-now": "دواترین پیشانبدە", "categories": "پۆلەكان", + "categories-submit": "نیشاندان", "categoriespagetext": "ئەم {{PLURAL:$1|پۆلە پەڕە یان پەڕگەی|پۆلانە پەڕە یان پەڕگەیان}} لەخۆگرتە.\n[[Special:UnusedCategories|پۆلە بەکارنەھێنراوەکان]] لێرەدا نیشان نەدراون.\n[[Special:WantedCategories|پۆلە خوازراوەکان]]یش ببینە.", "categoriesfrom": "نیشاندانی پۆلەکان بە دستپێکردن لە:", - "special-categories-sort-count": "ڕیز کردن بە پێی ژمارە", - "special-categories-sort-abc": "ڕیزکردن بە پێی ئەلفوبێ", "deletedcontributions": "بەشدارییە سڕاوەکان", "deletedcontributions-title": "بەشدارییە سڕاوەکانی بەکارھێنەر", "sp-deletedcontributions-contribs": "بەشدارییەکان", @@ -1514,11 +1531,19 @@ "unwatchthispage": "ئیتر چاودێری مەکە", "notanarticle": "پەڕەی بێ ناوەڕۆک", "notvisiblerev": "پیاچوونەوە سڕاوەتەوە", - "watchlist-details": "{{PLURAL:$1|$1 پەڕە|$1 پەڕە}} لە لیستی چاودێریەکەتدایە، بێجگە پەڕەکانی لێدوان.", + "watchlist-details": "بێجگە لە پەڕەکانی لێدوان، {{PLURAL:$1|$1 پەڕە}} لە پێرستی {{PLURAL:$1|چاودێرییەکەتدایە|چاودێرییەکەتدان}}.", "wlheader-enotif": "ئاگاداری بە ئیمەیل چالاکە.", "wlheader-showupdated": "‏ئەو پەڕانە کە لە پاش دوایین سەردانت دەستکاری کراون بە ئەستوور نیشان دراون.", "wlnote": "خوارەوە {{PLURAL:$1|دوایین گۆڕانکارییە|دوایین $1 گۆڕانکارییە}} لە دوایین {{PLURAL:$2|کاتژمێر|$2 کاتژمێر}}دا ھەتا $4ی $3.", "wlshowlast": "دوایین $1 کاتژمێری $2 ڕۆژ نیشان بدە", + "watchlist-hide": "شاردراوە", + "watchlist-submit": "نیشاندان", + "wlshowtime": "ماوەی کات بۆ نیشاندان:", + "wlshowhideminor": "دەستکارییە بچووکەکان", + "wlshowhidebots": "بۆتەکان", + "wlshowhideanons": "بەکارھێنەرە نەناسراوەکان", + "wlshowhidemine": "دەستکارییەکانم", + "wlshowhidecategorization": "پۆلێنکردنی پەڕە", "watchlist-options": "ھەڵبژاردەکانی لیستی چاودێری", "watching": "چاودێری...", "unwatching": "لابردنی چاودێری...", @@ -1548,6 +1573,7 @@ "delete-confirm": "سڕینەوەی «$1»", "delete-legend": "بیسڕەوە", "historywarning": "ھۆشیار بە: پەڕەیەک کە خەریکیت دەیسڕیتەوە مێژوویەکی ھەیە بە $1 {{PLURAL:$1|پێداچوونەوە|پێداچوونەوە}}وە:", + "historyaction-submit": "نیشاندان", "confirmdeletetext": "تۆ خەریکی پەڕەیەک بە ھەموو مێژووەکەیەوە دەسڕیتەو.\nتکایە پشتڕاستی بکەوە کە دەتەوێت ئەم کارە بکەی، لە ئاکامەکەی تێدەگەی، و ئەم کارە بە پێی [[{{MediaWiki:Policy-url}}|سیاسەتنامە]] ئەنجام دەدەی.", "actioncomplete": "کردەوە بە ئاکام گەییشت", "actionfailed": "کردارەکە سەرنەکەوت", @@ -1709,6 +1735,7 @@ "whatlinkshere-hidelinks": "$1 بەستەر", "whatlinkshere-hideimages": "$1 بەستەرەکانی پەڕگە", "whatlinkshere-filters": "پاڵێوکەکان", + "whatlinkshere-submit": "بڕۆ", "block": "بەربەستنی بەکارھێنەر", "unblock": "لە بەربەست‌دەرهێنانی بەکارهێنەر", "blockip": "بەربەستنی {{GENDER:$1|بەکارھێنەر}}", @@ -2064,6 +2091,7 @@ "pageinfo-contentpage-yes": "بەڵێ", "pageinfo-protect-cascading-yes": "بەڵێ", "pageinfo-category-info": "زانیاریی پۆل", + "pageinfo-category-total": "ژمارەی سەرجەمی ئەندامان", "pageinfo-category-pages": "ژمارەی پەڕەکان", "pageinfo-category-subcats": "ژمارەی ژێرپەڕەکان", "pageinfo-category-files": "ژمارەی پەڕگەکان", @@ -2154,8 +2182,8 @@ "exif-artist": "نووسەر", "exif-exifversion": "وەشانی exif", "exif-colorspace": "بۆشایی ره‌نگ", - "exif-pixelydimension": "پانی وێنە", - "exif-pixelxdimension": "بەرزی وێنە", + "exif-pixelxdimension": "پانی وێنە", + "exif-pixelydimension": "بەرزی وێنە", "exif-usercomment": "بۆچوونەکانی بەکارھێنەر", "exif-relatedsoundfile": "فایلی ده‌نگی لێکچوو", "exif-datetimeoriginal": "ڕێکەوت و کاتی بەرھەمھێنانی داتا", @@ -2362,6 +2390,7 @@ "imgmultipagenext": "پەڕەی داهاتوو →", "imgmultigo": "بڕۆ!", "imgmultigoto": "بڕۆ بۆ پەڕەی $1", + "img-lang-default": "(زمانی بنچینەیی)", "img-lang-go": "بڕۆ", "ascending_abbrev": "بەرەوە ژوور", "descending_abbrev": "بەرەوە ژێر", @@ -2400,6 +2429,7 @@ "watchlistedit-raw-added": "{{PLURAL:$1|1 سەردێڕ|$1 سەردێڕ}} زیادکرا:", "watchlistedit-raw-removed": "{{PLURAL:$1|1 سەردێڕ|$1 سەردێڕ}} لابرا:", "watchlistedit-clear-titles": "ناونیشانەکان :", + "watchlisttools-clear": "لیستی چاودێری پاک بکەرەوە", "watchlisttools-view": "گۆڕانکارییە پەیوەندیدارەکان ببینە", "watchlisttools-edit": "لیستی چاودێری ببینە و دەستکاری بکە", "watchlisttools-raw": "لیستی خاوی چاودێری دەستکاری بکە", @@ -2457,7 +2487,6 @@ "version-libraries-description": "وەسف", "version-libraries-authors": "نووسەر", "redirect": "ڕەوانەکەر بە پێی پەڕگە، بەکارھێنەر، پەڕە، پێداچوونەوە یان پێناسەی لۆگ", - "redirect-legend": "ڕەوانەکەر بۆ پەڕگە یان پەڕەیەک", "redirect-summary": "ئەم پەڕە تایبەتە ڕەوانە دەکرێ بۆ پەڕگەیەک (ناوی پەڕگەکە)، پەڕەیەک (پێناسەی پێداچوونەوەیەک یان پێناسەی پەڕە) یان پەڕەیەکی بەکارھێنەر (پێناسەیەکی ژمارەیی بەکارھێنەر). بەکارھێنان: [[{{#Special:Redirect}}/file/Example.jpg]]، [[{{#Special:Redirect}}/page/64308]]، [[{{#Special:Redirect}}/revision/328429]] یان [[{{#Special:Redirect}}/user/101]].", "redirect-submit": "بڕۆ", "redirect-lookup": "گەڕان لە:", @@ -2468,7 +2497,6 @@ "redirect-file": "ناوی پەڕگە", "fileduplicatesearch": "گەڕان بۆ پەڕگە دووپات کراوەکان", "fileduplicatesearch-summary": "گەڕان بۆ پەڕگە دووبارەکراوەکان لەسەر بنەمای نرخی hash.", - "fileduplicatesearch-legend": "گەڕان بۆ دووبارەکردنێک", "fileduplicatesearch-filename": "ناوی پەرگە:", "fileduplicatesearch-submit": "گەڕان", "fileduplicatesearch-info": "$1 × $2 پیکسەل
قەبارەی پەڕگە: $3
MIME جۆری: $4", @@ -2593,6 +2621,7 @@ "expand_templates_preview": "پێشبینین", "pagelang-name": "پەڕە", "pagelang-language": "زمان", + "pagelang-use-default": "بەکارھێنانی زمانی بنچینەیی", "pagelang-select-lang": "زمان ھەڵبژێرە", "right-pagelang": "زمانی پەڕە بگۆڕە", "action-pagelang": "زمانی پەڕەکە بگۆڕە", @@ -2621,5 +2650,6 @@ "special-characters-group-gujarati": "گوجەراتی", "special-characters-group-thai": "تایلەندی", "special-characters-group-khmer": "خمێری", - "api-error-blacklisted": "هەڵبژێرە ناونیشانی جیاوازتر و واتادارتر." + "api-error-blacklisted": "هەڵبژێرە ناونیشانی جیاوازتر و واتادارتر.", + "log-action-filter-upload-upload": "بارکردنی نوێ" } diff --git a/languages/i18n/crh-cyrl.json b/languages/i18n/crh-cyrl.json index 1bac2e1c56..089bfc3597 100644 --- a/languages/i18n/crh-cyrl.json +++ b/languages/i18n/crh-cyrl.json @@ -107,9 +107,9 @@ "nov": "ноя", "dec": "дек", "pagecategories": "{{PLURAL:$1|1=Саифенинъ категориясы|Саифенинъ категориялары}}", - "category_header": "\"$1\" категориясындаки саифелер", + "category_header": "«$1» категориясындаки саифелер", "subcategories": "Алт категориялар", - "category-media-header": "\"$1\" категориясындаки медиа файллары", + "category-media-header": "«$1» категориясындаки медиа файллары", "category-empty": "''Ишбу категорияда ич бир саифе я да медиа файл ёкъ.''", "hidden-categories": "Гизли {{PLURAL:$1|1=категория|категориялар}}", "hidden-category-category": "Гизли категориялар", @@ -298,7 +298,7 @@ "perfcachedts": "Ашагъыдаки малюмат кэштен алынды, кэшнинъ сонъки янъартылгъан вакъты: $1. Кэште энъ чокъ {{PLURAL:$1|1=бир нетидже|$1 нетидже}} сакъланып тура.", "querypage-no-updates": "Бу саифени денъиштирмеге шимди изин ёкъ. Бу малюмат аман янъартылмайджакъ.", "viewsource": "Менба кодуны косьтер", - "viewsource-title": "$1 саифесининъ менба коду", + "viewsource-title": "«$1» саифесининъ менба коду", "actionthrottled": "Арекет токъталды", "actionthrottledtext": "Спамгъа къаршы куреш себебинден бу арекетни аз вакъыт ичинде чокъ кере текрарлап оламайсынъыз. Мумкюн олгъан къарардан зияде арекет яптынъыз. Бир къач дакъкъадан сонъ текрарлап бакъынъыз.", "protectedpagetext": "Бу саифеде денъиштирме я да башкъа бир арекет япылмасын деп о блок этильди.", @@ -485,6 +485,7 @@ "updated": "(Янъарды)", "note": "'''Ихтар:'''", "previewnote": "'''Бу тек бакъып чыкъув, метин аля даа сакъланмагъан!'''", + "continue-editing": "Денъиштирюв пенджересине къайт", "previewconflict": "Бу бакъып чыкъув юкъары тарир пенджересиндеки метиннинъ сакъланувдан сонъ оладжакъ корюнишини акс эте.", "session_fail_preview": "''' Сервер сиз япкъан денъиштирмелерни сессия идентификаторы джоюлгъаны себебинден сакълап оламады.\nБу вакътынджа проблемадыр. Лютфен, текрар сакълап бакъынъыз.\nБундан да сонъ олып чыкъмаса, малюмат локаль файлгъа сакъланъыз да браузеринъизни бир къапатып ачынъыз.'''", "session_fail_preview_html": "'''Афу этинъиз! HTML сессиянынъ малюматлары гъайып олгъаны себебинден сизинъ денъиштирмелеринъизни къабул этмеге имкян ёкътыр.'''", @@ -492,7 +493,7 @@ "editing": "«$1» саифесини денъиштиреятасыз", "creating": "«$1» саифесини яратув", "editingsection": "«$1» саифесинде болюк денъиштиреятасыз", - "editingcomment": "$1 саифесини денъиштиреятасыз (янъы болюк)", + "editingcomment": "«$1» саифесини денъиштиреятасыз (янъы болюк)", "editconflict": "Денъиштирмелер чатышмасы: $1", "explainconflict": "Сиз саифени денъиштиргенде башкъа бири де денъиштирме япты.\nЮкъарыдаки язы саифенинъ шимдики алыны косьтере.\nСизинъ денъиштирмелеринъиз астында косьтерильди.\nШимди япкъан денъиштирмелеринъизни ашагъы пенджереден юкъары пенджереге авуштырмакъ керексинъиз.\n\"{{int:savearticle}}\"гъа баскъанда '''тек''' юкъарыдаки язы сакъланаджакъ.", "yourtext": "Сизинъ метнинъиз", @@ -917,7 +918,7 @@ "randompage": "Тесадюфий саифе", "randompage-nopages": "\"$1\" {{PLURAL:$2|1=исим фезасында|исим фезаларында}} ич бир саифе ёкъ.", "randomredirect": "Тесадюфий ёллама саифеси", - "randomredirect-nopages": "\"$1\" исим фезасында ич бир ёллама саифеси ёкъ.", + "randomredirect-nopages": "«$1» исим фезасында ич бир ёллама саифеси ёкъ.", "statistics": "Статистика", "statistics-header-pages": "Саифе статистикасы", "statistics-header-edits": "Денъиштирюв статистикасы", @@ -1081,7 +1082,7 @@ "protectlogtext": "Ашагъыдаки, къорчалавгъа алув/къорчалавдан чыкъарув иле багълы денъишмелер журналыдыр.\nКъорчалангъан саифелер [[Special:ProtectedPages|там джедвелини]] де коре билесинъиз.", "protectedarticle": "\"[[$1]]\" къорчалав алтына алынды", "modifiedarticleprotection": "«[[$1]]» ичюн къорчалав севиеси денъиштирильди", - "unprotectedarticle": "\"[[$1]]\" саифесинден къорчалав чыкъарлыды", + "unprotectedarticle": "«[[$1]]» саифесинден къорчалав чыкъарлыды", "prot_1movedto2": "[[$1]] саифесининъ ады [[$2]] деп денъиштирильди", "protect-legend": "Къорчалавны тасдыкъла", "protectcomment": "Себеп:", @@ -1141,7 +1142,7 @@ "sp-contributions-newonly": "Тек янъы саифе яраткъан денъиштирмелерни косьтер", "sp-contributions-submit": "Къыдыр", "whatlinkshere": "Бу саифеге багълантылар", - "whatlinkshere-title": "$1 саифесине багъланты олгъан саифелер", + "whatlinkshere-title": "«$1» саифесине багъланты олгъан саифелер", "whatlinkshere-page": "Саифе:", "linkshere": "'''[[:$1]]''' саифесине багъланты берген саифелер:", "nolinkshere": "'''[[:$1]]''' саифесине багъланты берген саифе ёкъ.", @@ -1190,7 +1191,7 @@ "ip_range_invalid": "Рухсетсиз IP аралыгъы.", "lockdb": "Малюмат базасы килитли", "lockbtn": "Малюмат базасы килитли", - "move-page": "$1 саифесининъ адыны денъиштиреятасыз", + "move-page": "«$1» саифесининъ адыны денъиштиреятасыз", "move-page-legend": "Саифенинъ адыны денъиштирюв", "movepagetext": "Ашагъыдаки форма къулланылып саифенинъ ады денъиштирилир. Бунынънен берабер денъиштирмелер журналы да янъы адгъа авуштырылыр.\nЭски ады янъы адына ёнетме олур. Эски серлевагъа ёнетип тургъан саифелерни автоматик оларакъ янъартып оласынъыз. Бу арекетни автоматик япмагъа истемесенъиз, бутюн [[Special:DoubleRedirects|чифт]] ве [[Special:BrokenRedirects|йыртыкъ]] ёнетме саифелерини озюнъиз тешкермеге меджбур олурсынъыз. Багълантылар эндиден берли догъру чалышмасындан эмин олмалысынъыз.\n\nЯнъы адда бир саифе энди бар олса, ад денъиштирилюви япылмайджакъ, анджакъ бар олгъан саифе ёнетме я да бош олса ад денъиштирилюви мумкюн оладжакъ. Бу демек ки, саифенинъ адыны янълыштан денъиштирген олсанъыз деминки адыны кери къайтарып оласынъыз, амма бар олгъан саифени тесадюфен ёкъ этамайсынъыз.\n\nТЕНБИ!\nАд денъиштирилюви популяр саифелер ичюн буюк ве бекленмеген денъишмелерге себеп ола билир. Лютфен, денъиштирме япмаздан эвель ола биледжеклерни козь огюне алынъыз.", "movepagetalktext": "Къошулгъан музакере саифесининъ де (бар олса)\nады автоматик тарзда денъиштириледжек. '''Мустесналар:'''\n\n* Айны бу адда бош олмагъан бир музакере саифеси энди бар;\n* Ашагъыдаки бошлукъкъа ишарет къоймадынъыз.\n\nБойле алларда, керек олса, саифелерни къолнен ташымагъа я да бирлештирмеге меджбур олурсынъыз.", diff --git a/languages/i18n/crh-latn.json b/languages/i18n/crh-latn.json index 9333f95404..ffdd83c117 100644 --- a/languages/i18n/crh-latn.json +++ b/languages/i18n/crh-latn.json @@ -104,9 +104,9 @@ "nov": "noy", "dec": "dek", "pagecategories": "{{PLURAL:$1|Saifeniñ kategoriyası|Saifeniñ kategoriyaları}}", - "category_header": "\"$1\" kategoriyasındaki saifeler", + "category_header": "“$1” kategoriyasındaki saifeler", "subcategories": "Alt kategoriyalar", - "category-media-header": "\"$1\" kategoriyasındaki media faylları", + "category-media-header": "“$1” kategoriyasındaki media faylları", "category-empty": "''İşbu kategoriyada iç bir saife ya da media fayl yoq.''", "hidden-categories": "Gizli {{PLURAL:$1|kategoriya|kategoriyalar}}", "hidden-category-category": "Gizli kategoriyalar", @@ -288,7 +288,7 @@ "formerror": "Hata: formanıñ malümatını yollamaqnıñ iç çaresi yoq", "badarticleerror": "Siz yapmağa istegen işlev bu saifede yapılıp olamay.", "cannotdelete": "\"$1\" saife ya da faylı yoq etilip olamadı. Başqa bir qullanıcı tarafından yoq etilgen ola bile.", - "cannotdelete-title": "\"$1\" saifesini yoq etmege olmaz", + "cannotdelete-title": "“$1” saifesini yoq etmege olmaz", "delete-hook-aborted": "Yoq etüv çengel protsedurasınen toqtatıldı.\nİç bir izaat berilmedi.", "badtitle": "Ruhsetsiz serleva", "badtitletext": "İstenilgen saife adı doğru degil, o boştır, yahut tillerara bağlantı ya da vikilerara bağlantı doğru yazılmağan. Belki saife adında yasaqlanğan işaretler bar.", @@ -296,7 +296,7 @@ "perfcachedts": "Aşağıdaki malümat keşten alındı, keşniñ soñki yañartılğan vaqtı: $1. Keşte eñ çoq {{PLURAL:$1|bir netice|$1 netice}} saqlanıp tura.", "querypage-no-updates": "Bu saifeni deñiştirmege şimdi izin yoq. Bu malümat aman yañartılmaycaq.", "viewsource": "Menba kodunı köster", - "viewsource-title": "$1 saifesiniñ menba kodu", + "viewsource-title": "“$1” saifesiniñ menba kodu", "actionthrottled": "Areket toqtaldı", "actionthrottledtext": "Spamğa qarşı küreş sebebinden bu areketni az vaqıt içinde çoq kere tekrarlap olamaysıñız. Mümkün olğan qarardan ziyade areket yaptıñız. Bir qaç daqqadan soñ tekrarlap baqıñız.", "protectedpagetext": "Bu saifede deñiştirme ya da başqa bir areket yapılmasın dep o blok etildi.", @@ -483,6 +483,7 @@ "updated": "(Yañardı)", "note": "'''İhtar:'''", "previewnote": "'''Bu tek baqıp çıquv, metin alâ daa saqlanmağan!'''", + "continue-editing": "Deñiştirüv penceresine qayt", "previewconflict": "Bu baqıp çıquv yuqarı tarir penceresindeki metinniñ saqlanuvdan soñ olacaq körünişini aks ete.", "session_fail_preview": "''' Server siz yapqan deñiştirmelerni sessiya identifikatorı\ncoyulğanı sebebinden saqlap olamadı. Bu vaqtınca problemadır. Lütfen, tekrar saqlap baqıñız.\nBundan da soñ olıp çıqmasa, malümat lokal faylğa saqlañız da brauzeriñizni bir qapatıp\naçıñız.'''", "session_fail_preview_html": "'''Afu etiñiz! HTML sessiyanıñ malümatları ğayıp olğanı sebebinden siziñ deñiştirmeleriñizni qabul etmege imkân yoqtır.'''", @@ -490,7 +491,7 @@ "editing": "“$1” saifesini deñiştireyatasız", "creating": "“$1” saifesini yaratuv", "editingsection": "“$1” saifesinde bölük deñiştireyatasız", - "editingcomment": "$1 saifesini deñiştireyatasız (yañı bölük)", + "editingcomment": "“$1” saifesini deñiştireyatasız (yañı bölük)", "editconflict": "Deñiştirmeler çatışması: $1", "explainconflict": "Siz saifeni deñiştirgende başqa biri de deñiştirme yaptı.\nYuqarıdaki yazı saifeniñ şimdiki alını köstere.\nSiziñ deñiştirmeleriñiz astında kösterildi. Şimdi yapqan deñiştirmeleriñizni aşağı pencereden yuqarı pencerege avuştırmaq kereksiñiz.\n\"{{int:savearticle}}\"ğa basqanda '''tek''' yuqarıdaki yazı saqlanacaq.", "yourtext": "Siziñ metniñiz", @@ -915,7 +916,7 @@ "randompage": "Tesadüfiy saife", "randompage-nopages": "\"$1\" {{PLURAL:$2|isim fezasında|isim fezalarında}} iç bir saife yoq.", "randomredirect": "Tesadüfiy yollama saifesi", - "randomredirect-nopages": "\"$1\" isim fezasında iç bir yollama saifesi yoq.", + "randomredirect-nopages": "“$1” isim fezasında iç bir yollama saifesi yoq.", "statistics": "Statistika", "statistics-header-pages": "Saife statistikası", "statistics-header-edits": "Deñiştirüv statistikası", @@ -1078,8 +1079,8 @@ "protectlogpage": "Qorçalav jurnalı", "protectlogtext": "Aşağıdaki, saifeni qorçalavğa aluv/qorçalavdan çıqaruv ile bağlı deñişmeler jurnalıdır.\nQorçalanğan saifeler [[Special:ProtectedPages|tam cedvelini]] de köre bilesiñiz.", "protectedarticle": "\"[[$1]]\" qorçalav altına alındı", - "modifiedarticleprotection": "\"[[$1]]\" içün qorçalav seviyesi deñiştirildi", - "unprotectedarticle": "\"[[$1]]\" saifesinden qorçalav çıqarlıdı", + "modifiedarticleprotection": "“[[$1]]” içün qorçalav seviyesi deñiştirildi", + "unprotectedarticle": "“[[$1]]” saifesinden qorçalav çıqarlıdı", "prot_1movedto2": "[[$1]] saifesiniñ adı [[$2]] dep deñiştirildi", "protect-legend": "Qorçalavnı tasdıqla", "protectcomment": "Sebep:", @@ -1139,7 +1140,7 @@ "sp-contributions-newonly": "Tek yañı saife yaratqan deñiştirmelerni köster", "sp-contributions-submit": "Qıdır", "whatlinkshere": "Bu saifege bağlantılar", - "whatlinkshere-title": "$1 saifesine bağlantı bergen saifeler", + "whatlinkshere-title": "“$1” saifesine bağlantı bergen saifeler", "whatlinkshere-page": "Saife:", "linkshere": "'''[[:$1]]''' saifesine bağlantı bergen saifeler:", "nolinkshere": "'''[[:$1]]''' saifesine bağlantı bergen saife yoq.", @@ -1188,7 +1189,7 @@ "ip_range_invalid": "Ruhsetsiz IP aralığı.", "lockdb": "Malümat bazası kilitli", "lockbtn": "Malümat bazası kilitli", - "move-page": "$1 saifesiniñ adını deñiştireyatasız", + "move-page": "“$1” saifesiniñ adını deñiştireyatasız", "move-page-legend": "Saifeniñ adını deñiştirüv", "movepagetext": "Aşağıdaki forma qullanılıp saifeniñ adı deñiştirilir. Bunıñnen beraber deñiştirmeler jurnalı da yañı adğa avuştırılır.\nEski adı yañı adına yönetme olur. Eski serlevağa yönetip turğan saifelerni avtomatik olaraq yañartıp olasıñız. Bu areketni avtomatik yapmağa istemeseñiz, bütün [[Special:DoubleRedirects|çift]] ve [[Special:BrokenRedirects|yırtıq]] yönetme saifelerini özüñiz teşkermege mecbur olursıñız. Bağlantılar endiden berli doğru çalışmasından emin olmalısıñız.\n\nYañı adda bir saife endi bar olsa, ad deñiştirilüvi yapılmaycaq, ancaq bar olğan saife yönetme ya da boş olsa ad deñiştirilüvi mümkün olacaq. Bu demek ki, saifeniñ adını yañlıştan deñiştirgen olsañız deminki adını keri qaytarıp olasıñız, amma bar olğan saifeni tesadüfen yoq etamaysıñız.\n\nTENBİ!\nAd deñiştirilüvi populâr saifeler içün büyük ve beklenmegen deñişmelerge sebep ola bilir. Lütfen, deñiştirme yapmazdan evel ola bileceklerni köz ögüne alıñız.", "movepagetalktext": "Qoşulğan muzakere saifesiniñ de (bar olsa) adı avtomatik tarzda deñiştirilecek. '''Müstesnalar:'''\n\n*Aynı bu isimde boş olmağan bir muzakere saifesi endi bar;\n*Aşağıdaki boşluqqa işaret qoymadıñız.\n\nBöyle allarda, kerek olsa, saifelerni qolnen taşımağa ya da birleştirmege mecbur olursıñız.", @@ -1199,7 +1200,7 @@ "move-watch": "Bu saifeni közet", "movepagebtn": "Adını deñiştir", "pagemovedsub": "Saifeniñ adı deñiştirildi", - "movepage-moved": "'''\"$1\" saifesiniñ adı \"$2\" olaraq deñiştirildi'''", + "movepage-moved": "'''“$1” saifesiniñ adı “$2” olaraq deñiştirildi'''", "movepage-moved-redirect": "Bir yollama yaratıldı.", "movepage-moved-noredirect": "Yollama yaratıluvı bastırıldı.", "articleexists": "Bu adda bir saife endi bar ya da siz yazğan ad yasaqlı.\nLütfen, başqa bir ad saylap yazıñız.", diff --git a/languages/i18n/cs.json b/languages/i18n/cs.json index ab0092a15b..1a205ff808 100644 --- a/languages/i18n/cs.json +++ b/languages/i18n/cs.json @@ -47,6 +47,7 @@ "tog-watchdefault": "Přidávat mnou editované stránky a soubory ke sledovaným", "tog-watchmoves": "Přidávat mnou přesouvané stránky a soubory mezi sledované", "tog-watchdeletion": "Přidávat stránky a soubory, které smažu, mezi sledované", + "tog-watchuploads": "Přidávat mnou načtené soubory ke sledovaným", "tog-watchrollback": "Přidávat stránky, které jsem {{GENDER:|vrátil|vrátila}} zpět, ke sledovaným", "tog-minordefault": "Označovat editace implicitně jako malé", "tog-previewontop": "Zobrazovat náhled před editačním oknem (ne za ním)", @@ -170,7 +171,6 @@ "moredotdotdot": "Další…", "morenotlisted": "Tento seznam není úplný.", "mypage": "Stránka", - "anonuserpage": "Neznámý uživatel", "mytalk": "Diskuse", "anontalk": "Diskuse", "navigation": "Navigace", @@ -475,7 +475,7 @@ "nosuchuser": "Neexistuje uživatel se jménem „$1“. U uživatelských jmen se rozlišují malá/velká písmena. Zkontrolujte zápis, nebo si [[Special:UserLogin/signup|vytvořte nový účet]].", "nosuchusershort": "Neexistuje uživatel se jménem „$1“. Zkontrolujte zápis.", "nouserspecified": "Musíte zadat uživatelské jméno.", - "login-userblocked": "Tento uživatel je zablokován. Přihlášení není dovoleno.", + "login-userblocked": "{{GENDER:$1|Tento uživatel je zablokován|Tato uživatelka je zablokována}}. Přihlášení není dovoleno.", "wrongpassword": "Bylo zadáno nesprávné heslo.\nZkuste to znovu.", "wrongpasswordempty": "Bylo zadáno prázdné heslo. Zkuste to znovu.", "passwordtooshort": "Heslo musí být dlouhé nejméně $1 {{PLURAL:$1|znak|znaky|znaků}}.", @@ -489,7 +489,7 @@ "noemail": "{{GENDER:$1|Uživatel|Uživatelka}} „$1“ nemá zaregistrovanou e-mailovou adresu.", "noemailcreate": "Musíte uvést platnou e-mailovou adresu", "passwordsent": "Dočasné heslo bylo zasláno na e-mailovou adresu registrovanou pro „$1“. Přihlaste se, prosím, znovu, jakmile ho obdržíte.", - "blocked-mailpassword": "Vaší IP adrese byla zablokována možnost editace, a současně s tím je zablokována funkce pro zaslání nového hesla.", + "blocked-mailpassword": "Vaší IP adrese byla zablokována možnost editace. Kvůli ochraně před zneužitím není dovoleno z této IP adresy žádat o zaslání nového hesla.", "eauthentsent": "Na zadanou adresu byl zaslán potvrzovací e-mail.\nŽádné další zprávy vám však na tuto adresu nebudou odeslány, dokud podle instrukcí v e-mailu nepotvrdíte, že tato adresa skutečně patří vám.", "throttled-mailpassword": "Během {{PLURAL:$1|poslední hodiny|posledních $1 hodin}} již bylo heslo jednou zasláno.\nKvůli prevenci zneužívání lze heslo zaslat jen jednou za $1 {{PLURAL:$1|hodinu|hodiny|hodin}}.", "mailerror": "Chyba při zasílání e-mailu: $1", @@ -666,7 +666,7 @@ "missing-revision": "Revize #$1 stránky s názvem „{{FULLPAGENAME}}“ neexistuje.\n\nToto je obvykle způsobeno tím, že jste následovali zastaralý odkaz na historickou verzi stránky, jež byla smazána.\nPodrobnosti mohou být uvedeny v [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} knize smazaných stránek].", "userpage-userdoesnotexist": "Uživatelský účet „$1“ není zaregistrován.\nZkontrolujte, zda skutečně chcete tuto stránku vytvořit či editovat.", "userpage-userdoesnotexist-view": "Uživatelský účet „$1“ není zaregistrován.", - "blocked-notice-logextract": "Tento uživatel je momentálně zablokován.\nZde je pro přehled zobrazen nejnovější záznam z knihy zablokování:", + "blocked-notice-logextract": "{{GENDER:$1|Tento uživatel|Tato uživatelka}} je momentálně {{GENDER:$1|zablokován|zablokována}}.\nZde je pro přehled zobrazen nejnovější záznam z knihy zablokování:", "clearyourcache": "Poznámka: Po uložení musíte smazat cache vašeho prohlížeče, jinak změny neuvidíte.\n* Firefox / Safari: Při kliknutí na Aktualizovat držte Shift nebo stiskněte Ctrl-F5 nebo Ctrl-R (na Macu ⌘-R)\n* Google Chrome: Stiskněte Ctrl-Shift-R (na Macu ⌘-Shift-R)\n* Internet Explorer: Při kliknutí na Aktualizovat držte Ctrl nebo stiskněte Ctrl-F5\n* Opera: Smažte obsah cache v menu Nástroje → Nastavení", "usercssyoucanpreview": "Tip: Použijte tlačítko „{{int:showpreview}}“ k testování vašeho nového CSS před uložením.", "userjsyoucanpreview": "Tip: Použijte tlačítko „{{int:showpreview}}“ k testování vašeho nového JavaScriptu před uložením.", @@ -772,7 +772,7 @@ "undo-summary": "Zrušena verze $1 od uživatele [[Special:Contributions/$2|$2]] ([[User talk:$2|diskuse]])", "undo-summary-username-hidden": "Zrušena verze $1 od skrytého uživatele", "cantcreateaccounttitle": "Nelze vytvořit uživatelský účet", - "cantcreateaccount-text": "Zakládání nových účtů z této IP adresy ('''$1''') bylo zablokováno uživatelem [[User:$3|$3]].\n\n$3 uvádí toto zdůvodnění: ''$2''", + "cantcreateaccount-text": "Zakládání nových účtů z této IP adresy ($1) bylo zablokováno {{GENDER:$3|uživatelem|uživatelkou}} [[User:$3|$3]].\n\n$3 uvádí toto zdůvodnění: $2", "cantcreateaccount-range-text": "Zakládání nových účtů z IP adres v rozsahu $1, který obsahuje i vaši IP adresu ($4), bylo zablokováno {{GENDER:$3|uživatelem|uživatelkou}} [[User:$3|$3]].\n\n$3 uvádí toto zdůvodnění: $2", "viewpagelogs": "Zobrazit protokolovací záznamy k této stránce", "nohistory": "O této stránce neexistuje historie editací.", @@ -1331,9 +1331,9 @@ "recentchangeslinked-page": "Název stránky:", "recentchangeslinked-to": "Zobrazit změny na stránkách odkazujících na zadanou stránku", "recentchanges-page-added-to-category": "Stránka [[:$1]] zařazena do kategorie", - "recentchanges-page-added-to-category-bundled": "Stránka [[:$1]] a {{PLURAL:$2|jedna další zařazeny|$2 další zařazeny|$2 dalších zařazeno}} do kategorie", + "recentchanges-page-added-to-category-bundled": "Stránka [[:$1]], [[Special:WhatLinksHere/$1|vložená do jiných stránek]], zařazena do kategorie", "recentchanges-page-removed-from-category": "Stránka [[:$1]] vyřazena z kategorie", - "recentchanges-page-removed-from-category-bundled": "Stránka [[:$1]] a {{PLURAL:$2|jedna další vyřazeny|$2 další vyřazeny|$2 dalších vyřazeno}} z kategorie", + "recentchanges-page-removed-from-category-bundled": "Stránka [[:$1]], [[Special:WhatLinksHere/$1|vložená do jiných stránek]], vyřazena z kategorie", "autochange-username": "Automatická změna MediaWiki", "upload": "Načíst soubor", "uploadbtn": "Načíst soubor", @@ -1513,6 +1513,7 @@ "uploadstash-badtoken": "Operace se nezdařila. Možná vypršela platnost vašeho oprávnění k editaci. Zkuste to znovu.", "uploadstash-errclear": "Soubory se nepodařilo vymazat.", "uploadstash-refresh": "Aktualizovat seznam souborů", + "uploadstash-thumbnail": "zobrazit náhled", "invalid-chunk-offset": "Neplatný posun bloku", "img-auth-accessdenied": "Přístup odepřen", "img-auth-nopathinfo": "Chybí PATH_INFO.\nVáš server není nastaven tak, aby tuto informaci poskytoval.\nMožná funguje pomocí CGI a img_auth na něm nemůže fungovat.\nVizte https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Image_Authorization.", @@ -1832,8 +1833,6 @@ "categories-submit": "Zobrazit", "categoriespagetext": "Následující kategorie {{PLURAL:$1|obsahuje|obsahují}} stránky nebo soubory.\nNezobrazují se tu [[Special:UnusedCategories|nepoužívané kategorie]].\nPodívejte se také na [[Special:WantedCategories|žádané kategorie]].", "categoriesfrom": "Zobrazit kategorie počínaje od:", - "special-categories-sort-count": "seřadit podle počtu", - "special-categories-sort-abc": "seřadit abecedně", "deletedcontributions": "Smazané editace uživatele", "deletedcontributions-title": "Smazané editace uživatele", "sp-deletedcontributions-contribs": "příspěvky", @@ -1874,7 +1873,9 @@ "listgrouprights-namespaceprotection-header": "Omezení jmenných prostorů", "listgrouprights-namespaceprotection-namespace": "Jmenný prostor", "listgrouprights-namespaceprotection-restrictedto": "Oprávnění umožňující uživateli editovat", - "listgrants-summary": "Následující seznam obsahuje oprávnění s odpovídajícím přístupem k uživatelským právům. Uživatelé mohou aplikace autorizovat k využití jejich účtu, ale s omezenými právy na základě oprávnění, která uživatel aplikaci přidělil. Aplikace konající jménem uživatele ale nemůže využít oprávnění, která uživatel nemá.\nK jednotlivým oprávněním mohou existovat [[{{MediaWiki:Listgrouprights-helppage}}|doplňující informace]].", + "listgrants": "Svolení", + "listgrants-summary": "Následující seznam obsahuje svolení a jim odpovídající přístup k uživatelským právům. Uživatelé mohou aplikace autorizovat k využití jejich účtu, ale s omezenými právy na základě svolení, která uživatel aplikaci poskytl. Aplikace konající jménem uživatele ale nemůže využít oprávnění, která uživatel nemá.\nK jednotlivým oprávněním mohou existovat [[{{MediaWiki:Listgrouprights-helppage}}|doplňující informace]].", + "listgrants-grant": "Svolení", "listgrants-rights": "Oprávnění", "trackingcategories": "Sledovací kategorie", "trackingcategories-summary": "Tato stránka obsahuje seznam sledovacích kategorií, které automaticky přidává software MediaWiki. Jejich jména lze změnit úpravou příslušných systémových hlášení ve jmenném prostoru {{ns:8}}.", @@ -2208,6 +2209,7 @@ "ipb-unblock": "Odblokovat uživatele nebo IP adresu", "ipb-blocklist": "Zobrazit probíhající bloky", "ipb-blocklist-contribs": "Příspěvky {{GENDER:$1|uživatele|uživatelky}} $1", + "ipb-blocklist-duration-left": "zbývá $1", "unblockip": "Odblokovat uživatele", "unblockiptext": "Tímto formulářem je možno obnovit právo blokované IP adresy či uživatele opět přispívat do {{grammar:2sg|{{SITENAME}}}}.", "ipusubmit": "Odblokovat", @@ -2248,7 +2250,7 @@ "autoblocker": "Automatické zablokování kvůli tomu, že vaši IP adresu nedávno {{GENDER:$1|používal uživatel|používala uživatelka}} „[[User:$1|$1]]“.\nDůvod zablokování {{GENDER:$1|uživatele $1|uživatelky $1}}: „$2“", "blocklogpage": "Kniha zablokování", "blocklog-showlog": "{{GENDER:$1|Tento uživatel byl dříve blokován.|Tato uživatelka byla dříve blokována.|Tento uživatel byl dříve blokován.}}\nZde je pro přehled zobrazen výpis z knihy zablokování:", - "blocklog-showsuppresslog": "Tento uživatel byl zablokován a skryt. Zde je pro přehled zobrazen výpis záznamu utajení:", + "blocklog-showsuppresslog": "{{GENDER:$1|Tento uživatel byl zablokován a skryt|Tato uživatelka byla zablokována a skryta}}. Zde je pro přehled zobrazen výpis záznamu utajení:", "blocklogentry": "blokuje „[[$1]]“ s časem vypršení $2 $3", "reblock-logentry": "mění nastavení bloku „[[$1]]“ s časem vypršení $2 $3", "blocklogtext": "Toto je kniha úkonů blokování a odblokování uživatelů.\nAutomaticky blokované IP adresy nejsou vypsány.\nVizte též [[Special:BlockList|seznam všech probíhajících bloků]].", @@ -2266,7 +2268,7 @@ "ipb_expiry_temp": "Blokování skrytých uživatelských jmen by měla být trvalá.", "ipb_hide_invalid": "Tento účet nelze utajit; má více než $1 {{PLURAL:$1|editaci|editace|editací}}.", "ipb_already_blocked": "„$1“ již je zablokován.", - "ipb-needreblock": "$1 je již {{GENDER:zablokován|zablokována}}. Chcete změnit nastavení bloku?", + "ipb-needreblock": "$1 je již {{GENDER:$1|zablokován|zablokována|zablokován(a)}}. Chcete změnit nastavení bloku?", "ipb-otherblocks-header": "{{PLURAL:$1|Jiné zablokování|Jiná zablokování}}", "unblock-hideuser": "Tohoto uživatele nemůžete odblokovat, protože jeho uživatelské jméno bylo skryto.", "ipb_cant_unblock": "Chyba: Blokování s ID $1 nebylo nalezeno. Uživatel již možná byl odblokován.", @@ -2449,11 +2451,7 @@ "import-logentry-upload-detail": "{{PLURAL:$1|naimportována $1 revize|naimportovány $1 revize|naimportováno $1 revizí}}", "import-logentry-interwiki-detail": "{{PLURAL:$1|naimportována $1 revize|naimportovány $1 revize|naimportováno $1 revizí}} z $2", "javascripttest": "Testování JavaScriptu", - "javascripttest-pagetext-noframework": "Tato stránka je vyhrazena pro spouštění testů JavaScriptu.", - "javascripttest-pagetext-unknownframework": "Neznámá testovací knihovna „$1“.", "javascripttest-pagetext-unknownaction": "Neznámá akce „$1“.", - "javascripttest-pagetext-frameworks": "Zvolte jednu z následujících testovacích knihoven: $1", - "javascripttest-pagetext-skins": "Zvolte vzhled, pod kterým se mají testy spustit:", "javascripttest-qunit-intro": "Vizte [$1 dokumentaci testování] na mediawiki.org", "tooltip-pt-userpage": "{{GENDER:|Vaše uživatelská}} stránka", "tooltip-pt-anonuserpage": "Uživatelská stránka pro IP adresu, ze které editujete", @@ -2722,8 +2720,8 @@ "exif-colorspace": "Barevný prostor", "exif-componentsconfiguration": "Význam jednotlivých složek", "exif-compressedbitsperpixel": "Komprimační režim", - "exif-pixelydimension": "Šířka obrázku", - "exif-pixelxdimension": "Výška obrázku", + "exif-pixelxdimension": "Šířka obrázku", + "exif-pixelydimension": "Výška obrázku", "exif-usercomment": "Uživatelské poznámky", "exif-relatedsoundfile": "Související zvukový soubor", "exif-datetimeoriginal": "Datum a čas pořízení obrázku", @@ -3050,6 +3048,10 @@ "confirmemail_body_set": "Někdo (patrně vy, z IP adresy $1) nastavil e-mailovou adresu\núčtu „$2“ na {{grammar:6sg|{{SITENAME}}}} na tuto adresu.\n\nPokud si přejete aktivovat e-mailové funkce na\n{{grammar:6sg|{{SITENAME}}}}, tak pro potvrzení, že tato adresa opravdu\npatří vám, přejděte svým internetovým prohlížečem na následující adresu:\n\n$3\n\nPokud vám tento účet *nepatří*, klikněte na následující\nodkaz, čímž potvrzení zrušíte:\n\n$5\n\nPlatnost tohoto potvrzovacího kódu vyprší $4.", "confirmemail_invalidated": "Potvrzení e-mailové adresy bylo zrušeno", "invalidateemail": "Zrušit potvrzení e-mailové adresy", + "notificationemail_subject_changed": "Registrovaný e-mail na {{grammar:6sg|{{SITENAME}}}} byl změněn", + "notificationemail_subject_removed": "Registrovaný e-mail na {{grammar:6sg|{{SITENAME}}}} byl odebrán", + "notificationemail_body_changed": "Někdo (patrně vy, z IP adresy $1) na {{grammar:6sg|{{SITENAME}}}} změnil\ne-mailovou adresu k účtu „$2“ na „$3“.\n\nPokud jste to nebyli vy, okamžitě kontaktujte správce.", + "notificationemail_body_removed": "Někdo (patrně vy, z IP adresy $1) na {{grammar:6sg|{{SITENAME}}}} odebral\ne-mailovou adresu z účtu „$2“.\n\nPokud jste to nebyli vy, okamžitě kontaktujte správce.", "scarytranscludedisabled": "[Vkládání šablon mezi wiki je vypnuto]", "scarytranscludefailed": "[Nepodařilo se načíst šablonu pro $1]", "scarytranscludefailed-httpstatus": "[Nepodařilo se načíst šablonu pro $1: HTTP $2]", @@ -3221,7 +3223,6 @@ "version-libraries-description": "Popis", "version-libraries-authors": "Autoři", "redirect": "Přesměrování podle ID souboru, uživatele, stránky, revize nebo protokolovacího záznamu", - "redirect-legend": "Přesměrování na soubor či stránku", "redirect-summary": "Tato speciální stránka přesměrovává na soubor (podle názvu), stránku (podle ID stránky nebo revize), uživatele (podle číselného uživatelského ID) nebo protokolovací záznam (podle ID záznamu). Použití: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/page/64308]], [[{{#Special:Redirect}}/revision/328429]],[[{{#Special:Redirect}}/user/101]] nebo [[{{#Special:Redirect}}/logid/186]].", "redirect-submit": "Přejít", "redirect-lookup": "Najít:", @@ -3234,7 +3235,6 @@ "redirect-not-exists": "Hodnota nenalezena", "fileduplicatesearch": "Hledání duplicitních souborů", "fileduplicatesearch-summary": "Hledání duplicitních souborů podle jejich hašů.", - "fileduplicatesearch-legend": "Hledání duplikátů", "fileduplicatesearch-filename": "Jméno souboru:", "fileduplicatesearch-submit": "Hledat", "fileduplicatesearch-info": "(rozměr: $1 × $2 pixelů, velikost souboru: $3, MIME typ: $4)", @@ -3435,7 +3435,7 @@ "logentry-protect-protect-cascade": "$1 {{GENDER:$2|zamknul|zamknula}} stránku $3 $4 [kaskádovým zámkem]", "logentry-protect-modify": "$1 {{GENDER:$2|změnil|změnila}} úroveň ochrany stránky $3 $4", "logentry-protect-modify-cascade": "$1 {{GENDER:$2|změnil|změnila}} úroveň ochrany stránky $3 $4 [kaskádový zámek]", - "logentry-rights-rights": "$1 {{GENDER:$2|změnil|změnila}} členství $3 ve skupinách z $4 na $5", + "logentry-rights-rights": "$1 {{GENDER:$2|změnil|změnila}} členství {{GENDER:$3|uživatele|uživatelky}} $3 ve skupinách z $4 na $5", "logentry-rights-rights-legacy": "$1 {{GENDER:$2|změnil|změnila}} členství $3 ve skupinách", "logentry-rights-autopromote": "$1 {{GENDER:$2|byl automaticky povýšen|byla automaticky povýšena}} z $4 na $5", "logentry-upload-upload": "$1 {{GENDER:$2|načetl|načetla}} $3", @@ -3528,6 +3528,7 @@ "api-error-unknownerror": "Neznámá chyba: „$1“.", "api-error-uploaddisabled": "Načítání souborů je na této wiki vypnuto.", "api-error-verification-error": "Soubor je možná poškozen nebo má špatnou příponu.", + "api-error-was-deleted": "Soubor s tímto názvem byl již dříve načten a později smazán.", "duration-seconds": "$1 {{PLURAL:$1|sekunda|sekundy|sekund}}", "duration-minutes": "$1 {{PLURAL:$1|minuta|minuty|minut}}", "duration-hours": "$1 {{PLURAL:$1|hodina|hodiny|hodin}}", @@ -3619,6 +3620,7 @@ "special-characters-group-ipa": "Mezinárodní fonetická abeceda (IPA)", "special-characters-group-symbols": "Symboly", "special-characters-group-greek": "Řecká abeceda", + "special-characters-group-greekextended": "Rozšíření řečtiny", "special-characters-group-cyrillic": "Cyrilice", "special-characters-group-arabic": "Arabské písmo", "special-characters-group-arabicextended": "Rozšíření arabštiny", @@ -3646,5 +3648,54 @@ "sessionprovider-generic": "relace pomocí $1", "sessionprovider-mediawiki-session-cookiesessionprovider": "relace pomocí cookies", "sessionprovider-nocookies": "Možná jsou zakázány cookies. Ujistěte se, že máte cookies povoleny a zkuste to znovu.", - "randomrootpage": "Náhodná kořenová stránka" + "randomrootpage": "Náhodná kořenová stránka", + "log-action-filter-block": "Typ zablokování:", + "log-action-filter-contentmodel": "Typ změny modelu obsahu:", + "log-action-filter-delete": "Typ smazání:", + "log-action-filter-import": "Typ importu:", + "log-action-filter-managetags": "Typ akce správy značek:", + "log-action-filter-move": "Typ přesunu:", + "log-action-filter-newusers": "Typ založení účtu:", + "log-action-filter-patrol": "Typ prověření:", + "log-action-filter-protect": "Typ zamčení:", + "log-action-filter-rights": "Typ změny práv:", + "log-action-filter-suppress": "Typ utajení:", + "log-action-filter-upload": "Typ nahrání:", + "log-action-filter-all": "Všechny", + "log-action-filter-block-block": "Zablokování", + "log-action-filter-block-reblock": "Změna zablokování", + "log-action-filter-block-unblock": "Odblokování", + "log-action-filter-contentmodel-change": "Změna modelu obsahu", + "log-action-filter-contentmodel-new": "Založení stránky s nestandardním modelem obsahu", + "log-action-filter-delete-delete": "Smazání stránky", + "log-action-filter-delete-restore": "Obnovení stránky", + "log-action-filter-delete-event": "Smazání záznamu", + "log-action-filter-delete-revision": "Smazání revize", + "log-action-filter-import-interwiki": "Transwiki import", + "log-action-filter-import-upload": "Import načtením XML souboru", + "log-action-filter-managetags-create": "Vytvoření značky", + "log-action-filter-managetags-delete": "Smazání značky", + "log-action-filter-managetags-activate": "Aktivace značky", + "log-action-filter-managetags-deactivate": "Deaktivace značky", + "log-action-filter-move-move": "Přesun nepřepisující přesměrování", + "log-action-filter-move-move_redir": "Přesun přepisující přesměrování", + "log-action-filter-newusers-create": "Vytvoření anonymním uživatelem", + "log-action-filter-newusers-create2": "Vytvoření registrovaným uživatelem", + "log-action-filter-newusers-autocreate": "Automatické vytvoření", + "log-action-filter-newusers-byemail": "Vytvoření s heslem poslaným e-mailem", + "log-action-filter-patrol-patrol": "Manuální prověření", + "log-action-filter-patrol-autopatrol": "Automatické prověření", + "log-action-filter-protect-protect": "Zamknutí", + "log-action-filter-protect-modify": "Změna zámku", + "log-action-filter-protect-unprotect": "Odemknutí", + "log-action-filter-protect-move_prot": "Přesun zámku", + "log-action-filter-rights-rights": "Ruční změna", + "log-action-filter-rights-autopromote": "Automatická změna", + "log-action-filter-suppress-event": "Utajení protokolovacího záznamu", + "log-action-filter-suppress-revision": "Utajení revize", + "log-action-filter-suppress-delete": "Utajení stránky", + "log-action-filter-suppress-block": "Utajení uživatele zablokováním", + "log-action-filter-suppress-reblock": "Utajení uživatele novým zablokováním", + "log-action-filter-upload-upload": "Nové načtení", + "log-action-filter-upload-overwrite": "Znovunačtení" } diff --git a/languages/i18n/cy.json b/languages/i18n/cy.json index d76acadfff..2b45b476ca 100644 --- a/languages/i18n/cy.json +++ b/languages/i18n/cy.json @@ -15,7 +15,8 @@ "아라", "Macofe", "Matma Rex", - "Diafol" + "Diafol", + "Nemo bis" ] }, "tog-underline": "Tanlinellu cysylltiadau:", @@ -156,7 +157,6 @@ "moredotdotdot": "Rhagor...", "morenotlisted": "Nid yw'r rhestr hon yn llawn.", "mypage": "Tudalen defnyddiwr", - "anonuserpage": "Defnyddiwr anhysbys", "mytalk": "Sgwrs", "anontalk": "Sgwrs", "navigation": "Panel llywio", @@ -1206,7 +1206,7 @@ "recentchangeslinked-page": "Tudalen:", "recentchangeslinked-to": "Dangos newidiadau i'r tudalennau â chyswllt arnynt sy'n arwain at y dudalen a enwir", "recentchanges-page-added-to-category": "Ychwanegwyd [[:$1]] at y categori", - "recentchanges-page-added-to-category-bundled": "[[:$1]] ac {{PLURAL:$2|un ddalen|$2 dalen}} wedi'u hychwanegu at y categori", + "recentchanges-page-added-to-category-bundled": "[[:$1]] ac [[Special:WhatLinksHere/$1|{{PLURAL:$2|un ddalen|$2 dalen}}]] wedi'u hychwanegu at y categori", "recentchanges-page-removed-from-category": "Symudwyd [[:$1]] o'r categori", "upload": "Uwchlwytho ffeil", "uploadbtn": "Uwchlwytho ffeil", @@ -1645,8 +1645,6 @@ "categories": "Categorïau", "categoriespagetext": "Mae'r {{PLURAL:$1|categori|categori|categorïau|categorïau|categorïau|categorïau}} isod yn cynnwys tudalennau neu ffeiliau amlgyfrwng.\nNi ddangosir [[Special:UnusedCategories|categorïau gwag]] yma.\nGweler hefyd [[Special:WantedCategories|categorïau sydd eu hangen]].", "categoriesfrom": "Dangos categorïau gan ddechrau gyda:", - "special-categories-sort-count": "trefnu yn ôl nifer", - "special-categories-sort-abc": "trefnu yn ôl yr wyddor", "deletedcontributions": "Cyfraniadau defnyddiwr i dudalennau dilëedig", "deletedcontributions-title": "Cyfraniadau defnyddiwr i dudalennau dilëedig", "sp-deletedcontributions-contribs": "cyfraniadau", @@ -2232,11 +2230,7 @@ "import-logentry-upload-detail": "$1 {{PLURAL:$1|diwygiad|diwygiad|ddiwygiad|diwygiad|diwygiad|diwygiad}} wedi'i fewnforio", "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|diwygiad|diwygiad|ddiwygiad|diwygiad|diwygiad|diwygiad}} wedi'i fewnforio o $2", "javascripttest": "Profi JavaScript", - "javascripttest-pagetext-noframework": "Neilltuwyd y dudalen hon at gynnal profion JavaScript.", - "javascripttest-pagetext-unknownframework": "Ni nabyddwyd y fframwaith profi \"$1\".", "javascripttest-pagetext-unknownaction": "Gweithred dienw \"$1\"", - "javascripttest-pagetext-frameworks": "Dewiswch un o'r fframweithiau profi canlynol: $1", - "javascripttest-pagetext-skins": "Dewiswch wedd i gynnal profion arni:", "javascripttest-qunit-intro": "Gweler y [$1 wybodaeth am y profion] ar mediawiki.org.", "tooltip-pt-userpage": "{{GENDER:|Eich tudalen defnyddiwr}}", "tooltip-pt-anonuserpage": "Y tudalen defnyddiwr ar gyfer y cyfeiriad IP yr ydych yn ei ddefnyddio wrth olygu", @@ -2487,8 +2481,8 @@ "exif-colorspace": "Gofod lliw", "exif-componentsconfiguration": "Ystyr pob cydran", "exif-compressedbitsperpixel": "Modd cywasgu delwedd", - "exif-pixelydimension": "Lled y ddelwedd", - "exif-pixelxdimension": "Uchder y ddelwedd", + "exif-pixelxdimension": "Lled y ddelwedd", + "exif-pixelydimension": "Uchder y ddelwedd", "exif-usercomment": "Sylwadau'r defnyddiwr", "exif-relatedsoundfile": "Ffeil sain gysylltiedig", "exif-datetimeoriginal": "Dyddiad ac amser y cynhyrchwyd y data", @@ -2927,7 +2921,6 @@ "version-libraries-description": "Disgrifiad", "version-libraries-authors": "Awduron", "redirect": "Ailgyfeirio yn ôl enw ffeil, defnyddiwr, tudalen neu ID y diwygiad", - "redirect-legend": "Ailgyfeirio i ffeil neu dudalen", "redirect-summary": "Mae'r dudalen arbennig hon yn ailgyfeirio at ffeil (o roi enw'r ffeil), at dudalen (o roi ID rhyw ddiwygiad o'r dudalen neu ID y dudalen), neu at dudalen defnyddiwr (o roi rhif ID y defnyddiwr).\nDefnydd: \n[[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/page/64308]], [[{{#Special:Redirect}}/revision/328429]], neu [[{{#Special:Redirect}}/user/101]].", "redirect-submit": "Ati", "redirect-lookup": "Chwilio drwy:", @@ -2939,7 +2932,6 @@ "redirect-not-exists": "Heb lwyddo i'w ganfod", "fileduplicatesearch": "Chwilio am ffeiliau dyblyg", "fileduplicatesearch-summary": "Chwilier am ffeiliau dyblyg ar sail ei werth stwnsh.", - "fileduplicatesearch-legend": "Chwilio am ddyblygeb", "fileduplicatesearch-filename": "Enw'r ffeil:", "fileduplicatesearch-submit": "Chwilier", "fileduplicatesearch-info": "$1 × $2 picsel
Maint y ffeil: $3
math MIME: $4", diff --git a/languages/i18n/da.json b/languages/i18n/da.json index 8263cf69e1..77e941875f 100644 --- a/languages/i18n/da.json +++ b/languages/i18n/da.json @@ -56,7 +56,8 @@ "Mads Haupt", "Stefan2", "Ribewiki", - "Jens Jensen" + "Jens Jensen", + "Nemo bis" ] }, "tog-underline": "Understreg henvisninger:", @@ -1286,7 +1287,7 @@ "recentchangeslinked-page": "Sidenavn:", "recentchangeslinked-to": "Vis ændringer i sider der henviser til den angivne side i stedet", "recentchanges-page-added-to-category": "[[:$1]] tilføjet til kategori", - "recentchanges-page-added-to-category-bundled": "[[:$1]] og {{PLURAL:$2|én side|$2 sider}} tilføjet til kategori", + "recentchanges-page-added-to-category-bundled": "[[:$1]] og [[Special:WhatLinksHere/$1|{{PLURAL:$2|én side|$2 sider}}]] tilføjet til kategori", "upload": "Læg en fil op", "uploadbtn": "Læg en fil op", "reuploaddesc": "Tilbage til formularen til at lægge filer op.", @@ -1722,8 +1723,6 @@ "categories": "Kategorier", "categoriespagetext": "Følgende {{PLURAL:$1|kategori|kategorier}} indeholder sider eller media.\n[[Special:UnusedCategories|Ubrugte kategorier]] vises ikke her.\nSe også [[Special:WantedCategories|ønskede kategorier]].", "categoriesfrom": "Vis kategorier startende med:", - "special-categories-sort-count": "sorter efter antal", - "special-categories-sort-abc": "sorter alfabetisk", "deletedcontributions": "Slettede brugerbidrag", "deletedcontributions-title": "Slettede brugerbidrag", "sp-deletedcontributions-contribs": "bidrag", @@ -2303,10 +2302,6 @@ "import-logentry-upload-detail": "$1 {{PLURAL:$1|version|versioner}} importeret", "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|version|versioner}} importeret fra $2", "javascripttest": "Test af JavaScript", - "javascripttest-pagetext-noframework": "Denne side er reserveret til at teste JavaScript.", - "javascripttest-pagetext-unknownframework": "Ukendt testmiljø \"$1\".", - "javascripttest-pagetext-frameworks": "Vælg venligst en af de følgende testmiljøer: $1", - "javascripttest-pagetext-skins": "Vælg et udseende, som testene skal køres med:", "javascripttest-qunit-intro": "Se [$1 testdokumentationen] på mediawiki.org.", "tooltip-pt-userpage": "{{GENDER:|Din}} brugerside", "tooltip-pt-anonuserpage": "Brugersiden for den ip-adresse du redigerer som", @@ -2555,8 +2550,8 @@ "exif-colorspace": "Farverum", "exif-componentsconfiguration": "Betydning af enkelte komponenter", "exif-compressedbitsperpixel": "Komprimerede bits pr. pixel", - "exif-pixelydimension": "Billedbredde", - "exif-pixelxdimension": "Billedhøjde", + "exif-pixelxdimension": "Billedbredde", + "exif-pixelydimension": "Billedhøjde", "exif-usercomment": "Brugerkommentarer", "exif-relatedsoundfile": "Tilhørende lydfil", "exif-datetimeoriginal": "Optagelsestidspunkt", @@ -2987,7 +2982,6 @@ "version-libraries-library": "Bibliotek", "version-libraries-version": "Version", "redirect": "Omdirigering pga. fil, bruger-, side- eller udgave-ID", - "redirect-legend": "Omstilling til en fil eller en side", "redirect-summary": "Denne specialside omdirigerer til en fil (hvis filnavnet er angivet), en side (hvis udgave ID'et eller side ID'et er angivet) eller en brugerside (hvis et numerisk brugernummer er angivet). Eksempler på brug: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/page/64308]],[[{{#Special:Redirect}}/revision/328429]] eller [[{{#Special:Redirect}}/user/101]].", "redirect-submit": "Vis", "redirect-lookup": "Slå op:", @@ -2999,7 +2993,6 @@ "redirect-not-exists": "Værdi ej fundet", "fileduplicatesearch": "Find dubletfiler", "fileduplicatesearch-summary": "Find dublerede filer baseret på deres hash-værdi.", - "fileduplicatesearch-legend": "Find dubletfiler.", "fileduplicatesearch-filename": "Filnavn:", "fileduplicatesearch-submit": "Find", "fileduplicatesearch-info": "$1 × $2 punkter
Filstørrelse: $3
MIME-type: $4", diff --git a/languages/i18n/de.json b/languages/i18n/de.json index 5a33125866..0b1a87454f 100644 --- a/languages/i18n/de.json +++ b/languages/i18n/de.json @@ -104,6 +104,7 @@ "tog-watchdefault": "Selbst geänderte Seiten und Dateien automatisch beobachten", "tog-watchmoves": "Selbst verschobene Seiten und Dateien automatisch beobachten", "tog-watchdeletion": "Selbst gelöschte Seiten und Dateien automatisch beobachten", + "tog-watchuploads": "Neue hochgeladene Dateien zu meiner Beobachtungsliste hinzufügen", "tog-watchrollback": "Seiten, bei denen ich eine Zurücksetzung durchgeführt habe, automatisch beobachten", "tog-minordefault": "Eigene Änderungen standardmäßig als geringfügig markieren", "tog-previewontop": "Vorschau oberhalb des Bearbeitungsfensters anzeigen", @@ -137,7 +138,7 @@ "editfont-style": "Schriftart für den Text im Bearbeitungsfenster:", "editfont-default": "Browserstandard", "editfont-monospace": "Schrift mit fester Zeichenbreite", - "editfont-sansserif": "Serifenlose Groteskschrift", + "editfont-sansserif": "Schrift ohne Serifen", "editfont-serif": "Schrift mit Serifen", "sunday": "Sonntag", "monday": "Montag", @@ -227,7 +228,6 @@ "moredotdotdot": "Mehr …", "morenotlisted": "Diese Liste ist nicht vollständig.", "mypage": "Eigene Seite", - "anonuserpage": "Unbekannter Benutzer", "mytalk": "Diskussion", "anontalk": "Diskussionsseite", "navigation": "Navigation", @@ -546,7 +546,7 @@ "noemail": "{{GENDER:$1|Benutzer|Benutzerin}} „$1“ hat keine E-Mail-Adresse angegeben.", "noemailcreate": "Du musst eine gültige E-Mail-Adresse angeben.", "passwordsent": "Ein neues, temporäres Passwort wurde an die E-Mail-Adresse von Benutzer „$1“ gesandt.\nBitte melde dich damit an, sobald du es erhalten hast. Das alte Passwort bleibt weiterhin gültig.", - "blocked-mailpassword": "Die von dir verwendete IP-Adresse ist für das Ändern von Seiten gesperrt. Um einen Missbrauch zu verhindern, wurde die Möglichkeit zur Anforderung eines neuen Passwortes ebenfalls gesperrt.", + "blocked-mailpassword": "Deine IP-Adresse ist für das Bearbeiten gesperrt. Um Missbrauch zu vermeiden, ist die Verwendung der Passwortzurücksetzung von dieser IP-Adresse nicht erlaubt.", "eauthentsent": "Eine Bestätigungs-E-Mail wurde an die angegebene Adresse verschickt.\n\nBevor eine E-Mail von anderen Benutzern über die E-Mail-Funktion empfangen werden kann, muss die Adresse und ihre tatsächliche Zugehörigkeit zu diesem Benutzerkonto erst bestätigt werden. Bitte befolge die Hinweise in der Bestätigungs-E-Mail.", "throttled-mailpassword": "Es wurde innerhalb der letzten {{PLURAL:$1|Stunde|$1 Stunden}} bereits eine Passwortzurücksetzungs-E-Mail angefordert. Um einen Missbrauch der Funktion zu verhindern, kann nur {{PLURAL:$1|einmal pro Stunde|alle $1 Stunden}} eine Passwortzurücksetzungs-E-Mail angefordert werden.", "mailerror": "Fehler beim Senden der E-Mail: $1", @@ -630,7 +630,7 @@ "resetpass-validity-soft": "Dein Passwort ist nicht gültig: $1\n\nBitte wähle jetzt ein neues Passwort oder klicke auf „{{int:resetpass-submit-cancel}}“, um es später zurückzusetzen.", "passwordreset": "Passwort zurücksetzen", "passwordreset-text-one": "Fülle dieses Formular aus, um ein temporäres Passwort per E-Mail zu erhalten.", - "passwordreset-text-many": "{{PLURAL:$1|Füll eines der Felder aus, um ein temporäres Passwort per E-Mail zugesandt zu bekommen.}}", + "passwordreset-text-many": "{{PLURAL:$1|Fülle eines der Felder aus, um ein temporäres Passwort per E-Mail zugesandt zu bekommen.}}", "passwordreset-disabled": "Das Zurücksetzen von Passwörtern wurde in diesem Wiki deaktiviert.", "passwordreset-emaildisabled": "Die E-Mail-Funktionen wurden auf diesem Wiki deaktiviert.", "passwordreset-username": "Benutzername:", @@ -1392,9 +1392,9 @@ "recentchangeslinked-page": "Seite:", "recentchangeslinked-to": "Zeige nur Änderungen an Seiten, die auf diese Seite verlinken", "recentchanges-page-added-to-category": "[[:$1]] zur Kategorie hinzugefügt", - "recentchanges-page-added-to-category-bundled": "[[:$1]] und {{PLURAL:$2|eine weitere Seite|$2 weitere Seiten}} zur Kategorie hinzugefügt", + "recentchanges-page-added-to-category-bundled": "[[:$1]] zur Kategorie hinzugefügt, [[Special:WhatLinksHere/$1|diese Seite ist in anderen Seiten eingebunden]]", "recentchanges-page-removed-from-category": "[[:$1]] von der Kategorie entfernt", - "recentchanges-page-removed-from-category-bundled": "[[:$1]] und {{PLURAL:$2|eine weitere Seite|$2 weitere Seiten}} von der Kategorie entfernt", + "recentchanges-page-removed-from-category-bundled": "[[:$1]] von der Kategorie entfernt, [[Special:WhatLinksHere/$1|diese Seite ist in anderen Seiten eingebunden]]", "autochange-username": "Automatische MediaWiki-Änderung", "upload": "Datei hochladen", "uploadbtn": "Datei hochladen", @@ -1574,6 +1574,7 @@ "uploadstash-badtoken": "Das Entfernen der vorab gespeicherten Dateien ist fehlgeschlagen, da vielleicht deine Sitzungsdaten abgelaufen sind. Bitte versuche es erneut.", "uploadstash-errclear": "Das Entfernen der vorab gespeicherten Dateien ist fehlgeschlagen.", "uploadstash-refresh": "Liste der Dateien aktualisieren", + "uploadstash-thumbnail": "Vorschaubild ansehen", "invalid-chunk-offset": "Ungültiger Startpunkt", "img-auth-accessdenied": "Zugriff verweigert", "img-auth-nopathinfo": "Die Angabe PATH_INFO fehlt.\nDer Server ist nicht dafür eingerichtet, diese Information weiterzugeben.\nSie könnte CGI-gestützt sein und kann daher „img_auth“ (Authentifizierung des Dateiaufrufs) nicht unterstützen.\nSiehe auch https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Image_Authorization (englisch).", @@ -1893,8 +1894,6 @@ "categories-submit": "Anzeigen", "categoriespagetext": "Folgende {{PLURAL:$1|Kategorie enthält|Kategorien enthalten}} Seiten oder Dateien.\n[[Special:UnusedCategories|Verwaiste Kategorien]] werden hier nicht aufgeführt.\nSiehe auch die Liste der [[Special:WantedCategories|gewünschten Kategorien]].", "categoriesfrom": "Zeige Kategorien ab:", - "special-categories-sort-count": "Sortierung nach Anzahl", - "special-categories-sort-abc": "Sortierung nach Alphabet", "deletedcontributions": "Gelöschte Beiträge", "deletedcontributions-title": "Gelöschte Beiträge", "sp-deletedcontributions-contribs": "Benutzerbeiträge", @@ -2272,6 +2271,7 @@ "ipb-unblock": "IP-Adresse/Benutzer freigeben", "ipb-blocklist": "Alle aktuellen Sperren anzeigen", "ipb-blocklist-contribs": "Benutzerbeiträge von „{{GENDER:$1|$1}}“", + "ipb-blocklist-duration-left": "noch $1", "unblockip": "Benutzer freigeben", "unblockiptext": "Mit diesem Formular kannst du eine IP-Adresse oder einen Benutzer freigeben.", "ipusubmit": "Freigeben", @@ -2513,11 +2513,7 @@ "import-logentry-upload-detail": "$1 {{PLURAL:$1|Version|Versionen}} importiert", "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|Version|Versionen}} von $2 importiert", "javascripttest": "JavaScript-Test", - "javascripttest-pagetext-noframework": "Diese Seite ist JavaScript-Tests vorbehalten.", - "javascripttest-pagetext-unknownframework": "Unbekanntes Framework „$1“.", "javascripttest-pagetext-unknownaction": "Unbekannte Aktion „$1“.", - "javascripttest-pagetext-frameworks": "Bitte wähle eine der folgenden Prüfumgebungen aus: $1", - "javascripttest-pagetext-skins": "Wähle eine Benutzeroberfläche zur Durchführung der Tests aus:", "javascripttest-qunit-intro": "Siehe die [$1 Dokumentation zu Tests] auf mediawiki.org", "tooltip-pt-userpage": "{{GENDER:|Deine}} Benutzerseite", "tooltip-pt-anonuserpage": "Benutzerseite der IP-Adresse von der aus du Änderungen durchführst", @@ -2788,8 +2784,8 @@ "exif-colorspace": "Farbraum", "exif-componentsconfiguration": "Bedeutung einzelner Komponenten", "exif-compressedbitsperpixel": "Komprimierte Bits pro Pixel", - "exif-pixelydimension": "Bildbreite", - "exif-pixelxdimension": "Bildhöhe", + "exif-pixelxdimension": "Bildbreite", + "exif-pixelydimension": "Bildhöhe", "exif-usercomment": "Benutzerkommentare", "exif-relatedsoundfile": "Zugehörige Tondatei", "exif-datetimeoriginal": "Erfassungszeitpunkt", @@ -3123,6 +3119,10 @@ "confirmemail_body_set": "Jemand mit der IP-Adresse $1, wahrscheinlich du selbst,\nhat die E-Mail-Adresse des Benutzerkontos „$2“ auf {{SITENAME}} zu dieser E-Mail-Adresse abgeändert.\n\nUm zu bestätigen, dass dieses Benutzerkonto wirklich zu dir gehört\nund um die E-Mail-Funktionen auf {{SITENAME}} zu aktivieren, öffne bitte den folgenden Link in deinem Browser:\n\n$3\n\nFalls das Konto *nicht* zu dir gehört, bitte den nachfolgenden Link öffnen,\num die Bestätigung der E-Mail-Adresse abzubrechen:\n\n$5\n\nDieser Bestätigungscode ist gültig bis $4.", "confirmemail_invalidated": "Die E-Mail-Adressbestätigung wurde abgebrochen.", "invalidateemail": "E-Mail-Adressbestätigung abbrechen", + "notificationemail_subject_changed": "Die registrierte E-Mail-Adresse auf {{SITENAME}} wurde geändert", + "notificationemail_subject_removed": "Die registrierte E-Mail-Adresse auf {{SITENAME}} wurde entfernt", + "notificationemail_body_changed": "Jemand mit der IP-Adresse $1, wahrscheinlich du selbst,\nhat auf {{SITENAME}} die E-Mail-Adresse für das Benutzerkonto „$2“ auf „$3“ geändert.\n\nFalls das nicht du warst, kontaktiere umgehend einen Wikiadministrator.", + "notificationemail_body_removed": "Jemand mit der IP-Adresse $1, wahrscheinlich du selbst,\nhat auf {{SITENAME}} die E-Mail-Adresse für das Benutzerkonto „$2“ entfernt.\n\nFalls das nicht du warst, kontaktiere umgehend einen Wikiadministrator.", "scarytranscludedisabled": "[Interwiki-Einbindung ist deaktiviert]", "scarytranscludefailed": "[Vorlageneinbindung für $1 ist gescheitert]", "scarytranscludefailed-httpstatus": "[Vorlagenabruf fehlgeschlagen für $1: HTTP $2]", @@ -3256,7 +3256,6 @@ "version-libraries-description": "Beschreibung", "version-libraries-authors": "Autoren", "redirect": "Weiterleitung auf Benutzerseite, Seite, Seitenversion, Datei oder Logbucheintrag", - "redirect-legend": "Weiterleitung auf eine Benutzerseite, Seite, Seitenversion, Datei oder einen Logbucheintrag", "redirect-summary": "Diese Spezialseite leitet auf eine Benutzerseite (numerische Benutzerkennung angegeben), Seite (Seitenkennung angegeben), Seitenversion (Versionskennung angegeben), Datei (Dateiname angegeben) oder einen Logbucheintrag (Logbuchkennung angegeben) weiter. Benutzung: [[{{#Special:Redirect}}/user/101]], [[{{#Special:Redirect}}/page/64308]], [[{{#Special:Redirect}}/revision/328429]], [[{{#Special:Redirect}}/file/Example.jpg]] oder [[{{#Special:Redirect}}/logid/186]].", "redirect-submit": "Los", "redirect-lookup": "Suchen:", @@ -3269,7 +3268,6 @@ "redirect-not-exists": "Der Wert wurde nicht gefunden", "fileduplicatesearch": "Dateiduplikatsuche", "fileduplicatesearch-summary": "Suche nach Dateiduplikaten auf Basis ihres Hashwertes.", - "fileduplicatesearch-legend": "Suche nach Duplikaten", "fileduplicatesearch-filename": "Dateiname:", "fileduplicatesearch-submit": "Suchen", "fileduplicatesearch-info": "$1 × $2 Pixel
Dateigröße: $3
MIME-Typ: $4", @@ -3295,7 +3293,7 @@ "blankpage": "Leere Seite", "intentionallyblankpage": "Diese Seite enthält absichtlich keinen Inhalt.", "external_image_whitelist": " #Diese Zeile nicht verändern.
\n#Untenstehend können Fragmente regulärer Ausdrücke (der Teil zwischen den //) eingegeben werden.\n#Diese werden mit den URLs von Bildern aus externen Quellen verglichen.\n#Ein positiver Vergleich führt zur Anzeige des Bildes, andernfalls wird das Bild nur als Link angezeigt.\n#Zeilen, die mit einem # beginnen, werden als Kommentar behandelt.\n#Es wird nicht zwischen Groß- und Kleinschreibung unterschieden.\n\n#Fragmente regulärer Ausdrücke nach dieser Zeile eintragen. Diese Zeile nicht verändern.
", - "tags": "Gültige Änderungsmarkierungen", + "tags": "Änderungsmarkierungen", "tag-filter": "[[Special:Tags|Markierungs]]-Filter:", "tag-filter-submit": "Filter", "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Markierung|Markierungen}}]]: $2)", @@ -3470,7 +3468,7 @@ "logentry-protect-protect-cascade": "$1 {{GENDER:$2|schützte}} die Seite $3 $4 [kaskadierend]", "logentry-protect-modify": "$1 {{GENDER:$2|änderte}} den Schutzstatus der Seite $3 $4", "logentry-protect-modify-cascade": "$1 {{GENDER:$2|änderte}} den Schutzstatus der Seite $3 $4 [kaskadierend]", - "logentry-rights-rights": "$1 {{GENDER:$2|änderte}} die Gruppenzugehörigkeit für $3 von $4 zu $5", + "logentry-rights-rights": "$1 {{GENDER:$2|änderte}} die Gruppenzugehörigkeit für {{GENDER:$3|$3}} von $4 zu $5", "logentry-rights-rights-legacy": "$1 {{GENDER:$2|änderte}} die Gruppenzugehörigkeit für $3", "logentry-rights-autopromote": "$1 wurde automatisch von $4 zu $5 {{GENDER:$2|zugeordnet}}", "logentry-upload-upload": "$1 {{GENDER:$2|lud}} $3 hoch", @@ -3563,6 +3561,7 @@ "api-error-unknownerror": "Unbekannter Fehler: „$1“", "api-error-uploaddisabled": "Das Hochladen ist in diesem Wiki deaktiviert.", "api-error-verification-error": "Die hochzuladende Datei ist entweder fehlerhaft oder hat keine Dateinamenserweiterung.", + "api-error-was-deleted": "Eine Datei mit diesem Namen wurde kürzlich hochgeladen und anschließend gelöscht.", "duration-seconds": "$1 {{PLURAL:$1|Sekunde|Sekunden}}", "duration-minutes": "$1 {{PLURAL:$1|Minute|Minuten}}", "duration-hours": "$1 {{PLURAL:$1|Stunde|Stunden}}", @@ -3657,6 +3656,7 @@ "special-characters-group-ipa": "Internationales Phonetisches Alphabet (IPA)", "special-characters-group-symbols": "Symbole", "special-characters-group-greek": "Griechisch", + "special-characters-group-greekextended": "Erweitertes Griechisch", "special-characters-group-cyrillic": "Kyrillisch", "special-characters-group-arabic": "Arabisch", "special-characters-group-arabicextended": "Arabisch, erweitert", @@ -3684,5 +3684,54 @@ "sessionprovider-generic": "$1-Sitzungen", "sessionprovider-mediawiki-session-cookiesessionprovider": "cookiebasierten Sitzungen", "sessionprovider-nocookies": "Cookies sind eventuell deaktiviert. Stelle sicher, dass Cookies aktiviert sind und versuche es erneut.", - "randomrootpage": "Zufällige Stammseite" + "randomrootpage": "Zufällige Stammseite", + "log-action-filter-block": "Sperrtyp:", + "log-action-filter-contentmodel": "Typ der Inhaltsmodelländerung:", + "log-action-filter-delete": "Löschtyp:", + "log-action-filter-import": "Importtyp:", + "log-action-filter-managetags": "Typ der Markierungsverwaltungsaktion:", + "log-action-filter-move": "Verschiebungstyp:", + "log-action-filter-newusers": "Typ der Benutzerkontenerstellung:", + "log-action-filter-patrol": "Kontrolltyp:", + "log-action-filter-protect": "Schutztyp:", + "log-action-filter-rights": "Typ der Rechteänderung", + "log-action-filter-suppress": "Unterdrückungstyp", + "log-action-filter-upload": "Hochladetyp:", + "log-action-filter-all": "Alle", + "log-action-filter-block-block": "Sperren", + "log-action-filter-block-reblock": "Sperrveränderung", + "log-action-filter-block-unblock": "Freigaben", + "log-action-filter-contentmodel-change": "Inhaltsmodelländerung", + "log-action-filter-contentmodel-new": "Erstellung einer Seite mit einem Nicht-Standard-Inhaltsmodell", + "log-action-filter-delete-delete": "Seitenlöschung", + "log-action-filter-delete-restore": "Seitenwiederherstellung", + "log-action-filter-delete-event": "Logbucheintrag-Löschung", + "log-action-filter-delete-revision": "Versionslöschung", + "log-action-filter-import-interwiki": "Transwiki-Importe", + "log-action-filter-import-upload": "Import durch das Hochladen einer XML-Datei", + "log-action-filter-managetags-create": "Markierungserstellung", + "log-action-filter-managetags-delete": "Markierungslöschung", + "log-action-filter-managetags-activate": "Markierungsaktivierung", + "log-action-filter-managetags-deactivate": "Markierungsdeaktivierung", + "log-action-filter-move-move": "Verschiebung ohne Überschreibung von Weiterleitungen", + "log-action-filter-move-move_redir": "Verschiebung mit Überschreibung von Weiterleitungen", + "log-action-filter-newusers-create": "Erstellung durch anonymen Benutzer", + "log-action-filter-newusers-create2": "Erstellung durch registrierten Benutzer", + "log-action-filter-newusers-autocreate": "Automatische Erstellung", + "log-action-filter-newusers-byemail": "Erstellung mit per E-Mail zugesandtem Passwort", + "log-action-filter-patrol-patrol": "Manuelle Kontrolle", + "log-action-filter-patrol-autopatrol": "Automatische Kontrolle", + "log-action-filter-protect-protect": "Schutz", + "log-action-filter-protect-modify": "Schutzveränderung", + "log-action-filter-protect-unprotect": "Freigaben", + "log-action-filter-protect-move_prot": "Verschobener Seitenschutz", + "log-action-filter-rights-rights": "Manuelle Änderung", + "log-action-filter-rights-autopromote": "Automatische Änderung", + "log-action-filter-suppress-event": "Logbucheintrag-Unterdrückung", + "log-action-filter-suppress-revision": "Versionsunterdrückung", + "log-action-filter-suppress-delete": "Seitenunterdrückung", + "log-action-filter-suppress-block": "Benutzerunterdrückung durch Sperre", + "log-action-filter-suppress-reblock": "Benutzerunterdrückung durch Neusperre", + "log-action-filter-upload-upload": "Neue Hochladung", + "log-action-filter-upload-overwrite": "Wiederhochladung" } diff --git a/languages/i18n/diq.json b/languages/i18n/diq.json index 4625c89ea3..9aac75dd01 100644 --- a/languages/i18n/diq.json +++ b/languages/i18n/diq.json @@ -593,7 +593,7 @@ "newarticle": "(Newe)", "newarticletext": "To yew gıre tıkna be ra yew pela ke hewna çıniya.\nSeba afernayışê pele ra, qutiya metnê cêrêni bıgurene (seba melumati qaytê [$1 pela peşti] ke).\nEke be ğeletine ameya tiya, wa gocega peyseri programê xo de bıtıkne.", "anontalkpagetext": "----''No pel, pel o karbero hesab a nêkerdeyan o, ya zi karbero hesab akerdeyan o labele pê hesabê xo nêkewto de. No sebeb ra ma IP adres şuxulneni û ney IP adresan herkes eşkeno bıvino. Eke şıma qayil niye ina bo xo ri [[Special:UserLogin/signup|yew hesab bıvıraze]] veyaxut [[Special:UserLogin|hesab akere]].''", - "noarticletext": "Ena pele de hewna theba çıniyo.\nTı şenay zerreyê pelanê binan de [[Special:Search/{{PAGENAME}}|seba sernameyê ena pele cı geyre]],\n[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} qeydan miyan de cı geyre],\nya zi [{{fullurl:{{FULLPAGENAME}}|action=edit}} ena pele bıvurne].", + "noarticletext": "Ena pele de hewna theba çıniyo.\nTı şenay zerreyê pelanê binan de [[Special:Search/{{PAGENAME}}|seba sernameyê ena pele cı geyre]],\n[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} qeydan miyan de cı geyre],\nya zi [{{fullurl:{{FULLPAGENAME}}|action=edit}} ena pele vıraze].", "noarticletext-nopermission": "Ena pele de hewna theba çıniyo.\nTı şenay zerreyê pelanê binan de [[Special:Search/{{PAGENAME}}|seba sernameyê na pele cı geyre]], ya zi [{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} qeydan miyan de cı geyre], ema destur çıniyo ke na pele vırazê.", "missing-revision": "Rewizyonê name dê pela da #$1 \"{{FULLPAGENAME}}\" dı çıniyo.\n\nNo normal de tarix dê pelanê besterneyan dı ena xırabin asena.\nDetayê besternayışi [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} tiya dı] aseno.", "userpage-userdoesnotexist": "Hesabê karberi \"$1\" qeyd nêbiyo.\nKerem ke, tı ke wazenay na pele bafernê/bıvurnê, qontrol ke.", @@ -1611,8 +1611,6 @@ "categories": "Kategoriy", "categoriespagetext": "{{PLURAL:$1|Kategoriya cêrene|Kategoriyanê cêrênan}} de peli ya zi medya estê.\n[[Special:UnusedCategories|Kategoriyê ke nêxebetiyenê]] tiya de nêmocniyayê.\n[[Special:WantedCategories|Kategoriyanê waşteyeyan]] de zi bıvêne.", "categoriesfrom": "Kategoriyê ke be ninan dest pêkenê, bımocne:", - "special-categories-sort-count": "goreyê çendi rêz ker.", - "special-categories-sort-abc": "alfabetik rêz ker", "deletedcontributions": "İştırakê karberi esterdi", "deletedcontributions-title": "İştırakê karberi esterdi", "sp-deletedcontributions-contribs": "iştıraqi", @@ -2178,10 +2176,6 @@ "import-logentry-upload-detail": "$1 {{PLURAL:$1|çımraviyarnayış|çımraviyarnayışi}}", "import-logentry-interwiki-detail": "$2 ra $1 {{PLURAL:$1|çımraviyarnayış|çımraviyarnayışi}}", "javascripttest": "Cerebnayışê JavaScripti", - "javascripttest-pagetext-noframework": "Na pela testanê JavaScripta gurweynayışi re abıryaya.", - "javascripttest-pagetext-unknownframework": "Çerçeweyê \"$1\" cerbnayışi xırabo.", - "javascripttest-pagetext-frameworks": "Şıma ra reca xorê cêr ra test weçinê:$1", - "javascripttest-pagetext-skins": "Testa akarfinayışi rê verqayt:", "javascripttest-qunit-intro": "Mediawiki.org dı [dokumanê $1] bıvinê.", "tooltip-pt-userpage": "Pela {{GENDER:|şımaya karberi}}", "tooltip-pt-anonuserpage": "pelê karberê IPyi", @@ -2470,8 +2464,8 @@ "exif-colorspace": "Cayê rengi", "exif-componentsconfiguration": "manayê qisimê hemi", "exif-compressedbitsperpixel": "Modê komprasyonê resimi", - "exif-pixelydimension": "Herayeya resimi", - "exif-pixelxdimension": "Berzeya resimi", + "exif-pixelxdimension": "Herayeya resimi", + "exif-pixelydimension": "Berzeya resimi", "exif-usercomment": "Mışewreyê karberi", "exif-relatedsoundfile": "Derhekê dosya yê vengi", "exif-datetimeoriginal": "Zeman u tarixê data varaziyayişi", @@ -3002,7 +2996,6 @@ "version-entrypoints-articlepath": "[https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgArticlePath Article path]", "version-entrypoints-scriptpath": "[https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgScriptPath Script path]", "redirect": "Serşıkıtena dosya, karberi, pele ya ki revizyonê kamiya dosya", - "redirect-legend": "Hetenayışa dosya yana pela", "redirect-summary": "Na pela xase to hetê yew dosya (nameyê dosya dayeyo), yew pele (kamiya revizyoni ya zi pele dayiya) ya zi yew pela karberi (kamiya karberiya reqemkiye dayiya) ser şıknena. Gurenayış: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/page/64308]], [[{{#Special:Redirect}}/revision/328429]], ya zi [[{{#Special:Redirect}}/user/101]].", "redirect-submit": "Şo", "redirect-lookup": "Bewni", @@ -3014,7 +3007,6 @@ "redirect-not-exists": "Erc nêvineyê", "fileduplicatesearch": "Dosyayanê zey pêyan cı geyrê", "fileduplicatesearch-summary": "Dosyanê çıftan bınê têmiyankewteyan de bıgeyre.", - "fileduplicatesearch-legend": "kopyayê ena dosya bigêre", "fileduplicatesearch-filename": "Nameyê dosyayi", "fileduplicatesearch-submit": "Cı geyre", "fileduplicatesearch-info": "$1 × $2 piksel
Ebatê dosyayî: $3
Tipê MIMEî: $4", diff --git a/languages/i18n/dsb.json b/languages/i18n/dsb.json index 0817b873d8..f11718e702 100644 --- a/languages/i18n/dsb.json +++ b/languages/i18n/dsb.json @@ -1571,8 +1571,6 @@ "categories": "Kategorije", "categoriespagetext": "{{PLURAL:$1|Slědujuca kategorija wopśimujo|Slědujucej kategoriji wopśimujotej|Slědujuce kategorije wopśimuju|Slědujuce kategorije wopśimuju}} boki abo medije.\n[[Special:UnusedCategories|Njewužywane kategorije]] se how njepokazuju.\nGlědaj teke [[Special:WantedCategories|póžedane kategorije]].", "categoriesfrom": "Kategorije pokazaś, zachopinajucy z:", - "special-categories-sort-count": "pśewuběrowaś pó licbje", - "special-categories-sort-abc": "pśewuběrowaś pó alfabeśe", "deletedcontributions": "Wulašowane wužywarske pśinoski", "deletedcontributions-title": "Wulašowane wužywarske pśinoski", "sp-deletedcontributions-contribs": "pśinoski", @@ -2131,10 +2129,6 @@ "import-logentry-upload-detail": "{{PLURAL:$1|$1 wersija|$1 wersiji|$1 wersije}}", "import-logentry-interwiki-detail": "{{PLURAL:$1|$1 wersija|$1 wersiji|$1 wersije}} wót $2", "javascripttest": "JavaScriptowy test", - "javascripttest-pagetext-noframework": "Toś ten bok jo pśewjedowanjeju javascriptowych testow pśewóstajony.", - "javascripttest-pagetext-unknownframework": "Njeznaty wobłuk \"$1\".", - "javascripttest-pagetext-frameworks": "Pšosym wubjeŕ jaden ze slědujucych testowańskich wobłukow: $1", - "javascripttest-pagetext-skins": "Wubjeŕ drastwu za pśewjeźenje testow:", "javascripttest-qunit-intro": "Glědaj [$1 testowańsku dokumentaciju] na mediawiki.org.", "tooltip-pt-userpage": "Twój wužywarski bok", "tooltip-pt-anonuserpage": "Wužywarski bok za IP-adresu, z kótarejuž bok wobźěłajoš", @@ -2381,8 +2375,8 @@ "exif-colorspace": "Barwowy rum", "exif-componentsconfiguration": "Wóznam jadnotliwych komponentow", "exif-compressedbitsperpixel": "Kompriměrowane bity na piksel", - "exif-pixelydimension": "Šyrokosć wobraza", - "exif-pixelxdimension": "Wusokosć wobraza", + "exif-pixelxdimension": "Šyrokosć wobraza", + "exif-pixelydimension": "Wusokosć wobraza", "exif-usercomment": "Komentary wužywarja", "exif-relatedsoundfile": "Pśisłušna zukowa dataja", "exif-datetimeoriginal": "Datum a cas wutwórjenja datow", @@ -2814,7 +2808,6 @@ "version-entrypoints-header-entrypoint": "Zastupny dypk", "version-entrypoints-header-url": "URL", "redirect": "Pó datajowem mjenju, wužywarju, boku abo wersijowem ID dalej pósrědniś", - "redirect-legend": "Do dataje abo boka dalej pósrědniś", "redirect-summary": "Toś ten specialny bok pósrědnja se do dataje (datajowe mě jo pódane), boka (wersijowy ID abo ID boka jo pódany) abo wužywarskego boka (numeriski wužywarski ID jo pódany) dalej. Wužyśe:\n[[{{#Special:Redirect}}/file/Pśikład.jpg]], [[{{#Special:Redirect}}/page/64308]],[[{{#Special:Redirect}}/revision/328429]] abo [[{{#Special:Redirect}}/user/101]].", "redirect-submit": "Pytaś", "redirect-lookup": "Pytaś:", @@ -2826,7 +2819,6 @@ "redirect-not-exists": "Gódnota njejo se namakała", "fileduplicatesearch": "Za duplikatnymi datajami pytaś", "fileduplicatesearch-summary": "Za datajowymi duplikatami na zakłaźe gótnoty hash pytaś.", - "fileduplicatesearch-legend": "pytaś duplikata", "fileduplicatesearch-filename": "Datajowe mě:", "fileduplicatesearch-submit": "Pytaś", "fileduplicatesearch-info": "$1 × $2 Piksel
wjelikosć dataja: $3
typ MIME: $4", diff --git a/languages/i18n/el.json b/languages/i18n/el.json index 16d8c33aad..5b96993ed8 100644 --- a/languages/i18n/el.json +++ b/languages/i18n/el.json @@ -45,7 +45,8 @@ "Stam.nikos", "Giorgos456", "SucreRouge", - "Gts-tg" + "Gts-tg", + "Nemo bis" ] }, "tog-underline": "Υπογράμμιση συνδέσμων:", @@ -1329,7 +1330,7 @@ "recentchangeslinked-page": "Όνομα σελίδας:", "recentchangeslinked-to": "Εμφάνιση αλλαγών σε σελίδες συνδεδεμένες με την δεδομένη σελίδα αντί αυτής", "recentchanges-page-added-to-category": "Η σελίδα [[:$1]] προστέθηκε στην κατηγορία", - "recentchanges-page-added-to-category-bundled": "Η σελίδα [[:$1]] και {{PLURAL:$2|μία ακόμα σελίδα|$2 ακόμα σελίδες}} προστέθηκαν στην κατηγορία", + "recentchanges-page-added-to-category-bundled": "Η σελίδα [[:$1]] και [[Special:WhatLinksHere/$1|{{PLURAL:$2|μία ακόμα σελίδα|$2 ακόμα σελίδες}}]] προστέθηκαν στην κατηγορία", "recentchanges-page-removed-from-category": "Η σελίδα [[:$1]] αφαιρέθηκε από την κατηγορία", "recentchanges-page-removed-from-category-bundled": "Η σελίδα [[:$1]] και {{PLURAL:$2|μία ακόμα σελίδα|$2 ακόμα σελίδες}} αφαιρέθηκαν από την κατηγορία", "autochange-username": "Αυτόματη αλλαγή MediaWiki", @@ -1810,8 +1811,6 @@ "categories-submit": "Εμφάνιση", "categoriespagetext": "Οι ακόλουθες {{PLURAL:$1|κατηγορία περιέχει|κατηγορίες περιέχουν}} σελίδες ή μέσα.\nΟι [[Special:UnusedCategories|αχρησιμοποίητες κατηγορίες]] δεν εμφανίζονται εδώ.\nΔείτε επίσης τις [[Special:WantedCategories|ζητούμενες κατηγορίες]].", "categoriesfrom": "Εμφάνιση κατηγοριών που αρχίζουν από:", - "special-categories-sort-count": "ταξινόμηση κατά απαρίθμηση", - "special-categories-sort-abc": "αλφαβητική ταξινόμηση", "deletedcontributions": "Διαγεγραμμένες συνεισφορές χρήστη", "deletedcontributions-title": "Διαγεγραμμένες συνεισφορές χρήστη", "sp-deletedcontributions-contribs": "συνεισφορές", @@ -2425,11 +2424,7 @@ "import-logentry-upload-detail": "{{PLURAL:$1|Εισήχθη $1 αναθεώρηση|Εισήχθησαν $1 αναθεωρήσεις}}", "import-logentry-interwiki-detail": "{{PLURAL:$1|Εισήχθη $1 αναθεώρηση|Εισήχθησαν $1 αναθεωρήσεις}} από $2", "javascripttest": "Δοκιμή JavaScript", - "javascripttest-pagetext-noframework": "Αυτή η σελίδα είναι δεσμευμένη για την εκτέλεση δοκιμών σε JavaScript.", - "javascripttest-pagetext-unknownframework": "Άγνωστο πλαίσιο δοκιμών \" $1 \".", "javascripttest-pagetext-unknownaction": "Άγνωστη ενέργεια «$1».", - "javascripttest-pagetext-frameworks": "Παρακαλώ επιλέξτε ένα από τα ακόλουθα πλαίσια δοκιμών: $1", - "javascripttest-pagetext-skins": "Επιλέξτε ένα skin για να εκτελέσετε δοκιμές με αυτό:", "javascripttest-qunit-intro": "Ανατρέξτε στην ενότητα [ $1 τεκμηρίωση δοκιμών] στο mediawiki.org.", "tooltip-pt-userpage": "Η σελίδα {{GENDER:|χρήστη σας|χρήστριας σας}}", "tooltip-pt-anonuserpage": "Η σελίδα χρήστη στον οποίο αντιστοιχεί η διεύθυνση IP που έχετε", @@ -2686,8 +2681,8 @@ "exif-colorspace": "Χρωματική περιοχή", "exif-componentsconfiguration": "Νόημα του κάθε στοιχείου", "exif-compressedbitsperpixel": "Κατάσταση συμπίεσης εικόνας", - "exif-pixelydimension": "Πλάτος εικόνας", - "exif-pixelxdimension": "Ύψος εικόνας", + "exif-pixelxdimension": "Πλάτος εικόνας", + "exif-pixelydimension": "Ύψος εικόνας", "exif-usercomment": "Σχόλια χρήστη", "exif-relatedsoundfile": "Σχετικό αρχείο ήχου", "exif-datetimeoriginal": "Ημερομηνία και ώρα της παραγωγής ψηφιακών δεδομένων", @@ -3128,7 +3123,6 @@ "version-libraries-description": "Περιγραφή", "version-libraries-authors": "Δημιουργοί", "redirect": "Ανακατεύθυνση κατά αρχείο, χρήστη, σελίδα ή αναγνωριστικό αναθεώρησης", - "redirect-legend": "Ανακατεύθυνση σε ένα αρχείο ή μια σελίδα", "redirect-submit": "Μετάβαση", "redirect-lookup": "Αναζήτηση:", "redirect-value": "Τιμή:", @@ -3139,7 +3133,6 @@ "redirect-not-exists": "Η τιμή δε βρέθηκε", "fileduplicatesearch": "Αναζήτηση για διπλά αρχεία", "fileduplicatesearch-summary": "Αναζήτηση για διπλά αρχεία με βάση την τιμή hash του αρχείου.", - "fileduplicatesearch-legend": "Αναζήτηση για διπλό αρχείο", "fileduplicatesearch-filename": "Όνομα αρχείου:", "fileduplicatesearch-submit": "Αναζήτηση", "fileduplicatesearch-info": "$1 × $2 πίξελ
Μέγεθος αρχείου: $3
Τύπος MIME: $4", diff --git a/languages/i18n/en.json b/languages/i18n/en.json index 5b32b978df..f2cdbe2dad 100644 --- a/languages/i18n/en.json +++ b/languages/i18n/en.json @@ -18,6 +18,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", @@ -143,7 +144,6 @@ "moredotdotdot": "More...", "morenotlisted": "This list is not complete.", "mypage": "Page", - "anonuserpage": "Unknown user", "mytalk": "Talk", "anontalk": "Talk", "navigation": "Navigation", @@ -488,7 +488,7 @@ "noemail": "There is no email address recorded for user \"$1\".", "noemailcreate": "You need to provide a valid email address.", "passwordsent": "A new password has been sent to the email address registered for \"$1\".\nPlease log in again after you receive it.", - "blocked-mailpassword": "Your IP address is blocked from editing, and so is not allowed to use the password recovery function to prevent abuse.", + "blocked-mailpassword": "Your IP address is blocked from editing. To prevent abuse, it is not allowed to use password recovery from this IP address.", "eauthentsent": "A confirmation email has been sent to the specified email address.\nBefore any other email is sent to the account, you will have to follow the instructions in the email, to confirm that the account is actually yours.", "throttled-mailpassword": "A password reset email has already been sent, within the last {{PLURAL:$1|hour|$1 hours}}.\nTo prevent abuse, only one password reset email will be sent per {{PLURAL:$1|hour|$1 hours}}.", "signupstart": "", @@ -1378,9 +1378,9 @@ "recentchangeslinked-page": "Page name:", "recentchangeslinked-to": "Show changes to pages linked to the given page instead", "recentchanges-page-added-to-category": "[[:$1]] added to category", - "recentchanges-page-added-to-category-bundled": "[[:$1]] and {{PLURAL:$2|one page|$2 pages}} added to category", + "recentchanges-page-added-to-category-bundled": "[[:$1]] added to category, [[Special:WhatLinksHere/$1|this page is included within other pages]]", "recentchanges-page-removed-from-category": "[[:$1]] removed from category", - "recentchanges-page-removed-from-category-bundled": "[[:$1]] and {{PLURAL:$2|one page|$2 pages}} removed from category", + "recentchanges-page-removed-from-category-bundled": "[[:$1]] removed from category, [[Special:WhatLinksHere/$1|this page is included within other pages]]", "autochange-username": "MediaWiki automatic change", "upload": "Upload file", "uploadbtn": "Upload file", @@ -1562,9 +1562,10 @@ "uploadstash-summary": "This page provides access to files that are uploaded or in the process of uploading, but are not yet published to the wiki. These files are not visible to anyone but the user who uploaded them.", "uploadstash-clear": "Clear stashed files", "uploadstash-nofiles": "You have no stashed files.", - "uploadstash-badtoken": "Performing that action failed. Perhaps because your editing credentials expired. Please try again.", + "uploadstash-badtoken": "Performing that action failed, perhaps because your editing credentials expired. Please try again.", "uploadstash-errclear": "Clearing the files failed.", "uploadstash-refresh": "Refresh the list of files", + "uploadstash-thumbnail": "view thumbnail", "invalid-chunk-offset": "Invalid chunk offset", "img-auth-accessdenied": "Access denied", "img-auth-nopathinfo": "Missing PATH_INFO.\nYour server is not set up to pass this information.\nIt may be CGI-based and cannot support img_auth.\nSee https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Image_Authorization.", @@ -1932,8 +1933,6 @@ "categories-submit": "Show", "categoriespagetext": "The following {{PLURAL:$1|category contains|categories contain}} pages or media.\n[[Special:UnusedCategories|Unused categories]] are not shown here.\nAlso see [[Special:WantedCategories|wanted categories]].", "categoriesfrom": "Display categories starting at:", - "special-categories-sort-count": "sort by count", - "special-categories-sort-abc": "sort alphabetically", "deletedcontributions": "Deleted user contributions", "deletedcontributions-summary": "", "deletedcontributions-title": "Deleted user contributions", @@ -2300,7 +2299,7 @@ "unblock-summary": "", "blockip": "Block {{GENDER:$1|user}}", "blockip-legend": "Block user", - "blockiptext": "Use the form below to block write access from a specific IP address or username.\nThis should be done only to prevent vandalism, and in accordance with [[{{MediaWiki:Policy-url}}|policy]].\nFill in a specific reason below (for example, citing particular pages that were vandalized).\nYou can block IP ranges using the [https://en.wikipedia.org/wiki/Classless_Inter-Domain_Routing CIDR] syntax; the largest allowed range is /$1 for IPv4 and /$2 for IPv6.", + "blockiptext": "Use the form below to block write access from a specific IP address or username.\nThis should be done only to prevent vandalism, and in accordance with [[{{MediaWiki:Policy-url}}|policy]].\nFill in a specific reason below (for example, citing particular pages that were vandalized).\nYou can block IP address ranges using the [https://en.wikipedia.org/wiki/Classless_Inter-Domain_Routing CIDR] syntax; the largest allowed range is /$1 for IPv4 and /$2 for IPv6.", "ipaddressorusername": "IP address or username:", "ipbexpiry": "Expiration:", "ipbreason": "Reason:", @@ -2328,6 +2327,7 @@ "ipb-unblock": "Unblock a username or IP address", "ipb-blocklist": "View existing blocks", "ipb-blocklist-contribs": "Contributions for {{GENDER:$1|$1}}", + "ipb-blocklist-duration-left": "$1 left", "unblockip": "Unblock user", "unblockiptext": "Use the form below to restore write access to a previously blocked IP address or username.", "ipusubmit": "Remove this block", @@ -2392,7 +2392,7 @@ "unblock-hideuser": "You cannot unblock this user, as their username has been hidden.", "ipb_cant_unblock": "Error: Block ID $1 not found. It may have been unblocked already.", "ipb_blocked_as_range": "Error: The IP address $1 is not blocked directly and cannot be unblocked.\nIt is, however, blocked as part of the range $2, which can be unblocked.", - "ip_range_invalid": "Invalid IP range.", + "ip_range_invalid": "Invalid IP address range.", "ip_range_toolarge": "Range blocks larger than /$1 are not allowed.", "proxyblocker": "Proxy blocker", "proxyblockreason": "Your IP address has been blocked because it is an open proxy.\nPlease contact your Internet service provider or technical support of your organization and inform them of this serious security problem.", @@ -2579,14 +2579,7 @@ "import-logentry-interwiki": "transwikied $1", "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|revision|revisions}} imported from $2", "javascripttest": "JavaScript testing", - "javascripttest-backlink": "< $1", - "javascripttest-title": "$1", - "javascripttest-pagetext-noframework": "This page is reserved for running JavaScript tests.", - "javascripttest-pagetext-unknownframework": "Unknown testing framework \"$1\".", "javascripttest-pagetext-unknownaction": "Unknown action \"$1\".", - "javascripttest-pagetext-frameworks": "Please choose one of the following testing frameworks: $1", - "javascripttest-pagetext-skins": "Choose a skin to run the tests with:", - "javascripttest-qunit-name": "QUnit", "javascripttest-qunit-intro": "See [$1 testing documentation] on mediawiki.org.", "accesskey-pt-userpage": ".", "accesskey-pt-anonuserpage": ".", @@ -2979,8 +2972,8 @@ "exif-colorspace": "Color space", "exif-componentsconfiguration": "Meaning of each component", "exif-compressedbitsperpixel": "Image compression mode", - "exif-pixelydimension": "Image width", - "exif-pixelxdimension": "Image height", + "exif-pixelxdimension": "Image width", + "exif-pixelydimension": "Image height", "exif-usercomment": "User comments", "exif-relatedsoundfile": "Related audio file", "exif-datetimeoriginal": "Date and time of data generation", @@ -3346,6 +3339,10 @@ "confirmemail_body_set": "Someone, probably you, from IP address $1,\nhas set the email address of the account \"$2\" to this address on {{SITENAME}}.\n\nTo confirm that this account really does belong to you and activate\nemail features on {{SITENAME}}, open this link in your browser:\n\n$3\n\nIf the account does *not* belong to you, follow this link\nto cancel the email address confirmation:\n\n$5\n\nThis confirmation code will expire at $4.", "confirmemail_invalidated": "Email address confirmation canceled", "invalidateemail": "Cancel email confirmation", + "notificationemail_subject_changed": "{{SITENAME}} registered email address has been changed", + "notificationemail_subject_removed": "{{SITENAME}} registered email address has been removed", + "notificationemail_body_changed": "Someone, probably you, from IP address $1,\nhas changed the email address of the account \"$2\" to \"$3\" on {{SITENAME}}.\n\nIf this was not you, contact a site administrator immediately.", + "notificationemail_body_removed": "Someone, probably you, from IP address $1,\nhas removed the email address of the account \"$2\" on {{SITENAME}}.\n\nIf this was not you, contact a site administrator immediately.", "scarytranscludedisabled": "[Interwiki transcluding is disabled]", "scarytranscludefailed": "[Template fetch failed for $1]", "scarytranscludefailed-httpstatus": "[Template fetch failed for $1: HTTP $2]", @@ -3440,7 +3437,7 @@ "watchlistedit-raw-done": "Your watchlist has been updated.", "watchlistedit-raw-added": "{{PLURAL:$1|1 title was|$1 titles were}} added:", "watchlistedit-raw-removed": "{{PLURAL:$1|1 title was|$1 titles were}} removed:", - "watchlistedit-clear-title": "Cleared watchlist", + "watchlistedit-clear-title": "Clear watchlist", "watchlistedit-clear-legend": "Clear watchlist", "watchlistedit-clear-explain": "All of the titles will be removed from your watchlist", "watchlistedit-clear-titles": "Titles:", @@ -3571,7 +3568,6 @@ "version-libraries-description": "Description", "version-libraries-authors": "Authors", "redirect": "Redirect by file, user, page, revision, or log ID", - "redirect-legend": "Redirect to a file or page", "redirect-text": "", "redirect-summary": "This special page redirects to a file (given the filename), a page (given a revision ID or page ID), a user page (given a numeric user ID), or a log entry (given the log ID). Usage: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/page/64308]], [[{{#Special:Redirect}}/revision/328429]], [[{{#Special:Redirect}}/user/101]], or [[{{#Special:Redirect}}/logid/186]].", "redirect-submit": "Go", @@ -3585,7 +3581,6 @@ "redirect-not-exists": "Value not found", "fileduplicatesearch": "Search for duplicate files", "fileduplicatesearch-summary": "Search for duplicate files based on hash values.", - "fileduplicatesearch-legend": "Search for a duplicate", "fileduplicatesearch-filename": "Filename:", "fileduplicatesearch-submit": "Search", "fileduplicatesearch-info": "$1 × $2 pixel
File size: $3
MIME type: $4", @@ -3792,7 +3787,7 @@ "logentry-protect-protect-cascade": "$1 {{GENDER:$2|protected}} $3 $4 [cascading]", "logentry-protect-modify": "$1 {{GENDER:$2|changed}} protection level for $3 $4", "logentry-protect-modify-cascade": "$1 {{GENDER:$2|changed}} protection level for $3 $4 [cascading]", - "logentry-rights-rights": "$1 {{GENDER:$2|changed}} group membership for $3 from $4 to $5", + "logentry-rights-rights": "$1 {{GENDER:$2|changed}} group membership for {{GENDER:$3|$3}} from $4 to $5", "logentry-rights-rights-legacy": "$1 {{GENDER:$2|changed}} group membership for $3", "logentry-rights-autopromote": "$1 was automatically {{GENDER:$2|promoted}} from $4 to $5", "logentry-upload-upload": "$1 {{GENDER:$2|uploaded}} $3", @@ -3907,6 +3902,7 @@ "api-error-unknownerror": "Unknown error: \"$1\".", "api-error-uploaddisabled": "Uploading is disabled on this wiki.", "api-error-verification-error": "This file might be corrupt, or have the wrong extension.", + "api-error-was-deleted": "A file of this name has been previously uploaded and subsequently deleted.", "duration-seconds": "$1 {{PLURAL:$1|second|seconds}}", "duration-minutes": "$1 {{PLURAL:$1|minute|minutes}}", "duration-hours": "$1 {{PLURAL:$1|hour|hours}}", @@ -4002,6 +3998,7 @@ "special-characters-group-ipa": "IPA", "special-characters-group-symbols": "Symbols", "special-characters-group-greek": "Greek", + "special-characters-group-greekextended": "Greek extended", "special-characters-group-cyrillic": "Cyrillic", "special-characters-group-arabic": "Arabic", "special-characters-group-arabicextended": "Arabic extended", @@ -4029,5 +4026,54 @@ "sessionprovider-generic": "$1 sessions", "sessionprovider-mediawiki-session-cookiesessionprovider": "cookie-based sessions", "sessionprovider-nocookies": "Cookies may be disabled. Ensure you have cookies enabled and start again.", - "randomrootpage": "Random root page" + "randomrootpage": "Random root page", + "log-action-filter-block": "Type of block:", + "log-action-filter-contentmodel": "Type of contentmodel modification:", + "log-action-filter-delete": "Type of deletion:", + "log-action-filter-import": "Type of import:", + "log-action-filter-managetags": "Type of tag management action:", + "log-action-filter-move": "Type of move:", + "log-action-filter-newusers": "Type of account creation:", + "log-action-filter-patrol": "Type of patrol:", + "log-action-filter-protect": "Type of protection:", + "log-action-filter-rights": "Type of right change", + "log-action-filter-suppress": "Type of suppression", + "log-action-filter-upload": "Type of upload:", + "log-action-filter-all": "All", + "log-action-filter-block-block": "Block", + "log-action-filter-block-reblock": "Block modification", + "log-action-filter-block-unblock": "Unblock", + "log-action-filter-contentmodel-change": "Change of Contentmodel", + "log-action-filter-contentmodel-new": "Creation of page with non-standard Contentmodel", + "log-action-filter-delete-delete": "Page deletion", + "log-action-filter-delete-restore": "Page undeletion", + "log-action-filter-delete-event": "Log deletion", + "log-action-filter-delete-revision": "Revision deletion", + "log-action-filter-import-interwiki": "Transwiki import", + "log-action-filter-import-upload": "Import by XML upload", + "log-action-filter-managetags-create": "Tag creation", + "log-action-filter-managetags-delete": "Tag deletion", + "log-action-filter-managetags-activate": "Tag activation", + "log-action-filter-managetags-deactivate": "Tag deactivation", + "log-action-filter-move-move": "Move without overwriting of redirects", + "log-action-filter-move-move_redir": "Move with overwriting of redirects", + "log-action-filter-newusers-create": "Creation by anonymous user", + "log-action-filter-newusers-create2": "Creation by registered user", + "log-action-filter-newusers-autocreate": "Automatic creation", + "log-action-filter-newusers-byemail": "Creation with password sent by e-mail", + "log-action-filter-patrol-patrol": "Manual patrol", + "log-action-filter-patrol-autopatrol": "Automatic patrol", + "log-action-filter-protect-protect": "Protection", + "log-action-filter-protect-modify": "Protection modification", + "log-action-filter-protect-unprotect": "Unprotection", + "log-action-filter-protect-move_prot": "Moved protection", + "log-action-filter-rights-rights": "Manual change", + "log-action-filter-rights-autopromote": "Automatic change", + "log-action-filter-suppress-event": "Log suppression", + "log-action-filter-suppress-revision": "Revision suppression", + "log-action-filter-suppress-delete": "Page suppression", + "log-action-filter-suppress-block": "User supppression by block", + "log-action-filter-suppress-reblock": "User suppression by reblock", + "log-action-filter-upload-upload": "New upload", + "log-action-filter-upload-overwrite": "Reupload" } diff --git a/languages/i18n/eo.json b/languages/i18n/eo.json index 44f361ef44..46d2669e71 100644 --- a/languages/i18n/eo.json +++ b/languages/i18n/eo.json @@ -104,13 +104,13 @@ "thursday": "ĵaŭdo", "friday": "vendredo", "saturday": "sabato", - "sun": "Dim", - "mon": "Lun", - "tue": "Mar", + "sun": "dim", + "mon": "lun", + "tue": "mar", "wed": "Mer", "thu": "Ĵaŭ", "fri": "Ven", - "sat": "Sab", + "sat": "sab", "january": "januaro", "february": "februaro", "march": "marto", @@ -135,18 +135,18 @@ "october-gen": "oktobro", "november-gen": "novembro", "december-gen": "decembro", - "jan": "Jan", - "feb": "Feb", - "mar": "Mar", - "apr": "Apr", - "may": "Maj", - "jun": "Jun", - "jul": "Jul", - "aug": "Aŭg", - "sep": "Sep", - "oct": "Okt", - "nov": "Nov", - "dec": "Dec", + "jan": "jan", + "feb": "feb", + "mar": "mar", + "apr": "apr", + "may": "maj", + "jun": "jun", + "jul": "jul", + "aug": "aŭg", + "sep": "sep", + "oct": "okt", + "nov": "nov", + "dec": "dec", "january-date": "$1-a de januaro", "february-date": "$1-a de februaro", "march-date": "$1-a de marto", @@ -189,7 +189,7 @@ "anontalk": "Diskuto", "navigation": "Navigado", "and": " kaj", - "qbfind": "Trovi", + "qbfind": "Serĉi", "qbbrowse": "Foliumi", "qbedit": "Redakti", "qbpageoptions": "Ĉi tiu paĝo", @@ -207,7 +207,7 @@ "search": "Serĉi", "searchbutton": "Serĉi", "go": "Ek!", - "searcharticle": "Ek!", + "searcharticle": "Ek", "history": "Historio de versioj", "history_short": "Historio", "updatedmarker": "ĝisdatigita de post mia lasta vizito", @@ -234,7 +234,7 @@ "unprotectthispage": "Ŝanĝi protektadon de ĉi tiu paĝo", "newpage": "Nova paĝo", "talkpage": "Diskuti la paĝon", - "talkpagelinktext": "Diskuto", + "talkpagelinktext": "diskuto", "specialpage": "Speciala Paĝo", "personaltools": "Personaj iloj", "articlepage": "Rigardi artikolon", @@ -272,7 +272,7 @@ "copyrightpage": "{{ns:project}}:Aŭtorrajto", "currentevents": "Aktualaĵoj", "currentevents-url": "Project:Aktualaĵoj", - "disclaimers": "Malgarantio", + "disclaimers": "Malgarantioj", "disclaimerpage": "Project:Malgarantia paĝo", "edithelp": "Helpo pri redaktado", "helppage-top-gethelp": "Helpo", @@ -430,7 +430,7 @@ "createacct-yourpasswordagain": "Konfirmu pasvorton", "createacct-yourpasswordagain-ph": "Retajpu pasvorton", "remembermypassword": "Memori mian ensalutadon ĉe ĉi tiu komputilo (daŭrante maksimume $1 {{PLURAL:$1|tagon|tagojn}})", - "userlogin-remembermypassword": "Memoru mian ensaluton", + "userlogin-remembermypassword": "Memori mian ensaluton", "userlogin-signwithsecure": "Uzu sekurigitan konekton", "cannotloginnow-title": "Nuntempe ne eblas ensaluti", "cannotloginnow-text": "Ne eblas ensaluti dum uzado de $1.", @@ -448,7 +448,7 @@ "userlogin-joinproject": "Aliĝu al {{SITENAME}}", "nologin": "Ĉu vi ne havas konton? $1.", "nologinlink": "Krei konton", - "createaccount": "Krei novan konton", + "createaccount": "Krei konton", "gotaccount": "Ĉu vi jam havas konton? '''$1'''.", "gotaccountlink": "Ensaluti", "userlogin-resetlink": "Ĉu vi forgesis ensalutajn detalojn?", @@ -481,7 +481,7 @@ "nocookieslogin": "{{SITENAME}} uzas kuketojn por akcepti uzantojn. Kuketoj esta malaktivigitaj ĉe vi. Bonvolu aktivigi ilin kaj provu denove.", "nocookiesfornew": "La uzantokonto ne estis kreita, ĉar ne konfirmeblas ĝia fonto. Certiginte ke kuketoj estas ebligitaj, reŝargu tiun ĉi paĝon kaj reprovu.", "noname": "Vi ne tajpis validan salutnomon.", - "loginsuccesstitle": "Ensalutado sukcesis", + "loginsuccesstitle": "Ensalutis", "loginsuccess": "Vi ensalutis ĉe {{SITENAME}} kiel uzanto \"$1\".", "nosuchuser": "Neniu uzanto havas nomon \"$1\".\nNomoj por uzantoj estas usklecodistingaj.\nKontrolu vian literumadon, aŭ [[Special:UserLogin/signup|kreu novan konton]].", "nosuchusershort": "Ne ekzistas uzanto kun la nomo \"$1\". Bonvolu kontroli vian ortografion.", @@ -524,7 +524,7 @@ "createacct-another-realname-tip": "La vera nomo estas nenecesa.\nSe vi decidas indiki ĝin, ĝi estos uzata por montri atribuadon de viaj kontribuoj.", "pt-login": "Ensaluti", "pt-login-button": "Ensaluti", - "pt-createaccount": "Krei novan konton", + "pt-createaccount": "Krei konton", "pt-userlogout": "Elsaluti", "php-mail-error-unknown": "Nekonata eraro en la funkcio mail() de PHP", "user-mail-no-addy": "Provis sendi retpoŝton sen retpoŝtadreso.", @@ -554,12 +554,14 @@ "botpasswords-label-resetpassword": "Rekomencigi la pasvorton", "botpasswords-label-restrictions": "Limigoj de uzado:", "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?", + "botpasswords-update-failed": "Ĝisdatigo de la robota nomo \"$1\" ne sukcesis. Ĉu ĝi estis forigita?", "botpasswords-created-title": "Robota pasvorto kreita", - "botpasswords-created-body": "La robota pasvorto \"$1\" estis sukcese kreita.", + "botpasswords-created-body": "La robota pasvorto por robota nomo \"$1\" de la uzanto \"$2\" estis kreita.", "botpasswords-updated-title": "Robota pasvorto ĝisdatigita", - "botpasswords-updated-body": "La robota pasvorto \"$1\" estis sukcese ĝisdatigita.", + "botpasswords-updated-body": "La robota pasvorto por robota nomo \"$1\" de la uzanto \"$2\" estis ĝisdatigita.", "botpasswords-deleted-title": "Robota pasvorto forigita", - "botpasswords-deleted-body": "La robota pasvorto \"$1\" estis forigita.", + "botpasswords-deleted-body": "La robota pasvorto por robota nomo \"$1\" de la uzanto \"$2\" estis forigita.", "resetpass_forbidden": "Pasvortoj ne estas ŝanĝeblaj", "resetpass-no-info": "Vi devas ensaluti por atingi ĉi tiun paĝon rekte.", "resetpass-submit-loggedin": "Ŝanĝi pasvorton", @@ -613,7 +615,7 @@ "bold_tip": "Grasa teksto", "italic_sample": "Kursiva teksto", "italic_tip": "Kursiva teksto", - "link_sample": "Ligtitolo", + "link_sample": "Titolo de la ligilo", "link_tip": "Interna ligilo", "extlink_sample": "http://www.example.com ligtitolo", "extlink_tip": "Ekstera ligilo (memoru http:// prefikson)", @@ -878,6 +880,9 @@ "mergehistory-empty": "Neniuj versioj estas kunigeblaj.", "mergehistory-done": "$3 {{PLURAL:$3|versio|versioj}} de $1 sukcese estis {{PLURAL:$3|kunigita|kunigitaj}} en [[:$2]].", "mergehistory-fail": "Ne povis fari la historian kunigon; bonvolu konstati la paĝajn kaj tempajn parametrojn.", + "mergehistory-fail-bad-timestamp": "Tempomarko estas malvalida.", + "mergehistory-fail-invalid-source": "Fonta paĝo estas malvalida.", + "mergehistory-fail-invalid-dest": "Cela paĝo estas malvalida.", "mergehistory-fail-toobig": "Ne eblas kunigi historiojn ĉar pli ol sojlo de $1 {{PLURAL:$1|revizio|revizioj}} estus {{PLURAL:$1|movita|movitaj}}.", "mergehistory-no-source": "Fontpaĝo $1 ne ekzistas.", "mergehistory-no-destination": "Celpaĝo $1 ne ekzistas.", @@ -920,7 +925,7 @@ "searchmenu-new": "Krei la paĝon \"[[:$1]]\" en ĉi tiu vikio!{{PLURAL:$2|0=|Vidu ankaŭ la paĝon trovitan per via serĉo.|Vidu ankaŭ la trovitajn serĉrezultojn.}}", "searchprofile-articles": "Enhavaj paĝoj", "searchprofile-images": "Plurmedio", - "searchprofile-everything": "Ĉio", + "searchprofile-everything": "Ĉion", "searchprofile-advanced": "Progresa", "searchprofile-articles-tooltip": "Serĉo en $1", "searchprofile-images-tooltip": "Serĉi dosierojn", @@ -1174,6 +1179,8 @@ "right-managechangetags": "Kreado kaj forigado de [[Special:Tags|etikedoj]] de datumbazo", "right-applychangetags": "Aldoni [[Special:Tags|etikedojn]] al propraj ŝanĝoj", "right-changetags": "Aldoni kaj forigi arbitrajn [[Special:Tags|etikedojn]] ĉe unuopaj revizioj kaj protokoleroj", + "grant-group-email": "Sendi retpoŝton", + "grant-createaccount": "Krei kontojn", "newuserlogpage": "Protokolo de uzanto-kreado", "newuserlogpagetext": "Jen protokolo de lastaj kreadoj de uzantoj.", "rightslog": "Protokolo de uzanto-rajtoj", @@ -1241,7 +1248,7 @@ "recentchanges-submit": "Montri", "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 redaktetojn", + "rcshowhideminor": "$1 etajn redaktojn", "rcshowhideminor-show": "Montri", "rcshowhideminor-hide": "Kaŝi", "rcshowhidebots": "$1 robotojn", @@ -1277,9 +1284,9 @@ "rc-enhanced-expand": "Montri detalojn (per JavaScript)", "rc-enhanced-hide": "Kaŝi detalojn", "rc-old-title": "originale kreita kiel \"$1\"", - "recentchangeslinked": "Rilataj paĝoj", + "recentchangeslinked": "Rilataj ŝanĝoj", "recentchangeslinked-feed": "Rilataj paĝoj", - "recentchangeslinked-toolbox": "Rilataj paĝoj", + "recentchangeslinked-toolbox": "Rilataj ŝanĝoj", "recentchangeslinked-title": "Ŝanĝoj rilataj al \"$1\"", "recentchangeslinked-summary": "Jen listo de ŝanĝoj faritaj lastatempe al paĝoj ligitaj el specifa paĝo (aŭ al membroj de specifa kategorio).\nPaĝoj en [[Special:Watchlist|via atentaro]] estas '''grasaj'''.", "recentchangeslinked-page": "Nomo de paĝo:", @@ -1488,7 +1495,7 @@ "filehist-deleteone": "forigi", "filehist-revert": "restarigi", "filehist-current": "nuna", - "filehist-datetime": "Dato/Tempo", + "filehist-datetime": "Dato/tempo", "filehist-thumb": "Bildeto", "filehist-thumbtext": "Bildeto por versio ekde $1", "filehist-nothumb": "Neniu bildeto", @@ -1560,7 +1567,7 @@ "randomincategory-submit": "Ek!", "randomredirect": "Hazarda alidirekto", "randomredirect-nopages": "Estas neniuj alidirektiloj en la nomspaco \"$1\".", - "statistics": "Statistiko", + "statistics": "Statistikoj", "statistics-header-pages": "Paĝaj statistikoj", "statistics-header-edits": "Redaktaj statistikoj", "statistics-header-users": "Pri la uzantaro", @@ -1686,11 +1693,15 @@ "apisandbox-intro": "Uzu tiun ĉi paĝon por eksperimenti kun '''MediaWiki API'''.\nVidu [//www.mediawiki.org/wiki/API:Main_page la API-dokumentadon] por pli da detaloj pri la uzo de API. Ekz-e: [//www.mediawiki.org/wiki/API#A_simple_example atingi la enhavon de la Ĉefpaĝo]. Elektu agon por vidi pliajn ekzemplojn.\n\nNotu ke, kvankam ĉi tiu estas provejo, agoj kiun vi faros en ĉi tiu paĝo povas modifi la vikion.", "apisandbox-submit": "Fari mendon", "apisandbox-reset": "Nuligi", - "apisandbox-examples": "Ekzemplo", - "apisandbox-results": "Rezulto", + "apisandbox-examples": "Ekzemploj", + "apisandbox-dynamic-parameters": "Aldonaj parametroj", + "apisandbox-dynamic-parameters-add-label": "Aldoni parametron:", + "apisandbox-dynamic-parameters-add-placeholder": "Nomo de parametro", + "apisandbox-dynamic-error-exists": "Parametro nomata \"$1\" jam ekzistas.", + "apisandbox-results": "Rezultoj", "apisandbox-request-url-label": "Mendi URL-on.", "apisandbox-request-time": "Tempo de peto: $1", - "booksources": "Libroservoj", + "booksources": "Librofontoj", "booksources-search-legend": "Serĉi librofontojn", "booksources-search": "Serĉi", "booksources-text": "Jen ligilaro al aliaj TTT-ejoj, kiuj vendas librojn,\nkaj/aŭ informumos pri la libro ligita.\nLa {{SITENAME}} ne estas komerce ligita al tiuj vendejoj, kaj la listo ne estu\nkomprenata kiel rekomendo aŭ reklamo.", @@ -1705,6 +1716,10 @@ "log-title-wildcard": "Serĉi titolojn komencantajn kun ĉi tiu teksto", "showhideselectedlogentries": "Montri/kaŝi elektitajn protokolerojn", "log-edit-tags": "Redakti etikedojn ĉe elektitaj protokoleroj", + "checkbox-select": "Elektu: $1", + "checkbox-all": "Ĉiuj", + "checkbox-none": "Neniu", + "checkbox-invert": "Inversigi", "allpages": "Ĉiuj paĝoj", "nextpage": "Sekvanta paĝo ($1)", "prevpage": "Antaŭa paĝo ($1)", @@ -1712,7 +1727,7 @@ "allpagesto": "Montri paĝoj finante de:", "allarticles": "Ĉiuj paĝoj", "allinnamespace": "Ĉiuj paĝoj ($1 nomspaco)", - "allpagessubmit": "Ek!", + "allpagessubmit": "Ek", "allpagesprefix": "Montri paĝojn kun prefikso:", "allpagesbadtitle": "La donata paĝo estis nevalida aŭ havis interlingvan aŭ intervikian prefikson. Ĝi eble enhavas unu aŭ plurajn signojn kiu ne povas esti uzataj en titoloj.", "allpages-bad-ns": "{{SITENAME}} ne havas nomspacon \"$1\".", @@ -1724,8 +1739,6 @@ "categories-submit": "Montri", "categoriespagetext": "La {{PLURAL:$1|jena kategorio|jenaj kategorioj}} ekzistas jam en la vikio.\n[[Special:UnusedCategories|Neuzataj kategorioj]] ne estis montrataj ĉi tie.\nVidu ankaŭ [[Special:WantedCategories|Dezirataj kategorioj]].", "categoriesfrom": "Montri kategoriojn komencante de:", - "special-categories-sort-count": "oridigi laŭ nombrado", - "special-categories-sort-abc": "ordigi laŭ alfabeto", "deletedcontributions": "Forigitaj kontribuoj de uzantoj", "deletedcontributions-title": "Forigitaj kontribuoj de uzantoj", "sp-deletedcontributions-contribs": "kontribuoj", @@ -1902,6 +1915,7 @@ "sessionfailure": "Ŝajnas, ke estas problemo kun via ensalutado;\nĈi ago estis nuligita por malhelpi fiensalutadon.\nBonvolu alklaki la reirbutonon kaj reŝargi la paĝon el kiu vi venas, kaj provu denove.", "changecontentmodel-title-label": "Titolo de paĝo", "changecontentmodel-reason-label": "Kialo:", + "changecontentmodel-submit": "Ŝanĝi", "logentry-contentmodel-change-revertlink": "restarigi", "logentry-contentmodel-change-revert": "restarigi", "protectlogpage": "Protokolo pri protektoj", @@ -2322,11 +2336,7 @@ "import-logentry-upload-detail": "$1 {{PLURAL:$1|revizio importita|revizioj importitaj}}", "import-logentry-interwiki-detail": "Importis $1 {{PLURAL:$1|revizion|reviziojn}} de $2", "javascripttest": "Ĝavoskripta testado", - "javascripttest-pagetext-noframework": "Ĉi tiu paĝo estas konservita por funkciigi testojn de JavaScript.", - "javascripttest-pagetext-unknownframework": "Nekonta test-framo \"$1\".", "javascripttest-pagetext-unknownaction": "Nekonata ago \"$1\".", - "javascripttest-pagetext-frameworks": "Bonvolu elekti unu el la jenaj test-framoj: $1", - "javascripttest-pagetext-skins": "Elektu kun kio etoso irigi la testojn:", "javascripttest-qunit-intro": "Vidu [$1 testa dokumentaro] en mediawiki.org.", "tooltip-pt-userpage": "Via uzantpaĝo", "tooltip-pt-anonuserpage": "La uzantopaĝo por la IP adreso sub kiu vi estas redaktanta", @@ -2353,9 +2363,9 @@ "tooltip-search": "Serĉi tra {{SITENAME}}", "tooltip-search-go": "Iru al paĝo kun ĉi preciza nomo se ĝi ekzistas", "tooltip-search-fulltext": "Serĉi la paĝojn por ĉi tiu teksto", - "tooltip-p-logo": "Ĉefpaĝo", - "tooltip-n-mainpage": "Viziti la Ĉefpaĝon", - "tooltip-n-mainpage-description": "Iri al la ĉefpaĝon", + "tooltip-p-logo": "Viziti la ĉefpaĝon", + "tooltip-n-mainpage": "Viziti la ĉefpaĝon", + "tooltip-n-mainpage-description": "Viziti la ĉefpaĝon", "tooltip-n-portal": "Pri la projekto, kion vi povas fari, kie vi povas trovi ion", "tooltip-n-currentevents": "Trovi fonajn informojn pri nunaj eventoj", "tooltip-n-recentchanges": "Listo de la lastaj ŝanĝoj en la vikio.", @@ -2368,7 +2378,7 @@ "tooltip-t-contributions": "Listo de kontribuoj de {{GENDER:$1|ĉi tiu uzanto}}", "tooltip-t-emailuser": "Sendi retmesaĝon al tiu ĉi uzanto", "tooltip-t-info": "Pli da informo pri ĉi tiu paĝo", - "tooltip-t-upload": "Alŝuti bildojn aŭ dosierojn", + "tooltip-t-upload": "Alŝuti dosierojn", "tooltip-t-specialpages": "Listo de ĉiuj specialaj paĝoj", "tooltip-t-print": "Printebla versio de ĉi tiu paĝo", "tooltip-t-permalink": "Konstanta ligilo al ĉi versio de la paĝo", @@ -2381,7 +2391,7 @@ "tooltip-ca-nstab-mediawiki": "Rigardi la sisteman mesaĝon", "tooltip-ca-nstab-template": "Rigardi la ŝablonon", "tooltip-ca-nstab-help": "Rigardi la helppaĝon", - "tooltip-ca-nstab-category": "Vidu la paĝon de kategorioj", + "tooltip-ca-nstab-category": "Vidi la paĝon de la kategorio", "tooltip-minoredit": "Marki tiun ŝanĝon kiel etan", "tooltip-save": "Konservi viajn ŝanĝojn", "tooltip-preview": "Antaŭrigardi viajn ŝanĝojn. Bonvolu uzi tion antaŭ ol konservi ilin!", @@ -2587,8 +2597,8 @@ "exif-colorspace": "Kolor-spaco", "exif-componentsconfiguration": "Signifo de ĉiu kompono", "exif-compressedbitsperpixel": "Reĝimo de bilda densigado", - "exif-pixelydimension": "Larĝeco de bildo", - "exif-pixelxdimension": "Alteco de bildo", + "exif-pixelxdimension": "Larĝeco de bildo", + "exif-pixelydimension": "Alteco de bildo", "exif-usercomment": "Komentoj de uzanto", "exif-relatedsoundfile": "Rilata son-dosiero", "exif-datetimeoriginal": "Dato kaj tempo de datuma generado", @@ -3081,7 +3091,6 @@ "version-libraries-description": "Priskribo", "version-libraries-authors": "Aŭtoroj", "redirect": "Alidirektilo laŭ dosiero, uzanto, paĝo aŭ identigilo de revizio.", - "redirect-legend": "Alidirektilo al dosiero aŭ paĝo", "redirect-summary": "Tiu ĉi paĝo alidirektas al dosiero (laŭ ĝia nomo), paĝo (laŭ ĝia revizio-numero aŭ paĝo-identigilo) aŭ al uzantopaĝo (laŭ numera uzanto-identigilo). Uzado: [[{{#Special:Redirect}}/file/Ekzemplo.jpg]], [[{{#Special:Redirect}}/page/64308]], [[{{#Special:Redirect}}/revision/328429]], aŭ [[{{#Special:Redirect}}/user/101]].", "redirect-submit": "Ek", "redirect-lookup": "Traserĉi:", @@ -3093,7 +3102,6 @@ "redirect-not-exists": "Valoro ne trovita", "fileduplicatesearch": "Serĉu duplikatajn dosierojn", "fileduplicatesearch-summary": "Serĉi duplikatajn dosierojn bazite de haketvaloro.", - "fileduplicatesearch-legend": "Serĉi duplikaton", "fileduplicatesearch-filename": "Dosiernomo:", "fileduplicatesearch-submit": "Serĉi", "fileduplicatesearch-info": "$1 × $2 rastrumero
Dosiera pezo: $3
MIME-tipo: $4", diff --git a/languages/i18n/es.json b/languages/i18n/es.json index ba5efa055c..4339c3f59d 100644 --- a/languages/i18n/es.json +++ b/languages/i18n/es.json @@ -137,7 +137,9 @@ "YoViajo", "Asierog", "Mgpena", - "Transonlohk" + "Transonlohk", + "Eloy", + "Lemondoge" ] }, "tog-underline": "Subrayar los enlaces:", @@ -155,6 +157,7 @@ "tog-watchdefault": "Añadir las páginas y archivos que edite a mi lista de seguimiento", "tog-watchmoves": "Añadir las páginas y archivos que mueva a mi lista de seguimiento", "tog-watchdeletion": "Añadir las páginas y archivos que borre a mi lista de seguimiento", + "tog-watchuploads": "Agregar nuevos archivos puedo subir a mi lista de favoritos", "tog-watchrollback": "Añadir las páginas donde haya realizado una reversión a mi lista de seguimiento", "tog-minordefault": "Marcar todas las ediciones como menores de manera predeterminada", "tog-previewontop": "Mostrar previsualización antes del cuadro de edición", @@ -278,7 +281,6 @@ "moredotdotdot": "Más...", "morenotlisted": "Esta lista no está completa.", "mypage": "Página", - "anonuserpage": "Usuario desconocido", "mytalk": "Discusión", "anontalk": "Discusión", "navigation": "Navegación", @@ -366,7 +368,7 @@ "copyrightpage": "{{ns:project}}:Derechos de autor", "currentevents": "Actualidad", "currentevents-url": "Project:Actualidad", - "disclaimers": "Aviso legal", + "disclaimers": "Exoneraciones", "disclaimerpage": "Project:Descargo general", "edithelp": "Ayuda de edición", "helppage-top-gethelp": "Ayuda", @@ -414,6 +416,7 @@ "site-atom-feed": "Canal Atom de $1", "page-rss-feed": "Canal RSS «$1»", "page-atom-feed": "Canal Atom de «$1»", + "feed-atom": "Atom", "red-link-title": "$1 (la página no existe)", "sort-descending": "Orden descendente", "sort-ascending": "Orden ascendente", @@ -577,7 +580,7 @@ "nocookieslogin": "{{SITENAME}} utiliza cookies para la autenticación de usuarios. Las cookies están desactivadas en tu navegador. Por favor, actívalas e inténtalo de nuevo.", "nocookiesfornew": "No se pudo crear la cuenta de usuario, porque no pudimos confirmar su origen.\nAsegúrate de que tienes las cookies activadas, luego recarga esta página e inténtalo de nuevo.", "noname": "No se ha especificado un nombre de usuario válido.", - "loginsuccesstitle": "Has accedido correctamente", + "loginsuccesstitle": "Has accedido", "loginsuccess": "Has accedido a {{SITENAME}} como «$1».", "nosuchuser": "No existe ningún usuario llamado «$1».\nLos nombres de usuario son sensibles a las mayúsculas.\nRevisa tu ortografía, o [[Special:UserLogin/signup|crea una cuenta nueva]].", "nosuchusershort": "No existe ningún usuario llamado «$1». Comprueba que lo has escrito correctamente.", @@ -596,7 +599,7 @@ "noemail": "No hay una dirección de correo electrónico registrada para «$1».", "noemailcreate": "Necesitas proporcionar una dirección de correo electrónico válida.", "passwordsent": "Se ha enviado una nueva contraseña al correo electrónico de «$1».\nPor favor, identifícate de nuevo tras recibirla.", - "blocked-mailpassword": "Tu dirección IP está bloqueada, y no se te permite el uso de la función de recuperación de contraseñas para prevenir abusos.", + "blocked-mailpassword": "Tu dirección IP está bloqueada para editar. Para prevenir abusos, no se permite el uso de la función de recuperación de contraseñas desde esta dirección IP.", "eauthentsent": "Se ha enviado un correo electrónico de confirmación a la dirección especificada.\nAntes de que se envíe cualquier otro correo a la cuenta tienes que seguir las instrucciones enviadas en el mensaje para así confirmar que la dirección te pertenece.", "throttled-mailpassword": "Ya se ha enviado un recordatorio de contraseña en {{PLURAL:$1|la última hora|las últimas $1 horas}}.\nPara evitar los abusos, solo se enviará un recordatorio de contraseña cada {{PLURAL:$1|hora|$1 horas}}.", "mailerror": "Error al enviar el mensaje: $1", @@ -649,6 +652,7 @@ "botpasswords-label-delete": "Borrar", "botpasswords-label-resetpassword": "Restablecer la contraseña", "botpasswords-label-grants": "Permisos aplicables:", + "botpasswords-help-grants": "Cada concesión le da acceso a los permisos listados que el usuario ya posea. Véase la [[Special:ListGrants|lista de concesiones]] para más información.", "botpasswords-label-restrictions": "Restricciones de uso:", "botpasswords-label-grants-column": "Concedido", "botpasswords-bad-appid": "El nombre del bot \"$1\" no es válido.", @@ -786,7 +790,7 @@ "previewnote": "Recuerda que esto no es más que una previsualización.\nAún no se han guardado tus cambios.", "continue-editing": "Ir al área de edición", "previewconflict": "Esta previsualización muestra cómo aparecerá el texto en el área de edición superior una vez guardados los cambios.", - "session_fail_preview": "Lo sentimos, no hemos podido procesar tu edición debido a una pérdida de los datos de sesión.\nPor favor, inténtalo de nuevo.\nSi el problema persiste, prueba a [[Special:UserLogout|cerrar sesión]] y volver a acceder.", + "session_fail_preview": "Lo sentimos, no hemos podido procesar tu edición debido a una pérdida de los datos de sesión.\n\nPuede que se haya cerrado tu sesión. Verifica que hayas accedido e inténtalo de nuevo.\nSi el problema persiste, prueba a [[Special:UserLogout|cerrar sesión]] y volver a acceder. Y verifica que tu navegador permita las cookies de este sitio.", "session_fail_preview_html": "Lo sentimos, no hemos podido procesar tu edición debido a una pérdida de datos de sesión.\n\nLa previsualización está oculta como prevención frente a ataques JavaScript, puesto que este wiki tiene habilitado el HTML en bruto.\n\nSi se trata de un intento legítimo de modificación, inténtalo de nuevo.\nSi aún así no funcionase, prueba a [[Special:UserLogout|cerrar sesión]] y volver a acceder, y verifica que tu navegador acepte cookies de este sitio.", "token_suffix_mismatch": "Tu edición ha sido rechazada porque tu cliente ha mezclado los signos de puntuación en la clave de edición.\nSe rechazó la edición para evitar la corrupción del texto de la página.\nEsto sucede en ocasiones si se usa un servicio de proxy anónimo defectuoso.", "edit_form_incomplete": "Una parte del formulario de edición no ha llegado al servidor. Comprueba que tus cambios están intactos e inténtalo de nuevo.", @@ -986,10 +990,13 @@ "mergehistory-empty": "No hay revisiones fusionables.", "mergehistory-done": "Se {{PLURAL:$3|fusionó una revisión|fusionaron $3 revisiones}} de $1 en [[:$2]].", "mergehistory-fail": "No se puede realizar la fusión de historiales, por favor revisa la página y los parámetros de tiempo.", + "mergehistory-fail-bad-timestamp": "La marca de tiempo no es válida.", "mergehistory-fail-invalid-source": "La página de origen no es válida.", "mergehistory-fail-invalid-dest": "La página de destino no es válida.", + "mergehistory-fail-no-change": "La fusión historiales no fusionó ninguna revisión. Vuelve a comprobar los parámetros de página y tiempo.", "mergehistory-fail-permission": "Permisos insuficientes para fusionar el historial.", "mergehistory-fail-self-merge": "Las páginas de origen y destino son la misma.", + "mergehistory-fail-timestamps-overlap": "Las revisiones de origen se superponen o vienen después de las de destino.", "mergehistory-fail-toobig": "No se puede fusionar el historial ya que más del límite de $1 {{PLURAL:$1|revisión|revisiones}} se moverían.", "mergehistory-no-source": "La página origen $1 no existe.", "mergehistory-no-destination": "La página destino $1 no existe.", @@ -1290,7 +1297,7 @@ "right-managechangetags": "Crear y eliminar [[Special:Tags|etiquetas]] en la base de datos", "right-applychangetags": "Aplicar [[Special:Tags|etiquetas]] junto con los cambios propios", "right-changetags": "Agregar y quitar [[Special:Tags|etiquetas]] arbitrarias a revisiones individuales y entradas del registro", - "grant-generic": "Paquete de derechos \"$1\"", + "grant-generic": "Paquete de permisos \"$1\"", "grant-group-page-interaction": "Interactuar con páginas", "grant-group-file-interaction": "Interactuar con multimedia", "grant-group-watchlist-interaction": "Interactuar con tu lista de seguimiento", @@ -1433,9 +1440,9 @@ "recentchangeslinked-page": "Nombre de la página:", "recentchangeslinked-to": "Mostrar los cambios en páginas enlazadas con la página seleccionada", "recentchanges-page-added-to-category": "[[:$1]] añadida a la categoría", - "recentchanges-page-added-to-category-bundled": "[[:$1]] y {{PLURAL:$2|una página|$2 páginas}} añadidas a la categoría", + "recentchanges-page-added-to-category-bundled": "[[:$1]] añadida a la categoría, [[Special:WhatLinksHere/$1|esta página está incluida en otras páginas]]", "recentchanges-page-removed-from-category": "[[:$1]] eliminada de la categoría", - "recentchanges-page-removed-from-category-bundled": "[[:$1]] y {{PLURAL:$2|una página|$2 páginas}} eliminadas de la categoría", + "recentchanges-page-removed-from-category-bundled": "[[:$1]] eliminada de la categoría, [[Special:WhatLinksHere/$1|esta página está incluida en otras páginas]]", "autochange-username": "Cambio automático de MediaWiki", "upload": "Subir archivo", "uploadbtn": "Subir un archivo", @@ -1508,7 +1515,8 @@ "uploaded-script-svg": "Se encontró el elemento habilitado para secuencias de órdenes «$1» en el archivo SVG cargado.", "uploaded-hostile-svg": "Se encontró código CSS no seguro en el elemento de estilo del archivo SVG cargado.", "uploaded-event-handler-on-svg": "No está permitido configurar atributos controladores de eventos $1=\"$2\" en los archivos SVG.", - "uploaded-href-unsafe-target-svg": "Se encontró un \"href\" hacia un destino inseguro <$1 $2=\"$3\"> en el archivo SVG cargado.", + "uploaded-href-attribute-svg": "Los atributos href en archivos SVG sólo tienen permitido enlazar a objetivos http:// o https://, se encontró <$1 $2=\"$3\">.", + "uploaded-href-unsafe-target-svg": "Se encontró un href hacia un destino inseguro <$1 $2=\"$3\"> en el archivo SVG cargado.", "uploaded-animate-svg": "Se encontró un etiqueta \"animate\" que puede estar cambiando \"href\", mediante el atributo \"from\" <$1 $2=\"$3\"> en el archivo SVG cargado.", "uploaded-setting-event-handler-svg": "Está bloqueada la configuración de atributos controladores de eventos. Se encontró <$1 $2=\"$3\"> en el archivo SVG cargado.", "uploaded-setting-href-svg": "Está bloqueado el uso de la etiqueta \"set\" para añadir un atributo \"href\" al elemento padre.", @@ -1520,8 +1528,8 @@ "uploadinvalidxml": "No se pudo analizar el XML del archivo cargado.", "uploadvirus": "¡El archivo contiene un virus!\nDetalles: $1", "uploadjava": "El archivo es un ZIP que contiene un archivo .class de Java.\nNo se permite subir archivos Java, porque pueden causar que se puedan saltar restricciones de seguridad.", - "upload-source": "Archivo origen", - "sourcefilename": "Nombre del archivo origen:", + "upload-source": "Archivo de origen", + "sourcefilename": "Nombre del archivo de origen:", "sourceurl": "URL de origen:", "destfilename": "Nombre del archivo de destino:", "upload-maxfilesize": "Tamaño máximo del archivo: $1", @@ -1529,6 +1537,7 @@ "upload-options": "Opciones de subida", "watchthisupload": "Vigilar este archivo", "filewasdeleted": "Un archivo con este nombre se subió con anterioridad y posteriormente ha sido borrado. Deberías revisar el $1 antes de subirlo de nuevo.", + "filename-thumb-name": "Esto luce como el título de una miniatura. Por favor, no vuelva a subir miniaturas a la misma wiki. Si no es el caso, por favor corrija el nombre del archivo por uno que tenga más sentido, y no tenga el prefijo de miniatura.", "filename-bad-prefix": "El nombre del archivo que estás subiendo comienza por «$1», un nombre nada descriptivo de su contenido. Es un típico nombre de los que asignan automáticamente las cámaras digitales.\nElige un nombre más descriptivo para tu archivo.", "filename-prefix-blacklist": " #
\n# La sintaxis de esta página es la siguiente:\n#   * Todo texto que se encuentre después del carácter \"#\" hasta el final de la línea se tratará como un comentario y será ignorado\n#   * Cualquier línea que no esté en blanco será interpretada como un prefijo típico en nombres de archivo que suelen asignar automáticamente las cámaras digitales\nCIMG # Casio\nDSC_ # Nikon\nDSCF # Fuji\nDSCN # Nikon\nDUW # algunos teléfonos móviles / celulares\nIMG # genérico\nJD # Jenoptik\nMGP # Pentax\nPICT # misc.\n #
", "upload-proto-error": "Protocolo incorrecto", @@ -1561,9 +1570,10 @@ "foreign-structured-upload-form-label-not-own-work-local-local": "Quizás también quieras probar [[Special:Upload|la página predeterminada de subidas]].", "foreign-structured-upload-form-label-own-work-message-default": "Entiendo que voy a subir este archivo a un repositorio compartido. Confirmo que estoy haciéndolo que siguiendo los términos de servicio y políticas de licenciamiento de allí.", "foreign-structured-upload-form-label-not-own-work-message-default": "Si usted no es capaz de cargar este archivo en virtud de las políticas del repositorio compartido, por favor cierre este cuadro de diálogo y probar con otro método.", + "foreign-structured-upload-form-label-not-own-work-local-default": "Puede que también quieras usar [[Special:Upload|la página de subidas en {{SITENAME}}]], si se puede subir este archivo bajo sus políticas.", "foreign-structured-upload-form-label-own-work-message-shared": "Doy fe que soy dueño de los derechos de autor de este archivo, y acepto irrevocablemente liberar este archivo a Wikimedia Commons bajo la licencia [https://creativecommons.org/licenses/by-sa/4.0/ Creative Commons Attribution-ShareAlike 4.0], y acepto los [https://wikimediafoundation.org/wiki/Terms_of_Use Términos de Uso].", "foreign-structured-upload-form-label-not-own-work-message-shared": "Si no es dueño de los derechos de autor de este archivo, o desea publicarlo bajo una licencia diferentes, considere usar el [https://commons.wikimedia.org/wiki/Special:UploadWizard Asistente de Carga de Commons].", - "foreign-structured-upload-form-label-not-own-work-local-shared": "Puede que también quiera usar [[Special:Upload|la página de carga {{SITENAME}}]], si el sitio permite la subida de este archivo bajo sus políticas.", + "foreign-structured-upload-form-label-not-own-work-local-shared": "Puede que también quieras usar [[Special:Upload|la página de subidas en {{SITENAME}}]], si el sitio permite la subida de este archivo bajo sus políticas.", "backend-fail-stream": "No se pudo transmitir el archivo «$1».", "backend-fail-backup": "No se pudo hacer copia de seguridad del archivo «$1».", "backend-fail-notexists": "El archivo $1 no existe.", @@ -1571,16 +1581,16 @@ "backend-fail-notsame": "Ya existe un archivo distinto en \"$1\".", "backend-fail-invalidpath": "$1 no es una ruta de almacenamiento válida", "backend-fail-delete": "No se pudo borrar el archivo «$1».", - "backend-fail-describe": "No pudieron cambiar los metadatos del archivo \"$1\".", - "backend-fail-alreadyexists": "El archivo $1 ya existe.", - "backend-fail-store": "No se pudo almacenar el archivo $1 en $2.", - "backend-fail-copy": "No se pudo copiar el archivo $1 a $2.", - "backend-fail-move": "No se pudo trasladar el archivo $1 a $2.", + "backend-fail-describe": "No se pudieron cambiar los metadatos del archivo \"$1\".", + "backend-fail-alreadyexists": "El archivo \"$1\" ya existe.", + "backend-fail-store": "No se pudo almacenar el archivo \"$1\" en \"$2\".", + "backend-fail-copy": "No se pudo copiar el archivo \"$1\" a \"$2\".", + "backend-fail-move": "No se pudo trasladar el archivo \"$1\" a \"$2\".", "backend-fail-opentemp": "No se pudo crear archivo temporal.", "backend-fail-writetemp": "No se pudo escribir en el archivo temporal.", "backend-fail-closetemp": "No se pudo cerrar el archivo temporal.", "backend-fail-read": "No se pudo leer el archivo «$1».", - "backend-fail-create": "No se pudo escribir el archivo $1.", + "backend-fail-create": "No se pudo escribir el archivo \"$1\".", "backend-fail-maxsize": "No se pudo escribir el archivo \"$1\" porque es mayor a {{PLURAL:$2|un byte|$2 bytes}}.", "backend-fail-readonly": "El servidor (back-end) de almacenamiento \"$1\" está actualmente en estado de sólo lectura. La razón aducida es: $2", "backend-fail-synced": "El archivo \"$1\" se encuentra en un estado incoherente dentro de los servidores (backends) de almacenamiento interno", @@ -1612,6 +1622,7 @@ "uploadstash-badtoken": "No se pudo realizar la acción. Es posible que haya finalizado el tiempo de espera de la sesión. Inténtalo de nuevo.", "uploadstash-errclear": "Falló el borrado de los archivos.", "uploadstash-refresh": "Actualizar la lista de archivos", + "uploadstash-thumbnail": "ver miniatura", "invalid-chunk-offset": "Desplazamiento inválido del fragmento", "img-auth-accessdenied": "Acceso denegado", "img-auth-nopathinfo": "Falta PATH_INFO.\nEl servidor no está configurado para proporcionar esta información.\nEs posible que esté basado en CGI y que no sea compatible con img_auth.\nConsulte https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Image_Authorization.", @@ -1651,7 +1662,7 @@ "listfiles_date": "Fecha", "listfiles_name": "Nombre", "listfiles_user": "Usuario", - "listfiles_size": "Tamaño (bytes)", + "listfiles_size": "Tamaño", "listfiles_description": "Descripción", "listfiles_count": "Versiones", "listfiles-show-all": "Incluir versiones antiguas de las imágenes", @@ -1671,13 +1682,13 @@ "filehist-nothumb": "Sin miniatura", "filehist-user": "Usuario", "filehist-dimensions": "Dimensiones", - "filehist-filesize": "Tamaño", + "filehist-filesize": "Tamaño del archivo", "filehist-comment": "Comentario", "imagelinks": "Usos del archivo", "linkstoimage": "{{PLURAL:$1|La siguiente página enlaza|Las siguientes páginas enlazan}} a este archivo:", "linkstoimage-more": "Hay más de {{PLURAL:$1|una página que enlaza|$1 páginas que enlazan}} con este archivo.\nLa lista siguiente sólo muestra {{PLURAL:$1|la primera página que enlaza|las primeras $1 páginas que enlazan}} con este archivo.\nTambién puedes consultar la [[Special:WhatLinksHere/$2|lista completa]].", "nolinkstoimage": "No hay páginas que enlacen a esta imagen.", - "morelinkstoimage": "Vea [[Special:WhatLinksHere/$1|más enlaces]] a este archivo.", + "morelinkstoimage": "Mira [[Special:WhatLinksHere/$1|más enlaces]] a este archivo.", "linkstoimage-redirect": "$1 (archivo de redirección) $2", "duplicatesoffile": "{{PLURAL:$1|El siguiente archivo es un duplicado|Los siguientes $1 archivos son duplicados}} de éste ([[Special:FileDuplicateSearch/$2|más detalles]]):", "sharedupload": "Este archivo es de $1 y puede ser usado por otros proyectos.", @@ -1736,19 +1747,19 @@ "randomincategory-category": "Categoría:", "randomincategory-legend": "Página aleatoria en categoría", "randomincategory-submit": "Ir", - "randomredirect": "Ir a una redirección cualquiera", + "randomredirect": "Redirección aleatoria", "randomredirect-nopages": "No hay redirecciones en el espacio de nombres «$1».", "statistics": "Estadísticas", "statistics-header-pages": "Estadísticas de páginas", "statistics-header-edits": "Estadísticas de ediciones", - "statistics-header-users": "Estadísticas de usuario", + "statistics-header-users": "Estadísticas de usuarios", "statistics-header-hooks": "Otras estadísticas", "statistics-articles": "Páginas de contenido", "statistics-pages": "Páginas", "statistics-pages-desc": "Todas las páginas en el wiki, incluyendo páginas de discusión, redirecciones, etc.", "statistics-files": "Archivos subidos", "statistics-edits": "Ediciones en páginas desde que {{SITENAME}} fue instalado", - "statistics-edits-average": "Media de ediciones por página", + "statistics-edits-average": "Promedio de ediciones por página", "statistics-users": "[[Special:ListUsers|Usuarios]] registrados", "statistics-users-active": "Usuarios activos", "statistics-users-active-desc": "Usuarios que han ejecutado una acción en {{PLURAL:$1|el último día|los últimos $1 días}}", @@ -1772,7 +1783,7 @@ "withoutinterwiki-summary": "Las siguientes páginas no enlazan a versiones en otros idiomas:", "withoutinterwiki-legend": "Prefijo", "withoutinterwiki-submit": "Mostrar", - "fewestrevisions": "Artículos con menos ediciones", + "fewestrevisions": "Páginas con el menor número de revisiones", "nbytes": "$1 {{PLURAL:$1|byte|bytes}}", "ncategories": "$1 {{PLURAL:$1|categoría|categorías}}", "ninterwikis": "$1 {{PLURAL:$1|interwiki|interwikis}}", @@ -1782,15 +1793,15 @@ "nrevisions": "$1 {{PLURAL:$1|revisión|revisiones}}", "nimagelinks": "Usado en {{PLURAL:$1|una página|$1 páginas}}", "ntransclusions": "usado en {{PLURAL:$1|una página|$1 páginas}}", - "specialpage-empty": "Esta página está vacía.", + "specialpage-empty": "No hay resultados para este informe.", "lonelypages": "Páginas huérfanas", "lonelypagestext": "Las siguientes páginas no están enlazadas ni transcluidas en otras páginas de {{SITENAME}}.", "uncategorizedpages": "Páginas sin categorizar", "uncategorizedcategories": "Categorías sin categorizar", - "uncategorizedimages": "Imágenes sin categorizar", + "uncategorizedimages": "Archivos sin categorizar", "uncategorizedtemplates": "Plantillas sin categorizar", "unusedcategories": "Categorías sin uso", - "unusedimages": "Imágenes sin uso", + "unusedimages": "Archivos sin uso", "wantedcategories": "Categorías requeridas", "wantedpages": "Páginas requeridas", "wantedpages-summary": "Lista de páginas inexistentes con el mayor número de enlaces a ellas, excluyendo páginas que son solo redirecciones a ellas. Para ver una lista de páginas inexistentes con redirecciones apuntando a ellas, consulta [[{{#special:BrokenRedirects}}|la lista de redirecciones rotas]].", @@ -1801,7 +1812,7 @@ "wantedfiletext-nocat": "Los siguientes archivos están en uso, pero no existen. Es posible que algunos de ellos estén almacenados en repositorios externos y se hayan incluido aquí por error; dichas entradas aparecen tachadas.", "wantedfiletext-nocat-noforeign": "Los siguientes archivos están en uso, pero no existen.", "wantedtemplates": "Plantillas requeridas", - "mostlinked": "Artículos más enlazados", + "mostlinked": "Páginas más enlazadas", "mostlinkedcategories": "Categorías más enlazadas", "mostlinkedtemplates": "Páginas más transcluidas", "mostcategories": "Páginas con más categorías", @@ -1844,7 +1855,7 @@ "newpages": "Páginas nuevas", "newpages-submit": "Mostrar", "newpages-username": "Nombre de usuario", - "ancientpages": "Artículos más antiguos", + "ancientpages": "Páginas más antiguas", "move": "Trasladar", "movethispage": "Trasladar esta página", "unusedimagestext": "Los siguientes archivos existen pero no están insertados en ninguna página.\nTen en cuenta que otros sitios web pueden enlazar un archivo directamente por la URL, y por tanto pueden estar listados aquí a pesar de estar siendo usados de forma activa.", @@ -1860,20 +1871,27 @@ "apihelp": "Ayuda de la API", "apihelp-no-such-module": "No se encontró el módulo \"$1\".", "apisandbox": "Zona de pruebas API", + "apisandbox-jsonly": "Se requiere JavaScript para utilizar la zona de pruebas de API.", "apisandbox-api-disabled": "La API está desactivada en este sitio.", - "apisandbox-intro": "Usa esta página para experimentar con la '''API de servicio web de MediaWiki'''.\nPara más detalles sobre el uso de la API, visita [//www.mediawiki.org/wiki/API:Main_page su documentación]. Ejemplo: [//www.mediawiki.org/wiki/API#A_simple_example obtener el contenido de una Página principal]. Selecciona una acción para ver más ejemplos.\n\nObserva que, aunque sea una página de pruebas, las acciones que realices en esta página pueden modificar el wiki.", + "apisandbox-intro": "Usa esta página para experimentar con la API de servicio web de MediaWiki.\nPara más detalles sobre el uso de la API, visita [[mw:API:Main page|su documentación]]. Ejemplo: [//www.mediawiki.org/wiki/API#A_simple_example obtener el contenido de una Página principal]. Selecciona una acción para ver más ejemplos.\n\nObserva que, aunque sea una página de pruebas, las acciones que realices en esta página pueden modificar el wiki.", "apisandbox-fullscreen": "Expandir panel", + "apisandbox-fullscreen-tooltip": "Expande el panel de la zona de pruebas hasta llenar la ventana del navegador.", "apisandbox-unfullscreen": "Mostrar página", + "apisandbox-unfullscreen-tooltip": "Reduce el panel de la zona de pruebas, para que los enlaces de navegación MediaWiki estén disponibles.", "apisandbox-submit": "Realizar solicitud", "apisandbox-reset": "Limpiar", "apisandbox-retry": "Reintentar", + "apisandbox-loading": "Cargando la información para el módulo API \"$1\"...", + "apisandbox-load-error": "Ocurrió un error al cargar la información para el módulo API \"$1\": $2", "apisandbox-no-parameters": "Este módulo API no tiene parámetros.", "apisandbox-helpurls": "Enlaces de ayuda", "apisandbox-examples": "Ejemplos", "apisandbox-dynamic-parameters": "Parámetros adicionales", "apisandbox-dynamic-parameters-add-label": "Añadir parámetro:", "apisandbox-dynamic-parameters-add-placeholder": "Nombre del parámetro", + "apisandbox-dynamic-error-exists": "Ya existe un parámetro llamado \"$1\".", "apisandbox-deprecated-parameters": "Parámetros desaconsejados", + "apisandbox-fetch-token": "Auto-llenar el token", "apisandbox-submit-invalid-fields-title": "Algunos campos no son válidos", "apisandbox-submit-invalid-fields-message": "Por favor, corrige los campos señalados e inténtalo de nuevo.", "apisandbox-results": "Resultados", @@ -1902,11 +1920,11 @@ "showhideselectedlogentries": "Cambiar la visibilidad de las entradas del registro seleccionadas", "log-edit-tags": "Editar las etiquetas de las entradas del registro seleccionadas", "checkbox-select": "Seleccionar: $1", - "checkbox-all": "Todas", - "checkbox-none": "Ninguna", - "checkbox-invert": "Invertir", + "checkbox-all": "todas", + "checkbox-none": "ninguna", + "checkbox-invert": "invertir", "allpages": "Todas las páginas", - "nextpage": "Siguiente página ($1)", + "nextpage": "Página siguiente ($1)", "prevpage": "Página anterior ($1)", "allpagesfrom": "Mostrar páginas que empiecen por:", "allpagesto": "Mostrar páginas terminadas con:", @@ -1924,8 +1942,6 @@ "categories-submit": "Mostrar", "categoriespagetext": "Las siguientes {{PLURAL:$1|categoría contiene|categorías contienen}} páginas o medios.\nNo se muestran aquí las [[Special:UnusedCategories|categorías sin uso]].\nVéase también las [[Special:WantedCategories|categorías requeridas]].", "categoriesfrom": "Mostrar categorías que empiecen por:", - "special-categories-sort-count": "ordenar por conteo", - "special-categories-sort-abc": "ordenar alfabéticamente", "deletedcontributions": "Contribuciones borradas de usuario", "deletedcontributions-title": "Contribuciones borradas de usuario", "sp-deletedcontributions-contribs": "contribuciones", @@ -1948,13 +1964,13 @@ "activeusers-hidesysops": "Ocultar administradores", "activeusers-noresult": "No se encontraron usuarios.", "activeusers-submit": "Mostrar usuarios activos", - "listgrouprights": "Permisos del grupo de usuarios", - "listgrouprights-summary": "La siguiente es una lista de los grupos de usuario definidos en esta wiki y de sus privilegios de acceso asociados.\nPuede haber información adicional sobre privilegios individuales en [[{{MediaWiki:Listgrouprights-helppage}}]]", + "listgrouprights": "Permisos de los grupos de usuarios", + "listgrouprights-summary": "La siguiente es una lista de los grupos de usuarios definidos en esta wiki y de sus permisos de acceso asociados.\nPuede haber [[{{MediaWiki:Listgrouprights-helppage}}|información adicional]] sobre permisos individuales.", "listgrouprights-key": "Leyenda:\n* Derecho concedido\n* Derecho revocado", "listgrouprights-group": "Grupo", "listgrouprights-rights": "Derechos", - "listgrouprights-helppage": "Help:Derechos de grupos", - "listgrouprights-members": "(ver los miembros de este grupo)", + "listgrouprights-helppage": "Help:Permisos de grupos", + "listgrouprights-members": "(lista de miembros)", "listgrouprights-addgroup": "Agregar {{PLURAL:$2|grupo|grupos}}: $1", "listgrouprights-removegroup": "Eliminar {{PLURAL:$2|grupo|grupos}}: $1", "listgrouprights-addgroup-all": "Agregar todos los grupos", @@ -1966,7 +1982,8 @@ "listgrouprights-namespaceprotection-header": "Restricciones del espacio de nombres", "listgrouprights-namespaceprotection-namespace": "Espacio de nombres", "listgrouprights-namespaceprotection-restrictedto": "Derechos de usuario para editar", - "listgrants": "Subvenciones", + "listgrants": "Concesiones", + "listgrants-summary": "La siguiente es una lista de concesiones con sus permisos de usuario asociados. Los usuarios pueden autorizar aplicaciones para que usen sus cuentas, pero con permisos limitados basados en las concesiones que el usuario le dio a la aplicación. De todas formas, una aplicación actuando a nombre de un usuario no puede hacer uso de permisos que el usuario no posea.\nPuede haber [[{{MediaWiki:Listgrouprights-helppage}}|información adicional]] sobre permisos individuales.", "listgrants-grant": "Conceder", "listgrants-rights": "Derechos", "trackingcategories": "Categorías de seguimiento", @@ -2023,12 +2040,12 @@ "addedwatchtext-short": "La página \"$1\" ha sido añadida a tu lista de seguimiento.", "removewatch": "Quitar de la lista de seguimiento", "removedwatchtext": "Se han eliminado «[[:$1]]» y su página de discusión de tu [[Special:Watchlist|lista de seguimiento]].", - "removedwatchtext-short": "La página \"$1\" ha sido eliminado de tu lista de seguimiento.", + "removedwatchtext-short": "La página \"$1\" ha sido eliminada de tu lista de seguimiento.", "watch": "Vigilar", "watchthispage": "Vigilar esta página", "unwatch": "Dejar de vigilar", "unwatchthispage": "Dejar de vigilar", - "notanarticle": "No es un artículo", + "notanarticle": "No es una página de contenido", "notvisiblerev": "La última revisión de un usuario diferente ha sido borrada", "watchlist-details": "{{PLURAL:$1|$1 página|$1 páginas}} en tu lista de seguimiento, sin contar las de discusión.", "wlheader-enotif": "La notificación por correo está activada.", @@ -2051,23 +2068,23 @@ "watcherrortext": "Ocurrió un error al cambiar la configuración de tu lista de seguimiento para «$1».", "enotif_reset": "Marcar todas las páginas como visitadas", "enotif_impersonal_salutation": "usuario de {{SITENAME}}", - "enotif_subject_deleted": "$2 ha borrado la página $1 de {{SITENAME}}", - "enotif_subject_created": "$2 ha creado la página $1 en {{SITENAME}}", - "enotif_subject_moved": "$2 ha trasladado la página $1 de {{SITENAME}}", - "enotif_subject_restored": "$2 ha restaurado la página $1 de {{SITENAME}}", - "enotif_subject_changed": "$2 ha modificado la página $1 de {{SITENAME}}", + "enotif_subject_deleted": "$2 {{GENDER:$2|borró}} la página $1 de {{SITENAME}}", + "enotif_subject_created": "$2 {{GENDER:$2|creó}} la página $1 de {{SITENAME}}", + "enotif_subject_moved": "$2 {{GENDER:$2|trasladó}} la página $1 de {{SITENAME}}", + "enotif_subject_restored": "$2 {{GENDER:$2|restauró}} la página $1 de {{SITENAME}}", + "enotif_subject_changed": "$2 {{GENDER:$2|cambió}} la página $1 de {{SITENAME}}", "enotif_body_intro_deleted": "La página $1 de {{SITENAME}} ha sido borrada el $PAGEEDITDATE por {{GENDER:$2|$2}}, véase $3.", "enotif_body_intro_created": "La página $1 de {{SITENAME}} ha sido creada el $PAGEEDITDATE por {{GENDER:$2|$2}}, véase $3 para la revisión actual.", "enotif_body_intro_moved": "La página $1 de {{SITENAME}} ha sido trasladada el $PAGEEDITDATE por {{GENDER:$2|$2}}, véase $3 para la revisión actual.", "enotif_body_intro_restored": "La página $1 de {{SITENAME}} ha sido restaurada el $PAGEEDITDATE por {{GENDER:$2|$2}}, véase $3 para la revisión actual.", "enotif_body_intro_changed": "La página $1 de {{SITENAME}} ha sido cambiada el $PAGEEDITDATE por {{GENDER:$2|$2}}, véase $3 para la revisión actual.", - "enotif_lastvisited": "Consulta $1 para ver todos los cambios realizados desde tu última visita.", + "enotif_lastvisited": "Consulta $1 para ver todos los cambios desde tu última visita.", "enotif_lastdiff": "Consulta $1 para ver este cambio.", "enotif_anon_editor": "usuario anónimo $1", "enotif_body": "Hola, $WATCHINGUSERNAME:\n\n$PAGEINTRO $NEWPAGE\n\nResumen del editor: $PAGESUMMARY $PAGEMINOREDIT\n\nContacta al editor:\ncorreo: $PAGEEDITOR_EMAIL\nwiki: $PAGEEDITOR_WIKI\n\nNo enviaremos más notificaciones si ocurre más actividad, a menos que visites esta página con la sesión iniciada. También puedes restablecer los estados de notificación para todas las páginas en tu lista de seguimiento.\n\nAtentamente, el sistema de notificaciones de {{SITENAME}}\n\n--\nPara cambiar tus ajustes de notificación por correo, visita\n{{canonicalurl:{{#special:Preferences}}}}\n\nPara cambiar los ajustes de tu lista de seguimiento, visita\n{{canonicalurl:{{#special:EditWatchlist}}}}\n\nPara quitar la página de tu lista de seguimiento, visita\n$UNWATCHURL\n\nPara ayuda y comentarios:\n$HELPPAGE", "created": "creada", "changed": "modificada", - "deletepage": "Borrar esta página", + "deletepage": "Borrar página", "confirm": "Confirmar", "excontent": "el contenido era: «$1»", "excontentauthor": "el contenido era: «$1», y el único autor fue «[[Special:Contributions/$2|$2]]» ([[User talk:$2|discusión]])", @@ -2171,13 +2188,13 @@ "maximum-size": "Tamaño máximo:", "pagesize": "(bytes)", "restriction-edit": "Editar", - "restriction-move": "Pueden trasladar", + "restriction-move": "Trasladar", "restriction-create": "Crear", "restriction-upload": "Subir", "restriction-level-sysop": "completamente protegida", "restriction-level-autoconfirmed": "semiprotegida", "restriction-level-all": "cualquier nivel", - "undelete": "Restaurar una página borrada", + "undelete": "Ver páginas borradas", "undeletepage": "Ver y restaurar páginas borradas", "undeletepagetitle": "Las siguientes son las revisiones borradas de [[:$1|$1]].", "viewdeletedpage": "Ver páginas borradas", @@ -2204,7 +2221,7 @@ "undelete-header": "En el [[Special:Log/delete|registro de borrados]] se listan las páginas eliminadas.", "undelete-search-title": "Buscar páginas borradas", "undelete-search-box": "Buscar páginas borradas", - "undelete-search-prefix": "Mostrar páginas que empiecen por:", + "undelete-search-prefix": "Mostrar páginas que empiecen con:", "undelete-search-submit": "Buscar", "undelete-no-results": "No se encontraron páginas borradas para ese criterio de búsqueda.", "undelete-filename-mismatch": "No se puede restaurar la revisión con marca de tiempo $1: no concuerda el nombre del archivo.", @@ -2242,7 +2259,7 @@ "sp-contributions-uploads": "subidas", "sp-contributions-logs": "registros", "sp-contributions-talk": "discusión", - "sp-contributions-userrights": "gestión de permisos del usuario", + "sp-contributions-userrights": "gestión de permisos de usuario", "sp-contributions-blocked-notice": "Este usuario está actualmente bloqueado. La última entrada del registro de bloqueos es presentada debajo para mayor referencia:", "sp-contributions-blocked-notice-anon": "Esta dirección IP se encuentra actualmente bloqueada.\nA continuación se muestra la última entrada del registro de bloqueos para mayor referencia.", "sp-contributions-search": "Buscar contribuciones", @@ -2301,6 +2318,7 @@ "ipb-unblock": "Desbloquear un usuario o una IP", "ipb-blocklist": "Ver bloqueos vigentes", "ipb-blocklist-contribs": "Contribuciones de {{GENDER:$1|$1}}", + "ipb-blocklist-duration-left": "$1 restantes", "unblockip": "Desbloquear usuario", "unblockiptext": "Use el formulario a continuación para devolver los permisos de escritura a una dirección IP que ha sido bloqueada.", "ipusubmit": "Desactivar este bloqueo", @@ -2542,11 +2560,7 @@ "import-logentry-upload-detail": "$1 {{PLURAL:$1|revisión importada|revisiones importadas}}", "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|revisión importada|revisiones importadas}} desde $2", "javascripttest": "Pruebas de JavaScript", - "javascripttest-pagetext-noframework": "Esta página está reservada para ejecutar pruebas de JavaScript.", - "javascripttest-pagetext-unknownframework": "Marco de pruebas desconocido \"$1\".", "javascripttest-pagetext-unknownaction": "La acción «$1» es desconocida.", - "javascripttest-pagetext-frameworks": "Selecciona uno de los marcos de pruebas siguientes: $1", - "javascripttest-pagetext-skins": "Elige una apariencia con la que ejecutar las pruebas:", "javascripttest-qunit-intro": "Consulta la [$1 documentación sobre las pruebas] en mediawiki.org.", "tooltip-pt-userpage": "Tu página de {{GENDER:|usuario|usuaria}}", "tooltip-pt-anonuserpage": "La página de usuario de la IP desde la que editas", @@ -2770,18 +2784,18 @@ "months": "{{PLURAL:$1|$1 mes|$1 meses}}", "years": "{{PLURAL:$1|$1 año|$1 años}}", "ago": "hace $1", - "just-now": "Ahora mismo", + "just-now": "ahora mismo", "hours-ago": "hace $1 {{PLURAL:$1|hora|horas}}", "minutes-ago": "hace {{PLURAL:$1|un minuto|$1 minutos}}", "seconds-ago": "hace $1 {{PLURAL:$1|segundo|segundos}}", - "monday-at": "El lunes a las $1", - "tuesday-at": "El martes a las $1", - "wednesday-at": "El miércoles a las $1", - "thursday-at": "El jueves a las $1", - "friday-at": "El viernes a las $1", - "saturday-at": "El sábado a las $1", - "sunday-at": "El domingo a las $1", - "yesterday-at": "Ayer a las $1", + "monday-at": "el lunes a las $1", + "tuesday-at": "el martes a las $1", + "wednesday-at": "el miércoles a las $1", + "thursday-at": "el jueves a las $1", + "friday-at": "el viernes a las $1", + "saturday-at": "el sábado a las $1", + "sunday-at": "el domingo a las $1", + "yesterday-at": "ayer a las $1", "bad_image_list": "El formato es el siguiente:\n\nSolo se reconocen elementos de lista (líneas que comienzan con «*»).\nEl primer enlace de cada línea debe ser un enlace al archivo que se quiere bloquear.\nTodos los demás enlaces en la misma línea se tomarán como excepciones (es decir, páginas donde sí se puede usar el archivo).", "metadata": "Metadatos", "metadata-help": "Este archivo contiene información adicional, probablemente añadida por la cámara digital o el escáner usado para crearlo o digitalizarlo.\nSi el archivo ha sido modificado desde su estado original, pueden haberse perdido algunos detalles.", @@ -2821,8 +2835,8 @@ "exif-colorspace": "Espacio de color", "exif-componentsconfiguration": "Significado de cada componente", "exif-compressedbitsperpixel": "Modo de compresión de la imagen", - "exif-pixelydimension": "Ancho de la imagen", - "exif-pixelxdimension": "Altura de la imagen", + "exif-pixelxdimension": "Anchura de la imagen", + "exif-pixelydimension": "Altura de la imagen", "exif-usercomment": "Comentarios de usuario", "exif-relatedsoundfile": "Archivo de audio relacionado", "exif-datetimeoriginal": "Fecha y hora de la generación de los datos", @@ -2953,7 +2967,7 @@ "exif-attributionurl": "Cuando reutilices este trabajo, por favor enlaza a", "exif-preferredattributionname": "Al volver a utilizar este trabajo, por favor da crédito", "exif-pngfilecomment": "Comentario de archivo PNG", - "exif-disclaimer": "Descargo", + "exif-disclaimer": "Exoneración de responsabilidad", "exif-contentwarning": "Advertencia de contenido", "exif-giffilecomment": "Comentario de archivo GIF", "exif-intellectualgenre": "Tipo de elemento", @@ -2972,6 +2986,9 @@ "exif-copyrighted-true": "Con derechos de autor", "exif-copyrighted-false": "No se ha definido el estado del copyright", "exif-photometricinterpretation-1": "Blanco y negro (el negro es 0)", + "exif-photometricinterpretation-4": "Máscara de transparencia", + "exif-photometricinterpretation-5": "Separados (Probablemente CMYK)", + "exif-photometricinterpretation-32803": "Matriz de filtro de color", "exif-unknowndate": "Fecha desconocida", "exif-orientation-1": "Normal", "exif-orientation-2": "Volteada horizontalmente", @@ -3149,6 +3166,10 @@ "confirmemail_body_set": "Alguien, probablemente tú, ha establecido la dirección de correo electrónico de la cuenta $2 a esta dirección en {{SITENAME}}, desde la dirección IP $1.\n\nPara confirmar que esta cuenta realmente te pertenece y activar las funciones de correo electrónico en {{SITENAME}}, sigue este enlace en tu navegador:\n\n$3\n\nSi la cuenta *no* te pertenece, sigue este otro enlace para cancelar la confirmación:\n\n$5\n\nEste código de confirmación expirará el $4.", "confirmemail_invalidated": "La confirmación de la dirección de correo electrónico ha sido cancelada", "invalidateemail": "Cancelar confirmación de correo electrónico", + "notificationemail_subject_changed": "{{SITENAME}} dirección de correo electrónico registrada ha sido cambiado", + "notificationemail_subject_removed": "{{SITENAME}} dirección de correo electrónico ha sido eliminada", + "notificationemail_body_changed": "Alguien, probablemente tú, desde la dirección IP $1,\nha cambiado la dirección de correo electrónico de la cuenta \"$2\" \"$3\" en {{SITENAME}}.\n\nSi esto no fue usted, póngase en contacto con un administrador del sitio inmediatamente.", + "notificationemail_body_removed": "Alguien, probablemente tú, desde la dirección IP $1,\nse ha eliminado la dirección de correo electrónico de la cuenta \"$2\" en {{SITENAME}}.\n\nSi esto no fue usted, póngase en contacto con un administrador del sitio inmediatamente.", "scarytranscludedisabled": "[Transclusión interwiki está deshabilitada]", "scarytranscludefailed": "[Obtención de plantilla falló para $1]", "scarytranscludefailed-httpstatus": "[Error de recuperación de plantilla para $1: HTTP $2]", @@ -3269,7 +3290,6 @@ "version-libraries-description": "Descripción", "version-libraries-authors": "Autores", "redirect": "Redirigir por archivo, o identificador de usuario, página, revisión o registro", - "redirect-legend": "Redirigir a un archivo o página", "redirect-summary": "Esta página especial redirige a un archivo (dado un nombre), a una página (dado un identificador de revisión o de página), a una página de usuario (dado un identificador numérico de usuario) o a una entrada del registro (dado un identificador de registro). Uso: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/page/64308]], [[{{#Special:Redirect}}/revision/328429]], [[{{#Special:Redirect}}/user/101]] o [[{{#Special:Redirect}}/logid/186]].", "redirect-submit": "Ir", "redirect-lookup": "Buscar:", @@ -3282,7 +3302,6 @@ "redirect-not-exists": "No se encontró el valor", "fileduplicatesearch": "Búsqueda de archivos duplicados", "fileduplicatesearch-summary": "Búsqueda de archivos duplicados en base a su valor hash.", - "fileduplicatesearch-legend": "Busca duplicados", "fileduplicatesearch-filename": "Nombre de archivo:", "fileduplicatesearch-submit": "Buscar", "fileduplicatesearch-info": "$1 × $2 píxeles
Tamaño: $3
Tipo MIME: $4", @@ -3367,9 +3386,11 @@ "tags-deactivate-not-allowed": "No es posible desactivar la etiqueta «$1».", "tags-deactivate-submit": "Desactivar", "tags-apply-no-permission": "No tienes permiso para aplicar etiquetas de cambios, junto con tus cambios.", + "tags-apply-blocked": "No puedes aplicar etiquetas de cambio con tus cambios mientras estés {{GENDER:|bloqueado|bloqueada}}.", "tags-apply-not-allowed-one": "No se permite aplicar manualmente la etiqueta «$1».", "tags-apply-not-allowed-multi": "{{PLURAL:$2|La siguiente etiqueta no se puede|Las siguientes etiquetas no se pueden}} aplicar manualmente: $1", "tags-update-no-permission": "No tienes permiso para agregar o quitar etiquetas de cambio de las revisiones individuales o las entradas del registro.", + "tags-update-blocked": "No puedes añadir o eliminar etiquetas de cambio mientras estés {{GENDER:|bloqueado|bloqueada}}.", "tags-update-add-not-allowed-one": "No se permite la adición manual de la etiqueta «$1».", "tags-update-add-not-allowed-multi": "{{PLURAL:$2|La siguiente etiqueta no se puede|Las siguientes etiquetas no se pueden}} agregar manualmente: $1", "tags-update-remove-not-allowed-one": "No se permite eliminar la etiqueta «$1».", @@ -3481,7 +3502,7 @@ "logentry-protect-protect-cascade": "$1 {{GENDER:$2|protegió}} a $3 $4 [en cascada]", "logentry-protect-modify": "$1 {{GENDER:$2|cambió}} el nivel de protección de $3 $4", "logentry-protect-modify-cascade": "$1 {{GENDER:$2|cambió}} el nivel de protección de $3 $4 [en cascada]", - "logentry-rights-rights": "$1 modificó los grupos a los que pertenece $3: de $4 a $5", + "logentry-rights-rights": "$1 {{GENDER:$2|modificó}} los grupos a los que pertenece {{GENDER:$3|$3}}: de $4 a $5", "logentry-rights-rights-legacy": "$1 {{GENDER:$2|modificó}} los grupos a los que pertenece $3", "logentry-rights-autopromote": "$1 ha sido {{GENDER:$2|promocionado|promocionada}} automáticamente de $4 a $5", "logentry-upload-upload": "$1 {{GENDER:$2|subió}} $3", @@ -3574,6 +3595,7 @@ "api-error-unknownerror": "Error desconocido: «$1».", "api-error-uploaddisabled": "Las subidas están desactivadas en este wiki.", "api-error-verification-error": "Este archivo puede estar dañado, o tiene una extensión incorrecta.", + "api-error-was-deleted": "Un archivo de este nombre se ha subido previamente y eliminado posteriormente.", "duration-seconds": "$1 {{PLURAL:$1|segundo|segundos}}", "duration-minutes": "$1 {{PLURAL:$1|minuto|minutos}}", "duration-hours": "$1 {{PLURAL:$1|hora|horas}}", @@ -3665,6 +3687,7 @@ "special-characters-group-ipa": "AFI", "special-characters-group-symbols": "Símbolos", "special-characters-group-greek": "Griego", + "special-characters-group-greekextended": "Griego extendido", "special-characters-group-cyrillic": "Cirílico", "special-characters-group-arabic": "Árabe", "special-characters-group-arabicextended": "Arábico extendido", @@ -3688,9 +3711,58 @@ "mw-widgets-titleinput-description-new-page": "la página aún no existe", "mw-widgets-titleinput-description-redirect": "redirigir a $1", "api-error-blacklisted": "Elige un título diferente, más descriptivo.", - "sessionmanager-tie": "No se pueden combinar múltiples tipos de autentificación de solicitudes: $1", + "sessionmanager-tie": "No se pueden combinar múltiples tipos de autenticación de solicitudes: $1.", "sessionprovider-generic": "sesiones $1", "sessionprovider-mediawiki-session-cookiesessionprovider": "sesiones basadas en cookies", "sessionprovider-nocookies": "Puede que las cookies estén desactivadas. Actívalas y comienza de nuevo.", - "randomrootpage": "Página raíz aleatoria" + "randomrootpage": "Página raíz aleatoria", + "log-action-filter-block": "Tipo de bloqueo:", + "log-action-filter-contentmodel": "Tipo de contentmodel modificación:", + "log-action-filter-delete": "Tipo de eliminación:", + "log-action-filter-import": "Tipo de importación:", + "log-action-filter-managetags": "Tipo de administración de la etiqueta de acción:", + "log-action-filter-move": "Tipo de movimiento:", + "log-action-filter-newusers": "Tipo de creación de la cuenta:", + "log-action-filter-patrol": "Tipo de verificación:", + "log-action-filter-protect": "Tipo de protección:", + "log-action-filter-rights": "El tipo de cambio correcto", + "log-action-filter-suppress": "Tipo de supresión", + "log-action-filter-upload": "Tipo de subida:", + "log-action-filter-all": "Todas", + "log-action-filter-block-block": "Bloquear", + "log-action-filter-block-reblock": "Modificación de bloqueo", + "log-action-filter-block-unblock": "Desbloquear", + "log-action-filter-contentmodel-change": "Cambio de modelo de contenido", + "log-action-filter-contentmodel-new": "Creación de página con modelo de contenidos no estándar", + "log-action-filter-delete-delete": "Eliminación de páginas", + "log-action-filter-delete-restore": "Restauración de páginas", + "log-action-filter-delete-event": "Eliminación de registros", + "log-action-filter-delete-revision": "Eliminación de revisión", + "log-action-filter-import-interwiki": "Importación transwiki", + "log-action-filter-import-upload": "Importar mediante carga de XML", + "log-action-filter-managetags-create": "Creación de etiqueta", + "log-action-filter-managetags-delete": "Eliminación de etiqueta", + "log-action-filter-managetags-activate": "Activación de etiqueta", + "log-action-filter-managetags-deactivate": "Desactivación de etiquetas", + "log-action-filter-move-move": "Traslado sin sobrescritura de redirecciones", + "log-action-filter-move-move_redir": "Traslado con sobrescritura de redirecciones", + "log-action-filter-newusers-create": "La creación por usuario anónimo", + "log-action-filter-newusers-create2": "La creación por usuario registrado", + "log-action-filter-newusers-autocreate": "Creación automática", + "log-action-filter-newusers-byemail": "Creación con la contraseña enviada por correo", + "log-action-filter-patrol-patrol": "Verificación manual", + "log-action-filter-patrol-autopatrol": "Verificación automática", + "log-action-filter-protect-protect": "Protección", + "log-action-filter-protect-modify": "Modificación de protección", + "log-action-filter-protect-unprotect": "Desprotección", + "log-action-filter-protect-move_prot": "Protección contra traslados", + "log-action-filter-rights-rights": "Cambio manual", + "log-action-filter-rights-autopromote": "Cambio automático", + "log-action-filter-suppress-event": "Supresión de registros", + "log-action-filter-suppress-revision": "Supresión de revisiones", + "log-action-filter-suppress-delete": "Supresión de páginas", + "log-action-filter-suppress-block": "Usuario supppression por bloque", + "log-action-filter-suppress-reblock": "Usuario supresión de rebloqueo", + "log-action-filter-upload-upload": "Subida nueva", + "log-action-filter-upload-overwrite": "Volver a subir" } diff --git a/languages/i18n/et.json b/languages/i18n/et.json index 5ce19556b4..038f8234b0 100644 --- a/languages/i18n/et.json +++ b/languages/i18n/et.json @@ -1278,7 +1278,7 @@ "recentchangeslinked-page": "Lehekülje nimi:", "recentchangeslinked-to": "Näita hoopis muudatusi lehekülgedel, mis sellele lehele lingivad", "recentchanges-page-added-to-category": "kategooriasse lisatud \"[[:$1]]\"", - "recentchanges-page-added-to-category-bundled": "kategooriasse lisatud \"[[:$1]]\" ja veel {{PLURAL:$2|üks lehekülg|$2 lehekülge}}", + "recentchanges-page-added-to-category-bundled": "kategooriasse lisatud \"[[:$1]]\" ja veel [[Special:WhatLinksHere/$1|{{PLURAL:$2|üks lehekülg|$2 lehekülge}}]]", "recentchanges-page-removed-from-category": "kategooriast eemaldatud \"[[:$1]]\"", "recentchanges-page-removed-from-category-bundled": "kategooriast eemaldatud \"[[:$1]]\" ja veel {{PLURAL:$2|üks lehekülg|$2 lehekülge}}", "autochange-username": "MediaWiki automaatne muudatus", @@ -1746,8 +1746,6 @@ "categories-submit": "Näita", "categoriespagetext": "Vikis on {{PLURAL:$1|järgmine kategooria|järgmised kategooriad}}.\nSiin ei näidata [[Special:UnusedCategories|kasutamata kategooriaid]].\nVaata ka [[Special:WantedCategories|puuduvaid kategooriaid]].", "categoriesfrom": "Näita kategooriaid alates:", - "special-categories-sort-count": "järjesta hulga järgi", - "special-categories-sort-abc": "järjesta tähestikuliselt", "deletedcontributions": "Kustutatud kaastöö", "deletedcontributions-title": "Kasutaja kustutatud kaastöö", "sp-deletedcontributions-contribs": "kaastöö", @@ -2359,11 +2357,7 @@ "import-logentry-upload-detail": "$1 {{PLURAL:$1|redaktsioon|redaktsiooni}} imporditud", "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|redaktsioon|redaktsiooni}} imporditud asukohast $2", "javascripttest": "JavaScripti katsetamine", - "javascripttest-pagetext-noframework": "Seda lehekülge hoitakse JavaScripti katsete jaoks.", - "javascripttest-pagetext-unknownframework": "Tundmatu katseraamistik \"$1\".", "javascripttest-pagetext-unknownaction": "Tundmatu toiming \"$1\".", - "javascripttest-pagetext-frameworks": "Palun vali üks järgmistest katseraamistikest: $1", - "javascripttest-pagetext-skins": "Vali kujundus, millega katsetada:", "javascripttest-qunit-intro": "Vaata [$1 katsetamise dokumentatsiooni] asukohas mediawiki.org.", "tooltip-pt-userpage": "Sinu kasutajaleht", "tooltip-pt-anonuserpage": "Sinu IP-aadressi kasutajalehekülg", @@ -2631,8 +2625,8 @@ "exif-colorspace": "Värviruum", "exif-componentsconfiguration": "Iga komponendi tähendus", "exif-compressedbitsperpixel": "Pildi pakkimise meetod", - "exif-pixelydimension": "Pildi laius", - "exif-pixelxdimension": "Pildi kõrgus", + "exif-pixelxdimension": "Pildi laius", + "exif-pixelydimension": "Pildi kõrgus", "exif-usercomment": "Kasutaja kommentaarid", "exif-relatedsoundfile": "Seotud helifail", "exif-datetimeoriginal": "Andmete loomise kuupäev ja kellaaeg", @@ -3091,7 +3085,6 @@ "version-libraries-description": "Kirjeldus", "version-libraries-authors": "Autorid", "redirect": "Ümbersuunamine faili, kasutaja, lehekülje või redaktsiooni identifikaatori järgi", - "redirect-legend": "Ümbersuunamine faili juurde või leheküljele", "redirect-summary": "See erilehekülg suunab ümber faili (toodud failinimi), lehekülje (toodud redaktsiooni või lehekülje identifikaator) või kasutajalehekülje (toodud numbriline kasutaja identfikaator) juurde. Kasutamine: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/page/64308]], [[{{#Special:Redirect}}/revision/328429]] või [[{{#Special:Redirect}}/user/101]].", "redirect-submit": "Mine", "redirect-lookup": "Leia:", @@ -3103,7 +3096,6 @@ "redirect-not-exists": "Väärtust ei leitud", "fileduplicatesearch": "Faili duplikaatide otsimine", "fileduplicatesearch-summary": "Otsi duplikaatfaile nende räsiväärtuse järgi.", - "fileduplicatesearch-legend": "Duplikaadi otsimine", "fileduplicatesearch-filename": "Faili nimi:", "fileduplicatesearch-submit": "Otsi", "fileduplicatesearch-info": "$1 × $2 pikslit
Faili suurus: $3
MIME-tüüp: $4", diff --git a/languages/i18n/eu.json b/languages/i18n/eu.json index e99ed78f69..9531e2ca91 100644 --- a/languages/i18n/eu.json +++ b/languages/i18n/eu.json @@ -593,7 +593,7 @@ "newarticle": "(Berria)", "newarticletext": "Orrialde hau ez da existitzen oraindik. Orrialde sortu nahi baduzu, beheko koadroan idazten hasi zaitezke (ikus [$1 laguntza orrialdea] informazio gehiagorako). Hona nahi gabe etorri bazara, nabigatzaileko '''atzera''' botoian klik egin.", "anontalkpagetext": "----''Orrialde hau konturik sortu ez edo erabiltzen ez duen erabiltzaile anonimo baten eztabaida orria da.\nBere IP helbidea erabili beharko da beraz identifikatzeko.\nErabiltzaile batek baino gehiagok IP bera erabil dezakete ordea.\nErabiltzaile anonimoa bazara eta zurekin zerikusirik ez duten mezuak jasotzen badituzu, mesedez [[Special:UserLogin/signup|Izena eman]] edo [[Special:UserLogin|saioa hasi]] etorkizunean horrelakoak gerta ez daitezen.''", - "noarticletext": "Oraindik ez dago testurik orri honetan.\nEdukiz hornitzeko, aukera hauek dituzu: beste orri batzuetan [[Special:Search/{{PAGENAME}}|orri izenburu hau bilatzea]],\n[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} lotutako logak bilatzea],\nedo [{{fullurl:{{FULLPAGENAME}}|action=edit}} orri hau editatzea].", + "noarticletext": "Oraindik ez dago testurik orri honetan.\nEdukiz hornitzeko, aukera hauek dituzu: beste orri batzuetan [[Special:Search/{{PAGENAME}}|orri izenburu hau bilatzea]],\n[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} lotutako logak bilatzea],\nedo [{{fullurl:{{FULLPAGENAME}}|action=edit}} orri hau sortzea].", "noarticletext-nopermission": "Une honetan ez dago testurik orrialde honetan.\nBeste orrialdeetan [[Special:Search/{{PAGENAME}}|izenburu hau bilatu dezakezu]],\nedo [{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} erlazionatutako erregistroak bilatu], baina ez duzu orrialde hau sortzeko baimenik.", "userpage-userdoesnotexist": "\"$1\" lankidea ez dago erregistatuta. Mesedez, konprobatu orri hau editatu/sortu nahi duzun.", "userpage-userdoesnotexist-view": "\"$1\" erabiltzaile-kontua ez dago erregistraturik.", @@ -1602,8 +1602,6 @@ "categories-submit": "Erakutsi", "categoriespagetext": "Ondorengo {{PLURAL:$1|kategoria honek|kategoria hauek}} orriak edo fitxategiak {{PLURAL:$1|dauzka|dauzkate}}.\n[[Special:UnusedCategories|Erabili gabeko kategoriak]] ez dira hemen erakusten.\nIkus, gainera, [[Special:WantedCategories|kategoriarik eskatuenak]].", "categoriesfrom": "Honela hasten diren kategoriak erakutsi:", - "special-categories-sort-count": "kontatetzearen arabera ordenatu", - "special-categories-sort-abc": "alfabetikoki aldatu", "deletedcontributions": "Ezabatutako ekarpenak", "deletedcontributions-title": "Ezabatutako ekarpenak", "sp-deletedcontributions-contribs": "ekarpenak", @@ -2165,11 +2163,7 @@ "import-logentry-upload-detail": "$1 {{PLURAL:$1|berrikuspen|berrikuspen}}", "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|berrikuspen|berrikuspen}} $2-(e)tik", "javascripttest": "JavaScript frogatzen", - "javascripttest-pagetext-noframework": "Orrialde hau JavaScript frogak egiteko gordeta dago.", - "javascripttest-pagetext-unknownframework": "Froga eremu ez-ezaguna \"$1\".", "javascripttest-pagetext-unknownaction": "Ekintza ezezaguna \"$1\".", - "javascripttest-pagetext-frameworks": "Mesedez, aukera ezazu froga eremu hauetako bat: $1", - "javascripttest-pagetext-skins": "Aukeratu frogak egiteko itxura bat:", "javascripttest-qunit-intro": "Ikusi [$1 frogen dokumentazioa] mediawiki.org orrialdean.", "tooltip-pt-userpage": "{{GENDER:|Zure lankide}} orria", "tooltip-pt-anonuserpage": "Zure IParen lankide orrialdea", @@ -2177,7 +2171,7 @@ "tooltip-pt-anontalk": "Zure IParen eztabaida", "tooltip-pt-preferences": "{{GENDER:|Zure}} hobespenak", "tooltip-pt-watchlist": "Jarraitzen dituzun orrialdeen zerrenda.", - "tooltip-pt-mycontris": "Nire ekarpenen zerrenda", + "tooltip-pt-mycontris": "{{GENDER:|Nire}} ekarpenen zerrenda", "tooltip-pt-anoncontribs": "IP helbide honetatik egindako aldaketen zerrenda", "tooltip-pt-login": "Izen ematera gonbidatzen zaitugu.", "tooltip-pt-logout": "Saioa itxi", @@ -2209,7 +2203,7 @@ "tooltip-t-recentchangeslinked": "Orri honetatik lotura duten orrietako azken aldaketak", "tooltip-feed-rss": "Orrialde honen RSS jarioa", "tooltip-feed-atom": "Orrialde honen atom jarioa", - "tooltip-t-contributions": "Lankide honen ekarpen zerrenda ikusi", + "tooltip-t-contributions": "{{GENDER:$1|Lankide honen}} ekarpen zerrenda ikusi", "tooltip-t-emailuser": "Lankide honi e-posta mezua bidali", "tooltip-t-info": "Orrialde honi buruzko informazio gehiago", "tooltip-t-upload": "Irudiak edo media fitxategiak igo", @@ -2423,8 +2417,8 @@ "exif-colorspace": "Kolore tartea", "exif-componentsconfiguration": "Osagai bakoitzaren esanahia", "exif-compressedbitsperpixel": "Irudi konpresio mota", - "exif-pixelydimension": "Irudiaren zabalera", - "exif-pixelxdimension": "Irudiaren altuera", + "exif-pixelxdimension": "Irudiaren zabalera", + "exif-pixelydimension": "Irudiaren altuera", "exif-usercomment": "Erabiltzailearen iruzkinak", "exif-relatedsoundfile": "Harremanetan dagoen audio fitxategia", "exif-datetimeoriginal": "Datuen sorreraren data eta ordua", @@ -2874,7 +2868,6 @@ "version-libraries-description": "Deskribapena", "version-libraries-authors": "Egileak", "redirect": "Birzuzendu fitxategi, lankide edo berrikuspen IDaren arabera", - "redirect-legend": "Orrialde edo fitxategi batera birzuzendu", "redirect-submit": "Joan", "redirect-lookup": "Ikuskatu:", "redirect-value": "Balioa:", @@ -2885,7 +2878,6 @@ "redirect-not-exists": "Ez da baliorik aurkitu", "fileduplicatesearch": "Artxibo bikoiztuen bilaketa", "fileduplicatesearch-summary": "Bikoiztutako fitxategiak bilatu bere hash balioaren arabera.", - "fileduplicatesearch-legend": "Duplikatu bat bilatu", "fileduplicatesearch-filename": "Fitxategi izena:", "fileduplicatesearch-submit": "Bilaketa", "fileduplicatesearch-info": "$1 × $2 pixel
Fitxategiaren tamaina: $3
MIME mota: $4", diff --git a/languages/i18n/ext.json b/languages/i18n/ext.json index ba573084a4..93d25bf156 100644 --- a/languages/i18n/ext.json +++ b/languages/i18n/ext.json @@ -969,8 +969,6 @@ "allpages-bad-ns": "{{SITENAME}} nu tieni el espaciu e nombris \"$1\".", "categories": "Categorias", "categoriespagetext": "Las siguientis categorias contienin artículus u archivus murtimeya.\n[[Special:UnusedCategories|Unused categories]] are not shown here.\nAlso see [[Special:WantedCategories|wanted categories]].", - "special-categories-sort-count": "ordenal pol cuenta", - "special-categories-sort-abc": "ordenal alfabeticamenti", "deletedcontributions": "Contribucionis el usuáriu esborrás", "deletedcontributions-title": "Contribucionis el usuáriu esborrás", "linksearch": "Atihus estelnus", @@ -1463,8 +1461,8 @@ "exif-colorspace": "Espaciu e colol", "exif-componentsconfiguration": "Senificau e ca componenti", "exif-compressedbitsperpixel": "Mó de compresión la imahin", - "exif-pixelydimension": "Anchón la imahin premitiu", - "exif-pixelxdimension": "Artu la imahin premitiu", + "exif-pixelxdimension": "Anchón la imahin premitiu", + "exif-pixelydimension": "Artu la imahin premitiu", "exif-usercomment": "Comentárius del usuáriu", "exif-relatedsoundfile": "Archivu d'audiu relacionau", "exif-datetimeoriginal": "Fecha i ora la heneración los datus", @@ -1693,7 +1691,6 @@ "version-software-product": "Proutu", "version-software-version": "Velsión", "fileduplicatesearch": "Landeal archivus dupricaus", - "fileduplicatesearch-legend": "Landeal dupricaus", "fileduplicatesearch-filename": "Nombri el archivu:", "fileduplicatesearch-submit": "Landeal", "fileduplicatesearch-info": "$1 × $2 pixel
Grandol del archivu: $3
Crasi MIME: $4", diff --git a/languages/i18n/fa.json b/languages/i18n/fa.json index 6b1e3e087f..4868e647c5 100644 --- a/languages/i18n/fa.json +++ b/languages/i18n/fa.json @@ -51,7 +51,8 @@ "Mahdy Saffar", "Arian Ar", "Ms96", - "Freshman404" + "Freshman404", + "Hamisun" ] }, "tog-underline": "خط کشیدن زیر پیوندها:", @@ -192,7 +193,6 @@ "moredotdotdot": "بیشتر...", "morenotlisted": "این فهرست کامل نیست.", "mypage": "صفحه", - "anonuserpage": "کاربر ناشناس", "mytalk": "بحث", "anontalk": "بحث", "navigation": "ناوبری", @@ -1300,7 +1300,7 @@ "recentchanges-noresult": "هیچ تغییری در طول دورهٔ تعیین‌شده با این معیارها هم‌خوانی نداشت.", "recentchanges-feed-description": "آخرین تغییرات ویکی را در این خوراک پی‌گیری کنید.", "recentchanges-label-newpage": "این ویرایش صفحه‌ای تازه ایجاد کرد", - "recentchanges-label-minor": "این یک ویرایش جزئی‌است", + "recentchanges-label-minor": "این یک ویرایش جزئی است", "recentchanges-label-bot": "این ویرایش را یک ربات انجام داده است", "recentchanges-label-unpatrolled": "این ویرایش هنوز گشت‌زنی نشده است", "recentchanges-label-plusminus": "حجم صفحه به اندازه این مقدار بایت تغییر یافته است", @@ -1355,9 +1355,9 @@ "recentchangeslinked-page": "نام صفحه:", "recentchangeslinked-to": "نمایش تغییرات صفحه‌هایی که به صفحهٔ داده‌شده پیوند دارند", "recentchanges-page-added-to-category": "[[:$1]] به رده اضافه شد", - "recentchanges-page-added-to-category-bundled": "[[:$1]] و {{PLURAL:$2|یک صفحه|$2 صفحه}}ٔ دیگر به رده اضافه شدند", + "recentchanges-page-added-to-category-bundled": "[[:$1]] و [[Special:WhatLinksHere/$1|{{PLURAL:$2|یک صفحه|$2 صفحه}}]]دیگر به رده اضافه شدند", "recentchanges-page-removed-from-category": "[[:$1]] از رده حذف شد", - "recentchanges-page-removed-from-category-bundled": "[[:$1]] و {{PLURAL:$2|یک صفحه|$2 صفحه}}ٔ دیگر از رده حذف شدند", + "recentchanges-page-removed-from-category-bundled": "[[:$1]] و [[Special:WhatLinksHere/$1|{{PLURAL:$2|یک صفحه|$2 صفحه}}]] دیگر از رده حذف شدند", "autochange-username": "تغییرات خودکار مدیاویکی", "upload": "بارگذاری پرونده", "uploadbtn": "بارگذاری پرونده", @@ -1536,6 +1536,7 @@ "uploadstash-badtoken": "انجام این اقدام ناموفق بود، احتمالاً به این دلیل که اعتبار ویرایش شما به اتمام رسیده است. لطفاً دوباره امتحان کنید.", "uploadstash-errclear": "پاک‌کردن پرونده‌ها ناموفق بود.", "uploadstash-refresh": "تازه کردن فهرست پرونده‌ها", + "uploadstash-thumbnail": "نمایش بندانگشتی", "invalid-chunk-offset": "جابجایی نامعتبر قطعه", "img-auth-accessdenied": "منع دسترسی", "img-auth-nopathinfo": "PATH_INFO موجود نیست.\nسرور شما برای ردکردن این مقدار تنظیم نشده‌است.\nممکن است مبتنی بر سی‌جی‌آی باشد و از img_auth پشتیبانی نکند.\nhttps://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Image_Authorization را ببینید.", @@ -1856,8 +1857,6 @@ "categories-submit": "نمایش", "categoriespagetext": "{{PLURAL:$1|ردهٔ|رده‌های}} زیر دارای صفحات یا پرونده‌هایی {{PLURAL:$1|است|هستند}}.\n[[Special:UnusedCategories|رده‌های استفاده‌نشده]] در اینجا نمایش داده نشده‌اند.\nهمچنین [[Special:WantedCategories|رده‌های مورد نیاز]] را ببینید.", "categoriesfrom": "نمایش رده‌ها با شروع از:", - "special-categories-sort-count": "مرتب کردن بر اساس تعداد", - "special-categories-sort-abc": "مرتب کردن الفبایی", "deletedcontributions": "مشارکت‌های حذف‌شده", "deletedcontributions-title": "مشارکت‌های حذف‌شده", "sp-deletedcontributions-contribs": "مشارکت‌ها", @@ -2234,6 +2233,7 @@ "ipb-unblock": "باز کردن نام کاربری یا نشانی آی‌پی", "ipb-blocklist": "دیدن قطع دسترسی‌های موجود", "ipb-blocklist-contribs": "مشارکت‌های $1", + "ipb-blocklist-duration-left": "$1 باقی مانده", "unblockip": "باز کردن کاربر", "unblockiptext": "برای بازگرداندن دسترسی نوشتن به یک نشانی آی‌پی یا نام کاربری بسته‌شده از فرم زیر استفاده کنید.", "ipusubmit": "باز کردن دسترسی", @@ -2475,11 +2475,7 @@ "import-logentry-upload-detail": "$1 {{PLURAL:$1|نسخه|نسخه}} واردشده", "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|نسخه|نسخه}} واردشده از $2", "javascripttest": "آزمایش جاوا اسکریپت", - "javascripttest-pagetext-noframework": "این صفحه برای اجرای آزمایش‌های جاوا اسکریپت کنار گذاشته شده‌است.", - "javascripttest-pagetext-unknownframework": "چارچوب آزمایشی ناشناخته «$1».", "javascripttest-pagetext-unknownaction": "تابع ناشناختهٔ \"$1\".", - "javascripttest-pagetext-frameworks": "لطفاً یکی از چارچوب‌های آزمایش زیر را انتخاب کنید: $1", - "javascripttest-pagetext-skins": "پوسته‌ای را برای اجرای آزمایش‌ها انتخاب کنید:", "javascripttest-qunit-intro": "[$1 مستندات آزمایش] را در mediawiki.org ببینید.", "tooltip-pt-userpage": "صفحهٔ {{GENDER:|کاربری شما}}", "tooltip-pt-anonuserpage": "صفحهٔ کاربری نشانی آی‌پی‌ای که با آن ویرایش می‌کنید", @@ -2741,8 +2737,8 @@ "exif-colorspace": "فضای رنگی", "exif-componentsconfiguration": "معنی هر یک از مؤلفه‌ها", "exif-compressedbitsperpixel": "حالت فشرده‌سازی تصویر", - "exif-pixelydimension": "پهنای تصویر", - "exif-pixelxdimension": "بلندی تصویر", + "exif-pixelxdimension": "پهنای تصویر", + "exif-pixelydimension": "بلندی تصویر", "exif-usercomment": "توضیحات کاربر", "exif-relatedsoundfile": "پروندهٔ صوتی مربوط", "exif-datetimeoriginal": "تاریخ و زمان تولید داده‌ها", @@ -3247,7 +3243,6 @@ "version-libraries-description": "توضیحات", "version-libraries-authors": "نویسندگان", "redirect": "تغییرمسیر توسط پرونده، کاربر، صفحه یا سیاههٔ شناسهٔ نسخه", - "redirect-legend": "تغییرمسیر به یک پرونده یا صفحه", "redirect-summary": "این صفحهٔ ویژه به پرونده (نام پرونده داده‌شده)، صفحه (شماره شناسهٔ صفحه یا شماره نسخهٔ داده‌شده) یا صفحهٔ کاربری (شناسهٔ عددی کاربری داده‌شده) تغییرمسیر می‌یابد. طرز استفاده: [[{{#Special:Redirect}}/file/Example.jpg]]، \n[[{{#Special:Redirect}}/page/64308]]، [[{{#Special:Redirect}}/revision/328429]] یا [[{{#Special:Redirect}}/user/101]] یا\n[[{{#Special:Redirect}}/logid/186]].", "redirect-submit": "برو", "redirect-lookup": "جستجو:", @@ -3260,7 +3255,6 @@ "redirect-not-exists": "مقدار پیدا نشد", "fileduplicatesearch": "جستجو برای پرونده‌های تکراری", "fileduplicatesearch-summary": "جستجو برای پرونده‌های تکراری بر اساس مقدار درهم‌شدهٔ آن‌ها صورت می‌گیرد.", - "fileduplicatesearch-legend": "جستجوی موارد تکراری", "fileduplicatesearch-filename": "نام پرونده:", "fileduplicatesearch-submit": "جستجو", "fileduplicatesearch-info": "$1 × $2 پیکسل
اندازهٔ پرونده: $3
نوع MIME: $4", @@ -3644,6 +3638,7 @@ "special-characters-group-ipa": "آوانگاری بین‌المللی", "special-characters-group-symbols": "نمادها", "special-characters-group-greek": "یونانی", + "special-characters-group-greekextended": "یونانی قدیمی", "special-characters-group-cyrillic": "سیریلیک", "special-characters-group-arabic": "عربی", "special-characters-group-arabicextended": "عربی گسترش‌یافته", @@ -3669,5 +3664,46 @@ "sessionprovider-generic": "$1 فصل", "sessionprovider-mediawiki-session-cookiesessionprovider": "فصل‌های کوکی‌محور", "sessionprovider-nocookies": "کوکی‌ها ممکن است غیر فعال شده باشند. اطمینان کسب کنید که کوکی‌ها را فعال کرده‌اید و دوباره آغاز کنید.", - "randomrootpage": "صفحهٔ ریشهٔ تصادفی" + "randomrootpage": "صفحهٔ ریشهٔ تصادفی", + "log-action-filter-block": "نوع بسته شدن:", + "log-action-filter-delete": "نوع حذف:", + "log-action-filter-import": "نوع واردات", + "log-action-filter-managetags": "نوع مدیریت", + "log-action-filter-move": "نوع حرکت", + "log-action-filter-newusers": "نوع ایجاد حساب", + "log-action-filter-patrol": "نوع گشت:", + "log-action-filter-protect": "نوع محافظت", + "log-action-filter-rights": "روش تغییر صحیح", + "log-action-filter-suppress": "روش سرکوب", + "log-action-filter-upload": "نوع بارگذاری", + "log-action-filter-all": "همه", + "log-action-filter-block-block": "بستن", + "log-action-filter-block-reblock": "تصحیح بلاک", + "log-action-filter-block-unblock": "باز شدن", + "log-action-filter-contentmodel-change": "تغییر نوع محتوا", + "log-action-filter-delete-delete": "حذف صفحه", + "log-action-filter-delete-restore": "احیای صفحه", + "log-action-filter-delete-event": "حذف سیاهه", + "log-action-filter-delete-revision": "حذف ویرایش", + "log-action-filter-import-interwiki": "ورودی ترانسویکی", + "log-action-filter-managetags-create": "ایجاد تگ", + "log-action-filter-managetags-delete": "حذف کردن تگ", + "log-action-filter-managetags-activate": "فعالسازی تگ", + "log-action-filter-managetags-deactivate": "تغییر تگ", + "log-action-filter-newusers-create": "ایجاد شده توسط کاربر ناشناس", + "log-action-filter-newusers-create2": "ایجاد شده توسط کاربر ثبت نام شده", + "log-action-filter-newusers-autocreate": "ایجاد خودکار", + "log-action-filter-newusers-byemail": "ایجاد پسورد با ارسال به ایمیل", + "log-action-filter-patrol-autopatrol": "گشت خودکار", + "log-action-filter-protect-protect": "محافظت", + "log-action-filter-protect-modify": "اصلاح حفاظت", + "log-action-filter-protect-unprotect": "خروج از محافظت", + "log-action-filter-protect-move_prot": "حرکت محافظت شده", + "log-action-filter-rights-rights": "تغیبر دستی", + "log-action-filter-rights-autopromote": "تغییر اتوماتیک", + "log-action-filter-suppress-event": "جلوگیری از ورود", + "log-action-filter-suppress-revision": "جلوگیری از ویرایش", + "log-action-filter-suppress-delete": "متوقف سازی صفحه", + "log-action-filter-upload-upload": "بارگذاری جدید", + "log-action-filter-upload-overwrite": "بارگذاری دوباره" } diff --git a/languages/i18n/fi.json b/languages/i18n/fi.json index d8a57295dd..0c854204ad 100644 --- a/languages/i18n/fi.json +++ b/languages/i18n/fi.json @@ -47,7 +47,8 @@ "Macofe", "Beluga", "Pyscowicz", - "Olimar" + "Olimar", + "Mikahama" ] }, "tog-underline": "Linkkien alleviivaus:", @@ -486,7 +487,7 @@ "nocookieslogin": "{{SITENAME}} käyttää evästeitä sisäänkirjautumisen yhteydessä. Selaimesi ei salli evästeitä. Ota ne käyttöön, ja yritä uudelleen.", "nocookiesfornew": "Käyttäjätunnusta ei luotu, koska sen lähdettä ei kyetty varmistamaan. Varmista, että selaimessasi on käytössä evästeet, päivitä tämä sivu ja yritä uudelleen.", "noname": "Et ole määritellyt kelvollista käyttäjänimeä.", - "loginsuccesstitle": "Sisäänkirjautuminen onnistui", + "loginsuccesstitle": "Olet kirjautunut sisään", "loginsuccess": "'''Olet kirjautunut sivustolle {{SITENAME}} käyttäjänä $1.'''", "nosuchuser": "Käyttäjää ”$1” ei ole olemassa. Nimet ovat kirjainkoosta riippuvaisia. Tarkista kirjoititko nimen oikein, tai [[Special:UserLogin/signup|luo uusi käyttäjätunnus]].", "nosuchusershort": "Käyttäjää nimeltä ”$1” ei ole. Kirjoititko nimen oikein?", @@ -542,16 +543,18 @@ "newpassword": "Uusi salasana:", "retypenew": "Uusi salasana uudelleen:", "resetpass_submit": "Aseta salasana ja kirjaudu sisään", - "changepassword-success": "Salasanan vaihto onnistui.", + "changepassword-success": "Salasanasi on vaihdettu!", "changepassword-throttled": "Olet tehnyt liian monta äskettäistä kirjautumisyritystä.\nOdota $1 ennen kuin yrität uudelleen.", "botpasswords": "Botin salasanat", "botpasswords-disabled": "Botin salasanat on poistettu käytöstä.", + "botpasswords-label-appid": "Botin nimi:", "botpasswords-label-create": "Luo", "botpasswords-label-update": "Päivitä", "botpasswords-label-cancel": "Peru", "botpasswords-label-delete": "Poista", "botpasswords-label-resetpassword": "Uudista salasana", "botpasswords-label-grants": "Valittavissa olevat toimintaoikeudet:", + "botpasswords-label-restrictions": "Käyttörajoitukset:", "resetpass_forbidden": "Salasanoja ei voi vaihtaa.", "resetpass-no-info": "Et voi nähdä tätä sivua kirjautumatta sisään.", "resetpass-submit-loggedin": "Muuta salasana", @@ -840,9 +843,9 @@ "revdelete-unsuppress": "Poista rajoitukset palautetuilta versioilta", "revdelete-log": "Syy:", "revdelete-submit": "Toteuta {{PLURAL:$1|valittuun versioon|valittuihin versioihin}}", - "revdelete-success": "'''Version näkyvyys päivitetty.'''", + "revdelete-success": "Version näkyvyys päivitetty.", "revdelete-failure": "'''Version näkyvyyden muuttaminen ei onnistunut:'''\n$1", - "logdelete-success": "'''Lokitapahtuman näkyvyyttä on muutettu.'''", + "logdelete-success": "Lokitapahtuman näkyvyyttä on muutettu.", "logdelete-failure": "'''Lokin näkyvyyttä ei voitu asettaa:'''\n$1", "revdel-restore": "muuta näkyvyyttä", "pagehist": "Sivun muutoshistoria", @@ -1085,7 +1088,7 @@ "userrights-changeable-col": "Ryhmät, joita voit muuttaa", "userrights-unchangeable-col": "Ryhmät, joita et voi muuttaa", "userrights-conflict": "Päällekkäinen käyttöoikeuksien muutos! Tarkista tekemäsi muutokset ja vahvista ne.", - "userrights-removed-self": "Poistit onnistuneesti omat oikeutesi. Tämän jälkeen et enää pääse tälle sivulle.", + "userrights-removed-self": "Poistit omat oikeutesi. Tämän vuoksi sinulla ei enää ole oikeutta päästä tälle sivulle.", "group": "Ryhmä", "group-user": "käyttäjät", "group-autoconfirmed": "automaattisesti hyväksytyt käyttäjät", @@ -1321,9 +1324,9 @@ "recentchangeslinked-page": "Sivun nimi:", "recentchangeslinked-to": "Näytä sen sijaan muutokset sivuihin, joista on linkki tähän sivuun", "recentchanges-page-added-to-category": "[[:$1]] lisätty luokkaan", - "recentchanges-page-added-to-category-bundled": "[[:$1]] ja {{PLURAL:$2|one page|$2 pages}} lisätty luokkaan", + "recentchanges-page-added-to-category-bundled": "[[:$1]] ja [[Special:WhatLinksHere/$1|{{PLURAL:$2|yksi sivu|$2 sivua}}]] lisätty luokkaan", "recentchanges-page-removed-from-category": "[[:$1]] poistettu luokasta", - "recentchanges-page-removed-from-category-bundled": "[[:$1]] ja {{PLURAL:$2|one page|$2 pages}} poistettu luokasta", + "recentchanges-page-removed-from-category-bundled": "[[:$1]] ja [[Special:WhatLinksHere/$1|{{PLURAL:$2|yksi sivu|$2 sivua}}]] poistettu luokasta", "autochange-username": "MediaWiki automaattinen muutos", "upload": "Tallenna tiedosto", "uploadbtn": "Tallenna tiedosto", @@ -1496,9 +1499,10 @@ "uploadstash-summary": "Tämä sivu tarjoaa pääsyn tiedostoihin, jotka on tallennettu tai joiden tallennus on käynnissä, mutta joita ei ole vielä julkaistu tässä wikissä. Vain tiedostot tallentanut käyttäjä voi tarkastella näitä tiedostoja.", "uploadstash-clear": "Poista muistissa olevat tiedostot", "uploadstash-nofiles": "Sinulla ei ole muistissa olevia tiedostoja.", - "uploadstash-badtoken": "Toiminnon suoritus epäonnistui. Tähän voi olla syynä muokkausvaltuuksien vanhentuminen. Yritä uudelleen.", - "uploadstash-errclear": "Muistin tyhjennys epäonnistui.", + "uploadstash-badtoken": "Toiminnon suorittaminen epäonnistui. Tähän saattaa olla syynä muokkausvaltuuksiesi vanhentuminen. Yritä uudelleen.", + "uploadstash-errclear": "Tiedostojen tyhjentäminen epäonnistui.", "uploadstash-refresh": "Päivitä tiedostoluettelo", + "uploadstash-thumbnail": "näytä pienoiskuva", "invalid-chunk-offset": "Kelpaamaton siirtymä lohkoissa", "img-auth-accessdenied": "Pääsy estetty", "img-auth-nopathinfo": "PATH_INFO puuttuu.\nPalvelintasi ei ole asetettu välittämään tätä tietoa.\nSe saattaa olla CGI-pohjainen eikä voi tukea img_authia.\nLisätietoja löytyy sivulta https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Image_Authorization.", @@ -1631,10 +1635,10 @@ "statistics-header-hooks": "Muut tilastot", "statistics-articles": "Sisältösivuja", "statistics-pages": "Sivuja", - "statistics-pages-desc": "Kaikki sivut, sisältäen keskustelusivut, ohjaukset ja muut.", + "statistics-pages-desc": "Kaikki wikissä olevat sivut, mukaan lukien keskustelusivut, ohjaussivut ynnä muut.", "statistics-files": "Tallennettuja tiedostoja", "statistics-edits": "Muokkauksia {{GRAMMAR:genitive|{{SITENAME}}}} perustamisen jälkeen", - "statistics-edits-average": "Keskimäärin yhtä sivua muokattu", + "statistics-edits-average": "Muokkausten keskiarvo yhdellä sivulla", "statistics-users": "Rekisteröityneitä [[Special:ListUsers|käyttäjiä]]", "statistics-users-active": "Aktiivisia käyttäjiä", "statistics-users-active-desc": "Käyttäjät, jotka ovat suorittaneet jonkin toiminnon {{PLURAL:$1|edellisen päivän|edellisten $1 päivän}} aikana.", @@ -1749,7 +1753,7 @@ "apisandbox-api-disabled": "API on poistettu käytöstä tällä sivustolla.", "apisandbox-intro": "Tämä on '''MediaWiki API:n''' hiekkalaatikko.\n[//www.mediawiki.org/wiki/API:Main_page API-dokumentaatio] kertoo lisää API:en käytöstä.", "apisandbox-fullscreen": "Laajenna paneeli", - "apisandbox-unfullscreen": "Näytä sivu", + "apisandbox-unfullscreen": "Palaa sivunäkymään", "apisandbox-submit": "Tee pyyntö", "apisandbox-reset": "Tyhjennä", "apisandbox-retry": "Yritä uudestaan", @@ -1810,8 +1814,6 @@ "categories-submit": "Näytä", "categoriespagetext": "{{PLURAL:$1|Seuraava luokka sisältää|Seuraavat luokat sisältävät}} sivuja tai mediatiedostoja.\n[[Special:UnusedCategories|Käyttämättömiä luokkia]] ei näytetä.\nKatso myös [[Special:WantedCategories|halutut luokat]].", "categoriesfrom": "Näytä alkaen luokasta", - "special-categories-sort-count": "järjestä koon mukaan", - "special-categories-sort-abc": "järjestä nimen mukaan", "deletedcontributions": "Poistetut muokkaukset", "deletedcontributions-title": "Poistetut muokkaukset", "sp-deletedcontributions-contribs": "muokkaukset", @@ -1978,7 +1980,7 @@ "delete-toobig": "Tällä sivulla on pitkä muokkaushistoria, yli $1 {{PLURAL:$1|versio|versiota}}. \nTämänkaltaisten sivujen poistamista on rajoitettu. Tällä ehkäistään sivuston {{SITENAME}} vaurioitumista tahattomasti.", "delete-warning-toobig": "Tällä sivulla on pitkä muutoshistoria – yli $1 {{PLURAL:$1|versio|versiota}}. Näin suurien muutoshistorioiden poistaminen voi haitata sivuston suorituskykyä.", "deleteprotected": "Et voi poistaa tätä sivua, koska se on suojattu.", - "deleting-backlinks-warning": "'''Varoitus:''' Sivulle, jota olet poistamassa, johtaa [[Special:WhatLinksHere/{{FULLPAGENAME}}|linkkejä muilta sivuilta]], tai sivu on sisällytetty muuhun sivuun.", + "deleting-backlinks-warning": "Varoitus: Sivulle, jota olet poistamassa, johtaa [[Special:WhatLinksHere/{{FULLPAGENAME}}|linkkejä muilta sivuilta]], taikka sivu on sisällytetty muuhun sivuun.", "rollback": "palauta aiempaan versioon", "rollbacklink": "palauta", "rollbacklinkcount": "palauta $1 {{PLURAL:$1|muutos|muutosta}}", @@ -1997,12 +1999,14 @@ "changecontentmodel-title-label": "Sivun otsikko", "changecontentmodel-model-label": "Uusi sisältömalli", "changecontentmodel-reason-label": "Syy:", + "changecontentmodel-submit": "Tee muutos", "changecontentmodel-success-title": "Sisältömallia on muutettu", "changecontentmodel-success-text": "Sisältötyyppiä kohteessa [[:$1]] on muutettu.", "changecontentmodel-cannot-convert": "Sisältöä sivulla [[:$1]] ei voida muuntaa tyypiksi $2.", "changecontentmodel-nodirectediting": "Sisältömalli $1 ei tue suoraa muokkaamista", "log-name-contentmodel": "Sisältömallin muutosloki", "log-description-contentmodel": "Tapahtumat, jotka liittyvät sivun sisältömalleihin", + "logentry-contentmodel-new": "$1 {{GENDER:$2|loi}} sivun $3 käyttäen normaalista poikkeavaa sisältömallia \"$5\"", "logentry-contentmodel-change": "$1 {{GENDER:$2|muutti}} sivun $3 sisältömallia muodosta \"$4\" muotoon \"$5\"", "logentry-contentmodel-change-revertlink": "kumoa", "logentry-contentmodel-change-revert": "kumottu", @@ -2185,6 +2189,7 @@ "ipb-unblock": "Poista käyttäjän tai IP-osoitteen muokkausesto", "ipb-blocklist": "Näytä voimassa olevat estot", "ipb-blocklist-contribs": "Käyttäjän {{GENDER:$1|$1}} muokkaukset", + "ipb-blocklist-duration-left": "$1 jäljellä", "unblockip": "Muokkauseston poisto käyttäjältä", "unblockiptext": "Tällä lomakkeella voit poistaa käyttäjän tai IP-osoitteen muokkauseston.", "ipusubmit": "Poista tämä esto", @@ -2426,11 +2431,7 @@ "import-logentry-upload-detail": "$1 {{PLURAL:$1|versio|versiota}} tuotiin", "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|versio|versiota}} tuotiin wikistä $2", "javascripttest": "JavaScriptin testaus", - "javascripttest-pagetext-noframework": "Tämä sivu on varattu JavaScript-testien suorittamiseen.", - "javascripttest-pagetext-unknownframework": "Tuntematon testausalusta $1.", "javascripttest-pagetext-unknownaction": "Tuntematon toiminto \"$1\".", - "javascripttest-pagetext-frameworks": "Valitse yksi seuraavista testausalustoista: $1", - "javascripttest-pagetext-skins": "Valitse testauksessa käytettävä ulkoasu", "javascripttest-qunit-intro": "Katso [$1 testausohjeet] mediawiki.orgissa.", "tooltip-pt-userpage": "{{GENDER:|Oma käyttäjäsivusi}}", "tooltip-pt-anonuserpage": "IP-osoitteesi käyttäjäsivu", @@ -2595,7 +2596,7 @@ "patrol-log-page": "Muutostentarkastusloki", "patrol-log-header": "Tämä on loki tarkastetuista muutoksista.", "log-show-hide-patrol": "$1 muutostentarkastusloki", - "log-show-hide-tag": "$1 merkkausten loki", + "log-show-hide-tag": "$1 merkkausloki", "deletedrevision": "Poistettiin vanha versio $1", "filedeleteerror-short": "Tiedoston $1 poistaminen epäonnistui", "filedeleteerror-long": "Tiedoston poistaminen epäonnistui:\n\n$1", @@ -2698,8 +2699,8 @@ "exif-colorspace": "Väriavaruus", "exif-componentsconfiguration": "Kunkin komponentin määritelmä", "exif-compressedbitsperpixel": "Kuvan pakkaustapa", - "exif-pixelydimension": "Kuvan leveys", - "exif-pixelxdimension": "Kuvan korkeus", + "exif-pixelxdimension": "Kuvan leveys", + "exif-pixelydimension": "Kuvan korkeus", "exif-usercomment": "Käyttäjän kommentit", "exif-relatedsoundfile": "Liitetty äänitiedosto", "exif-datetimeoriginal": "Luontipäivämäärä", @@ -3160,7 +3161,6 @@ "version-libraries-description": "Kuvaus", "version-libraries-authors": "Tekijät", "redirect": "Ohjaus tiedoston, käyttäjän, sivun, sivuversion tai lokin tunnistenumeron mukaan", - "redirect-legend": "Ohjaus tiedostoon tai sivulle", "redirect-summary": "Tämä toimintosivu ohjaa tiedostoon (tiedostonimen mukaan), sivulle (version tunnistenumeron tai sivun tunnistenumeron mukaan), käyttäjäsivulle (käyttäjän tunnistenumeron mukaan) taikka lokimerkintään (lokin tunnistenumeron mukaan). Käytetään seuraavasti: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/page/64308]], [[{{#Special:Redirect}}/revision/328429]],[[{{#Special:Redirect}}/user/101]] tai [[{{#Special:Redirect}}/logid/186]].", "redirect-submit": "Siirry", "redirect-lookup": "Hae:", @@ -3173,7 +3173,6 @@ "redirect-not-exists": "Arvoa ei löytynyt", "fileduplicatesearch": "Kaksoiskappaleiden haku", "fileduplicatesearch-summary": "Etsii tiedoston kaksoiskappaleita hajautusarvon perusteella.", - "fileduplicatesearch-legend": "Etsi kaksoiskappaleita", "fileduplicatesearch-filename": "Tiedostonimi", "fileduplicatesearch-submit": "Etsi", "fileduplicatesearch-info": "$1 × $2 kuvapistettä
Tiedostokoko: $3
MIME-tyyppi: $4", @@ -3245,7 +3244,7 @@ "tags-delete-not-allowed": "Sellaisia merkkauksia, jotka tulevat erityisestä ohjelmistolaajennuksesta, ei voi poistaa ennen kuin tämä laajennus erityisesti sallii sen.", "tags-delete-not-found": "Merkkausta \"$1\" ei ole olemassa.", "tags-delete-too-many-uses": "Tämä merkkaus \"$1\" on käytössä useammassa kuin $2 sivuversiossa, joten sitä ei voi poistaa.", - "tags-delete-warnings-after-delete": "Merkkaus \"$1\" poistettiin onnistuneesta, mutta {{PLURAL:$2|seuraava varoitus|seuraavat varoitukset}} ilmeni samalla:", + "tags-delete-warnings-after-delete": "Merkkaus \"$1\" poistettiin, mutta toimenpide sai aikaan {{PLURAL:$2|seuraavan varoituksen|seuraavat varoitukset}}:", "tags-activate-title": "Aktivoi merkkaus", "tags-activate-question": "Olet nyt aktivoimassa merkkausta \"$1\".", "tags-activate-reason": "Syy:", @@ -3284,7 +3283,7 @@ "tags-edit-reason": "Syy:", "tags-edit-revision-submit": "Toteuta muutokset {{PLURAL:$1|tähän versioon|$1 versioon}}", "tags-edit-logentry-submit": "Lähetä muutoksesi {{PLURAL:$1|tähän lokimerkintään|$1 lokimerkintään}}", - "tags-edit-success": "Muutokset on onnistuneesti toteutettu.", + "tags-edit-success": "Muutokset on tehty.", "tags-edit-failure": "Muutoksia ei voitu toteuttaa: $1", "tags-edit-nooldid-title": "Kohdeversio ei ole kelvollinen", "tags-edit-nooldid-text": "Et ole joko määrittänyt sitä kohdeversiota, johon tämä toimenpide kohdistuu, tai sitten määrättyä versiota ei ole olemassa.", @@ -3374,7 +3373,7 @@ "logentry-protect-protect-cascade": "$1 {{GENDER:$2|suojasi}} kohteen $3 $4 [tarttuvasti]", "logentry-protect-modify": "$1 {{GENDER:$2|muutti}} suojauksen tasoa kohteessa $3 $4", "logentry-protect-modify-cascade": "$1 {{GENDER:$2|muutti}} suojauksen tasoa kohteessa $3 $4 [tarttuvasti]", - "logentry-rights-rights": "$1 {{GENDER:$2|muutti}} käyttäjän $3 oikeudet ryhmistä $4 ryhmiin $5", + "logentry-rights-rights": "$1 {{GENDER:$2|muutti}} käyttäjän {{GENDER:$3|$3}} oikeudet ryhmistä $4 ryhmiin $5", "logentry-rights-rights-legacy": "$1 {{GENDER:$2|muutti}} käyttäjän $3 jäsenyyttä ryhmässä", "logentry-rights-autopromote": "Käyttäjän $1 oikeudet {{GENDER:$2|muuttuivat}} automaattisesti ryhmistä $4 ryhmiin $5", "logentry-upload-upload": "$1 {{GENDER:$2|tallensi}} tiedoston $3", @@ -3467,6 +3466,7 @@ "api-error-unknownerror": "Tuntematon virhe: $1.", "api-error-uploaddisabled": "Tiedostojen tallentaminen ei ole käytössä.", "api-error-verification-error": "Tiedosto voi olla vioittunut, tai sillä saattaa olla väärä tiedostopääte.", + "api-error-was-deleted": "Tämänniminen tiedosto on aikaisemmin tallennettu ja sittemmin poistettu.", "duration-seconds": "$1 {{PLURAL:$1|sekunti|sekuntia}}", "duration-minutes": "$1 {{PLURAL:$1|minuutti|minuuttia}}", "duration-hours": "$1 {{PLURAL:$1|tunti|tuntia}}", @@ -3557,6 +3557,7 @@ "special-characters-group-ipa": "Kansainvälinen foneettinen kirjaimisto (IPA)", "special-characters-group-symbols": "Symbolit", "special-characters-group-greek": "Kreikka", + "special-characters-group-greekextended": "Laajennettu kreikka", "special-characters-group-cyrillic": "Kyrillinen", "special-characters-group-arabic": "Arabia", "special-characters-group-arabicextended": "Laajennettu arabia", @@ -3584,5 +3585,51 @@ "sessionprovider-generic": "$1 istuntoa", "sessionprovider-mediawiki-session-cookiesessionprovider": "istuntoja, joissa on evästeet käytössä", "sessionprovider-nocookies": "Evästeet on voitu poistaa käytöstä. Varmista, että sinulla on evästeet käytössä ja yritä sitten uudelleen.", - "randomrootpage": "Satunnainen juurisivu" + "randomrootpage": "Satunnainen juurisivu", + "log-action-filter-block": "Eston tyyppi:", + "log-action-filter-contentmodel": "Sisältömallin muutoksen tyyppi:", + "log-action-filter-delete": "Poiston tyyppi:", + "log-action-filter-import": "Tuonnin tyyppi:", + "log-action-filter-managetags": "Merkkausten hallintatoimenpiteen tyyppi:", + "log-action-filter-move": "Siirron tyyppi:", + "log-action-filter-newusers": "Käyttäjätunnuksen luomisen tyyppi:", + "log-action-filter-patrol": "Tarkastuksen tyyppi:", + "log-action-filter-protect": "Suojauksen tyyppi:", + "log-action-filter-rights": "Käyttöoikeuksien muutoksen tyyppi:", + "log-action-filter-suppress": "Häivyttämisen tyyppi:", + "log-action-filter-upload": "Tallennuksen tyyppi:", + "log-action-filter-all": "Kaikki", + "log-action-filter-block-block": "Eston asettaminen", + "log-action-filter-block-reblock": "Estoasetusten muuttaminen", + "log-action-filter-block-unblock": "Eston poistaminen", + "log-action-filter-contentmodel-change": "Sisältömallin muuttaminen", + "log-action-filter-delete-delete": "Sivun poistaminen", + "log-action-filter-delete-restore": "Sivun palauttaminen", + "log-action-filter-delete-event": "Lokimerkinnän poistaminen", + "log-action-filter-delete-revision": "Version piilottaminen", + "log-action-filter-import-interwiki": "Tuonti wikien välillä", + "log-action-filter-import-upload": "Tuonti XML-tallennuksella", + "log-action-filter-managetags-create": "Merkkauksen luominen", + "log-action-filter-managetags-delete": "Merkkauksen tuhoaminen", + "log-action-filter-managetags-activate": "Merkkauksen ottaminen käyttöön", + "log-action-filter-managetags-deactivate": "Merkkauksen poistaminen käytöstä", + "log-action-filter-move-move": "Siirto ilman että ohjaussivu korvataan", + "log-action-filter-move-move_redir": "Siirto joka korvaa ohjauksen", + "log-action-filter-newusers-create": "Luonut rekisteröimätön käyttäjä", + "log-action-filter-newusers-create2": "Luonut rekisteröity käyttäjä", + "log-action-filter-newusers-autocreate": "Luotu automaattisesti", + "log-action-filter-newusers-byemail": "Luotu salasanalla, joka on lähetetty sähköpostitse", + "log-action-filter-protect-protect": "Suojauksen asettaminen", + "log-action-filter-protect-modify": "Suojausasetusten muuttaminen", + "log-action-filter-protect-unprotect": "Suojauksen poistaminen", + "log-action-filter-protect-move_prot": "Suojausasetusten siirtäminen", + "log-action-filter-rights-rights": "Käsin tehty muutos", + "log-action-filter-rights-autopromote": "Automaattinen muutos", + "log-action-filter-suppress-event": "Lokimerkinnän häivyttäminen", + "log-action-filter-suppress-revision": "Version häivyttäminen", + "log-action-filter-suppress-delete": "Sivun häivyttäminen", + "log-action-filter-suppress-block": "Käyttäjätunnuksen häivyttäminen estämällä se", + "log-action-filter-suppress-reblock": "Käyttäjätunnuksen häivyttäminen uudella estolla", + "log-action-filter-upload-upload": "Uusi tallennus", + "log-action-filter-upload-overwrite": "Päälletallennus" } diff --git a/languages/i18n/fr.json b/languages/i18n/fr.json index cd0cfd0cf8..972528ea44 100644 --- a/languages/i18n/fr.json +++ b/languages/i18n/fr.json @@ -136,7 +136,10 @@ "Fredlefred", "Lbayle", "Cl3m3n7", - "C13m3n7" + "C13m3n7", + "Gnangbade", + "Frigory", + "Lemondoge" ] }, "tog-underline": "Soulignement des liens :", @@ -147,44 +150,45 @@ "tog-extendwatchlist": "Étendre la liste de suivi pour afficher toutes les modifications et pas uniquement les plus récentes", "tog-usenewrc": "Grouper les changements par page dans les modifications récentes et la liste de suivi", "tog-numberheadings": "Numéroter automatiquement les titres de section", - "tog-showtoolbar": "Afficher la barre d’outils de modification", - "tog-editondblclick": "Modifier des pages sur double-clic", + "tog-showtoolbar": "Afficher la barre d’outils d’édition", + "tog-editondblclick": "Modifier les pages avec un double-clic", "tog-editsectiononrightclick": "Activer la modification des sections par un clic droit sur les titres de section", "tog-watchcreations": "Ajouter à ma liste de suivi les pages que je crée et les fichiers que j’importe", "tog-watchdefault": "Ajouter à ma liste de suivi les pages et les fichiers que je modifie", "tog-watchmoves": "Ajouter à ma liste de suivi les pages et les fichiers que je renomme", "tog-watchdeletion": "Ajouter à ma liste de suivi les pages et les fichiers que je supprime", + "tog-watchuploads": "Ajouter les nouveaux fichiers que j’importe à ma liste de suivi", "tog-watchrollback": "Ajouter à ma liste de suivi les pages sur lesquelles j’ai effectué une révocation", - "tog-minordefault": "Marquer toutes mes modifications comme mineures par défaut", - "tog-previewontop": "Afficher la prévisualisation avant la zone de modification", + "tog-minordefault": "Marquer mes modifications comme étant mineures par défaut", + "tog-previewontop": "Afficher la prévisualisation avant la zone d’édition", "tog-previewonfirst": "Afficher la prévisualisation lors de la première modification", - "tog-enotifwatchlistpages": "M'avertir par courriel lorsqu'une page ou un fichier de ma liste de suivi est modifié", - "tog-enotifusertalkpages": "M'avertir par courriel si ma page de discussion est modifiée", - "tog-enotifminoredits": "M'avertir par courriel également lors des modifications mineures des pages ou des fichiers", - "tog-enotifrevealaddr": "Afficher mon adresse de courriel dans les courriels de notification", - "tog-shownumberswatching": "Afficher le nombre d'utilisateurs qui suivent la page", + "tog-enotifwatchlistpages": "M’avertir par courriel lorsqu’une page ou un fichier de ma liste de suivi est modifié", + "tog-enotifusertalkpages": "M’avertir par courriel si ma page de discussion est modifiée", + "tog-enotifminoredits": "M’avertir par courriel également lors des modifications mineures des pages ou des fichiers", + "tog-enotifrevealaddr": "Afficher mon adresse électronique dans les courriels de notification", + "tog-shownumberswatching": "Afficher le nombre d’utilisateurs qui suivent la page", "tog-oldsig": "Signature existante :", "tog-fancysig": "Traiter la signature comme du wikitexte (sans lien automatique)", "tog-uselivepreview": "Utiliser l’aperçu rapide", - "tog-forceeditsummary": "M'avertir lorsque je n'ai pas spécifié de résumé de modification", + "tog-forceeditsummary": "M’avertir lorsque je n’ai pas spécifié de résumé de modification", "tog-watchlisthideown": "Masquer mes propres modifications dans la liste de suivi", "tog-watchlisthidebots": "Masquer les modifications faites par des robots dans la liste de suivi", "tog-watchlisthideminor": "Masquer les modifications mineures dans la liste de suivi", "tog-watchlisthideliu": "Masquer les modifications faites par des utilisateurs inscrits dans la liste de suivi", "tog-watchlistreloadautomatically": "Recharger automatiquement la liste de suivi lorsque les options de filtrage sont modifiées (JavaScript requis)", - "tog-watchlisthideanons": "Masquer les modifications d'utilisateurs anonymes dans la liste de suivi", + "tog-watchlisthideanons": "Masquer les modifications d’utilisateurs anonymes dans la liste de suivi", "tog-watchlisthidepatrolled": "Masquer les modifications relues dans la liste de suivi", "tog-watchlisthidecategorization": "Masquer la catégorisation des pages", - "tog-ccmeonemails": "M'envoyer une copie des courriels que j'envoie aux autres utilisateurs", + "tog-ccmeonemails": "M’envoyer une copie des courriels que j’envoie aux autres utilisateurs", "tog-diffonly": "Ne pas afficher le contenu des pages sous les diffs", "tog-showhiddencats": "Afficher les catégories cachées", "tog-norollbackdiff": "Ne pas afficher le diff après avoir révoqué", - "tog-useeditwarning": "M'avertir quand je quitte une page de modification sans publier les changements", - "tog-prefershttps": "Toujours utiliser une connexion sécurisée en étant connecté(e)", + "tog-useeditwarning": "M’avertir quand je quitte une page de modification sans publier les changements", + "tog-prefershttps": "Conserver une connexion sécurisée une fois connecté(e)", "underline-always": "Toujours", "underline-never": "Jamais", - "underline-default": "Valeur par défaut du navigateur ou du thème", - "editfont-style": "Style de police de la zone de modification :", + "underline-default": "Valeur par défaut du thème ou du navigateur", + "editfont-style": "Style de police de la zone d’édition :", "editfont-default": "Police par défaut du navigateur", "editfont-monospace": "Police à chasse fixe", "editfont-sansserif": "Police sans-serif", @@ -239,33 +243,33 @@ "oct": "oct", "nov": "nov", "dec": "déc", - "january-date": "$1 janvier", - "february-date": "$1 février", - "march-date": "$1 mars", - "april-date": "$1 avril", - "may-date": "$1 mai", - "june-date": "$1 juin", - "july-date": "$1 juillet", - "august-date": "$1 août", - "september-date": "$1 septembre", - "october-date": "$1 octobre", - "november-date": "$1 novembre", - "december-date": "$1 décembre", + "january-date": "{{PLURAL:$1|1=1ᵉʳ|$1}} janvier", + "february-date": "{{PLURAL:$1|1=1ᵉʳ|$1}} février", + "march-date": "{{PLURAL:$1|1=1ᵉʳ|$1}} mars", + "april-date": "{{PLURAL:$1|1=1ᵉʳ|$1}} avril", + "may-date": "{{PLURAL:$1|1=1ᵉʳ|$1}} mai", + "june-date": "{{PLURAL:$1|1=1ᵉʳ|$1}} juin", + "july-date": "{{PLURAL:$1|1=1ᵉʳ|$1}} juillet", + "august-date": "{{PLURAL:$1|1=1ᵉʳ|$1}} août", + "september-date": "{{PLURAL:$1|1=1ᵉʳ|$1}} septembre", + "october-date": "{{PLURAL:$1|1=1ᵉʳ|$1}} octobre", + "november-date": "{{PLURAL:$1|1=1ᵉʳ|$1}} novembre", + "december-date": "{{PLURAL:$1|1=1ᵉʳ|$1}} décembre", "period-am": "AM", "period-pm": "PM", "pagecategories": "{{PLURAL:$1|Catégorie|Catégories}}", "category_header": "Pages dans la catégorie « $1 »", "subcategories": "Sous-catégories", "category-media-header": "Média dans la catégorie « $1 »", - "category-empty": "Cette catégorie ne contient aucune page ou fichier multimédia.", + "category-empty": "Cette catégorie ne contient actuellement aucune page ni fichier multimédia.", "hidden-categories": "{{PLURAL:$1|Catégorie cachée|Catégories cachées}}", "hidden-category-category": "Catégories cachées", - "category-subcat-count": "Cette catégorie comprend {{PLURAL:$2|la sous-catégorie|$2 sous-catégories, dont {{PLURAL:$1|celle|les $1}}}} ci-dessous.", + "category-subcat-count": "Cette catégorie {{PLURAL:$2|0=ne comprend aucune sous-catégorie|1=comprend seulement la sous-catégorie ci-dessous|comprend les $2 sous-catégories, dont {{PLURAL:$1|0=aucune|1=celle|les $1}} ci-dessous}}.", "category-subcat-count-limited": "Cette catégorie comprend {{PLURAL:$1|la sous-catégorie|les $1 sous-catégories}} ci-dessous.", - "category-article-count": "Cette catégorie contient {{PLURAL:$2|seulement la page suivante|$2 pages, dont {{PLURAL:$1|celle|les $1}} ci-dessous}}.", - "category-article-count-limited": "{{PLURAL:$1|La page suivante figure|Les $1 pages suivantes figurent}} dans la présente catégorie.", - "category-file-count": "Cette catégorie contient {{PLURAL:$2|le fichier suivant|$2 fichiers, dont {{PLURAL:$1|celui|les $1}} ci-dessous}}.", - "category-file-count-limited": "{{PLURAL:$1|Le fichier suivant figure|Les $1 fichiers suivants figurent}} dans la présente catégorie.", + "category-article-count": "Cette catégorie {{PLURAL:$2|0=ne comprend aucune page|1=comprend seulement la page ci-dessous|comprend $2 pages, dont {{PLURAL:$1|0=aucune|1=celle|les $1}} ci-dessous}}.", + "category-article-count-limited": "{{PLURAL:$1|0=Aucune page ne figure|1=La page suivante figure|Les $1 pages suivantes figurent}} dans la présente catégorie.", + "category-file-count": "Cette catégorie {{PLURAL:$2|0=ne comprend aucun fichier|1=comprend le fichier suivant|comprend $2 fichiers, dont {{PLURAL:$1|0=aucun|1=celui|les $1}} ci-dessous}}.", + "category-file-count-limited": "{{PLURAL:$1|0=Aucun fichier ne figure|1=Le fichier suivant figure|Les $1 fichiers suivants figurent}} dans la présente catégorie.", "listingcontinuesabbrev": "(suite)", "index-category": "Pages indexées", "noindex-category": "Pages non indexées", @@ -277,7 +281,6 @@ "moredotdotdot": "Plus...", "morenotlisted": "Cette liste n’est pas complète.", "mypage": "Page", - "anonuserpage": "Utilisateur inconnu", "mytalk": "Discussion", "anontalk": "Discussion", "navigation": "Navigation", @@ -347,17 +350,17 @@ "redirectpagesub": "Page de redirection", "redirectto": "Rediriger vers :", "lastmodifiedat": "Dernière modification de cette page le $1, à $2.", - "viewcount": "Cette page a été consultée {{PLURAL:$1|une fois|$1 fois}}.", + "viewcount": "Cette page {{PLURAL:$1|0=n’a jamais été consultée|1=a été consultée une seule fois|a été consultée $1 fois}}.", "protectedpage": "Page protégée", "jumpto": "Aller à :", "jumptonavigation": "navigation", "jumptosearch": "rechercher", - "view-pool-error": "Désolé, les serveurs sont surchargés en ce moment.\nTrop d'utilisateurs cherchent à consulter cette page.\nVeuillez attendre un moment avant de retenter l'accès à celle ci.\n$1", - "generic-pool-error": "Désolé, les serveurs sont surchargés pour le moment.\nTrop d’utilisateurs essayent de consulter cette ressource.\nVeuillez attendre un peu avant de réessayer d’accéder à celle-ci.", - "pool-timeout": "Délai d'attente dépassé", - "pool-queuefull": "La file d'attente est pleine", + "view-pool-error": "Désolé, les serveurs sont surchargés en ce moment.\nTrop d’utilisateurs cherchent à consulter cette page.\nVeuillez attendre un peu avant de réessayer d’accéder à celle-ci.\n\n$1", + "generic-pool-error": "Désolé, les serveurs sont surchargés en ce moment.\nTrop d’utilisateurs cherchent à consulter cette ressource.\nVeuillez attendre un peu avant de tenter à nouveau l’accès à celle-ci.", + "pool-timeout": "Délai d’attente du verrou dépassé", + "pool-queuefull": "La file des processus est pleine", "pool-errorunknown": "Erreur inconnue", - "pool-servererror": "Le service de comptage de la réserve n’est pas disponible ($1).", + "pool-servererror": "Le service de réservation n’est pas disponible ($1).", "poolcounter-usage-error": "Erreur d’utilisation : $1", "aboutsite": "À propos de {{SITENAME}}", "aboutpage": "Project:À propos", @@ -378,7 +381,7 @@ "privacypage": "Project:Confidentialité", "badaccess": "Erreur de permissions", "badaccess-group0": "Vous n’avez pas les droits suffisants pour réaliser l’action demandée.", - "badaccess-groups": "L’action que vous essayez de réaliser n’est permise qu’aux utilisateurs {{PLURAL:$2|du groupe|d'un des groupes}} : $1.", + "badaccess-groups": "L’action que vous essayez de réaliser n’est permise qu’aux utilisateurs {{PLURAL:$2|du groupe|d’un des groupes}} : $1.", "versionrequired": "Version $1 de MediaWiki nécessaire", "versionrequiredtext": "La version $1 de MediaWiki est nécessaire pour utiliser cette page.\nConsultez [[Special:Version|la page des versions]].", "ok": "Valider", @@ -429,26 +432,26 @@ "nstab-category": "Catégorie", "mainpage-nstab": "Accueil", "nosuchaction": "Action inconnue", - "nosuchactiontext": "L’action spécifiée dans l’URL est invalide.\nVous avez peut-être mal entré l’URL ou suivi un lien erroné.\nIl peut également s’agir d’un bogue dans le logiciel utilisé par {{SITENAME}}.", + "nosuchactiontext": "L’action spécifiée dans l’URL est invalide.\nVous avez peut-être mal entré l’URL ou suivi un lien erroné.\nIl peut également s’agir d’une anomalie dans le logiciel utilisé par {{SITENAME}}.", "nosuchspecialpage": "Page spéciale inexistante", - "nospecialpagetext": "Vous avez demandé une page spéciale qui n'existe pas.\n\nUne liste des pages spéciales valides se trouve sur [[Special:SpecialPages|{{int:specialpages}}]].", + "nospecialpagetext": "Vous avez demandé une page spéciale qui n’existe pas.\n\nUne liste des pages spéciales valides se trouve sur [[Special:SpecialPages|{{int:specialpages}}]].", "error": "Erreur", "databaseerror": "Erreur de la base de données", - "databaseerror-text": "Une erreur de requête de base de données s'est produite. Cela peut provenir d'un bogue dans le logiciel.", - "databaseerror-textcl": "Une erreur de requête de base de données s'est produite.", + "databaseerror-text": "Une erreur de requête de base de données s’est produite.\nCela peut provenir d’une anomalie dans le logiciel.", + "databaseerror-textcl": "Une erreur de requête de base de données s’est produite.", "databaseerror-query": "Requête : $1", "databaseerror-function": "Fonction : $1", "databaseerror-error": "Erreur : $1", - "transaction-duration-limit-exceeded": "Pour éviter une trop forte augmentation du délai de réplication, cette transaction a été annulée car la durée d’écriture ($1) a dépassé la limite de {{PLURAL:$2|seconde|secondes}}. Si vous cherchez à modifier un grand nombre d’éléments simultanément, essayez plutôt d’effectuer l’opération en plusieurs étapes.", + "transaction-duration-limit-exceeded": "Pour éviter une trop forte augmentation du délai de réplication, cette transaction a été annulée car la durée d’écriture ($1) a dépassé la limite de $2 seconde{{PLURAL:$2||s}}. Si vous cherchez à modifier un grand nombre d’éléments simultanément, essayez plutôt d’effectuer l’opération en plusieurs étapes.", "laggedslavemode": "Attention, cette page peut ne pas contenir les toutes dernières modifications effectuées", "readonly": "Base de données verrouillée", - "enterlockreason": "Indiquez la raison du verrouillage ainsi qu'une estimation de sa durée", - "readonlytext": "Les ajouts et mises à jour de la base de données sont actuellement bloqués, probablement pour permettre la maintenance de la base, après quoi, tout rentrera dans l'ordre.\n\nL'administrateur système ayant verrouillé la base de données a fourni l'explication suivante :
$1", - "missing-article": "La base de données n’a pas trouvé le texte d’une page qu’elle aurait dû trouver, intitulée « $1 » $2.\n\nGénéralement, cela survient en suivant un lien vers un diff périmé ou vers l’historique d’une page supprimée.\n\nSi ce n’est pas le cas, il peut s’agir d’un bogue dans le programme.\nVeuillez le signaler à un [[Special:ListUsers/sysop|administrateur]] sans oublier de lui indiquer l’URL du lien.", + "enterlockreason": "Indiquez la raison du verrouillage ainsi qu’une estimation de sa durée", + "readonlytext": "Les ajouts et mises à jour de la base de données sont actuellement bloqués, probablement pour permettre la maintenance de la base, après quoi, tout rentrera dans l’ordre.\n\nL’administrateur système ayant verrouillé la base de données a fourni l’explication suivante :
$1", + "missing-article": "La base de données n’a pas trouvé le texte d’une page qu’elle aurait dû trouver, intitulée « $1 » $2.\n\nGénéralement, cela survient en suivant un lien vers un diff périmé ou vers l’historique d’une page supprimée.\n\nSi ce n’est pas le cas, il peut s’agir d’une anomalie dans le programme.\nVeuillez la signaler à un [[Special:ListUsers/sysop|administrateur]] sans oublier de lui indiquer l’URL de la page.", "missingarticle-rev": "(numéro de version : $1)", "missingarticle-diff": "(diff : $1, $2)", "readonly_lag": "La base de données a été automatiquement verrouillée pendant que les serveurs secondaires rattrapent leur retard sur le serveur principal.", - "nonwrite-api-promise-error": "L’entête HTTP 'Promise-Non-Write-API-Action' a été envoyé mais la requête a été faite à un module d’écriture de l’API.", + "nonwrite-api-promise-error": "L’entête HTTP « Promise-Non-Write-API-Action: » a été envoyé mais la requête a été faite à un module d’écriture de l’API.", "internalerror": "Erreur interne", "internalerror_info": "Erreur interne : $1", "internalerror-fatal-exception": "Erreur fatale de type « $1 »", @@ -460,79 +463,79 @@ "directorynotreadableerror": "Le répertoire « $1 » n’est pas lisible.", "filenotfound": "Impossible de trouver le fichier « $1 ».", "unexpected": "Valeur inattendue : « $1 » = « $2 ».", - "formerror": "Erreur : Impossible de soumettre le formulaire.", + "formerror": "Erreur : impossible de soumettre le formulaire.", "badarticleerror": "Cette action ne peut pas être effectuée sur cette page.", "cannotdelete": "Impossible de supprimer la page ou le fichier « $1 ».\nLa suppression a peut-être déjà été effectuée par quelqu’un d’autre.", "cannotdelete-title": "Impossible de supprimer la page « $1 »", - "delete-hook-aborted": "Suppression annulée par une extension.\nAucune explication n'a été fournie.", + "delete-hook-aborted": "Suppression annulée par une extension.\nAucune explication n’a été fournie.", "no-null-revision": "Impossible de créer une nouvelle révision vide pour la page « $1 »", "badtitle": "Mauvais titre", - "badtitletext": "Le titre de la page demandée est invalide, vide, ou il s’agit d’un titre inter-langue ou inter-projet mal formé. Il contient peut-être un ou plusieurs caractères qui ne peuvent pas être utilisés dans les titres.", - "title-invalid-empty": "Le titre de la page demandée est vide ou contient seulement le nom d'un espace de noms.", + "badtitletext": "Le titre de la page demandée est non valide, vide, ou mal formé s’il s’agit d’un titre inter-langue ou inter-projet.\nIl contient peut-être un ou plusieurs caractères qui ne peuvent pas être utilisés dans les titres.", + "title-invalid-empty": "Le titre de la page demandée est vide ou contient seulement le nom d’un espace de noms.", "title-invalid-utf8": "Le titre de la page demandée contient une séquence UTF-8 invalide.", "title-invalid-interwiki": "La page cible contient un lien interwiki ne pouvant être utilisé dans les titres.", "title-invalid-talk-namespace": "Le titre de la page demandée fait référence à une page de discussion qui peut ne pas exister.", "title-invalid-characters": "Le titre de la page demandée contient des caractères non valides : « $1 ».", - "title-invalid-relative": "Le titre contient un chemin relatif. Les titres référençant des pages relatives (./, ../) sont invalides, car il seront souvent inaccessibles à partir des explorateurs des utilisateurs.", - "title-invalid-magic-tilde": "Le titre de la page demandée contient une séquence invalide de tilde magiques (~~~).", - "title-invalid-too-long": "La demande de titre de la page est trop longue. Il ne doit pas être de plus de $1 {{PLURAL:$1|octets|bytes}} dans l'encodage UTF-8.", + "title-invalid-relative": "Le titre contient un chemin relatif. Les titres référençant des pages relatives (./, ../) sont non valides car il seront souvent inaccessibles pour certains explorateurs des utilisateurs.", + "title-invalid-magic-tilde": "Le titre de la page demandée contient une séquence de tilde magiques non valide (~~~).", + "title-invalid-too-long": "La titre de la page demandée est trop long. Il ne doit pas dépasser $1 {{PLURAL:$1|octet|octets}} dans l’encodage UTF-8.", "title-invalid-leading-colon": "Le titre de la page demandée contient un deux-points invalide au début.", - "perfcached": "Les données suivantes sont en cache et peuvent ne pas être à jour. Un maximum de {{PLURAL:$1|un résultat|$1 résultats}} est disponible dans le cache.", - "perfcachedts": "Les données suivantes sont en cache et ont été mises à jour pour la dernière fois le $1. Un maximum de {{PLURAL:$4|un résultat est disponible|$4 résultats sont disponibles}} dans le cache.", - "querypage-no-updates": "Les mises à jour pour cette page sont actuellement désactivées. Les données ci-dessous ne sont pas mises à jour.", + "perfcached": "Les données suivantes sont en cache et peuvent ne pas être à jour. Un maximum de {{PLURAL:$1|1=un résultat|$1 résultats}} est disponible dans le cache.", + "perfcachedts": "Les données suivantes sont en cache et ont été mises à jour pour la dernière fois le $1. Un maximum de {{PLURAL:$4|1=un résultat est disponible|$4 résultats sont disponibles}} dans le cache.", + "querypage-no-updates": "Les mises à jour pour cette page sont actuellement désactivées.\nLes données ci-dessous ne seront pas mises à jour.", "viewsource": "Voir le texte source", "viewsource-title": "Voir la source de $1", "actionthrottled": "Action limitée", - "actionthrottledtext": "Pour lutter contre les abus, l’utilisation de cette action est limitée à un certain nombre de fois dans un laps de temps assez court. Il s’avère que vous avez dépassé cette limite.\nEssayez à nouveau dans quelques minutes.", - "protectedpagetext": "Cette page a été protégée pour empêcher sa modification ou d'autres actions.", + "actionthrottledtext": "Pour lutter contre les abus, l’utilisation de cette action est limitée à un certain nombre de fois dans un laps de temps assez court et vous avez dépassé cette limite.\nVeuillez essayer à nouveau dans quelques minutes.", + "protectedpagetext": "Cette page a été protégée pour empêcher sa modification ou d’autres actions.", "viewsourcetext": "Vous pouvez voir et copier le contenu de cette page.", "viewyourtext": "Vous pouvez voir et copier le contenu de vos modifications à cette page.", - "protectedinterface": "Cette page fournit du texte d'interface pour le logiciel sur ce wiki, et est protégée pour éviter les abus.\nPour ajouter ou modifier des traductions sur tous les wikis, veuillez utiliser [//translatewiki.net/ translatewiki.net], le projet de localisation de MediaWiki.", + "protectedinterface": "Cette page fournit du texte d’interface pour le logiciel sur ce wiki et est protégée pour éviter les abus.\nPour ajouter ou modifier des traductions sur tous les wikis, veuillez utiliser [//translatewiki.net/ translatewiki.net], le projet de localisation de MediaWiki.", "editinginterface": "Attention : vous êtes en train de modifier une page utilisée pour créer le texte de l’interface du logiciel.\nLes changements sur cette page se répercuteront sur l’apparence de l’interface utilisateur pour les autres utilisateurs de ce wiki.", - "translateinterface": "Pour ajouter ou modifier des traductions pour tous les wikis, veuillez utiliser [//translatewiki.net/ translatewiki.net], le projet de localisation de MédiaWiki.", + "translateinterface": "Pour ajouter ou modifier des traductions pour tous les wikis, veuillez utiliser [//translatewiki.net/ translatewiki.net], le projet de localisation de MediaWiki.", "cascadeprotected": "Cette page est protégée contre les modifications car elle est transcluse par {{PLURAL:$1|la page suivante, qui a été protégée|les pages suivantes, qui ont été protégées}} avec l’option « protection en cascade » activée :\n$2", - "namespaceprotected": "Vous n'avez pas la permission de modifier les pages de l'espace de noms « '''$1''' ».", - "customcssprotected": "Vous n'avez pas la permission de modifier cette page de CSS, car elle contient les paramètres personnels d'un autre utilisateur.", - "customjsprotected": "Vous n'avez pas la permission de modifier cette page de JavaScript, car elle contient les paramètres personnels d'un autre utilisateur.", + "namespaceprotected": "Vous n’avez pas la permission de modifier les pages de l’espace de noms « $1 ».", + "customcssprotected": "Vous n’avez pas la permission de modifier cette page de CSS, car elle contient les paramètres personnels d’un autre utilisateur.", + "customjsprotected": "Vous n’avez pas la permission de modifier cette page de JavaScript, car elle contient les paramètres personnels d’un autre utilisateur.", "mycustomcssprotected": "Vous n’avez pas le droit de modifier cette page CSS.", "mycustomjsprotected": "Vous n’avez pas le droit de modifier cette page JavaScript.", - "myprivateinfoprotected": "Vous n’avez pas les droits pour modifier vos informations personnelles.", - "mypreferencesprotected": "Vous n’avez pas les droits pour modifier vos préférences.", - "ns-specialprotected": "Les pages dans l'espace de noms « {{ns:special}} » ne peuvent pas être modifiées.", - "titleprotected": "Ce titre a été protégé à la création par [[User:$1|$1]].\nLe motif fourni est $2.", - "filereadonlyerror": "Impossible de modifier le fichier « $1 » parce que le répertoire de fichiers « $2 » est en lecture seule.\n\nL'administrateur système qui l'a verrouillé a fourni ce motif : « $3 ».", - "invalidtitle-knownnamespace": "Titre invalide avec l'espace de noms « $2 » et l'intitulé « $3 »", - "invalidtitle-unknownnamespace": "Titre invalide avec le numéro d'espace de noms $1 et l'intitulé « $2 » inconnus", + "myprivateinfoprotected": "Vous n’avez pas le droit de modifier vos informations personnelles.", + "mypreferencesprotected": "Vous n’avez pas le droit de modifier vos préférences.", + "ns-specialprotected": "Les pages dans l’espace de noms « {{ns:special}} » ne peuvent pas être modifiées.", + "titleprotected": "Ce titre a été protégé contre toute création par [[User:$1|$1]].\nLe motif fourni est $2.", + "filereadonlyerror": "Impossible de modifier le fichier « $1 » parce que le répertoire de fichiers « $2 » est en lecture seule.\n\nL’administrateur système qui l’a verrouillé a fourni ce motif : « $3 ».", + "invalidtitle-knownnamespace": "Titre non valide avec l’espace de noms « $2 » et l’intitulé « $3 »", + "invalidtitle-unknownnamespace": "Titre non valide avec le numéro d’espace de noms $1 inconnu et l’intitulé « $2 »", "exception-nologin": "Non connecté", "exception-nologin-text": "Veuillez vous connecter pour pouvoir accéder à cette page ou cette action.", "exception-nologin-text-manual": "Veuillez vous $1 pour pouvoir accéder à cette page ou cette action.", - "virus-badscanner": "Mauvaise configuration : scanneur de virus inconnu : ''$1''", + "virus-badscanner": "Mauvaise configuration : analyseur de virus inconnu : $1", "virus-scanfailed": "Échec de la recherche (code $1)", "virus-unknownscanner": "antivirus inconnu :", - "logouttext": "'''Vous êtes à présent déconnecté{{GENDER:||e}}.'''\n\nNotez que certaines pages peuvent être encore affichées comme si vous étiez toujours connecté, jusqu’à ce que vous effaciez le cache de votre navigateur.", + "logouttext": "Vous êtes à présent déconnecté{{GENDER:||e|(e)}}.\n\nNotez que certaines pages peuvent être encore affichées comme si vous étiez toujours connecté, jusqu’à ce que vous effaciez le cache de votre navigateur.", "cannotlogoutnow-title": "Impossible de se déconnecter maintenant", "cannotlogoutnow-text": "La déconnexion n’est pas possible en utilisant $1.", - "welcomeuser": "Bienvenue, $1 !", - "welcomecreation-msg": "Votre compte a été créé.\nN'oubliez pas de modifier [[Special:Preferences|vos préférences pour {{SITENAME}}]].", - "yourname": "Nom d'utilisateur :", - "userlogin-yourname": "Nom d'utilisateur", - "userlogin-yourname-ph": "Entrez votre nom d'utilisateur", - "createacct-another-username-ph": "Saisir le nom d’utilisateur", - "yourpassword": "Mot de passe :", + "welcomeuser": "Bienvenue, $1 !", + "welcomecreation-msg": "Votre compte a été créé.\nVous pouvez modifier [[Special:Preferences|vos préférences pour {{SITENAME}}]] si vous le souhaitez.", + "yourname": "Nom d’utilisateur :", + "userlogin-yourname": "Nom d’utilisateur", + "userlogin-yourname-ph": "Entrez votre nom d’utilisateur", + "createacct-another-username-ph": "Entrez le nom d’utilisateur", + "yourpassword": "Mot de passe :", "userlogin-yourpassword": "Mot de passe", "userlogin-yourpassword-ph": "Entrez votre mot de passe", "createacct-yourpassword-ph": "Entrez un mot de passe", "yourpasswordagain": "Confirmez le mot de passe :", "createacct-yourpasswordagain": "Confirmez le mot de passe", "createacct-yourpasswordagain-ph": "Entrez à nouveau le mot de passe", - "remembermypassword": "Me reconnecter automatiquement lors des prochaines visites avec ce navigateur (au maximum $1 {{PLURAL:$1|jour|jours}})", + "remembermypassword": "Me reconnecter automatiquement lors des prochaines visites avec ce navigateur (durant au maximum $1 jour{{PLURAL:$1||s}})", "userlogin-remembermypassword": "Garder ma session active", "userlogin-signwithsecure": "Utiliser une connexion sécurisée", "cannotloginnow-title": "Impossible de se connecter maintenant", "cannotloginnow-text": "La connexion n’est pas possible en utilisant $1.", "yourdomainname": "Votre domaine :", "password-change-forbidden": "Vous ne pouvez pas modifier les mots de passe sur ce wiki.", - "externaldberror": "Une erreur s'est produite avec la base de données d'authentification externe, ou bien vous ne pouvez pas mettre à jour votre compte externe.", + "externaldberror": "Une erreur s’est produite sur la base de données d’authentification externe, ou bien vous n’êtes pas autorisé à mettre à jour votre compte externe.", "login": "Connexion", "nav-login-createaccount": "Créer un compte ou se connecter", "userlogin": "Créer un compte ou se connecter", @@ -540,22 +543,22 @@ "logout": "Se déconnecter", "userlogout": "Déconnexion", "notloggedin": "Non connecté", - "userlogin-noaccount": "Vous n'avez pas de compte ?", + "userlogin-noaccount": "Vous n’avez pas de compte ?", "userlogin-joinproject": "Rejoignez {{SITENAME}}", - "nologin": "Vous n'avez pas de compte ? $1.", + "nologin": "Vous n’avez pas de compte ? $1.", "nologinlink": "Créer un compte", "createaccount": "Créer un compte", - "gotaccount": "Vous avez déjà un compte ? '''$1'''.", + "gotaccount": "Vous avez déjà un compte ? $1.", "gotaccountlink": "Connectez-vous", "userlogin-resetlink": "Vous avez oublié vos détails de connexion ?", "userlogin-resetpassword-link": "Mot de passe oublié ?", - "userlogin-helplink2": "Aide à la connexion", - "userlogin-loggedin": "Vous êtes déjà connecté{{GENDER:$1||e}} en tant que {{GENDER:$1|$1}}.\nUtilisez le formulaire ci-dessous pour vous connecter avec un autre compte utilisateur.", + "userlogin-helplink2": "Aide pour se connecter", + "userlogin-loggedin": "Vous êtes déjà connecté{{GENDER:$1||e|(e)}} en tant que $1.\nUtilisez le formulaire ci-dessous pour vous connecter avec un autre compte utilisateur.", "userlogin-createanother": "Créer un autre compte", "createacct-emailrequired": "Adresse de courriel", "createacct-emailoptional": "Adresse de courriel (facultative)", "createacct-email-ph": "Entrez votre adresse de courriel", - "createacct-another-email-ph": "Saisir l’adresse de courriel", + "createacct-another-email-ph": "Entrez l’adresse de courriel", "createaccountmail": "Utiliser un mot de passe aléatoire temporaire et l’envoyer à l’adresse de courriel spécifiée", "createacct-realname": "Nom réel (facultatif)", "createaccountreason": "Motif :", @@ -564,65 +567,65 @@ "createacct-submit": "Créez votre compte", "createacct-another-submit": "Créer le compte", "createacct-benefit-heading": "{{SITENAME}} est écrit par des gens comme vous.", - "createacct-benefit-body1": "{{PLURAL:$1|modification|modifications}}", - "createacct-benefit-body2": "{{PLURAL:$1|article|articles}}", + "createacct-benefit-body1": "modification{{PLURAL:$1||s}}", + "createacct-benefit-body2": "page{{PLURAL:$1||s}}", "createacct-benefit-body3": "{{PLURAL:$1|contributeur récent|contributeurs récents}}", "badretype": "Les mots de passe que vous avez saisis ne correspondent pas.", "usernameinprogress": "Une création de compte pour ce nom d’utilisateur est déjà en cours.\nVeuillez patienter.", - "userexists": "Nom d'utilisateur entré déjà utilisé.\nVeuillez choisir un nom différent.", + "userexists": "Nom d’utilisateur entré déjà utilisé.\nVeuillez choisir un nom différent.", "loginerror": "Erreur de connexion", "createacct-error": "Erreur lors de la création du compte", "createaccounterror": "Impossible de créer le compte : $1", - "nocookiesnew": "Le compte utilisateur a été créé, mais vous n'êtes pas connecté{{GENDER:||e}}. {{SITENAME}} utilise des cookies pour la connexion mais vous les avez désactivés. Veuillez les activer et vous reconnecter avec le même nom et le même mot de passe.", - "nocookieslogin": "{{SITENAME}} utilise des cookies pour la connexion mais vous les avez désactivés. Veuillez les activer et vous reconnecter.", - "nocookiesfornew": "Le compte utilisateur n'a pas été créé, car nous n'avons pas pu identifier son origine.\nVérifiez que vous avez activé les cookies, rechargez la page et réessayez.", - "noname": "Vous n'avez pas saisi un nom d'utilisateur valide.", + "nocookiesnew": "Le compte utilisateur a été créé, mais vous n’êtes pas connecté{{GENDER:||e|(e)}}.\n{{SITENAME}} utilise des cookies pour conserver la connexion mais vous les avez désactivés.\nVeuillez les activer et vous reconnecter avec le même nom et le même mot de passe.", + "nocookieslogin": "{{SITENAME}} utilise des cookies pour conserver la connexion mais vous les avez désactivés.\nVeuillez les activer et vous reconnecter.", + "nocookiesfornew": "Le compte utilisateur n’a pas été créé, car nous n’avons pas pu identifier son origine.\nVérifiez que vous avez activé les cookies, rechargez la page et essayez à nouveau.", + "noname": "Vous n’avez pas saisi un nom d’utilisateur valide.", "loginsuccesstitle": "Connecté", - "loginsuccess": "Vous êtes maintenant connecté{{GENDER:$1||e}} à {{SITENAME}} en tant que « $1 ».", - "nosuchuser": "L'utilisateur « $1 » n'existe pas.\nLes noms d'utilisateurs sont sensibles à la casse.\nVérifiez l'orthographe, ou [[Special:UserLogin/signup|créez un nouveau compte]].", - "nosuchusershort": "Il n'y a pas de contributeur avec le nom « $1 ». Veuillez vérifier l'orthographe.", - "nouserspecified": "Vous devez saisir un nom d'utilisateur.", + "loginsuccess": "Vous êtes maintenant connecté{{GENDER:$1||e|(e)}} à {{SITENAME}} en tant que « $1 ».", + "nosuchuser": "L'utilisateur « $1 » n’existe pas.\nLes noms d’utilisateurs sont sensibles à la casse.\nVérifiez l’orthographe, ou [[Special:UserLogin/signup|créez un nouveau compte]].", + "nosuchusershort": "Il n’y a pas de contributeur avec le nom « $1 ».\nVeuillez vérifier l’orthographe.", + "nouserspecified": "Vous devez saisir un nom d’utilisateur.", "login-userblocked": "Cet utilisateur est bloqué. Connexion non autorisée.", - "wrongpassword": "Le mot de passe est incorrect. Veuillez essayer à nouveau.", - "wrongpasswordempty": "Vous n'avez pas entré de mot de passe. Veuillez essayer à nouveau.", + "wrongpassword": "Le mot de passe est incorrect.\nVeuillez essayer à nouveau.", + "wrongpasswordempty": "Vous n’avez entré aucun mot de passe.\nVeuillez essayer à nouveau.", "passwordtooshort": "Votre mot de passe doit contenir au moins $1 caractère{{PLURAL:$1||s}}.", - "passwordtoolong": "Les mots de passe ne peuvent pas dépasser {{PLURAL:$1|1 caractère|$1 caractères}}.", + "passwordtoolong": "Les mots de passe ne peuvent pas dépasser $1 caractère{{PLURAL:$1||s}}.", "passwordtoopopular": "Les mots de passe trop courants ne peuvent pas être utilisés. Veuillez choisir un mot de passe plus original.", - "password-name-match": "Votre mot de passe doit être différent de votre nom d'utilisateur.", - "password-login-forbidden": "L'utilisation de ce nom d'utilisateur et/ou de ce mot de passe a été interdite.", + "password-name-match": "Votre mot de passe doit être différent de votre nom d’utilisateur.", + "password-login-forbidden": "L’utilisation de ce nom d’utilisateur et/ou de ce mot de passe a été interdite.", "mailmypassword": "Réinitialiser le mot de passe", "passwordremindertitle": "Nouveau mot de passe temporaire pour {{SITENAME}}", - "passwordremindertext": "Quelqu'un (probablement vous, ayant l'adresse IP $1) a demandé un nouveau mot de\npasse pour {{SITENAME}} ($4). Un mot de passe temporaire a été créé pour\nl'utilisateur « $2 » et est « $3 ». Si cela était votre intention, vous devrez\nvous connecter et choisir un nouveau mot de passe.\nVotre mot de passe temporaire expirera dans $5 jour{{PLURAL:$5||s}}.\n\nSi vous n'êtes pas l'auteur de cette demande, ou si vous vous souvenez à présent\nde votre ancien mot de passe et que vous ne souhaitez plus en changer, vous\npouvez ignorer ce message et continuer à utiliser votre ancien mot de passe.", - "noemail": "Aucune adresse de courriel n'a été enregistrée pour l'utilisateur « $1 ».", + "passwordremindertext": "Quelqu’un (probablement vous, ayant l’adresse IP $1) a demandé un nouveau mot de\npasse pour {{SITENAME}} ($4). Un mot de passe temporaire pour l’utilisateur\n« $2 » a été créé et est « $3 ». Si cela était votre intention,\nvous devrez vous connecter et choisir un nouveau mot de passe.\nVotre mot de passe temporaire expirera dans $5 jour{{PLURAL:$5||s}}.\n\nSi vous n’êtes pas l’auteur de cette demande, ou si vous vous souvenez à présent de\nvotre mot de passe et ne souhaitez plus en changer, vous pouvez ignorer ce message\net continuer à utiliser votre ancien mot de passe.", + "noemail": "Aucune adresse de courriel n’a été enregistrée pour l'utilisateur « $1 ».", "noemailcreate": "Vous devez fournir une adresse de courriel valide", - "passwordsent": "Un nouveau mot de passe a été envoyé à l'adresse de courriel de l'utilisateur « $1 ». Veuillez vous reconnecter après l'avoir reçu.", - "blocked-mailpassword": "Votre adresse IP est bloquée en écriture, la fonction de rappel du mot de passe est donc désactivée pour éviter les abus.", + "passwordsent": "Un nouveau mot de passe a été envoyé à l’adresse de courriel de l’utilisateur « $1 ».\nVeuillez vous reconnecter après l’avoir reçu.", + "blocked-mailpassword": "Votre adresse IP est bloquée pour la modification. Pour éviter les abus, il n’est pas autorisé d’utiliser la récupération de mot de passe à partir de cette adresse IP.", "eauthentsent": "Un courriel de confirmation a été envoyé à l’adresse indiquée.\nAvant qu’un autre courriel ne soit envoyé à ce compte, vous devrez suivre les instructions du courriel et confirmer que le compte est bien le vôtre.", - "throttled-mailpassword": "Un courriel de réinitialisation de votre mot de passe a déjà été envoyé durant {{PLURAL:$1|la dernière heure|les $1 dernières heures}}. Afin d'éviter les abus, un seul courriel de réinitialisation de votre mot de passe sera envoyé par {{PLURAL:$1|heure|intervalle de $1 heures}}.", - "mailerror": "Erreur lors de l'envoi du courriel : $1", - "acct_creation_throttle_hit": "Quelqu'un utilisant votre adresse IP a créé {{PLURAL:$1|un compte|$1 comptes}} au cours des dernières 24 heures, ce qui constitue la limite autorisée dans cet intervalle de temps.\nPar conséquent, la création de compte a été temporairement désactivée pour cette adresse IP.", + "throttled-mailpassword": "Un courriel de réinitialisation de votre mot de passe a déjà été envoyé durant {{PLURAL:$1|la dernière heure|les $1 dernières heures}}. \nAfin d’éviter les abus, un seul courriel de réinitialisation de votre mot de passe sera envoyé par {{PLURAL:$1|heure|intervalle de $1 heures}}.", + "mailerror": "Erreur lors de l’envoi du courriel : $1", + "acct_creation_throttle_hit": "Les visiteurs de ce wiki qui utilisent votre adresse IP ont créé {{PLURAL:$1|un compte|$1 comptes}} au cours des dernières 24 heures, ce qui est la limite maximale autorisée dans cet intervalle de temps.\nPar conséquent, la création de comptes pour les visiteurs utilisant cette adresse IP est temporairement suspendue.", "emailauthenticated": "Votre adresse de courriel a été confirmée le $2 à $3.", - "emailnotauthenticated": "Votre adresse de courriel n'est pas encore confirmée. Aucun courriel ne sera envoyé pour chacune des fonctions suivantes.", + "emailnotauthenticated": "Votre adresse de courriel n’est pas encore confirmée.\nAucun courriel ne sera envoyé pour chacune des fonctions suivantes.", "noemailprefs": "Indiquez une adresse de courriel dans vos préférences pour utiliser ces fonctions.", "emailconfirmlink": "Confirmez votre adresse de courriel", - "invalidemailaddress": "Cette adresse courriel ne peut pas être acceptée car elle semble avoir un format incorrect.\nEntrez une adresse bien formatée ou laissez ce champ vide.", + "invalidemailaddress": "Cette adresse courriel ne peut pas être acceptée car son format paraît incorrect.\nEntrez une adresse bien formatée ou laissez ce champ vide.", "cannotchangeemail": "Les adresses de courriel des comptes ne peuvent pas être modifiées sur ce wiki.", "emaildisabled": "Ce site ne peut pas envoyer de courriels.", "accountcreated": "Compte créé", "accountcreatedtext": "Le compte utilisateur pour [[{{ns:User}}:$1|$1]] ([[{{ns:User talk}}:$1|discussion]]) a été créé.", "createaccount-title": "Création d’un compte pour {{SITENAME}}", "createaccount-text": "Quelqu’un a créé un compte pour votre adresse de courriel sur {{SITENAME}} ($4) intitulé « $2 », avec le mot de passe « $3 ».\nVous devriez ouvrir une session et modifier dès à présent votre mot de passe.\n\nIgnorez ce message si ce compte a été créé par erreur.", - "login-throttled": "Vous avez tenté un trop grand nombre de connexions dernièrement.\nVeuillez attendre $1 avant d'essayer à nouveau.", + "login-throttled": "Vous avez tenté dernièrement un nombre trop élevé de connexions.\nVeuillez attendre $1 avant d’essayer à nouveau.", "login-abort-generic": "Votre tentative de connexion a échoué", "login-migrated-generic": "Votre compte a été migré, et votre nom d’utilisateur n’existe plus sur ce wiki.", "loginlanguagelabel": "Langue : $1", - "suspicious-userlogout": "Votre demande de déconnexion a été refusée car il semble qu'elle a été envoyée par un navigateur cassé ou la mise en cache d'un proxy.", - "createacct-another-realname-tip": "Le vrai nom est optionnel.\nSi vous décidez de le fournir, il sera utilisé pour attribuer à l’utilisateur ses travaux.", + "suspicious-userlogout": "Votre demande de déconnexion a été refusée car elle paraît avoir été envoyée par un navigateur défectueux ou depuis le cache d’un service mandataire.", + "createacct-another-realname-tip": "Le véritable nom est optionnel.\nSi vous décidez de le fournir, il sera utilisé pour créditer l’auteur de ses travaux.", "pt-login": "Se connecter", "pt-login-button": "Se connecter", "pt-createaccount": "Créer un compte", "pt-userlogout": "Se déconnecter", - "php-mail-error-unknown": "Erreur inconnue dans la fonction mail() de PHP.", + "php-mail-error-unknown": "Erreur inconnue dans la fonction mail() de PHP.", "user-mail-no-addy": "Tenté d'envoyer un courriel sans adresse de courriel", "user-mail-no-body": "Essai d'envoi d'un courriel avec un corps vide ou déraisonnablement court.", "changepassword": "Changer de mot de passe", @@ -913,17 +916,17 @@ "rev-deleted-event": "(détails de l’entrée retirée)", "rev-deleted-user-contribs": "[nom d'utilisateur ou adresse IP retiré - modification masquée sur les contributions]", "rev-deleted-text-permission": "Cette version de la page a été '''effacée'''.\nDes détails sont disponibles dans le [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} journal des suppressions].", - "rev-suppressed-text-permission": "Cette version de la page a été supprimée.\nLes détails se trouvent dans le [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} journal des masquages].", - "rev-deleted-text-unhide": "Cette version de la page a été '''effacée'''.\nDes détails sont disponibles dans [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} le journal des suppressions].\nVous pouvez toujours [$1 voir cette version] si vous le voulez.", - "rev-suppressed-text-unhide": "Cette version de la page a été '''supprimée'''.\nDes détails sont disponibles dans [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} le journal des masquages].\nVous pouvez toujours [$1 voir cette version] si vous le voulez.", - "rev-deleted-text-view": "Cette version de la page a été '''effacée'''.\nVous pouvez la visualiser ; des détails sont disponibles dans le [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} journal des suppressions].", - "rev-suppressed-text-view": "Cette version de la page a été '''supprimée'''.\nVous pouvez la visualiser ; des détails sont disponibles dans le [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} journal des masquages].", - "rev-deleted-no-diff": "Vous ne pouvez pas voir ce diff parce qu'une des versions a été '''effacée'''.\nDes détails sont disponibles dans le [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} journal des suppressions].", - "rev-suppressed-no-diff": "Vous ne pouvez pas voir cette différence car une des révisions a été '''supprimée'''.", - "rev-deleted-unhide-diff": "Une des révisions de cette différence a été '''effacée'''.\nDes détails sont disponibles dans le [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} journal des suppressions].\nVous pouvez toujours [$1 voir cette différence] si vous le voulez.", - "rev-suppressed-unhide-diff": "L'une des révisions de ce diff a été '''supprimée'''.\nDes détails sont disponibles dans le [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} journal des masquages].\nVous pouvez toujours [$1 voir ce diff] si vous souhaitez poursuivre.", - "rev-deleted-diff-view": "Une des révisions de ce diff a été '''effacée'''.\nVous pouvez voir ce diff ; des détails sont disponibles dans le [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} journal des suppressions].", - "rev-suppressed-diff-view": "Une des révisions de ce diff a été '''supprimée'''.\nVous pouvez voir ce diff ; des détails sont disponibles dans le [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} journal des masquages].", + "rev-suppressed-text-permission": "Cette version de la page a été masquée.\nLes détails se trouvent dans le [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} journal des masquages].", + "rev-deleted-text-unhide": "Cette version de la page a été supprimée.\nDes détails sont disponibles dans [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} le journal des suppressions].\nVous pouvez toujours [$1 voir cette version] si vous le voulez.", + "rev-suppressed-text-unhide": "Cette version de la page a été masquée.\nDes détails sont disponibles dans [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} le journal des masquages].\nVous pouvez toujours [$1 voir cette version] si vous le voulez.", + "rev-deleted-text-view": "Cette version de la page a été supprimée.\nVous pouvez la visualiser ; des détails sont disponibles dans le [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} journal des suppressions].", + "rev-suppressed-text-view": "Cette version de la page a été masquée.\nVous pouvez la visualiser ; des détails sont disponibles dans le [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} journal des masquages].", + "rev-deleted-no-diff": "Vous ne pouvez pas voir ce diff parce qu'une des versions a été supprimée.\nDes détails sont disponibles dans le [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} journal des suppressions].", + "rev-suppressed-no-diff": "Vous ne pouvez pas voir cette différence car une des révisions a été masquée.", + "rev-deleted-unhide-diff": "Une des révisions de cette différence a été supprimée.\nDes détails sont disponibles dans le [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} journal des suppressions].\nVous pouvez toujours [$1 voir cette différence] si vous le voulez.", + "rev-suppressed-unhide-diff": "L’une des révisions de ce diff a été masquée.\nDes détails sont disponibles dans le [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} journal des masquages].\nVous pouvez toujours [$1 voir ce diff] si vous souhaitez poursuivre.", + "rev-deleted-diff-view": "Une des révisions de ce diff a été supprimée.\nVous pouvez voir ce diff ; des détails sont disponibles dans le [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} journal des suppressions].", + "rev-suppressed-diff-view": "Une des révisions de ce diff a été masquée.\nVous pouvez voir ce diff ; des détails sont disponibles dans le [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} journal des masquages].", "rev-delundel": "afficher/masquer", "rev-showdeleted": "afficher", "revisiondelete": "Supprimer ou restaurer des événements", @@ -1106,7 +1109,7 @@ "rows": "Rangées :", "columns": "Colonnes :", "searchresultshead": "Filtrer avec cette valeur", - "stub-threshold": "Seuil pour le formatage des liens bouchons ($1) :", + "stub-threshold": "Seuil pour le formatage des liens d’ébauche ($1) :", "stub-threshold-sample-link": "exemple", "stub-threshold-disabled": "Désactivé", "recentchangesdays": "Nombre de jours à afficher dans les modifications récentes :", @@ -1309,7 +1312,7 @@ "grant-createaccount": "Créer des comptes", "grant-createeditmovepage": "Créer, modifier et déplacer des pages", "grant-delete": "Supprimer les pages, les révisions et les entrées du journal", - "grant-editinterface": "Modifier l’espace de noms MédiaWiki et le CSS/JavaScript utilisateur", + "grant-editinterface": "Modifier l’espace de noms MediaWiki et le CSS/JavaScript utilisateur", "grant-editmycssjs": "Modifier votre CSS/JavaScript utilisateur", "grant-editmyoptions": "Modifier vos préférences utilisateur", "grant-editmywatchlist": "Modifier votre liste de suivi", @@ -1440,10 +1443,10 @@ "recentchangeslinked-page": "Nom de la page :", "recentchangeslinked-to": "Afficher les modifications des pages qui comportent un lien vers la page donnée plutôt que l'inverse", "recentchanges-page-added-to-category": "[[:$1]] ajouté à la catégorie", - "recentchanges-page-added-to-category-bundled": "[[:$1]] et {{PLURAL:$2|une page ajoutée|$2 pages ajoutées}} à la catégorie", + "recentchanges-page-added-to-category-bundled": "[[:$1]] ajouté à la catégorie, [[Special:WhatLinksHere/$1|cette page est incluse dans d’autres]]", "recentchanges-page-removed-from-category": "[[:$1]] supprimé de la catégorie", - "recentchanges-page-removed-from-category-bundled": "[[:$1]] et {{PLURAL:$2|une page retirée|$2 pages retirées}} de la catégorie", - "autochange-username": "Modification automatique de MédiaWiki", + "recentchanges-page-removed-from-category-bundled": "[[:$1]] supprimée de la catégorie, [[Special:WhatLinksHere/$1|cette page est incluse dans d’autres]]", + "autochange-username": "Modification automatique de MediaWiki", "upload": "Importer un fichier", "uploadbtn": "Importer le fichier", "reuploaddesc": "Annuler et retourner au formulaire d'import", @@ -1552,7 +1555,7 @@ "upload-foreign-cant-upload": "Ce wiki n’est pas configuré pour télécharger des fichiers vers le dépôt de fichiers externe demandé.", "upload-dialog-title": "Téléverser un fichier", "upload-dialog-button-cancel": "Annuler", - "upload-dialog-button-done": "Fait", + "upload-dialog-button-done": "Terminé", "upload-dialog-button-save": "Enregistrer", "upload-dialog-button-upload": "Téléverser", "upload-form-label-infoform-title": "Détails", @@ -1622,6 +1625,7 @@ "uploadstash-badtoken": "L’exécution de cette action a échoué, peut-être parce que vos informations d’identification ont expiré. Veuillez réessayer.", "uploadstash-errclear": "La suppression des fichiers a échoué.", "uploadstash-refresh": "Actualiser la liste des fichiers", + "uploadstash-thumbnail": "afficher la vignette", "invalid-chunk-offset": "Offset de segment non valide", "img-auth-accessdenied": "Accès refusé", "img-auth-nopathinfo": "PATH_INFO manquant.\nVotre serveur n'est pas paramétré pour transmettre cette information.\nIl fonctionne peut-être en CGI et ne supporte pas img_auth.\nVoir : https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Image_Authorization.", @@ -1877,7 +1881,7 @@ "apisandbox-fullscreen": "Développer le panneau", "apisandbox-fullscreen-tooltip": "Étendre le panneau du bac à sable pour remplir la fenêtre du navigateur.", "apisandbox-unfullscreen": "Afficher la page", - "apisandbox-unfullscreen-tooltip": "Réduire le panneau du bac à sable, pour que les liens de navigation de MédiaWiki soient disponibles.", + "apisandbox-unfullscreen-tooltip": "Réduire le panneau du bac à sable, pour que les liens de navigation de MediaWiki soient disponibles.", "apisandbox-submit": "Faire la demande", "apisandbox-reset": "Effacer", "apisandbox-retry": "Réessayer", @@ -1943,8 +1947,6 @@ "categories-submit": "Lister", "categoriespagetext": "{{PLURAL:$1|La catégorie suivante est utilisée|Les catégories suivantes sont utilisées}} par des pages ou fichiers.\n[[Special:UnusedCategories|Les catégories inutilisées]] ne sont pas affichées ici.\nVoyez aussi [[Special:WantedCategories|les catégories demandées]].", "categoriesfrom": "Afficher les catégories à partir de :", - "special-categories-sort-count": "tri par nombre d'éléments", - "special-categories-sort-abc": "tri alphabétique", "deletedcontributions": "Contributions supprimées", "deletedcontributions-title": "Contributions supprimées", "sp-deletedcontributions-contribs": "contributions", @@ -2321,6 +2323,7 @@ "ipb-unblock": "Débloquer un compte utilisateur ou une adresse IP", "ipb-blocklist": "Voir les blocages existants", "ipb-blocklist-contribs": "Contributions pour {{GENDER:$1|$1}}", + "ipb-blocklist-duration-left": "$1 restant", "unblockip": "Débloquer un utilisateur ou une adresse IP", "unblockiptext": "Utilisez le formulaire ci-dessous pour redonner les droits d’écriture à une adresse IP ou un nom d’utilisateur.", "ipusubmit": "Supprimer ce blocage", @@ -2384,7 +2387,7 @@ "unblock-hideuser": "Vous ne pouvez pas débloquer cet utilisateur, car son nom d’utilisateur a été masqué.", "ipb_cant_unblock": "Erreur : identifiant de blocage $1 non trouvé.\nIl est possible qu'un déblocage ait déjà été effectué.", "ipb_blocked_as_range": "Erreur : l'adresse IP $1 n'est pas bloquée directement et ne peut donc pas être débloquée.\nElle fait cependant partie de la plage $2 qui, elle, peut être débloquée.", - "ip_range_invalid": "Plage IP incorrecte.", + "ip_range_invalid": "Plage d’adresses IP incorrecte.", "ip_range_toolarge": "Les blocages de plages plus grandes que /$1 ne sont pas autorisées.", "proxyblocker": "Bloqueur de mandataires", "proxyblockreason": "Votre adresse IP a été bloquée car il s'agit d'un mandataire ouvert.\nVeuillez contacter votre fournisseur d'accès Internet ou votre support technique et l'informer de ce sérieux problème de sécurité.", @@ -2562,11 +2565,7 @@ "import-logentry-upload-detail": "$1 {{PLURAL:$1|révision importée|révisions importées}}", "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|révision importée|révisions importées}} depuis $2", "javascripttest": "Test de JavaScript", - "javascripttest-pagetext-noframework": "Cette page est réservée pour l'exécution des tests JavaScript.", - "javascripttest-pagetext-unknownframework": "Structure « $1 » inconnue.", "javascripttest-pagetext-unknownaction": "Action « $1 » inconnue.", - "javascripttest-pagetext-frameworks": "Veuillez choisir l'une des structures de test suivantes : $1", - "javascripttest-pagetext-skins": "Choisissez un habillage avec lequel lancer les tests :", "javascripttest-qunit-intro": "Voir [$1 la documentation de test] sur mediawiki.org.", "tooltip-pt-userpage": "{{GENDER:|Votre}} page utilisateur", "tooltip-pt-anonuserpage": "La page utilisateur de l'IP avec laquelle vous contribuez", @@ -2851,8 +2850,8 @@ "exif-colorspace": "Espace colorimétrique", "exif-componentsconfiguration": "Signification de chaque composante", "exif-compressedbitsperpixel": "Mode de compression de l'image", - "exif-pixelydimension": "Largeur de l'image", - "exif-pixelxdimension": "Hauteur de l'image", + "exif-pixelxdimension": "Largeur de l'image", + "exif-pixelydimension": "Hauteur de l'image", "exif-usercomment": "Commentaires de l'utilisateur", "exif-relatedsoundfile": "Fichier audio associé", "exif-datetimeoriginal": "Date de la prise originelle", @@ -3003,6 +3002,7 @@ "exif-copyrighted-true": "Soumis au droit d'auteur", "exif-copyrighted-false": "État des droits d’auteur non défini", "exif-photometricinterpretation-1": "Noir et blanc (0 pour le noir)", + "exif-photometricinterpretation-4": "Masque de transparence", "exif-unknowndate": "Date inconnue", "exif-orientation-1": "Normale", "exif-orientation-2": "Inversée horizontalement", @@ -3182,6 +3182,10 @@ "confirmemail_body_set": "Quelqu’un, probablement vous, depuis l’adresse IP $1, a modifié l’adresse de courriel du compte « $2 » en celle-ci sur {{SITENAME}}.\n\nPour confirmer que ce compte vous appartient et réactiver les fonctions de courriel sur {{SITENAME}}, ouvrez ce lien dans votre navigateur Web :\n\n$3\n\nCe code de confirmation expirera le $4.\n\nSi le compte ne vous appartient *pas*, suivez plutôt ce lien pour annuler la confirmation de l’adresse de courriel :\n\n$5", "confirmemail_invalidated": "Confirmation de l’adresse courriel annulée", "invalidateemail": "Annuler la confirmation de l'adresse de courriel", + "notificationemail_subject_changed": "L’adresse courriel enregistrée sur {{SITENAME}} a été changée", + "notificationemail_subject_removed": "L’adresse courriel enregistrée sur {{SITENAME}} a été supprimée", + "notificationemail_body_changed": "Quelqu’un, probablement vous, connecté depuis l’adresse IP $1,\na changé l’adresse courriel associée au compte « $2 » sur {{SITENAME}}\nen « $3 ».\n\nSi ce n’était pas vous, contactez un administrateur du site immédiatement.", + "notificationemail_body_removed": "Quelqu’un, probablement vous, connecté depuis l’adresse IP $1,\na suprrimé l’adresse courriel associée au compte « $2 » sur {{SITENAME}}.\n\nSi ce n’était pas vous, contactez un administrateur du site immédiatement.", "scarytranscludedisabled": "[La transclusion interwiki est désactivée]", "scarytranscludefailed": "[La récupération de modèle a échoué pour $1]", "scarytranscludefailed-httpstatus": "[Échec de la récupération du modèle pour $1 : HTTP $2 ]", @@ -3373,7 +3377,6 @@ "version-libraries-description": "Description", "version-libraries-authors": "Auteurs", "redirect": "Rediriger par ID de fichier, utilisateur, page, révision ou journal", - "redirect-legend": "Rediriger vers une page ou un fichier", "redirect-summary": "Cette page spéciale redirige vers un fichier (nom de fichier fourni), une page (ID de révision ou de page fourni), une page d’utilisateur (identifiant numérique de l’utilisateur fourni), ou une entrée de journal (ID du journal fourni). Utilisation : [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/page/64308]], [[{{#Special:Redirect}}/revision/328429]], [[{{#Special:Redirect}}/user/101]], ou [[{{#Special:Redirect}}/logid/186]].", "redirect-submit": "Valider", "redirect-lookup": "Recherche :", @@ -3386,7 +3389,6 @@ "redirect-not-exists": "Valeur non trouvée", "fileduplicatesearch": "Recherche de doublons", "fileduplicatesearch-summary": "Recherche des copies de fichiers identiques d'après leur empreinte de hachage.", - "fileduplicatesearch-legend": "Rechercher un doublon", "fileduplicatesearch-filename": "Nom du fichier :", "fileduplicatesearch-submit": "Rechercher", "fileduplicatesearch-info": "$1 × $2 pixels
Taille du fichier : $3
Type MIME : $4", @@ -3587,7 +3589,7 @@ "logentry-protect-protect-cascade": "$1 {{GENDER:$2|a protégé}} $3 $4 [protection en cascade]", "logentry-protect-modify": "$1 {{GENDER:$2|a modifié}} le niveau de protection de $3 $4", "logentry-protect-modify-cascade": "$1 {{GENDER:$2|a modifié}} le niveau de protection de $3 $4 [protection en cascade]", - "logentry-rights-rights": "$1 {{GENDER:$2|a modifié}} l'appartenance au groupe pour $3 de $4 à $5", + "logentry-rights-rights": "$1 a modifié l’appartenance au groupe pour $3 de $4 à $5", "logentry-rights-rights-legacy": "$1 {{GENDER:$2|a modifié}} l'appartenance au groupe pour $3", "logentry-rights-autopromote": "$1 {{GENDER:$2|a été promu}} automatiquement de $4 à $5", "logentry-upload-upload": "$1 {{GENDER:$2|a téléchargé}} $3", @@ -3615,7 +3617,7 @@ "feedback-bugnew": "J'ai vérifié. Signaler un nouveau bogue", "feedback-bugornote": "Si vous êtes prêt à décrire un problème technique en détail, veuillez [$1 signaler un bogue].\nSinon, vous pouvez utiliser le formulaire simplifié ci-dessous. Votre commentaire sera ajouté à la page « [$3 $2] », avec votre nom d'utilisateur.", "feedback-cancel": "Annuler", - "feedback-close": "Fait", + "feedback-close": "Terminé", "feedback-external-bug-report-button": "Signaler un bogue technique", "feedback-dialog-title": "Soumettre un commentaire", "feedback-dialog-intro": "Vous pouvez utiliser le simple formulaire ci-dessous pour faire parvenir vos commentaires. Votre commentaire sera ajouté à la page « $1 », ainsi que votre nom d’utilisateur.", @@ -3680,6 +3682,7 @@ "api-error-unknownerror": "Erreur inconnue : « $1 ».", "api-error-uploaddisabled": "Le téléversement est désactivé sur ce wiki.", "api-error-verification-error": "Ce fichier peut être corrompu, ou son extension est incorrecte.", + "api-error-was-deleted": "Un fichier portant ce nom a déjà été importé puis supprimé.", "duration-seconds": "$1 seconde{{PLURAL:$1||s}}", "duration-minutes": "$1 minute{{PLURAL:$1||s}}", "duration-hours": "$1 heure{{PLURAL:$1||s}}", @@ -3770,6 +3773,7 @@ "special-characters-group-ipa": "API", "special-characters-group-symbols": "symboles", "special-characters-group-greek": "grec", + "special-characters-group-greekextended": "Grec étendu", "special-characters-group-cyrillic": "cyrillique", "special-characters-group-arabic": "arabe", "special-characters-group-arabicextended": "arabe étendu", @@ -3797,5 +3801,54 @@ "sessionprovider-generic": "sessions $1", "sessionprovider-mediawiki-session-cookiesessionprovider": "sessions basées sur les cookies", "sessionprovider-nocookies": "Les cookies peuvent être désactivés. Assurez-vous que vous avez activé les cookies et recommencez.", - "randomrootpage": "Page racine aléatoire" + "randomrootpage": "Page racine aléatoire", + "log-action-filter-block": "Type de blocage :", + "log-action-filter-contentmodel": "Type de modification de modèle de contenu :", + "log-action-filter-delete": "Type de suppression :", + "log-action-filter-import": "Type d’import :", + "log-action-filter-managetags": "Type d’action de gestion des étiquettes :", + "log-action-filter-move": "Type de déplacement :", + "log-action-filter-newusers": "Type de création de compte :", + "log-action-filter-patrol": "Type de patrouille :", + "log-action-filter-protect": "Type de protection :", + "log-action-filter-rights": "Type de changement de droit", + "log-action-filter-suppress": "Type de suppression", + "log-action-filter-upload": "Type de téléversement :", + "log-action-filter-all": "Tout", + "log-action-filter-block-block": "Blocage", + "log-action-filter-block-reblock": "Modification de blocage", + "log-action-filter-block-unblock": "Débloquer", + "log-action-filter-contentmodel-change": "Changement de modèle de contenu", + "log-action-filter-contentmodel-new": "Création de page avec un modèle de contenu non-standard", + "log-action-filter-delete-delete": "Suppression de pages", + "log-action-filter-delete-restore": "Restauration de page", + "log-action-filter-delete-event": "Suppression du journal", + "log-action-filter-delete-revision": "Suppression de révison", + "log-action-filter-import-interwiki": "Import transwiki", + "log-action-filter-import-upload": "Import par téléversement XML", + "log-action-filter-managetags-create": "Création de balise", + "log-action-filter-managetags-delete": "Suppression de balise", + "log-action-filter-managetags-activate": "Activation de l’étiquette", + "log-action-filter-managetags-deactivate": "Désactivation de l’étiquette", + "log-action-filter-move-move": "Renommage sans écrasement des redirections", + "log-action-filter-move-move_redir": "Renommage avec écrasement des redirections", + "log-action-filter-newusers-create": "Création par un utilisateur anonyme", + "log-action-filter-newusers-create2": "Création par un utilisateur inscrit", + "log-action-filter-newusers-autocreate": "Création automatique", + "log-action-filter-newusers-byemail": "Création avec le mot de passe envoyé par courriel", + "log-action-filter-patrol-patrol": "Patrouille manuelle", + "log-action-filter-patrol-autopatrol": "Patrouille automatique", + "log-action-filter-protect-protect": "Protection", + "log-action-filter-protect-modify": "Modification de la protection", + "log-action-filter-protect-unprotect": "Levée de la protection", + "log-action-filter-protect-move_prot": "Protection de renommage", + "log-action-filter-rights-rights": "Changement manuel", + "log-action-filter-rights-autopromote": "Changement automatique", + "log-action-filter-suppress-event": "Suppression de journal", + "log-action-filter-suppress-revision": "Suppression de révision", + "log-action-filter-suppress-delete": "Suppression de page", + "log-action-filter-suppress-block": "Suppression d’utilisateur par blocage", + "log-action-filter-suppress-reblock": "Suppression d’utilisateur par blocage réitéré", + "log-action-filter-upload-upload": "Nouveau téléversement", + "log-action-filter-upload-overwrite": "Réitérer le téléversement" } diff --git a/languages/i18n/frp.json b/languages/i18n/frp.json index 8fa666d157..48206d309a 100644 --- a/languages/i18n/frp.json +++ b/languages/i18n/frp.json @@ -16,7 +16,7 @@ "tog-hidepatrolled": "Cachiér los changements gouardâs dedens los dèrriérs changements", "tog-newpageshidepatrolled": "Cachiér les pâges gouardâyes dedens la lista de les pâges novèles", "tog-hidecategorization": "Cachiér la catègorisacion de les pâges", - "tog-extendwatchlist": "Èpatar la lista de gouârda por montrar tôs los changements et pas ren que los ples novéls", + "tog-extendwatchlist": "Èpatar la lista de gouârda por montrar tôs los changements et pas mas que los ples novéls", "tog-usenewrc": "Rassemblar los changements per pâge dedens los dèrriérs changements et la lista de gouârda", "tog-numberheadings": "Numerotar ôtomaticament los titros de sèccion", "tog-showtoolbar": "Montrar la bârra d’outils de changement", @@ -40,11 +40,11 @@ "tog-uselivepreview": "Empleyér l’apèrçu rapido", "tog-forceeditsummary": "Mè balyér na semonce quand j’é pas buchiê de rèsumâ de changement", "tog-watchlisthideown": "Cachiér mos changements dedens la lista de gouârda", - "tog-watchlisthidebots": "Cachiér los changements fêts per des robots dedens la lista de gouârda", + "tog-watchlisthidebots": "Cachiér los changements fêts per los robots dedens la lista de gouârda", "tog-watchlisthideminor": "Cachiér los petiôts changements dedens la lista de gouârda", - "tog-watchlisthideliu": "Cachiér los changements fêts per des utilisators branchiês dedens la lista de gouârda", + "tog-watchlisthideliu": "Cachiér los changements fêts per los utilisators branchiês dedens la lista de gouârda", "tog-watchlistreloadautomatically": "Rechargiér ôtomaticament la lista de gouârda quand los chouèx de filtrâjo sont changiês (JavaScript nècèssèro)", - "tog-watchlisthideanons": "Cachiér los changements fêts per des utilisators anonimos dedens la lista de gouârda", + "tog-watchlisthideanons": "Cachiér los changements fêts per los utilisators anonimos dedens la lista de gouârda", "tog-watchlisthidepatrolled": "Cachiér los changements gouardâs dedens la lista de gouârda", "tog-watchlisthidecategorization": "Cachiér la catègorisacion de les pâges", "tog-ccmeonemails": "Mè mandar na copia des mèssâjos que mando ux ôtros utilisators", @@ -52,7 +52,7 @@ "tog-showhiddencats": "Montrar les catègories cachiêes", "tog-norollbackdiff": "Pas fâre vêre la dif sur na rèvocacion", "tog-useeditwarning": "Mè balyér na semonce quand quito na pâge de changement sen encartar los changements", - "tog-prefershttps": "Empleyér tot lo temps un branchement sècurisâ en étent branchiê(e)", + "tog-prefershttps": "Empleyér tot lo temps un branchement sècurisâ en étent branchiê", "underline-always": "Tot lo temps", "underline-never": "Jamés", "underline-default": "Valor per dèfôt de l’habelyâjo du navegator", @@ -128,8 +128,8 @@ "pagecategories": "Catègori{{PLURAL:$1|a|es}}", "category_header": "Pâges dedens la catègoria « $1 »", "subcategories": "Sot-catègories", - "category-media-header": "Fichiérs multimèdiâ dedens la catègoria « $1 »", - "category-empty": "Ora cela catègoria contint gins de pâge de fichiér multimèdiâ.", + "category-media-header": "Mèdiâ dedens la catègoria « $1 »", + "category-empty": "Ora cela catègoria contint gins de pâge de mèdiâ.", "hidden-categories": "{{PLURAL:$1|Catègoria cachiêe|Catègories cachiêes}}", "hidden-category-category": "Catègories cachiêes", "category-subcat-count": "Cela catègoria at {{PLURAL:$2|mas que cela sot-catègoria-que.|{{PLURAL:$1|cela sot-catègoria|celes $1 sot-catègories}}-que, sur na soma de $2.}}", @@ -149,7 +149,6 @@ "moredotdotdot": "Més...", "morenotlisted": "Cela lista est pas complèta.", "mypage": "Pâge", - "anonuserpage": "Utilisator encognu", "mytalk": "Discussion", "anontalk": "Discussion", "navigation": "Navegacion", @@ -159,8 +158,8 @@ "qbedit": "Changiér", "qbpageoptions": "Cela pâge", "qbmyoptions": "Mes pâges", - "faq": "Quèstions sovent posâyes", - "faqpage": "Project:Quèstions sovent posâyes", + "faq": "Quèstions sovent pôses", + "faqpage": "Project:Quèstions sovent pôses", "actions": "Accions", "namespaces": "Èspâços de noms", "variants": "Vèrsions", @@ -231,7 +230,7 @@ "pool-errorunknown": "Fôta encognua", "pool-servererror": "Lo sèrviço de comptâjo de la resèrva est pas disponiblo ($1).", "poolcounter-usage-error": "Fôta d’usâjo : $1", - "aboutsite": "Dessus {{SITENAME}}", + "aboutsite": "Sur {{SITENAME}}", "aboutpage": "Project:A propôs", "copyright": "Lo contegnu est disponiblo desot licence $1 betâ a pârt mencion contrèra.", "copyrightpage": "{{ns:project}}:Drêts d’ôtor", @@ -279,7 +278,7 @@ "viewdeleted": "Vos voléd vêre $1 ?", "restorelink": "{{PLURAL:$1|un changement suprimâ|$1 changements suprimâs}}", "feedlinks": "Flux :", - "feed-invalid": "Tipo d’abonement du flux pas justo.", + "feed-invalid": "Tipo d’abonament du flux pas justo.", "feed-unavailable": "Los flux de sindicacion sont pas disponiblos", "site-rss-feed": "Flux RSS de $1", "site-atom-feed": "Flux Atom de $1", @@ -290,7 +289,7 @@ "sort-ascending": "Betar en ôrdre crèssent", "nstab-main": "Pâge", "nstab-user": "Pâge utilisator", - "nstab-media": "Fichiér multimèdiâ", + "nstab-media": "Pâge mèdiâ", "nstab-special": "Pâge spèciâla", "nstab-project": "Pâge projèt", "nstab-image": "Fichiér", @@ -448,7 +447,7 @@ "nocookieslogin": "{{SITENAME}} emplèye de raportiors (cookies) por lo branchement mas vos los éd dèsactivâs.\nSe vos plét, activâd-los et pués tornâd èprovar.", "nocookiesfornew": "Lo comptio utilisator est pas étâ fêt, nos ens pas possu confirmar son origina.\nControlâd que vos éd activâ los raportiors (cookies), rechargiéd la pâge et pués tornâd èprovar.", "noname": "Vos éd pas spècifiâ un nom d’utilisator justo.", - "loginsuccesstitle": "Branchiê(e)", + "loginsuccesstitle": "Branchiê", "loginsuccess": "Ora vos éte branchiê{{GENDER:$1||e}} a {{SITENAME}} coment « $1 ».", "nosuchuser": "Y at gins d’utilisator avouéc lo nom « $1 ».\nLos noms d’utilisator sont sensiblos a la câssa.\nSe vos plét, controlâd l’ortografia ou ben [[Special:UserLogin/signup|féte un comptio novél]].", "nosuchusershort": "Y at gins d’utilisator avouéc lo nom « $1 ».\nSe vos plét, controlâd l’ortografia.", @@ -469,7 +468,7 @@ "passwordsent": "Un contresegno novél est étâ mandâ a l’adrèce èlèctronica de l’utilisator « $1 ».\nSe vos plét, tornâd-vos branchiér aprés l’avêr reçu.", "blocked-mailpassword": "Voutron adrèce IP est blocâye en ècritura, la fonccion de sovegnence du contresegno est vêr dèsactivâye por èvitar los abus.", "eauthentsent": "Un mèssâjo de confirmacion est étâ mandâ a l’adrèce èlèctronica spècifiâye.\nDevant qu’un ôtro mèssâjo seye mandâ a cél comptio, vos devréd siuvre les enstruccions du mèssâjo et pués confirmar que lo comptio est franc lo voutro.", - "throttled-mailpassword": "Un mèssâjo de remês’a zérô de voutron contresegno est ja étâ mandâ pendent {{PLURAL:$1|l’hora passâye|les $1 hores passâyes}}.\nPor èvitar los abus, ren que yon serat mandâ per {{PLURAL:$1|hora|entèrvalo de $1 hores}}.", + "throttled-mailpassword": "Un mèssâjo de remês’a zérô de voutron contresegno est ja étâ mandâ pendent {{PLURAL:$1|l’hora passâye|les $1 hores passâyes}}.\nPor èvitar los abus, mas que yon serat mandâ per {{PLURAL:$1|hora|entèrvalo de $1 hores}}.", "mailerror": "Fôta pendent l’èxpèdicion du mèssâjo : $1", "acct_creation_throttle_hit": "Des vesitors de cél vouiqui qu’emplèyont voutron adrèce IP ant fêt $1 comptio{{PLURAL:$1||s}} pendent lo jorn passâ, cen qu’est lo més ôtorisâ dens ceti temps.\nDu côp los vesitors qu’emplèyont cel’adrèce IP pôvont fâre gins de comptio por lo moment.", "emailauthenticated": "Voutron adrèce èlèctronica est étâye confirmâye lo $2 a $3.", @@ -602,7 +601,7 @@ "image_sample": "Ègzemplo.jpg", "image_tip": "Fichiér apondu", "media_sample": "Ègzemplo.ogg", - "media_tip": "Lim de vers un fichiér multimèdiâ", + "media_tip": "Lim de vers un fichiér", "sig_tip": "Voutra signatura avouéc l’horodatâjo", "hr_tip": "Legne plana (pas nen abusar)", "summary": "Rèsumâ :", @@ -624,8 +623,8 @@ "subject-preview": "Apèrçu de la chousa :", "previewerrortext": "Na fôta est arrevâye pendent l’èprôva d’apèrçu de voutros changements.", "blockedtitle": "L’utilisator est blocâ", - "blockedtext": "Voutron nom d’utilisator voutron adrèce IP est étâ(ye) blocâ(ye).\n\nLo blocâjo est étâ fêt per $1.\nLa rêson balyêe est $2.\n\n* Comencement du blocâjo : $8\n* Èxpiracion du blocâjo : $6\n* Comptio blocâ : $7\n\nVos vos pouede veriér vers $1 ou ben un ôtr’[[{{MediaWiki:Grouppage-sysop}}|administrator]] por nen discutar.\nVos pouede pas empleyér la fonccionalitât « Y mandar un mèssâjo » a muens qu’un’adrèce èlèctronica justa seye spècifiâye dens voutres [[Special:Preferences|prèferences]] et que vos seyéd pas étâ blocâ de l’empleyér.\nVoutron adrèce IP d’ora est $3 et l’identifient de blocâjo est $5.\nSe vos plét, entrebetâd tôs los dètalys ce-dessus dedens totes les demandes que vos faréd.", - "autoblockedtext": "Voutron adrèce IP est étâye blocâye ôtomaticament, el est étâye empleyêe per un ôtr’utilisator, lui-mémo blocâ per $1.\nLa rêson balyêe est :\n\n:$2\n\n* Comencement du blocâjo : $8\n* Èxpiracion du blocâjo : $6\n* Comptio blocâ : $7\n\nVos vos pouede veriér vers $1 ou ben yon des ôtros [[{{MediaWiki:Grouppage-sysop}}|administrators]] por nen discutar.\n\nNotâd que vos porréd pas empleyér la fonccionalitât « Y mandar un mèssâjo » a muens que vos èyéd un’adrèce èlèctronica justa encartâye dens voutres [[Special:Preferences|prèferences]] et que vos seyéd pas étâ blocâ de l’empleyér.\n\nVoutron adrèce IP d’ora est $3 et l’identifient de blocâjo est $5.\nSe vos plét, entrebetâd tôs los dètalys ce-dessus dedens totes les demandes que vos faréd.", + "blockedtext": "Voutron nom d’utilisator voutron adrèce IP est étâ(ye) blocâ(ye).\n\nLo blocâjo est étâ fêt per $1.\nLa rêson balyêe est $2.\n\n* Comencement du blocâjo : $8\n* Èxpiracion du blocâjo : $6\n* Comptio blocâ : $7\n\nVos vos pouede veriér vers $1 ou ben un ôtr’[[{{MediaWiki:Grouppage-sysop}}|administrator]] por nen discutar.\nVos pouede pas empleyér la fonccionalitât « Y mandar un mèssâjo » a muens qu’un’adrèce èlèctronica justa seye spècifiâye dens voutres [[Special:Preferences|prèferences]] et que vos seyéd pas étâ blocâ de l’empleyér.\nVoutron adrèce IP d’ora est $3 et l’identifient de blocâjo est $5.\nSe vos plét, rapondéd tôs los dètalys ce-dessus dedens totes les demandes que vos faréd.", + "autoblockedtext": "Voutron adrèce IP est étâye blocâye ôtomaticament, el est étâye empleyêe per un ôtr’utilisator, lui-mémo blocâ per $1.\nLa rêson balyêe est :\n\n:$2\n\n* Comencement du blocâjo : $8\n* Èxpiracion du blocâjo : $6\n* Comptio blocâ : $7\n\nVos vos pouede veriér vers $1 ou ben yon des ôtros [[{{MediaWiki:Grouppage-sysop}}|administrators]] por nen discutar.\n\nNotâd que vos porréd pas empleyér la fonccionalitât « Y mandar un mèssâjo » a muens que vos èyéd un’adrèce èlèctronica justa encartâye dens voutres [[Special:Preferences|prèferences]] et que vos seyéd pas étâ blocâ de l’empleyér.\n\nVoutron adrèce IP d’ora est $3 et l’identifient de blocâjo est $5.\nSe vos plét, rapondéd tôs los dètalys ce-dessus dedens totes les demandes que vos faréd.", "blockednoreason": "niona rêson balyêe", "whitelistedittext": "Se vos plét, vos vos dête $1 por povêr changiér les pâges.", "confirmedittext": "Vos dête confirmar voutron adrèce èlèctronica devant que changiér les pâges.\nSe vos plét, buchiéd et pués validâd voutron adrèce èlèctronica dens voutres [[Special:Preferences|prèferences]].", @@ -649,7 +648,7 @@ "usercssyoucanpreview": "Combina : empleyéd lo boton « {{int:showpreview}} » por èprovar voutra fôlye CSS novèla devant que l’encartar.", "userjsyoucanpreview": "Combina : empleyéd lo boton « {{int:showpreview}} » por èprovar voutra fôlye JavaScript novèla devant que l’encartar.", "usercsspreview": "Rapelâd-vos que vos éte ren qu’aprés prèvêre voutra fôlye CSS.\nEl est p’oncor étâye encartâye !", - "userjspreview": "Rapelâd-vos que vos éte ren qu’aprés prèvêre voutron code JavaScript.\nIl est p’oncor étâ encartâ !", + "userjspreview": "Rapelâd-vos que vos éte ren qu’aprés èprovar prèvêre voutron code JavaScript.\nIl est p’oncor étâ encartâ !", "sitecsspreview": "Rapelâd-vos que vos éte ren qu’aprés prèvêre cela fôlye CSS.\nEl est p’oncor étâye encartâye !", "sitejspreview": "Rapelâd-vos que vos éte ren qu’aprés prèvêre cél code JavaScript.\nIl est p’oncor étâ encartâ !", "userinvalidcssjstitle": "Atencion : ègziste gins d’habelyâjo « $1 ».\nRapelâd-vos que les pâges a sè avouéc èxtensions .css et .js emplèyont de titros en petiôtes lètres, per ègzemplo {{ns:user}}:Foo/vector.css et pas {{ns:user}}:Foo/Vector.css.", @@ -660,7 +659,7 @@ "previewconflict": "Cél apèrçu fât vêre lo tèxto de la zona de changement de d’amont coment aparêtrat se vos chouèsésséd de l’encartar.", "session_fail_preview": "Dèsolâ ! Nos povens pas encartar voutron changement a côsa d’una pèrda d’enformacions sur voutra sèssion.\n\nPôt-étre vos éte étâ dèbranchiê. Se vos plét, controlâd que vos éte adés branchiê et pués tornâd èprovar.\nSe cen tôrne pas reussir, èprovâd de vos [[Special:UserLogout|dèbranchiér]] et pués de vos tornar branchiér, et controlâd que voutron navegator accèpte los raportiors (cookies) de cél seto.", "session_fail_preview_html": "Dèsolâ ! Nos povens pas encartar voutron changement a côsa d’una pèrda d’enformacions sur voutra sèssion.\n\nPerce que {{SITENAME}} at activâ l’HTML bruto, l’apèrçu est étâ cachiê por prèvegnir les ataques per JavaScript.\n\nSe l’èprôva de changement est lèg·itima, se vos plét tornâd èprovar.\nSe cen tôrne pas reussir, èprovâd de vos [[Special:UserLogout|dèbranchiér]] et pués de vos tornar branchiér, et controlâd que voutron navegator accèpte los raportiors (cookies) de cél seto.", - "token_suffix_mismatch": "Voutron changement est pas étâ accèptâ, voutron cliant at mècllâ los caractèros de ponctuacion dedens lo jeton de changement.\nLo changement est étâ refusâ por empachiér la corrupcion du tèxto de la pâge.\nDes côps cél problèmo arreve quand vos empleyéd un sèrviço de sèrvior mandatèro (proxy) Vouèbe anonimo qu’est pas de sûr.", + "token_suffix_mismatch": "Voutron changement est pas étâ accèptâ, voutron cliant at mècllo los caractèros de ponctuacion dedens lo jeton de changement.\nLo changement est étâ refusâ por empachiér la corrupcion du tèxto de la pâge.\nDes côps cél problèmo arreve quand vos empleyéd un sèrviço de sèrvior mandatèro (proxy) Vouèbe anonimo qu’est pas de sûr.", "edit_form_incomplete": "Doux-três parties du formulèro de changement ant pas avengiê lo sèrvior ; controlâd que voutros changements sont entactos et pués tornâd èprovar.", "editing": "Changement de $1", "creating": "Crèacion de $1", @@ -676,7 +675,7 @@ "copyrightwarning": "Se vos plét, notâd que totes les contribucions a {{SITENAME}} sont considèrâyes coment publeyêes desot los tèrmos de la $2 (vêde $1 por més de dètalys).\nSe vos voléd pas que voutros ècrits seyont changiês sen pediêt et pués redistribuâs a volontât, adonc mandâd-los pas ique.
\nVos nos assurâd asse-ben que vos éd cen ècrit vos-mémo ou ben que vos l’éd copiyê d’una sôrsa que vint du domêno publico ou d’un’ôtra ressôrsa libra.\nEmpleyéd gins d’ôvra desot drêt d’ôtor sen pèrmission èxprèssa !", "copyrightwarning2": "Se vos plét, notâd que totes les contribucions a {{SITENAME}} pôvont étre changiêes enlevâyes per d’ôtros contributors.\nSe vos voléd pas que voutros ècrits seyont changiês sen pediêt, adonc mandâd-los pas ique.
\nVos nos assurâd asse-ben que vos éd cen ècrit vos-mémo ou ben que vos l’éd copiyê d’una sôrsa que vint du domêno publico ou d’un’ôtra ressôrsa libra (vêde $1 por més de dètalys).\nEmpleyéd gins d’ôvra desot drêt d’ôtor sen pèrmission èxprèssa !", "editpage-cannot-use-custom-model": "Lo modèlo de contegnu de cela pâge pôt pas étre changiê.", - "longpageerror": "Fôta : lo tèxto que vos éd mandâ fât {{PLURAL:$1|un Kio|$1 Kio}}, cen que dèpâsse la limita fixâye a {{PLURAL:$2|un Kio|$2 Kio}}.\nPôt pas étre encartâ.", + "longpageerror": "Fôta : lo tèxto que vos éd mandâ fât {{PLURAL:$1|un Kio|$1 Kio}}, cen que dèpâsse la limita fixa a {{PLURAL:$2|un Kio|$2 Kio}}.\nPôt pas étre encartâ.", "readonlywarning": "Atencion : la bâsa de balyês est étâye cotâye por na rotina d’entretin, cen fât que vos porréd vêr pas encartar voutros changements orendrêt.\nVos pouede copiyér et côlar voutron tèxto dedens un fichiér tèxto et pués l’encartar por ples târd.\n\nL’administrator sistèmo que l’at cotâ at balyê cel’èxplicacion : $1", "protectedpagewarning": "Atencion : cela pâge est étâye protègiêe por que solament los utilisators qu’ant los drêts d’administrator la pouessont changiér.\nLa dèrriére entrâ du jornâl est balyêe ce-desot coment rèference :", "semiprotectedpagewarning": "Nota : cela pâge est étâye protègiêe por que solament los utilisators encartâs la pouessont changiér.\nLa dèrriére entrâ du jornâl est balyêe ce-desot coment rèference :", @@ -727,8 +726,8 @@ "duplicate-args-category-desc": "La pâge contint d’apèls de modèlo qu’emplèyont d’arguments doblos, coment {{foo|bar=1|bar=2}} ou ben {{foo|bar|1=baz}}.", "expensive-parserfunction-warning": "Atencion : cela pâge contint trop d’apèls a des fonccions parsiors que revegnont chieres.\n\nY devrêt avêr muens de $2 apèl{{PLURAL:$2||s}}, pendent qu’y en at ora $1.", "expensive-parserfunction-category": "Pâges avouéc trop d’apèls a des fonccions parsiors que revegnont chieres", - "post-expand-template-inclusion-warning": "Atencion : la talye des modèlos entrebetâs est trop grôssa.\nDoux-três modèlos seront pas entrebetâs.", - "post-expand-template-inclusion-category": "Pâges yô que la talye des modèlos entrebetâs est dèpassâye", + "post-expand-template-inclusion-warning": "Atencion : la talye des modèlos rapondus est trop grôssa.\nDoux-três modèlos seront pas rapondus.", + "post-expand-template-inclusion-category": "Pâges yô que la talye des modèlos rapondus est dèpassâye", "post-expand-template-argument-warning": "Atencion : cela pâge contint por lo muens un argument de modèlo qu’at na talye d’èxpension trop grôssa.\nCelos arguments sont pas étâs betâs.", "post-expand-template-argument-category": "Pâges que contegnont d’arguments de modèlo pas betâs", "parser-template-loop-warning": "Modèlo bocllo dècelâ : [[$1]]", @@ -835,7 +834,7 @@ "revdelete-hide-current": "Fôta en cachient la piéce datâye du $1 a $2 : o est la vèrsion d’ora.\nPôt pas étre cachiêe.", "revdelete-show-no-access": "Fôta en montrent la piéce datâye du $1 a $2 : el est marcâye coment « rètrenta ».\nVos y éd pas accès.", "revdelete-modify-no-access": "Fôta en changient la piéce datâye du $1 a $2 : el est marcâye coment « rètrenta ».\nVos y éd pas accès.", - "revdelete-modify-missing": "Fôta en changient la piéce avouéc l’ID $1 : el est manquenta dedens la bâsa de balyês !", + "revdelete-modify-missing": "Fôta en changient la piéce avouéc l’ID $1 : el est entrovâbla dedens la bâsa de balyês !", "revdelete-no-change": "Atencion : la piéce datâye du $1 a $2 at ja la configuracion de visibilitât demandâye.", "revdelete-concurrent-change": "Fôta en changient la piéce datâye du $1 a $2 : son statut semble étre étâ changiê per un ôtro justo que vos èprovâvâd d’o changiér.\nSe vos plét, controlâd los jornâls.", "revdelete-only-restricted": "Fôta en cachient la piéce datâye du $1 a $2 : vos pouede pas rèprimar de piéces de la viua ux administrators sen chouèsir avouéc d’ôtros chouèx de visibilitât.", @@ -1061,7 +1060,7 @@ "saveusergroups": "Encartar les tropes d’{{GENDER:$1|utilisators}}", "userrights-groupsmember": "Membro de :", "userrights-groupsmember-auto": "Membro tacito de :", - "userrights-groups-help": "Vos pouede changiér les tropes a lesquintes est {{GENDER:$1|cél utilisator|cel’utilisatrice}} :\n* Na câsa pouentâye vôt dére que l’utilisat{{GENDER:$1|or|rice}} sè trôve dedens cela tropa.\n* Na câsa pas pouentâye vôt dére qu’y sè trôve pas.\n* Na petiôt’ètêla (*) endique que vos pouede pas enlevar cela tropa setout que vos l’éd apondua ou ben l’una l’ôtra.", + "userrights-groups-help": "Vos pouede changiér les tropes que lor est {{GENDER:$1|cél utilisator|cel’utilisatrice}} :\n* Na câsa pouentâye vôt dére que l’utilisat{{GENDER:$1|or|rice}} sè trôve dedens cela tropa.\n* Na câsa pas pouentâye vôt dére qu’y sè trôve pas.\n* Na petiôt’ètêla (*) endique que vos pouede pas enlevar cela tropa setout que vos l’éd apondua ou ben l’una l’ôtra.", "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.", @@ -1107,7 +1106,7 @@ "right-upload": "Tèlèchargiér de fichiérs", "right-reupload": "Ècllafar un fichiér ègzistent", "right-reupload-own": "Ècllafar un fichiér ègzistent tèlèchargiê per sè-mémo", - "right-reupload-shared": "Ècllafar localament un fichiér present sur un dèpôt de fichiérs multimèdiâ partagiê", + "right-reupload-shared": "Ècllafar localament un fichiér present sur un dèpôt mèdiâ partagiê", "right-upload_by_url": "Tèlèchargiér un fichiér dês un’URL", "right-purge": "Purgiér lo cacho du seto d’una pâge sen confirmacion", "right-autoconfirmed": "Pas étre afèctâ per les limitacions de dèbit liyêes a les adrèces IP", @@ -1167,7 +1166,7 @@ "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", "grant-generic": "Ensemblo de drêts « $1 »", "grant-group-page-interaction": "Entèrag·ir avouéc de pâges", - "grant-group-file-interaction": "Entèrag·ir avouéc de fichiérs multimèdiâ", + "grant-group-file-interaction": "Entèrag·ir avouéc de mèdiâs", "grant-group-watchlist-interaction": "Entèrag·ir avouéc voutra lista de gouârda", "grant-group-email": "Mandar un mèssâjo", "grant-group-high-volume": "Fâre un’activitât de grôs volumo", @@ -1193,7 +1192,7 @@ "grant-uploadeditmovefile": "Tèlèchargiér, remplaciér et dèplaciér de fichiérs", "grant-uploadfile": "Tèlèchargiér de novéls fichiérs", "grant-basic": "Drêts de bâsa", - "grant-viewdeleted": "Vêre los fichiérs et les pâges suprimâ(ye)s", + "grant-viewdeleted": "Vêre los fichiérs et les pâges suprimâs", "grant-viewmywatchlist": "Vêre voutra lista de gouârda", "newuserlogpage": "Jornâl de les crèacions de comptios utilisator", "newuserlogpagetext": "O est un jornâl de les crèacions de comptios utilisator.", @@ -1308,21 +1307,21 @@ "recentchangeslinked-page": "Nom de la pâge :", "recentchangeslinked-to": "Montrar per contre los changements de les pâges qu’ant un lim de vers la pâge balyêe", "recentchanges-page-added-to-category": "[[:$1]] apondua a la catègoria", - "recentchanges-page-added-to-category-bundled": "[[:$1]] et {{PLURAL:$2|na pâge apondua|$2 pâges apondues}} a la catègoria", + "recentchanges-page-added-to-category-bundled": "[[:$1]] et [[Special:WhatLinksHere/$1|{{PLURAL:$2|na pâge apondua|$2 pâges apondues}}]] a la catègoria", "recentchanges-page-removed-from-category": "[[:$1]] enlevâye de la catègoria", - "recentchanges-page-removed-from-category-bundled": "[[:$1]] et {{PLURAL:$2|na pâge enlevâye|$2 pâges enlevâyes}} de la catègoria", + "recentchanges-page-removed-from-category-bundled": "[[:$1]] et [[Special:WhatLinksHere/$1|{{PLURAL:$2|na pâge enlevâye|$2 pâges enlevâyes}}]] de la catègoria", "autochange-username": "Changement ôtomatico de MediaWiki", "upload": "Tèlèchargiér un fichiér", "uploadbtn": "Tèlèchargiér lo fichiér", "reuploaddesc": "Anular lo tèlèchargement et pués tornar u formulèro de tèlèchargement", "upload-tryagain": "Mandar la dèscripcion du fichiér changiê", - "uploadnologin": "Pas branchiê(ye)", + "uploadnologin": "Pas branchiê", "uploadnologintext": "Se vos plét, vos vos dête $1 por povêr tèlèchargiér de fichiérs.", - "upload_directory_missing": "Lo rèpèrtouèro de tèlèchargement ($1) est manquent et at pas possu étre fêt per lo sèrvior Vouèbe.", - "upload_directory_read_only": "Lo rèpèrtouèro de tèlèchargement ($1) est pas enscriptiblo dês lo sèrvior Vouèbe.", + "upload_directory_missing": "Lo rèpèrtouèro de tèlèchargement ($1) est entrovâblo et at pas possu étre fêt per lo sèrvior Vouèbe.", + "upload_directory_read_only": "Lo rèpèrtouèro de tèlèchargement ($1) est pas enscriptiblo per lo sèrvior Vouèbe.", "uploaderror": "Fôta pendent lo tèlèchargement", "upload-recreate-warning": "Atencion : un fichiér avouéc cél nom est étâ suprimâ dèplaciê.\n\nLo jornâl de les suprèssions et des dèplacements de cela pâge est balyê ique por comoditât :", - "uploadtext": "Empleyéd lo formulèro ce-desot por tèlèchargiér de fichiérs.\nPor vêre rechèrchiér de fichiérs tèlèchargiês dês devant, vêde la [[Special:FileList|lista des fichiérs tèlèchargiês]]. Los (re-)tèlèchargements sont asse-ben encartâs dessus lo [[Special:Log/upload|jornâl des tèlèchargements]], et les suprèssions dessus lo [[Special:Log/delete|jornâl de les suprèssions]].\n\nPor entrebetar un fichiér dedens na pâge, empleyéd un lim de yona de celes fôrmes-que :\n* [[{{ns:file}}:Fichiér.jpg]] por empleyér la vèrsion en plêna largior du fichiér\n* [[{{ns:file}}:Fichiér.png|200px|thumb|left|tèxto dèscriptif]] por empleyér na miniatura de 200 pixèls de lârjo dedens na bouèt’a gôche avouéc « tèxto dèscriptif » coment dèscripcion\n* [[{{ns:media}}:Fichiér.ogg]] por liyér tot drêt vers lo fichiér sen lo fâre vêre", + "uploadtext": "Empleyéd lo formulèro ce-desot por tèlèchargiér de fichiérs.\nPor vêre rechèrchiér de fichiérs tèlèchargiês dês devant, vêde la [[Special:FileList|lista des fichiérs tèlèchargiês]]. Los (re-)tèlèchargements sont asse-ben encartâs dessus lo [[Special:Log/upload|jornâl des tèlèchargements]], et les suprèssions dessus lo [[Special:Log/delete|jornâl de les suprèssions]].\n\nPor rapondre un fichiér dedens na pâge, empleyéd un lim de yona de celes fôrmes-que :\n* [[{{ns:file}}:Fichiér.jpg]] por empleyér la vèrsion en plêna largior du fichiér\n* [[{{ns:file}}:Fichiér.png|200px|thumb|left|tèxto dèscriptif]] por empleyér na miniatura de 200 pixèls de lârjo dedens na bouèt’a gôche avouéc « tèxto dèscriptif » coment dèscripcion\n* [[{{ns:media}}:Fichiér.ogg]] por liyér tot drêt vers lo fichiér sen lo fâre vêre", "upload-permitted": "Tipo{{PLURAL:$2||s}} de fichiérs ôtorisâ{{PLURAL:$2||s}} : $1.", "upload-preferred": "Tipo{{PLURAL:$2||s}} de fichiérs prèferâ{{PLURAL:$2||s}} : $1.", "upload-prohibited": "Tipo{{PLURAL:$2||s}} de fichiérs dèfendu{{PLURAL:$2||s}} : $1.", @@ -1388,8 +1387,8 @@ "uploaded-animate-svg": "La balisa « animate » est étâye trovâye que porrêt changiér lo href en empleyent l’atribut « from » <$1 $2=\"$3\"> dedens lo fichiér SVG tèlèchargiê.", "uploaded-setting-event-handler-svg": "La dèfinicion d’atributs de maneyor d’èvènement est dèfendua, <$1 $2=\"$3\"> est étâ trovâ dedens lo fichiér SVG tèlèchargiê.", "uploaded-setting-href-svg": "L’usâjo de la balisa « set » por apondre un atribut « href » a la piéce parenta est dèfendu.", - "uploaded-wrong-setting-svg": "L’usâjo de la balisa « set » por apondre na ciba distanta/balyês/scripte a un atribut quint que seye est dèfendu. <set to=\"$1\"> est étâ trovâ dedens lo fichiér SVG tèlèchargiê.", - "uploaded-setting-handler-svg": "Los SVG que dèfenéssont l’atribut « handler » avouéc distant/balyês/scripte sont dèfendus. $1=\"$2\" est étâ trovâ dedens lo fichiér SVG tèlèchargiê.", + "uploaded-wrong-setting-svg": "L’usâjo de la balisa « set » por apondre na ciba distanta / balyês / scripte a un atribut quint que seye est dèfendu. <set to=\"$1\"> est étâ trovâ dedens lo fichiér SVG tèlèchargiê.", + "uploaded-setting-handler-svg": "Los SVG que dèfenéssont l’atribut « handler » avouéc distant / balyês / scripte sont dèfendus. $1=\"$2\" est étâ trovâ dedens lo fichiér SVG tèlèchargiê.", "uploaded-remote-url-svg": "Los SVG que dèfenéssont un atribut de stilo quint que seye avouéc un’URL distanta sont dèfendus. $1=\"$2\" est étâ trovâ dedens lo fichiér SVG tèlèchargiê.", "uploaded-image-filter-svg": "Un filtro d’émâge avouéc URL est étâ trovâ : <$1 $2=\"$3\"> dedens lo fichiér SVG tèlèchargiê.", "uploadscriptednamespace": "Cél fichiér SVG contint un èspâço de noms « $1 » pas ôtorisâ.", @@ -1425,7 +1424,7 @@ "upload-dialog-button-upload": "Tèlèchargiér", "upload-form-label-infoform-title": "Dètalys", "upload-form-label-infoform-name": "Nom", - "upload-form-label-infoform-name-tooltip": "Un titro dèscriptif sen pariér por lo fichiér, que sèrvirat coment nom de fichiér. Vos pouede empleyér de lengâjo corent avouéc des èspâços. Pas entrebetar l’èxtension du fichiér.", + "upload-form-label-infoform-name-tooltip": "Un titro dèscriptif sen pariér por lo fichiér, que sèrvirat coment nom de fichiér. Vos pouede empleyér de lengâjo corent avouéc des èspâços. Pas rapondre l’èxtension du fichiér.", "upload-form-label-infoform-description": "Dèscripcion", "upload-form-label-infoform-description-tooltip": "Dècrire vito tot cen qu’y at de particuliér por cel’ôvra.\nPor na fotô, mencionar les chouses principâles que sont semondues, l’ocasion ou ben l’endrêt.", "upload-form-label-usage-title": "Usâjo", @@ -1466,7 +1465,7 @@ "backend-fail-internal": "Na fôta encognua est arrevâye dedens lo sistèmo de stocâjo « $1 ».", "backend-fail-contenttype": "Y at pas moyen de dètèrmenar lo tipo de contegnu du fichiér a stocar dedens « $1 ».", "backend-fail-batchsize": "Lo sistèmo de stocâjo at balyê na pârt de $1 {{PLURAL:$1|opèracion|opèracions}} de fichiér ; la limita est $2 {{PLURAL:$2|opèracion|opèracions}}.", - "backend-fail-usable": "Y at pas moyen de liére d’ècrire lo fichiér « $1 » a côsa de drêts ensufisents ou ben de rèpèrtouèros conteniors manquents.", + "backend-fail-usable": "Y at pas moyen de liére d’ècrire lo fichiér « $1 » a côsa de drêts ensufisents ou ben de rèpèrtouèros de conteniors entrovâblos.", "filejournal-fail-dbconnect": "Y at pas moyen de sè branchiér a la bâsa de balyês du jornâl por lo sistèmo de stocâjo « $1 ».", "filejournal-fail-dbquery": "Y at pas moyen de betar a jorn la bâsa de balyês du jornâl por lo sistèmo de stocâjo « $1 ».", "lockmanager-notlocked": "Y at pas moyen de dècotar « $1 » ; o est pas cotâ.", @@ -1490,9 +1489,10 @@ "uploadstash-badtoken": "L’ègzécucion de cel’accion at pas reussi. Pôt-étre perce que voutros identifients de changement ant èxpirâ. Se vos plét, tornâd èprovar.", "uploadstash-errclear": "La vouegiê des fichiérs at pas reussi.", "uploadstash-refresh": "Rafrèchir la lista des fichiérs", + "uploadstash-thumbnail": "vêre la miniatura", "invalid-chunk-offset": "Dèplacement de bocon pas justo", "img-auth-accessdenied": "Accès refusâ", - "img-auth-nopathinfo": "PATH_INFO manquent.\nVoutron sèrvior est pas configurâ por passar cel’enformacion.\nPôt-étre que fonccione en CGI et recognêt vêr pas img_auth.\nVêde https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Image_Authorization.", + "img-auth-nopathinfo": "PATH_INFO entrovâblo.\nVoutron sèrvior est pas configurâ por passar cel’enformacion.\nPôt-étre que fonccione en CGI et recognêt vêr pas img_auth.\nVêde https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Image_Authorization.", "img-auth-notindir": "Lo chemin demandâ est pas lo rèpèrtouèro de tèlèchargement configurâ.", "img-auth-badtitle": "Y at pas moyen de construire un titro justo dês « $1 ».", "img-auth-nologinnWL": "Vos éte pas branchiê et pués « $1 » est pas dedens la lista blanche.", @@ -1521,7 +1521,7 @@ "upload_source_file": "(lo fichiér que vos éd chouèsi dês voutron ordenator)", "listfiles-delete": "suprimar", "listfiles-summary": "Cela pâge spèciâla montre tôs los fichiérs tèlèchargiês.", - "listfiles_search_for": "Rechèrchiér un nom de fichiér multimèdiâ :", + "listfiles_search_for": "Rechèrchiér un nom de mèdiâ :", "listfiles-userdoesnotexist": "Lo comptio utilisator « $1 » est pas encartâ.", "imgfile": "fichiér", "listfiles": "Lista de fichiérs", @@ -1532,7 +1532,7 @@ "listfiles_size": "Talye", "listfiles_description": "Dèscripcion", "listfiles_count": "Vèrsions", - "listfiles-show-all": "Entrebetar les vielyes vèrsions de les émâges", + "listfiles-show-all": "Rapondre les vielyes vèrsions de les émâges", "listfiles-latestversion": "Vèrsion d’ora", "listfiles-latestversion-yes": "Ouè", "listfiles-latestversion-no": "Nan", @@ -1604,7 +1604,7 @@ "listduplicatedfiles-summary": "O est na lista de fichiérs yô que la vèrsion la ples novèla du fichiér est na copia de la vèrsion la ples novèla d’un ôtro fichiér. Solament los fichiérs locâls sont ègzamenâs.", "listduplicatedfiles-entry": "[[:File:$1|$1]] at [[$3|{{PLURAL:$2|un doblo|$2 doblos}}]].", "unusedtemplates": "Modèlos pas empleyês", - "unusedtemplatestext": "Cela pâge liste totes les pâges de l’èspâço de noms « {{ns:template}} » que sont pas entrebetâyes dedens nion’ôtra pâge.\nOubliâd pas de controlar s’y at gins d’ôtro lim de vers los modèlos devant que los suprimar.", + "unusedtemplatestext": "Cela pâge liste totes les pâges de l’èspâço de noms « {{ns:template}} » que sont pas rapondues dedens nion’ôtra pâge.\nOubliâd pas de controlar s’y at gins d’ôtro lim de vers los modèlos devant que los suprimar.", "unusedtemplateswlh": "ôtros lims", "randompage": "Pâge a l’hasârd", "randompage-nopages": "Y at gins de pâge dedens {{PLURAL:$2|cél èspâço|celos èspâços}} de noms-que : $1.", @@ -1710,7 +1710,7 @@ "protectedpages-unknown-timestamp": "Encognua", "protectedpages-unknown-performer": "Utilisator encognu", "protectedtitles": "Titros protègiês", - "protectedtitles-summary": "Cela pâge liste los titros que sont ora protègiês contre la crèacion. Por na lista de les pâges ègzistentes protègiêes, vêde [[{{#special:ProtectedPages}}|{{int:protectedpages}}]].", + "protectedtitles-summary": "Cela pâge liste los titros que sont ora protègiês contre la crèacion. Por na lista de les pâges ègzistentes que sont protègiêes, vêde [[{{#special:ProtectedPages}}|{{int:protectedpages}}]].", "protectedtitlesempty": "Ora nion titro est protègiê avouéc celos paramètros.", "protectedtitles-submit": "Fâre vêre los titros", "listusers": "Lista des utilisators", @@ -1808,10 +1808,8 @@ "cachedspecial-refresh-now": "Vêre la ples novèla.", "categories": "Catègories", "categories-submit": "Montrar", - "categoriespagetext": "{{PLURAL:$1|Cela catègoria-que contint|Celes catègories-que contegnont}} de pâges de fichiérs multimèdiâ.\nLes [[Special:UnusedCategories|catègories pas empleyêes]] sont pas montrâyes ique.\nVêde avouéc les [[Special:WantedCategories|catègories demandâyes]].", + "categoriespagetext": "{{PLURAL:$1|Cela catègoria-que contint|Celes catègories-que contegnont}} de pâges de mèdiâs.\nLes [[Special:UnusedCategories|catègories pas empleyêes]] sont pas montrâyes ique.\nVêde avouéc les [[Special:WantedCategories|catègories demandâyes]].", "categoriesfrom": "Fâre vêre les catègories dês :", - "special-categories-sort-count": "chouèx per comptâjo", - "special-categories-sort-abc": "chouèx alfabètico", "deletedcontributions": "Contribucions suprimâyes", "deletedcontributions-title": "Contribucions suprimâyes", "sp-deletedcontributions-contribs": "contribucions", @@ -1860,14 +1858,14 @@ "trackingcategories-summary": "Cela pâge liste les catègories de gouârda que sont emplies ôtomaticament per MediaWiki. Lors noms pôvont étre changiês en changient los mèssâjos sistèmo que corrèspondont dedens l’èspâço de noms {{ns:8}}.", "trackingcategories-msg": "Catègoria de gouârda", "trackingcategories-name": "Nom du mèssâjo", - "trackingcategories-desc": "Critèros d’entrebetâ de la catègoria", + "trackingcategories-desc": "Critèros de raponsa de la catègoria", "noindex-category-desc": "La pâge est pas endèxâye per los robots, contint lo mot magico __NOINDEX__ et est dedens un èspâço de noms yô que cél marcâjo est ôtorisâ.", "index-category-desc": "La pâge contint un __INDEX__ (et est dedens un èspâço de noms yô que cél marcâjo est ôtorisâ), et pués serat vêr endèxâye per los robots pendent qu’o serêt pas étâ normalament.", "post-expand-template-inclusion-category-desc": "La talye de la pâge dèpâsse $wgMaxArticleSize aprés l’èxpension de tôs los modèlos, cen fât que doux-três modèlos ant vêr pas étâ èpatâs.", "post-expand-template-argument-category-desc": "La pâge dèpâsse $wgMaxArticleSize aprés l’èxpension d’un argument de modèlo (quârque-ren entre-mié colâdes triples, coment {{{Foo}}}).", "expensive-parserfunction-category-desc": "La pâge emplèye trop de fonccions parsiors que revegnont chieres (coment #ifexist). Vêde [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgExpensiveParserFunctionLimit Manual:$wgExpensiveParserFunctionLimit].", "broken-file-category-desc": "La pâge contint un lim de fichiér câsso (un lim por apondre un fichiér pendent que ceti ègziste pas).", - "hidden-category-category-desc": "La catègoria contint __HIDDENCAT__ dedens son contegnu, cen qu’empache per dèfôt sa viua dens lo cajon des lims de catègoria sur les pâges.", + "hidden-category-category-desc": "La catègoria contint __HIDDENCAT__ dedens son contegnu, cen qu’empache per dèfôt sa viua dens la bouèta des lims de catègoria sur les pâges.", "trackingcategories-nodesc": "Niona dèscripcion disponibla.", "trackingcategories-disabled": "La catègoria est dèsactivâye", "mailnologin": "Nion’adrèce d’èxpèdior", @@ -2042,7 +2040,7 @@ "protect-expiring": "èxpire lo $1 (UTC)", "protect-expiring-local": "èxpire lo $1", "protect-expiry-indefinite": "sen fin", - "protect-cascade": "Protègiér les pâges entrebetâyes dedens ceta (protèccion en cascâda)", + "protect-cascade": "Protègiér les pâges rapondues dedens ceta (protèccion en cascâda)", "protect-cantedit": "Vos pouede pas changiér los nivéls de protèccion de cela pâge, vos éd pas la pèrmission de la changiér.", "protect-othertime": "Ôtro temps :", "protect-othertime-op": "ôtro temps", @@ -2077,7 +2075,7 @@ "undeleterevdel": "La rèstoracion serat pas fêta se finalament la vèrsion la ples novèla de la pâge du fichiér réste a mêtiêt suprimâye.\nDens celos câs, vos dête pas pouentar cachiér la vèrsion suprimâye la ples novèla.", "undeletehistorynoadmin": "Cela pâge est étâye suprimâye.\nLa rêson de la suprèssion est montrâye dens lo rèsumâ ce-desot, avouéc los dètalys des utilisators que l’ant changiê devant sa suprèssion.\nLo contegnu èfèctif de celes vèrsions suprimâyes est accèssiblo ren qu’ux administrators.", "undelete-revision": "Vèrsion suprimâye de $1 (du $4 a $5) per $3 :", - "undeleterevision-missing": "Vèrsion pas justa ou ben manquenta.\nPôt-étre vos éd un crouyo lim ou ben la vèrsion at possu étre refêta enlevâye de les arch·ives.", + "undeleterevision-missing": "Vèrsion pas justa ou ben entrovâbla.\nPôt-étre vos éd un crouyo lim ou ben la vèrsion at possu étre refêta enlevâye de les arch·ives.", "undelete-nodiff": "Niona vèrsion devant trovâye.", "undeletebtn": "Refâre", "undeletelink": "vêre / refâre", @@ -2096,7 +2094,7 @@ "undelete-search-submit": "Rechèrchiér", "undelete-no-results": "Niona pâge d’ense est étâye trovâye dedens les arch·ives de suprèssion.", "undelete-filename-mismatch": "Y at pas moyen de refâre la vèrsion du fichiér datâye du $1 : lo nom de fichiér corrèspond pas.", - "undelete-bad-store-key": "Y at pas moyen de refâre la vèrsion du fichiér datâye du $1 : lo fichiér ére absent devant la suprèssion.", + "undelete-bad-store-key": "Y at pas moyen de refâre la vèrsion du fichiér datâye du $1 : lo fichiér ére entrovâblo devant la suprèssion.", "undelete-cleanup-error": "Fôta pendent la suprèssion du fichiér de les arch·ives pas empleyê « $1 ».", "undelete-missing-filearchive": "Y at pas moyen de refâre lo fichiér de les arch·ives avouéc l’ID $1, il est pas dedens la bâsa de balyês.\nPôt-étre il est ja étâ refêt.", "undelete-error": "Fôta pendent la rèstoracion de la pâge", @@ -2109,7 +2107,7 @@ "tooltip-invert": "Pouentâd cela câsa por cachiér los changements de les pâges dedens l’èspâço de noms chouèsi (et l’èspâço de noms associyê avouéc se pouentâ)", "tooltip-whatlinkshere-invert": "Pouentâd cela câsa por cachiér los lims de les pâges dedens l’èspâço de noms chouèsi.", "namespace_association": "Èspâço de noms associyê", - "tooltip-namespace_association": "Pouentâd cela câsa por entrebetar avouéc l’èspâço de noms de discussion de chousa associyê a l’èspâço de noms chouèsi", + "tooltip-namespace_association": "Pouentâd cela câsa por rapondre avouéc l’èspâço de noms de discussion de chousa associyê a l’èspâço de noms chouèsi", "blanknamespace": "(Principâl)", "contributions": "Contribucions de l’utilisat{{GENDER:$1|or|rice}}", "contributions-title": "Contribucions de l’utilisat{{GENDER:$1|or|rice}} $1", @@ -2165,7 +2163,7 @@ "ipaddressorusername": "Adrèce IP ou ben nom d’utilisator :", "ipbexpiry": "Temps devant èxpiracion :", "ipbreason": "Rêson :", - "ipbreason-dropdown": "*Rêsons corentes de blocâjo\n** Entrebetâ d’enformacions fôsses\n** Suprèssion de contegnu de les pâges\n** Entrebetâ de lims de defôr cofos (recllâma)\n** Entrebetâ de contegnu sen gins de significacion et d’ècovelyes dedens les pâges\n** Èprôva d’entimidacion de pèrsècucion\n** Abus d’usâjo d’un mouél de comptios\n** Nom d’utilisator pas accèptâblo", + "ipbreason-dropdown": "*Rêsons corentes de blocâjo\n** Entrebetâ d’enformacions fôsses\n** Suprèssion de contegnu de les pâges\n** Raponsa de lims de defôr cofos (recllâma)\n** Entrebetâ de contegnu sen gins de significacion et d’ècovelyes dedens les pâges\n** Èprôva d’entimidacion de pèrsècucion\n** Abus d’usâjo d’un mouél de comptios\n** Nom d’utilisator pas accèptâblo", "ipb-hardblock": "Empachiér los utilisators branchiês de changiér en empleyent cel’adrèce IP", "ipbcreateaccount": "Empachiér la crèacion de comptio", "ipbemailban": "Empachiér l’utilisator de mandar de mèssâjos", @@ -2264,7 +2262,7 @@ "ipbnounblockself": "Vos éte pas ôtorisâ{{GENDER:||ye}} a vos dèblocar vos-mém{{GENDER:|o|a}}.", "lockdb": "Cotar la bâsa de balyês", "unlockdb": "Dècotar la bâsa de balyês", - "lockdbtext": "Lo vèrroly de la bâsa de balyês empachierat tôs los utilisators de changiér de pâges, d’encartar lors prèferences, de changiér lor lista de gouârda et pués de fâre totes les ôtres opèracions qu’ant fôta de changements dedens la bâsa de balyês.\nSe vos plét, confirmâd qu’o est franc cen que vos voléd fâre et que vos la dècoteréd setout que voutra rotina d’entretin serat chavonâye.", + "lockdbtext": "Lo vèrroly de la bâsa de balyês empachierat tôs los utilisators de changiér de pâges, d’encartar lors prèferences, de changiér lor lista de gouârda et pués de fâre totes les ôtres opèracions qu’ant fôta de changements dedens la bâsa de balyês.\nSe vos plét, confirmâd qu’o est franc cen que vos voléd fâre et que vos la dècoteréd setout que voutra rotina d’entretin serat chavona.", "unlockdbtext": "La fin du vèrroly de la bâsa de balyês tornerat pèrmetre a tôs los utilisators de changiér de pâges, d’encartar lors prèferences, de changiér lor lista de gouârda et pués de fâre totes les ôtres opèracions qu’ant fôta de changements dedens la bâsa de balyês.\nSe vos plét, confirmâd qu’o est franc cen que vos voléd fâre.", "lockconfirm": "Ouè, confirmo que vuel cotar la bâsa de balyês.", "unlockconfirm": "Ouè, confirmo que vuel dècotar la bâsa de balyês.", @@ -2273,9 +2271,9 @@ "locknoconfirm": "Vos éd pas pouentâ la câsa de confirmacion.", "lockdbsuccesssub": "Vèrroly de la bâsa de balyês reussi", "unlockdbsuccesssub": "Vèrroly de la bâsa de balyês enlevâ", - "lockdbsuccesstext": "La bâsa de balyês est étâye cotâye.
\nOubliâd pas de la [[Special:UnlockDB|dècotar]] quand vos aréd chavonâ voutra rotina d’entretin.", + "lockdbsuccesstext": "La bâsa de balyês est étâye cotâye.
\nOubliâd pas de la [[Special:UnlockDB|dècotar]] quand vos aréd chavono voutra rotina d’entretin.", "unlockdbsuccesstext": "La bâsa de balyês est étâye dècotâye.", - "lockfilenotwritable": "Lo fichiér de vèrroly de la bâsa de balyês est pas enscriptiblo.\nPor cotar dècotar la bâsa de balyês, dêt étre enscriptiblo dês lo sèrvior Vouèbe.", + "lockfilenotwritable": "Lo fichiér de vèrroly de la bâsa de balyês est pas enscriptiblo.\nPor cotar dècotar la bâsa de balyês, dêt étre enscriptiblo per lo sèrvior Vouèbe.", "databasenotlocked": "La bâsa de balyês est pas cotâye.", "lockedbyandtime": "(per {{GENDER:$1|$1}} lo $2 a $3)", "move-page": "Dèplaciér $1", @@ -2285,7 +2283,7 @@ "movepagetalktext": "Se vos pouentâd cela câsa, la pâge de discussion associyêe serat asse-ben dèplaciêe ôtomaticament, a muens qu’una pâge de discussion pas voueda ègzisteye ja desot lo novél nom.\n\nDens cél câs, vos devréd dèplaciér fusionar la pâge a la man se vos o voléd.", "moveuserpage-warning": "Atencion : vos éte prèst a dèplaciér na pâge utilisator. Se vos plét, notâd que solament la pâge serat dèplaciêe et que l’utilisator serat pas renomâ.", "movecategorypage-warning": "Atencion : vos éte prèst a dèplaciér na pâge de catègoria. Se vos plét, notâd que solament la pâge serat dèplaciêe et que pas yona de les pâges de la vielye catègoria serat betâye dedens la novèla.", - "movenologintext": "Vos dête étre un utilisator encartâ et [[Special:UserLogin|branchiê]] por povêr dèplaciér na pâge.", + "movenologintext": "Vos dête étre un utilisator encartâ et pués étre [[Special:UserLogin|branchiê]] por povêr dèplaciér na pâge.", "movenotallowed": "Vos éd pas la pèrmission de dèplaciér de pâges.", "movenotallowedfile": "Vos éd pas la pèrmission de dèplaciér de fichiérs.", "cant-move-user-page": "Vos éd pas la pèrmission de dèplaciér de pâges utilisator (en defôr de sot-pâges).", @@ -2336,149 +2334,169 @@ "move-over-sharedrepo": "[[:$1]] ègziste ja sur un dèpôt partagiê. Dèplaciér un fichiér vers cél titro ècllaferat lo fichiér partagiê.", "file-exists-sharedrepo": "Lo nom de fichiér chouèsi est ja empleyê sur un dèpôt partagiê.\nSe vos plét, chouèsésséd-nen un ôtro.", "export": "Èxportar de pâges", - "exporttext": "Vos pouede èxportar en XML lo tèxto et l’historico d’una pâge ou ben d’un ensemblo de pâges ;\nlo rèsultat pôt adonc étre importâ dens un ôtro vouiqui qu’utilise la programeria MediaWiki avouéc la [[Special:Import|pâge d’importacion]].\n\nPor èxportar des pâges, buchiéd lors titros dens la bouèta de tèxto ce-desot, yon titro per legne, et pués chouèsésséd se vos voléd ou pas la vèrsion d’ora avouéc totes les vielyes vèrsions, avouéc les legnes de l’historico de la pâge, ou ben simplament la pâge d’ora avouéc des enformacions sur lo dèrriér changement.\n\nDens cél dèrriér câs, vos pouede asse-ben utilisar un lim, coment [[{{#Special:Export}}/{{MediaWiki:Mainpage}}]] por la pâge « [[{{MediaWiki:Mainpage}}]] ».", + "exporttext": "Vos pouede èxportar en XML lo tèxto et l’historico d’una pâge d’un ensemblo de pâges.\nAdonc lo rèsultat pôt étre importâ dens un ôtro vouiqui qu’emplèye la programeria MediaWiki avouéc la [[Special:Import|pâge d’importacion]].\n\nPor èxportar de pâges, buchiéd lors titros dedens la bouèta de tèxto ce-desot, un titro per legne, et pués chouèsésséd se vos voléd la vèrsion d’ora avouéc totes les vielyes vèrsions, avouéc les legnes de l’historico de la pâge, ou ben simplament la pâge d’ora avouéc des enformacions sur lo dèrriér changement.\n\nDens cél dèrriér câs, vos pouede asse-ben empleyér un lim, coment [[{{#Special:Export}}/{{MediaWiki:Mainpage}}]] por la pâge « [[{{MediaWiki:Mainpage}}]] ».", "exportall": "Èxportar totes les pâges", - "exportcuronly": "Èxportar ren que la vèrsion d’ora, sen l’historico complèt", - "exportnohistory": "----\n'''Nota :''' l’èxportacion de l’historico complèt de les pâges avouéc ceti formulèro at étâ dèsactivâ por des rêsons de capacitât.", - "exportlistauthors": "Encllure una lista complèta ux contributors por châque pâge", + "exportcuronly": "Rapondre mas que la vèrsion d’ora, sen l’historico complèt", + "exportnohistory": "----\nNota : l’èxportacion de l’historico complèt de les pâges avouéc cél formulèro est étâye dèsactivâye por des rêsons de capacitât.", + "exportlistauthors": "Rapondre na lista complèta des contributors por châque pâge", "export-submit": "Èxportar", - "export-addcattext": "Apondre les pâges de la catègorie :", + "export-addcattext": "Apondre de pâges de la catègoria :", "export-addcat": "Apondre", - "export-addnstext": "Apondre des pâges dens l’èspâço de noms :", + "export-addnstext": "Apondre de pâges de l’èspâço de noms :", "export-addns": "Apondre", - "export-download": "Encartar dens un fichiér", - "export-templates": "Encllure los modèlos", - "export-pagelinks": "Encllure les pâges liyês a una provondior de :", + "export-download": "Encartar dedens un fichiér", + "export-templates": "Rapondre los modèlos", + "export-pagelinks": "Rapondre les pâges liyêes a na provondior de :", + "export-manual": "Apondre de pâges a la man :", "allmessages": "Mèssâjos sistèmo", - "allmessagesname": "Nom du mèssâjo", - "allmessagesdefault": "Mèssâjo per dèfôt", - "allmessagescurrent": "Tèxto d’ora", - "allmessagestext": "O est la lista des mèssâjos sistèmo disponiblos dens l’èspâço MediaWiki.\nVolyéd visitar la [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation localisacion de MediaWiki] et pués [//translatewiki.net translatewiki.net] se vos voléd contribuar a la localisacion g·ènèrica de MediaWiki.", - "allmessagesnotsupportedDB": "Ceta pâge '''{{ns:special}}:Allmessages''' est inutilisâbla perce que '''$wgUseDatabaseMessages''' at étâ dèsactivâ.", + "allmessagesname": "Nom", + "allmessagesdefault": "Tèxto du mèssâjo per dèfôt", + "allmessagescurrent": "Tèxto du mèssâjo d’ora", + "allmessagestext": "O est na lista des mèssâjos sistèmo disponiblos dedens l’èspâço de noms MediaWiki.\nSe vos plét, vesitâd la [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation localisacion de MediaWiki] et pués [//translatewiki.net translatewiki.net] se vos voléd contribuar a la localisacion g·ènèrâla de MediaWiki.", + "allmessagesnotsupportedDB": "Cela pâge est pas empleyâbla, $wgUseDatabaseMessages est étâ dèsactivâ.", "allmessages-filter-legend": "Filtro", - "allmessages-filter": "Filtrar per ètat de changement :", + "allmessages-filter": "Filtrar per ètat de pèrsonalisacion :", "allmessages-filter-unmodified": "Pas changiê", "allmessages-filter-all": "Tôs", "allmessages-filter-modified": "Changiê", "allmessages-prefix": "Filtrar per prèfixo :", "allmessages-language": "Lengoua :", "allmessages-filter-submit": "Emmodar", + "allmessages-filter-translate": "Traduire", "thumbnail-more": "Agrantir", - "filemissing": "Fichiér manquent", - "thumbnail_error": "Èrror pendent la crèacion de la figura : $1", - "djvu_page_error": "Pâge DjVu en defôr de les limites", - "djvu_no_xml": "Empossiblo de rècupèrar lo XML por lo fichiér DjVu", - "thumbnail-temp-create": "Empossiblo de fâre lo fichiér de figura temporèra", - "thumbnail-dest-create": "Empossiblo d’encartar la figura sur la dèstinacion", - "thumbnail_invalid_params": "Paramètres de la figura fôx", - "thumbnail_dest_directory": "Empossiblo de fâre lo rèpèrtouèro de dèstinacion", + "filemissing": "Fichiér entrovâblo", + "thumbnail_error": "Fôta pendent la crèacion de la miniatura : $1", + "thumbnail_error_remote": "Mèssâjo de fôta de $1 :\n$2", + "djvu_page_error": "Pâge DjVu en defôr de portâ", + "djvu_no_xml": "Y at pas moyen de rècupèrar lo XML por lo fichiér DjVu", + "thumbnail-temp-create": "Y at pas moyen de fâre lo fichiér de miniatura temporèro", + "thumbnail-dest-create": "Y at pas moyen d’encartar la miniatura sur la dèstinacion", + "thumbnail_invalid_params": "Paramètros de la miniatura pas justos", + "thumbnail_toobigimagearea": "Fichiér avouéc des dimensions d’amont $1", + "thumbnail_dest_directory": "Y at pas moyen de fâre lo rèpèrtouèro de dèstinacion", "thumbnail_image-type": "Tipo d’émâge pas recognu", "thumbnail_gd-library": "Configuracion encomplèta de la bibliotèca GD : fonccion $1 entrovâbla", - "thumbnail_image-missing": "Ceti fichiér est entrovâblo : $1", - "import": "Importar des pâges", - "importinterwiki": "Importacion entèrvouiqui", - "import-interwiki-text": "Chouèsésséd un vouiqui et un titro de pâge a importar.\nLes dâtes de les vèrsions et los noms ux contributors seront presèrvâs.\nTotes les accions d’importacion entèrvouiqui sont consignês dens lo [[Special:Log/import|jornal de les importacions]].", - "import-interwiki-history": "Copiyér totes les vèrsions de l’historico de ceta pâge", - "import-interwiki-templates": "Encllure tôs los modèlos", + "thumbnail_image-missing": "Lo fichiér semble étre entrovâblo : $1", + "thumbnail_image-failure-limit": "Dês pou y at avu un mouél d’èprôves pas reussies ($1 ou ben més) por rèstituar cela miniatura. Se vos plét, tornâd èprovar ples târd.", + "import": "Importar de pâges", + "importinterwiki": "Importar dês un ôtro vouiqui", + "import-interwiki-text": "Chouèsésséd un vouiqui et pués un titro de pâge a importar.\nLes dâtes de les vèrsions et los noms des contributors seront presèrvâs.\nTotes les importacions dês d’ôtros vouiquis sont encartâyes dessus lo [[Special:Log/import|jornâl de les importacions]].", + "import-interwiki-sourcewiki": "Vouiqui d’origina :", + "import-interwiki-sourcepage": "Pâge d’origina :", + "import-interwiki-history": "Copiyér totes les vèrsions de l’historico de cela pâge", + "import-interwiki-templates": "Rapondre tôs los modèlos", "import-interwiki-submit": "Importar", + "import-mapping-default": "Importar ux endrêts per dèfôt", + "import-mapping-namespace": "Importar vers un èspâço de noms :", + "import-mapping-subpage": "Importar coment sot-pâges de cela pâge-que :", "import-upload-filename": "Nom du fichiér :", "import-comment": "Comentèro :", - "importtext": "Volyéd èxportar lo fichiér dês lo vouiqui d’origina en utilisent son [[Special:Export|outil d’èxportacion]].\nSôvâd-lo sur voutron ordenator et pués tèlèchargiéd-lo ique.", + "importtext": "Se vos plét, èxportâd lo fichiér dês lo vouiqui d’origina en empleyent son [[Special:Export|outil d’èxportacion]].\nEncartâd-lo sur voutron ordenator et pués tèlèchargiéd-lo ique.", "importstart": "Importacion de les pâges...", "import-revision-count": "$1 vèrsion{{PLURAL:$1||s}}", - "importnopages": "Gins de pâge a importar.", - "imported-log-entries": "$1 entrâ{{PLURAL:$1||s}} du jornal importâ{{PLURAL:$1||s}}.", + "importnopages": "Niona pâge a importar.", + "imported-log-entries": "$1 entr{{PLURAL:$1|â|ês}} du jornâl importâye{{PLURAL:$1||s}}.", "importfailed": "Falyita de l’importacion : $1", "importunknownsource": "Tipo de la sôrsa a importar encognu", - "importcantopen": "Empossiblo d’uvrir lo fichiér a importar", + "importcantopen": "Y at pas moyen d’uvrir lo fichiér a importar", "importbadinterwiki": "Crouyo lim entèrvouiqui", - "importsuccess": "L’importacion at reussia !", - "importnosources": "Niona sôrsa d’importacion entèrvouiqui at étâ dèfenia et los tèlèchargements drêts d’historicos sont dèsactivâs.", - "importnofile": "Nion fichiér a importar at étâ tèlèchargiê.", - "importuploaderrorsize": "Lo tèlèchargement du fichiér a importar at pas reussi.\nSa talye est ples granta que cela ôtorisâ.", - "importuploaderrorpartial": "Lo tèlèchargement du fichiér a importar at pas reussi.\nSon contegnu at étâ tèlèchargiê ren qu’a mêtiêt.", - "importuploaderrortemp": "Lo tèlèchargement du fichiér a importar at pas reussi.\nUn dossiér temporèro est manquent.", + "importsuccess": "L’importacion at reussi !", + "importnosources": "Nion vouiqui d’origina est étâ dèfeni et pués los tèlèchargements drêts d’historicos sont dèsactivâs.", + "importnofile": "Nion fichiér a importar est étâ tèlèchargiê.", + "importuploaderrorsize": "Lo tèlèchargement du fichiér a importar at pas reussi.\nSa talye est ples granta que cela ôtorisâye.", + "importuploaderrorpartial": "Lo tèlèchargement du fichiér a importar at pas reussi.\nSon contegnu est étâ tèlèchargiê ren qu’a mêtiêt.", + "importuploaderrortemp": "Lo tèlèchargement du fichiér a importar at pas reussi.\nUn dossiér temporèro est entrovâblo.", "import-parse-failure": "Falyita pendent l’analise du XML a importar", - "import-noarticle": "Gins de pâge a importar !", - "import-nonewrevisions": "Totes les vèrsions ont étâ importâs dês devant.", + "import-noarticle": "Niona pâge a importar !", + "import-nonewrevisions": "Niona vèrsion importâye (totes érant ja presentes ou ben ignorâyes a côsa de fôtes).", "xml-error-string": "$1 a la legne $2, colona $3 (octèt $4) : $5", "import-upload": "Tèlèchargement de balyês XML", - "import-token-mismatch": "Pèrta de les balyês de sèance.\nVolyéd tornar èprovar.", - "import-invalid-interwiki": "Empossiblo d’importar dês lo vouiqui spècefiâ.", - "import-error-edit": "La pâge « $1 » est pas importâ perce que vos éte pas ôtorisâ a la changiér.", - "import-error-create": "La pâge « $1 » est pas importâ perce que vos éte pas ôtorisâ a la fâre.", + "import-token-mismatch": "Pèrda de les balyês de sèssion.\n\nPôt-étre vos éte étâ dèbranchiê. Se vos plét, controlâd que vos éte adés branchiê et pués tornâd èprovar.\nSe cen tôrne pas reussir, èprovâd de vos [[Special:UserLogout|dèbranchiér]] et pués de vos tornar branchiér, et controlâd que voutron navegator accèpte los raportiors (cookies) de cél seto.", + "import-invalid-interwiki": "Y at pas moyen d’importar dês lo vouiqui spècifiâ.", + "import-error-edit": "La pâge « $1 » est pas étâye importâye, vos éte pas ôtorisâ a la changiér.", + "import-error-create": "La pâge « $1 » est pas étâye importâye, vos éte pas ôtorisâ a la fâre.", + "import-error-interwiki": "La pâge « $1 » est pas étâye importâye, son nom est resèrvâ por un lim de defôr (entèrvouiqui).", + "import-error-special": "La pâge « $1 » est pas étâye importâye, el est a un èspâço de noms spèciâl qu’ôtorise gins de pâge.", + "import-error-invalid": "La pâge « $1 » est pas étâye importâye, lo nom que lyé serêt étâye importâye desot est pas justo sur cél vouiqui.", + "import-error-unserialize": "La vèrsion $2 de la pâge « $1 » pôt pas étre dèssèrialisâye. La vèrsion ére raportâye coment empleyent lo modèlo de contegnu $3 sèrialisâ en $4.", + "import-error-bad-location": "La vèrsion $2 qu’emplèye lo modèlo de contegnu $3 at pas possu étre stocâye dessus « $1 » sur cél vouiqui-que, cél modèlo est pas recognu sur cela pâge.", "import-options-wrong": "{{PLURAL:$2|Crouyo chouèx|Crouyos chouèx}} : $1", - "importlogpage": "Jornal de les importacions", + "import-rootpage-invalid": "La pâge racena balyêe est un titro pas justo.", + "import-rootpage-nosubpage": "L’èspâço de noms « $1 » de la pâge racena ôtorise pas les sot-pâges.", + "importlogpage": "Jornâl de les importacions", "importlogpagetext": "Importacions administratives de pâges avouéc lor historico de changements dês d’ôtros vouiquis.", - "import-logentry-upload-detail": "$1 vèrsion{{PLURAL:$1||s}}", - "import-logentry-interwiki-detail": "$1 vèrsion{{PLURAL:$1||s}} dês $2", + "import-logentry-upload-detail": "$1 {{PLURAL:$1|vèrsion importâye|vèrsions importâyes}}", + "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|vèrsion importâye|vèrsions importâyes}} dês $2", "javascripttest": "Èprôva de JavaScript", + "javascripttest-pagetext-unknownaction": "Accion « $1 » encognua.", "javascripttest-qunit-intro": "Vêde la [$1 documentacion de les èprôves] dessus mediawiki.org.", - "tooltip-pt-userpage": "Voutra pâge usanciér", - "tooltip-pt-anonuserpage": "La pâge usanciér de l’adrèce IP avouéc laquinta vos contribuâd", - "tooltip-pt-mytalk": "Voutra pâge de discussion", - "tooltip-pt-anontalk": "La pâge de discussion por les contribucions dês cela adrèce IP", - "tooltip-pt-preferences": "Voutres prèferences", - "tooltip-pt-watchlist": "La lista de les pâges que vos siude los changements", - "tooltip-pt-mycontris": "La lista de voutres contribucions", - "tooltip-pt-login": "Vos éte encoragiê a vos branchiér ; portant o est pas oblegatouèro.", + "tooltip-pt-userpage": "{{GENDER:|Voutra}} pâge utilisator", + "tooltip-pt-anonuserpage": "La pâge utilisator por l’adrèce IP que vos empleyéd", + "tooltip-pt-mytalk": "{{GENDER:|Voutra}} pâge de discussion", + "tooltip-pt-anontalk": "Discussion sur los changements fêts dês cel’adrèce IP", + "tooltip-pt-preferences": "{{GENDER:|Voutres}} prèferences", + "tooltip-pt-watchlist": "Na lista de les pâges que vos gouardâd los changements", + "tooltip-pt-mycontris": "Na lista de {{GENDER:|voutres}} contribucions", + "tooltip-pt-anoncontribs": "Na lista des changements fêts dês cel’adrèce IP", + "tooltip-pt-login": "Vos éte encoragiê a vos branchiér ; portant o est pas oblegatouèro", "tooltip-pt-logout": "Sè dèbranchiér", - "tooltip-pt-createaccount": "Vos éte encoragiê a fâre un comptio et pués a vos branchiér ; portant o est pas oblegatouèro.", - "tooltip-ca-talk": "Discussion dessus cela pâge de contegnu", + "tooltip-pt-createaccount": "Vos éte encoragiê a fâre un comptio et pués a vos branchiér ; portant o est pas oblegatouèro", + "tooltip-ca-talk": "Discussion sur lo contegnu de la pâge", "tooltip-ca-edit": "Changiér cela pâge", - "tooltip-ca-addsection": "Comenciér una novèla sèccion", - "tooltip-ca-viewsource": "Ceta pâge est protègiêye.\nPortant vos en pouede vêre lo sin tèxto sôrsa", + "tooltip-ca-addsection": "Comenciér na novèla sèccion", + "tooltip-ca-viewsource": "Cela pâge est protègiêe.\nPortant vos en pouede vêre son tèxto sôrsa", "tooltip-ca-history": "Vèrsions passâyes de cela pâge", - "tooltip-ca-protect": "Protègiér ceta pâge", - "tooltip-ca-unprotect": "Changiér la protèccion de ceta pâge", - "tooltip-ca-delete": "Suprimar ceta pâge", - "tooltip-ca-undelete": "Refâre los changements fêts sur ceta pâge devant sa suprèssion", - "tooltip-ca-move": "Renomar ceta pâge", + "tooltip-ca-protect": "Protègiér cela pâge", + "tooltip-ca-unprotect": "Changiér la protèccion de cela pâge", + "tooltip-ca-delete": "Suprimar cela pâge", + "tooltip-ca-undelete": "Refâre los changements fêts sur cela pâge devant sa suprèssion", + "tooltip-ca-move": "Dèplaciér cela pâge", "tooltip-ca-watch": "Apondre cela pâge a voutra lista de gouârda", - "tooltip-ca-unwatch": "Enlevar ceta pâge de voutra lista de survelyence", + "tooltip-ca-unwatch": "Enlevar cela pâge de voutra lista de gouârda", "tooltip-search": "Rechèrchiér dedens {{SITENAME}}", - "tooltip-search-go": "Alar de vers na pâge que pôrte justo cél nom s’ègziste.", - "tooltip-search-fulltext": "Rechèrchiér les pâges que presentont cél tèxto.", + "tooltip-search-go": "Emmodar vers na pâge que pôrte justo cél nom s’ègziste", + "tooltip-search-fulltext": "Rechèrchiér les pâges que presentont cél tèxto", "tooltip-p-logo": "Vesitar la pâge principâla", "tooltip-n-mainpage": "Vesitar la pâge principâla", "tooltip-n-mainpage-description": "Vesitar la pâge principâla", - "tooltip-n-portal": "Dessus lo projèt, cen que vos pouede fâre, yô que trovar les chouses.", - "tooltip-n-currentevents": "Trovar les enformacions de fond dessus les dèrriéres novèles", + "tooltip-n-portal": "Sur lo projèt, cen que vos pouede fâre, yô que trovar de chouses", + "tooltip-n-currentevents": "Trovar les enformacions de fond sur les novèles d’ora", "tooltip-n-recentchanges": "Na lista des dèrriérs changements sur lo vouiqui", - "tooltip-n-randompage": "Fâre vêre na pâge a l’hasârd", - "tooltip-n-help": "L’endrêt por nen savêr més.", - "tooltip-t-whatlinkshere": "Na lista de les pâges liyêes a ceta", + "tooltip-n-randompage": "Chargiér na pâge a l’hasârd", + "tooltip-n-help": "L’endrêt por nen savêr més", + "tooltip-t-whatlinkshere": "Na lista de totes les pâges du vouiqui liyêes a ceta", "tooltip-t-recentchangeslinked": "Dèrriérs changements de les pâges liyêes a ceta", - "tooltip-feed-rss": "Flux RSS por ceta pâge", - "tooltip-feed-atom": "Flux Atom por ceta pâge", - "tooltip-t-contributions": "Vêre la lista de les contribucions de cet’utilisator", - "tooltip-t-emailuser": "Mandar un mèssâjo a ceti usanciér", - "tooltip-t-upload": "Tèlèchargiér des fichiérs", + "tooltip-feed-rss": "Flux RSS por cela pâge", + "tooltip-feed-atom": "Flux Atom por cela pâge", + "tooltip-t-contributions": "Na lista de les contribucions de {{GENDER:$1|cél utilisator|cel’utilisatrice}}", + "tooltip-t-emailuser": "Mandar un mèssâjo a {{GENDER:$1|cél utilisator|cel’utilisatrice}}", + "tooltip-t-info": "Més d’enformacions sur cela pâge", + "tooltip-t-upload": "Tèlèchargiér de fichiérs", "tooltip-t-specialpages": "Na lista de totes les pâges spèciâles", "tooltip-t-print": "Vèrsion emprimâbla de cela pâge", "tooltip-t-permalink": "Lim fixo de vers cela vèrsion de la pâge", "tooltip-ca-nstab-main": "Vêre la pâge de contegnu", "tooltip-ca-nstab-user": "Vêre la pâge utilisator", - "tooltip-ca-nstab-media": "Vêre la pâge du fichiér mèdia", - "tooltip-ca-nstab-special": "O est na pâge spèciâla que pôt pas étre changiêe.", + "tooltip-ca-nstab-media": "Vêre la pâge mèdiâ", + "tooltip-ca-nstab-special": "O est na pâge spèciâla que pôt pas étre changiêe", "tooltip-ca-nstab-project": "Vêre la pâge projèt", "tooltip-ca-nstab-image": "Vêre la pâge du fichiér", "tooltip-ca-nstab-mediawiki": "Vêre lo mèssâjo sistèmo", "tooltip-ca-nstab-template": "Vêre lo modèlo", "tooltip-ca-nstab-help": "Vêre la pâge d’éde", - "tooltip-ca-nstab-category": "Vêre la pâge de la catègorie", + "tooltip-ca-nstab-category": "Vêre la pâge de la catègoria", "tooltip-minoredit": "Marcar mos changements coment petiôts", - "tooltip-save": "Sôvar voutros changements", - "tooltip-preview": "Volyéd prèvisualisar voutros changements devant que los sôvar !", - "tooltip-diff": "Pèrmèt de montrar los changements que vos éd fêts", - "tooltip-compareselectedversions": "Fâre ressortir les difèrences entre doves vèrsions de ceta pâge", - "tooltip-watch": "Apondre ceta pâge a voutra lista de survelyence", + "tooltip-save": "Encartar voutros changements", + "tooltip-preview": "Prèvêde voutros changements. Se vos plét, empleyéd-lo devant qu’encartar.", + "tooltip-diff": "Montrar los changements que vos éd aportâs u tèxto", + "tooltip-compareselectedversions": "Fâre ressortir les difèrences entre les doves vèrsions chouèsies de cela pâge", + "tooltip-watch": "Apondre cela pâge a voutra lista de gouârda", "tooltip-watchlistedit-normal-submit": "Enlevar los titros", - "tooltip-watchlistedit-raw-submit": "Betar a jorn la lista de survelyence", - "tooltip-recreate": "Refâre la pâge mémo se ceta at étâ suprimâ", + "tooltip-watchlistedit-raw-submit": "Betar a jorn la lista de gouârda", + "tooltip-recreate": "Refâre la pâge quand ben que ceta est étâye suprimâye", "tooltip-upload": "Emmodar lo tèlèchargement", - "tooltip-rollback": "« Rèvocar » anule tot d’un côp lo ou ben los changement(s) de cela pâge per lo dèrriér contributor.", - "tooltip-undo": "« Dèfâre » rèvoque ceti changement et ôvre la fenétra d’èdicion en fôrma de prèvisualisacion.\nPèrmèt de rètablir la vèrsion devant et pués d’apondre una rêson dens la bouèta de rèsumâ.", + "tooltip-rollback": "« Rèvocar » anule tot d’un côp lo(s) changement(s) de cela pâge per lo dèrriér contributor", + "tooltip-undo": "« Dèfâre » anule cél changement et pués ôvre la fenétra de changement en fôrma d’apèrçu. Pèrmèt d’apondre na rêson dens lo rèsumâ.", "tooltip-preferences-save": "Encartar les prèferences", "tooltip-summary": "Buchiéd un côrt rèsumâ", "common.css": "/* Lo code CSS betâ ique serat aplicâ a tôs los habelyâjos. */", @@ -2493,40 +2511,45 @@ "group-bot.js": "/* Tot code JavaScript betâ ique serat chargiê ren que por los bots. */", "group-sysop.js": "/* Tot code JavaScript betâ ique serat chargiê ren que por los administrators. */", "group-bureaucrat.js": "/* Tot code JavaScript betâ ique serat chargiê ren que por los grata-papiérs. */", - "anonymous": "{{PLURAL:$1|Usanciér pas encartâ|Usanciérs pas encartâs}} dessus {{SITENAME}}", - "siteuser": "l’usanciér{{GENDER:$2||e}} $1 de {{SITENAME}}", - "anonuser": "l’usanciér pas encartâ $1 de {{SITENAME}}", - "lastmodifiedatby": "Ceta pâge at étâ changiê por lo dèrriér côp lo $1 a $2 per $3.", + "anonymous": "{{PLURAL:$1|Utilisator anonimo|Utilisators anonimos}} dessus {{SITENAME}}", + "siteuser": "l’utilisat{{GENDER:$2|or|rice}} $1 de {{SITENAME}}", + "anonuser": "l’utilisator anonimo $1 de {{SITENAME}}", + "lastmodifiedatby": "Cela pâge est étâye changiêe por lo dèrriér côp lo $1 a $2 per $3.", "othercontribs": "Basâ sur l’ôvra a $1.", "others": "ôtros", - "siteusers": "{{PLURAL:$2|l’usanciér|los usanciérs}} $1 de {{SITENAME}}", - "anonusers": "{{PLURAL:$2|l’usanciér pas encartâ|los usanciérs pas encartâs}} $1 de {{SITENAME}}", - "creditspage": "Crèdits de la pâge", - "nocredits": "Y at gins d’enformacion d’atribucion disponibla por ceta pâge.", - "spamprotectiontitle": "Pâge protègiê ôtomaticament a côsa de spame", - "spamprotectiontext": "La pâge que vos éd tâchiê de sôvar at étâ blocâ per lo filtro anti-spame.\nO est probâblament diu a un lim de vers un seto de defôr qu’aparêt sur la lista nêre.", - "spamprotectionmatch": "La chêna de caractèros « '''$1''' » at dècllenchiê lo dècelior de spame.", - "spambot_username": "Neteyâjo de spame per MediaWiki", + "siteusers": "{{PLURAL:$2|{{GENDER:$1|l’utilisator|l’utilisatrice}}|{{Gender:$1|los utilisators|les utilisatrices}}}} $1 de {{SITENAME}}", + "anonusers": "{{PLURAL:$2|l’utilisator anonimo|los utilisators anonimos}} $1 de {{SITENAME}}", + "creditspage": "Atribucions de la pâge", + "nocredits": "Y at gins d’enformacion d’atribucion disponibla por cela pâge.", + "spamprotectiontitle": "Filtro de protèccion contre los mèssâjos cofos", + "spamprotectiontext": "Lo tèxto que vos éd volu encartar est étâ blocâ per lo filtro contre los mèssâjos cofos.\nO est probâblament diu a un lim de vers un seto de defôr qu’aparêt sur la lista nêre.", + "spamprotectionmatch": "Cél tèxto-que est cen qu’at dècllenchiê noutron filtro contre los mèssâjos cofos : $1", + "spambot_username": "Neteyâjo de mèssâjos cofos per MediaWiki", "spam_reverting": "Rètablissement de la dèrriére vèrsion que contint gins de lim de vers $1", - "spam_blanking": "Totes les vèrsions que contegnont des lims de vers $1 sont blanchies", - "spam_deleting": "Totes les vèrsions que contegnont des lims de vers $1 sont suprimâs", - "simpleantispam-label": "Contrôlo anti-spame.\nEnscrîde '''REN''' ique !", + "spam_blanking": "Totes les vèrsions que contegnont de lims de vers $1 sont blanchies", + "spam_deleting": "Totes les vèrsions que contegnont de lims de vers $1 sont suprimâyes", + "simpleantispam-label": "Contrôlo contre los mèssâjos cofos.\nEmpléd ren ique !", "pageinfo-title": "Enformacions por « $1 »", + "pageinfo-not-current": "Dèsolâ, y at pas moyen de balyér cel’enformacion por les vielyes vèrsions.", "pageinfo-header-basic": "Enformacions de bâsa", "pageinfo-header-edits": "Historico des changements", "pageinfo-header-restrictions": "Protèccion de la pâge", "pageinfo-header-properties": "Propriètâts de la pâge", "pageinfo-display-title": "Titro montrâ", - "pageinfo-default-sort": "Cllâf de tri per dèfôt", + "pageinfo-default-sort": "Cllâf de chouèx per dèfôt", "pageinfo-length": "Talye de la pâge (en octèts)", - "pageinfo-article-id": "Numerô de la pâge", + "pageinfo-article-id": "Identifient de la pâge", "pageinfo-language": "Lengoua du contegnu de la pâge", - "pageinfo-robot-policy": "Statut de motor de rechèrche", - "pageinfo-robot-index": "Endèxâblo", - "pageinfo-robot-noindex": "Pas endèxâblo", - "pageinfo-watchers": "Nombro de contributors qu’ont la pâge dedens lor lista de survelyence", - "pageinfo-redirects-name": "Redirèccions de vers ceta pâge", - "pageinfo-subpages-name": "Sot-pâges de ceta pâge", + "pageinfo-content-model": "Modèlo de contegnu de la pâge", + "pageinfo-robot-policy": "Endèxacion per robots", + "pageinfo-robot-index": "Ôtorisâye", + "pageinfo-robot-noindex": "Dèfendua", + "pageinfo-watchers": "Nombro d’obsèrvators de la pâge", + "pageinfo-visiting-watchers": "Nombro d’obsèrvators de la pâge qu’ant vesitâ los dèrriérs changements", + "pageinfo-few-watchers": "Muens de $1 obsèrvator{{PLURAL:$1||s}}", + "pageinfo-few-visiting-watchers": "Y pôt ou ben pas avêr un obsèrvator que vesite los dèrriérs changements", + "pageinfo-redirects-name": "Nombro de redirèccions de vers cela pâge", + "pageinfo-subpages-name": "Nombro de sot-pâges de cela pâge", "pageinfo-subpages-value": "$1 ($2 redirèccion{{PLURAL:$2||s}} ; $3 nan-redirèccion{{PLURAL:$3||s}})", "pageinfo-firstuser": "Crèator de la pâge", "pageinfo-firsttime": "Dâta de crèacion de la pâge", @@ -2534,50 +2557,64 @@ "pageinfo-lasttime": "Dâta du dèrriér changement", "pageinfo-edits": "Soma totâla de changements", "pageinfo-authors": "Soma totâla d’ôtors difèrents", - "pageinfo-recent-edits": "Nombro de novéls changements (dedens los $1 passâs)", + "pageinfo-recent-edits": "Nombro de novéls changements (dens los $1 passâs)", "pageinfo-recent-authors": "Nombro de novéls ôtors difèrents", "pageinfo-magic-words": "{{PLURAL:$1|Mot magico|Mots magicos}} ($1)", - "pageinfo-hidden-categories": "{{PLURAL:$1|Catègorie cachiêye|Catègories cachiêyes}} ($1)", - "pageinfo-templates": "{{PLURAL:$1|Modèlo encllu|Modèlos encllus}} ($1)", - "pageinfo-toolboxlink": "Enformacions dessus la pâge", + "pageinfo-hidden-categories": "{{PLURAL:$1|Catègoria cachiêe|Catègories cachiêes}} ($1)", + "pageinfo-templates": "{{PLURAL:$1|Modèlo transcllu|Modèlos transcllus}} ($1)", + "pageinfo-transclusions": "Pâge{{PLURAL:$1||s}} yô qu’el est transcllua ($1)", + "pageinfo-toolboxlink": "Enformacions sur la pâge", "pageinfo-redirectsto": "Redirige vers", "pageinfo-redirectsto-info": "enfô", "pageinfo-contentpage": "Comptâ coment pâge de contegnu", "pageinfo-contentpage-yes": "Ouè", + "pageinfo-protect-cascading": "Les protèccions sont en cascâda dês ique", "pageinfo-protect-cascading-yes": "Ouè", - "markaspatrolleddiff": "Marcar coment survelyê", - "markaspatrolledtext": "Marcar ceta pâge coment survelyê", - "markedaspatrolled": "Marcâye coment survelyêye", - "markedaspatrolledtext": "La vèrsion chouèsia de [[:$1]] est étâye marcâye coment survelyêye.", - "rcpatroldisabled": "La fonccion de survelyence des dèrriérs changements est pas activâ.", - "rcpatroldisabledtext": "La fonccionalitât de survelyence des dèrriérs changements est pas activâ.", - "markedaspatrollederror": "Pôt pas étre marcâye coment survelyêye", - "markedaspatrollederrortext": "Vos dête chouèsir una vèrsion por la povêr marcar coment survelyê.", - "markedaspatrollederror-noautopatrol": "Vos avéd pas lo drêt de marcar voutros prôpros changements coment survelyês.", - "patrol-log-page": "Jornal de les vèrsions survelyês", - "patrol-log-header": "Vê-que un jornal de les vèrsions survelyês.", - "log-show-hide-patrol": "$1 lo jornal de les vèrsions survelyês", - "deletedrevision": "La vielye vèrsion $1 at étâ suprimâ.", - "filedeleteerror-short": "Èrror pendent la suprèssion du fichiér : $1", - "filedeleteerror-long": "Des èrrors ont étâ rencontrâs pendent la suprèssion du fichiér :\n\n$1", - "filedelete-missing": "Lo fichiér « $1 » pôt pas étre suprimâ perce qu’ègziste pas.", - "filedelete-old-unregistered": "La vèrsion du fichiér spècefiâ « $1 » est pas dens la bâsa de balyês.", - "filedelete-current-unregistered": "Lo fichiér spècefiâ « $1 » est pas dens la bâsa de balyês.", - "filedelete-archive-read-only": "Lo dossiér d’arch·ivâjo « $1 » pôt pas étre changiê per lo sèrvor.", + "pageinfo-protect-cascading-from": "Les protèccions sont en cascâda dês", + "pageinfo-category-info": "Enformacions sur la catègoria", + "pageinfo-category-total": "Soma totâla de membros", + "pageinfo-category-pages": "Nombro de pâges", + "pageinfo-category-subcats": "Nombro de sot-catègories", + "pageinfo-category-files": "Nombro de fichiérs", + "markaspatrolleddiff": "Marcar coment gouardâ", + "markaspatrolledtext": "Marcar cela pâge coment gouardâye", + "markaspatrolledtext-file": "Marcar cela vèrsion de fichiér coment gouardâye", + "markedaspatrolled": "Marcâ coment gouardâ", + "markedaspatrolledtext": "La vèrsion chouèsia de [[:$1]] est étâye marcâye coment gouardâye.", + "rcpatroldisabled": "La gouârda des dèrriérs changements est dèsactivâye", + "rcpatroldisabledtext": "Ora la fonccionalitât de gouârda des dèrriérs changements est dèsactivâye.", + "markedaspatrollederror": "Pôt pas étre marcâ coment gouardâ", + "markedaspatrollederrortext": "Vos dête spècifiar na vèrsion por la povêr marcar coment gouardâye.", + "markedaspatrollederror-noautopatrol": "Vos éd pas lo drêt de marcar los voutros changements coment gouardâs.", + "markedaspatrollednotify": "Cél changement de $1 est étâ marcâ coment gouardâ.", + "markedaspatrollederrornotify": "Falyita du marcâjo du changement coment gouardâ.", + "patrol-log-page": "Jornâl de gouârda", + "patrol-log-header": "Vê-que un jornâl de les vèrsions gouardâyes.", + "log-show-hide-patrol": "$1 lo jornâl de gouârda", + "log-show-hide-tag": "$1 lo jornâl de les balises", + "deletedrevision": "Vielye vèrsion $1 suprimâye", + "filedeleteerror-short": "Fôta pendent la suprèssion du fichiér : $1", + "filedeleteerror-long": "Des fôtes sont étâyes rencontrâyes pendent la suprèssion du fichiér :\n\n$1", + "filedelete-missing": "Lo fichiér « $1 » pôt pas étre suprimâ, ègziste pas.", + "filedelete-old-unregistered": "La vèrsion du fichiér spècifiâye « $1 » est pas dedens la bâsa de balyês.", + "filedelete-current-unregistered": "Lo fichiér spècifiâ « $1 » est pas dedens la bâsa de balyês.", + "filedelete-archive-read-only": "Lo rèpèrtouèro d’arch·ivâjo « $1 » est pas enscriptiblo per lo sèrvior Vouèbe.", "previousdiff": "← Changement devant", "nextdiff": "Changement aprés →", - "mediawarning": "'''Atencion :''' ceti tipo de fichiér pôt contegnir de code mâlvelyent.\nSe vos l’ègzécutâd, voutron sistèmo pôt étre compromês.", - "imagemaxsize": "Format lo ples grant de les émâges :
''(por les pâges de dèscripcion d’émâges)''", - "thumbsize": "Talye de la figura :", + "mediawarning": "Atencion : cél tipo de fichiér pôt contegnir de code mâlvelyent.\nSe vos l’ègzécutâd, voutron sistèmo pôt étre compromètu.", + "imagemaxsize": "Talye maximon de les émâges :
(por les pâges de dèscripcion de fichiérs)", + "thumbsize": "Talye de la miniatura :", "widthheightpage": "$1 × $2, $3 pâge{{PLURAL:$3||s}}", "file-info": "Talye du fichiér : $1, tipo MIME : $2", "file-info-size": "$1 × $2 pixèls, talye du fichiér : $3, tipo MIME : $4", "file-info-size-pages": "$1 × $2 pixèls, talye du fichiér : $3, tipo MIME : $4, $5 pâge{{PLURAL:$5||s}}", - "file-nohires": "Gins de rèsolucion ples hôta disponibla.", - "svg-long-desc": "Fichiér SVG, rèsolucion de $1 × $2 pixèls, talye : $3", - "svg-long-error": "Fichiér SVG envalido : $1", + "file-nohires": "Niona rèsolucion ples hôta disponibla.", + "svg-long-desc": "Fichiér SVG, nominalament $1 × $2 pixèls, talye du fichiér : $3", + "svg-long-desc-animated": "Fichiér SVG animâ, nominalament $1 × $2 pixèls, talye du fichiér : $3", + "svg-long-error": "Fichiér SVG pas justo : $1", "show-big-image": "Fichiér d’origina", - "show-big-image-preview": "Talye de ceti apèrçu : $1.", + "show-big-image-preview": "Talye de cél apèrçu : $1.", + "show-big-image-preview-differ": "Talye de cél apèrçu $3 du fichiér $2 : $1.", "show-big-image-other": "{{PLURAL:$2|Ôtra rèsolucion|Ôtres rèsolucions}} : $1.", "show-big-image-size": "$1 × $2 pixèls", "file-info-gif-looped": "en boclla", @@ -2585,12 +2622,16 @@ "file-info-png-looped": "en boclla", "file-info-png-repeat": "jouyê $1 côp{{PLURAL:$1||s}}", "file-info-png-frames": "$1 émâge{{PLURAL:$1||s}}", - "newimages": "Galerie des novéls fichiérs", - "imagelisttext": "Vê-que una lista de '''$1''' {{PLURAL:$1|fichiér rengiê|fichiérs rengiês}} $2.", - "newimages-summary": "Ceta pâge spèciâla montre los dèrriérs fichiérs tèlèchargiês.", - "newimages-legend": "Nom du fichiér", - "newimages-label": "Nom du fichiér (ou ben una partia de ceti) :", - "noimages": "Gins de fichiér a fâre vêre.", + "file-no-thumb-animation": "Nota : a côsa de limitacions tècniques, les miniatures de cél fichiér seront pas animâyes.", + "file-no-thumb-animation-gif": "Nota : a côsa de limitacions tècniques, les miniatures d’émâges GIF en hôta rèsolucion coment ceta seront pas animâyes.", + "newimages": "Galeria des novéls fichiérs", + "imagelisttext": "Vê-que na lista de $1 {{PLURAL:$1|fichiér rengiê|fichiérs rengiês}} $2.", + "newimages-summary": "Cela pâge spèciâla montre los dèrriérs fichiérs tèlèchargiês.", + "newimages-legend": "Filtro", + "newimages-label": "Nom du fichiér (ou ben na partia de ceti) :", + "newimages-showbots": "Montrar los tèlèchargements per los robots", + "newimages-hidepatrolled": "Cachiér los tèlèchargements gouardâs", + "noimages": "Ren a fâre vêre.", "ilsubmit": "Rechèrchiér", "bydate": "per dâta", "sp-newimages-showfrom": "Montrar los novéls fichiérs dês lo $1 a $2", @@ -2599,14 +2640,28 @@ "minutes": "$1 menut{{PLURAL:$1|a|es}}", "hours": "$1 hor{{PLURAL:$1|a|es}}", "days": "$1 jorn{{PLURAL:$1||s}}", + "weeks": "$1 seman{{PLURAL:$1|a|es}}", + "months": "{{PLURAL:$1|$1 mês}}", + "years": "$1 an{{PLURAL:$1||s}}", "ago": "cen fât $1", "just-now": "drêt-ora", - "bad_image_list": "Lo format est ceti :\n\nSolament les listes d’ènumèracion (que començont per *) sont considèrâs.\nLo premiér lim d’una legne dêt étre vers celi d’una crouye émâge.\nLos ôtros lims sur la méma legne sont considèrâs coment des èxcèpcions, per ègzemplo des pâges sur lesquintes l’émâge pôt aparêtre.", + "hours-ago": "cen fât $1 hor{{PLURAL:$1|a|es}}", + "minutes-ago": "cen fât $1 menut{{PLURAL:$1|a|es}}", + "seconds-ago": "cen fât $1 second{{PLURAL:$1|a|es}}", + "monday-at": "Delon a $1", + "tuesday-at": "Demârs a $1", + "wednesday-at": "Demécro a $1", + "thursday-at": "Dejô a $1", + "friday-at": "Devendro a $1", + "saturday-at": "Dessando a $1", + "sunday-at": "Demenge a $1", + "yesterday-at": "Hièr a $1", + "bad_image_list": "Lo format est ceti :\n\nSolament les piéces de lista (les legnes que començont per *) sont considèrâyes.\nLo premiér lim d’una legne dêt étre celi d’un crouyo fichiér.\nLos ôtros lims sur la méma legne sont considèrâs coment d’èxcèpcions, per ègzemplo des pâges que lo fichiér pôt aparêtre dessus.", "metadata": "Mètabalyês", - "metadata-help": "Ceti fichiér contint des enformacions de ples, probâblament apondues per l’aparèly-fotô numerico ou ben lo scanor utilisâ por lo fâre.\nSe lo fichiér at étâ changiê dês son ètat originâl, quârques dètalys pôvont pas reflètar a chavon l’émâge changiê.", - "metadata-expand": "Montrar los dètalys ètendus", - "metadata-collapse": "Cachiér los dètalys ètendus", - "metadata-fields": "Los champs de mètabalyês d’émâge listâs dens cél mèssâjo seront betâs dedens la pâge de dèscripcion de l’émâge quand la trâbla de mètabalyês serat rèduita.\nLos ôtros champs seront cachiês per dèfôt.\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-help": "Cél fichiér contint d’enformacions de més, probâblament apondues per l’aparèly-fotô numerico lo scanor empleyê por lo fâre numerisar.\nSe lo fichiér est étâ changiê dês son ètat originâl, quârques dètalys pôvont pas remandar a chavon lo fichiér changiê.", + "metadata-expand": "Montrar los dètalys de més", + "metadata-collapse": "Cachiér los dètalys de més", + "metadata-fields": "Los champs de mètabalyês d’émâge listâs dens cél mèssâjo seront rapondus dedens la pâge de dèscripcion de l’émâge quand la trâbla de mètabalyês serat rèduita.\nLos ôtros champs seront cachiês per dèfôt.\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-langitem": "'''$2 :''' $1", "exif-imagewidth": "Largior", "exif-imagelength": "Hôtior", @@ -2617,207 +2672,208 @@ "exif-samplesperpixel": "Nombro de composentes", "exif-planarconfiguration": "Arrengement de les balyês", "exif-ycbcrsubsampling": "Quota de sot-èchantelyonâjo de Y a C", - "exif-ycbcrpositioning": "Posicionement Y et C", + "exif-ycbcrpositioning": "Posicionament Y et C", "exif-xresolution": "Rèsolucion plana", "exif-yresolution": "Rèsolucion drêta", - "exif-stripoffsets": "Emplacement de les balyês de l’émâge", + "exif-stripoffsets": "Endrêt de les balyês de l’émâge", "exif-rowsperstrip": "Nombro de legnes per benda", - "exif-stripbytecounts": "Talye en octèts per benda", + "exif-stripbytecounts": "Octèts per benda comprimâye", "exif-jpeginterchangeformat": "Posicion du SOI JPEG", - "exif-jpeginterchangeformatlength": "Talye en octèts de les balyês JPEG", + "exif-jpeginterchangeformatlength": "Octèts de les balyês JPEG", "exif-whitepoint": "Cromaticitât du pouent blanc", "exif-primarychromaticities": "Cromaticitât de les colors primères", "exif-ycbcrcoefficients": "Factors de la matrice de transformacion de l’èspâço colorimètrico", - "exif-referenceblackwhite": "Valors de refèrence nêr et blanc", + "exif-referenceblackwhite": "Cobla de valors de rèference nêr et blanc", "exif-datetime": "Dâta et hora de changement du fichiér", "exif-imagedescription": "Titro de l’émâge", "exif-make": "Fabrecant de l’aparèly-fotô", "exif-model": "Modèlo de l’aparèly-fotô", - "exif-software": "Programeria utilisâ", + "exif-software": "Programeria empleyêe", "exif-artist": "Ôtor", - "exif-copyright": "Dètentor du drêt d’ôtor", + "exif-copyright": "Dètentior des drêts d’ôtor", "exif-exifversion": "Vèrsion Exif", - "exif-flashpixversion": "Vèrsion FlashPix recognua", + "exif-flashpixversion": "Vèrsion Flashpix recognua", "exif-colorspace": "Èspâço colorimètrico", "exif-componentsconfiguration": "Significacion de châque composenta", "exif-compressedbitsperpixel": "Fôrma de comprèssion de l’émâge", - "exif-pixelydimension": "Largior de l’émâge", - "exif-pixelxdimension": "Hôtior de l’émâge", - "exif-usercomment": "Comentèros a l’usanciér", + "exif-pixelxdimension": "Largior de l’émâge", + "exif-pixelydimension": "Hôtior de l’émâge", + "exif-usercomment": "Comentèros de l’utilisator", "exif-relatedsoundfile": "Fichiér ôdiô associyê", - "exif-datetimeoriginal": "Dâta et hora de la g·ènèracion de les balyês", + "exif-datetimeoriginal": "Dâta et hora de la prêsa originâla", "exif-datetimedigitized": "Dâta et hora de la numerisacion", - "exif-subsectime": "Dâta et hora en fraccions de secondes de changement du fichiér", - "exif-subsectimeoriginal": "Dâta et hora en fraccions de secondes de la g·ènèracion de les balyês", - "exif-subsectimedigitized": "Dâta et hora en fraccions de secondes de la numerisacion", + "exif-subsectime": "Dâta et hora en fraccions de seconda", + "exif-subsectimeoriginal": "Dâta et hora de la prêsa originâla en fraccions de seconda", + "exif-subsectimedigitized": "Dâta et hora de la numerisacion en fraccions de seconda", "exif-exposuretime": "Temps d’èxposicion", - "exif-exposuretime-format": "$1 s ($2)", - "exif-fnumber": "Nombro f", + "exif-exposuretime-format": "$1 s ($2 s)", + "exif-fnumber": "Uvèrtura", "exif-exposureprogram": "Programo d’èxposicion", "exif-spectralsensitivity": "Sensibilitât spèctrâla", "exif-isospeedratings": "Sensibilitât ISO", "exif-shutterspeedvalue": "Vitèsse d’ètopâ de l’APEX", "exif-aperturevalue": "Uvèrtura de l’APEX", - "exif-brightnessvalue": "Luminance APEX", - "exif-exposurebiasvalue": "Corrèccion d’èxposicion", - "exif-maxaperturevalue": "Uvèrtura la ples granta", - "exif-subjectdistance": "Distance du sujèt", + "exif-brightnessvalue": "Brilyent de l’APEX", + "exif-exposurebiasvalue": "Corrèccion d’èxposicion de l’APEX", + "exif-maxaperturevalue": "Uvèrtura maximon", + "exif-subjectdistance": "Distance de la chousa", "exif-meteringmode": "Fôrma de mesera", "exif-lightsource": "Sôrsa de lumiére", "exif-flash": "Èludo", "exif-focallength": "Longior focâla", - "exif-subjectarea": "Emplacement du sujèt", - "exif-flashenergy": "Nèrf de l’èludo", + "exif-subjectarea": "Sôl de la chousa", + "exif-flashenergy": "Ènèrg·ia de l’èludo", "exif-focalplanexresolution": "Rèsolucion plana de la vision focâla", "exif-focalplaneyresolution": "Rèsolucion drêta de la vision focâla", "exif-focalplaneresolutionunit": "Unitât de rèsolucion de la vision focâla", - "exif-subjectlocation": "Posicion du sujèt", - "exif-exposureindex": "Endèxe d’èxposicion", + "exif-subjectlocation": "Endrêt de la chousa", + "exif-exposureindex": "Endèx d’èxposicion", "exif-sensingmethod": "Tipo de captior", "exif-filesource": "Sôrsa du fichiér", "exif-scenetype": "Tipo de scèna", "exif-customrendered": "Rendu d’émâge pèrsonalisâ", "exif-exposuremode": "Fôrma d’èxposicion", "exif-whitebalance": "Balance des blancs", - "exif-digitalzoomratio": "Quota d’agrantissement numerico (''zoom'')", - "exif-focallengthin35mmfilm": "Longior focâla por un filme 35 mm", - "exif-scenecapturetype": "Tipo de prêsa de la scèna", - "exif-gaincontrol": "Contrôlo de scèna", - "exif-contrast": "Contraste", + "exif-digitalzoomratio": "Quota d’agrantissement numerico (zoom)", + "exif-focallengthin35mmfilm": "Longior focâla por un filmo 35 mm", + "exif-scenecapturetype": "Tipo de captura de la scèna", + "exif-gaincontrol": "Contrôlo de la scèna", + "exif-contrast": "Contrasto", "exif-saturation": "Saturacion", - "exif-sharpness": "Prècision", + "exif-sharpness": "Nètetât", "exif-devicesettingdescription": "Dèscripcion de la configuracion du dispositif", - "exif-subjectdistancerange": "Distance du sujèt", - "exif-imageuniqueid": "Numerô solèt de l’émâge", + "exif-subjectdistancerange": "Èchiéla de distance de la chousa", + "exif-imageuniqueid": "Identifient solèt de l’émâge", "exif-gpsversionid": "Vèrsion de la balisa GPS", - "exif-gpslatituderef": "Latituda bise (''nord'') ou mié-jorn (''sud'')", + "exif-gpslatituderef": "Latituda bise (nord) ou ben mié-jorn (sud)", "exif-gpslatitude": "Latituda", - "exif-gpslongituderef": "Longituda levant (''èst'') ou ponant (''ouèst'')", + "exif-gpslongituderef": "Longituda levant (èste) ou ben cuchient (ouèste)", "exif-gpslongitude": "Longituda", - "exif-gpsaltituderef": "Refèrence d’hôtior", + "exif-gpsaltituderef": "Rèference d’hôtior", "exif-gpsaltitude": "Hôtior", "exif-gpstimestamp": "Hora GPS (relojo atomico)", - "exif-gpssatellites": "Satèlites utilisâs por la mesera", + "exif-gpssatellites": "Satèlitos empleyês por la mesera", "exif-gpsstatus": "Ètat du recevior", "exif-gpsmeasuremode": "Fôrma de mesera", "exif-gpsdop": "Prècision de la mesera", - "exif-gpsspeedref": "Unitât de vitèsse du recevior GPS", + "exif-gpsspeedref": "Unitât de vitèsse", "exif-gpsspeed": "Vitèsse du recevior GPS", - "exif-gpstrackref": "Refèrence por la dirèccion du mouvement", + "exif-gpstrackref": "Rèference por la dirèccion du mouvement", "exif-gpstrack": "Dirèccion du mouvement", - "exif-gpsimgdirectionref": "Refèrence por la dirèccion de l’émâge", + "exif-gpsimgdirectionref": "Rèference por la dirèccion de l’émâge", "exif-gpsimgdirection": "Dirèccion de l’émâge", - "exif-gpsmapdatum": "Sistèmo g·eodèsico utilisâ", - "exif-gpsdestlatituderef": "Refèrence por la latituda de la dèstinacion", + "exif-gpsmapdatum": "Balyês de sondâjo g·eodèsico empleyêes", + "exif-gpsdestlatituderef": "Rèference por la latituda de la dèstinacion", "exif-gpsdestlatitude": "Latituda de la dèstinacion", - "exif-gpsdestlongituderef": "Refèrence por la longituda de la dèstinacion", + "exif-gpsdestlongituderef": "Rèference por la longituda de la dèstinacion", "exif-gpsdestlongitude": "Longituda de la dèstinacion", - "exif-gpsdestbearingref": "Refèrence por lo relèvament de la dèstinacion", + "exif-gpsdestbearingref": "Rèference por lo relèvament de la dèstinacion", "exif-gpsdestbearing": "Relèvament de la dèstinacion", - "exif-gpsdestdistanceref": "Refèrence por la distance a la dèstinacion", + "exif-gpsdestdistanceref": "Rèference por la distance a la dèstinacion", "exif-gpsdestdistance": "Distance a la dèstinacion", - "exif-gpsprocessingmethod": "Nom du tipo de trètament du GPS", - "exif-gpsareainformation": "Nom de la zona GPS", + "exif-gpsprocessingmethod": "Nom de la mètoda de trètament du GPS", + "exif-gpsareainformation": "Nom du sôl GPS", "exif-gpsdatestamp": "Dâta GPS", "exif-gpsdifferential": "Corrèccion difèrencièla GPS", "exif-jpegfilecomment": "Comentèro de fichiér JPEG", "exif-keywords": "Mots-cllâfs", - "exif-worldregioncreated": "Règ·ion du mondo que la fotô at étâ prêsa", - "exif-countrycreated": "Payis que la fotô at étâ prêsa", - "exif-countrycodecreated": "Code du payis que la fotô at étâ prêsa", - "exif-provinceorstatecreated": "Province ou ben ètat que la fotô at étâ prêsa", - "exif-citycreated": "Vela que la fotô at étâ prêsa", - "exif-sublocationcreated": "Partia de la vela que la fotô at étâ prêsa", - "exif-worldregiondest": "Règ·ion du mondo montrâ", + "exif-worldregioncreated": "Règ·ion du mondo yô que la fotô est étâye prêsa", + "exif-countrycreated": "Payis yô que la fotô est étâye prêsa", + "exif-countrycodecreated": "Code du payis yô que la fotô est étâye prêsa", + "exif-provinceorstatecreated": "Province Ètat yô que la fotô est étâye prêsa", + "exif-citycreated": "Vela yô que la fotô est étâye prêsa", + "exif-sublocationcreated": "Partia de la vela yô que la fotô est étâye prêsa", + "exif-worldregiondest": "Règ·ion du mondo montrâye", "exif-countrydest": "Payis montrâ", "exif-countrycodedest": "Code du payis montrâ", - "exif-provinceorstatedest": "Province ou ben ètat montrâ", - "exif-citydest": "Vela montrâ", - "exif-sublocationdest": "Partia de la vela montrâ", + "exif-provinceorstatedest": "Province Ètat montrâ(ye)", + "exif-citydest": "Vela montrâye", + "exif-sublocationdest": "Partia de la vela montrâye", "exif-objectname": "Titro côrt", "exif-specialinstructions": "Enstruccions spèciâles", "exif-headline": "Titro", "exif-credit": "Crèdit / fornissor", "exif-source": "Sôrsa", "exif-editstatus": "Statut èditoriâl de l’émâge", - "exif-urgency": "Urgence", - "exif-fixtureidentifier": "Nom de l’outil", + "exif-urgency": "Prèssa", + "exif-fixtureidentifier": "Nom de la colona", "exif-locationdest": "Endrêt fotografiâ", "exif-locationdestcode": "Code de l’endrêt fotografiâ", - "exif-objectcycle": "Moment de la jornâ que ceti mèdia est dèstinâ", - "exif-contact": "Enformacions de contacte", + "exif-objectcycle": "Temps de la jornâ que cél mèdiâ y est dèstinâ", + "exif-contact": "Enformacions de contacto", "exif-writer": "Ôtor", "exif-languagecode": "Lengoua", "exif-iimversion": "Vèrsion IIM", - "exif-iimcategory": "Catègorie", - "exif-iimsupplementalcategory": "Catègories de ples", - "exif-datetimeexpires": "Pas utilisar aprés", + "exif-iimcategory": "Catègoria", + "exif-iimsupplementalcategory": "Catègories de més", + "exif-datetimeexpires": "Pas empleyér aprés", "exif-datetimereleased": "Paru lo", - "exif-originaltransmissionref": "Code de l’endrêt de la transmission originâla", - "exif-identifier": "Numerô", - "exif-lens": "Lentelye utilisâ", + "exif-originaltransmissionref": "Code d’endrêt de la transmission originâla", + "exif-identifier": "Identifient", + "exif-lens": "Lentelye empleyêe", "exif-serialnumber": "Numerô de sèria de l’aparèly-fotô", "exif-cameraownername": "Propriètèro de l’aparèly-fotô", "exif-label": "Lambél", "exif-datetimemetadata": "Dâta du dèrriér changement de les mètabalyês", - "exif-nickname": "Nom enformèl de l’émâge", + "exif-nickname": "Nom famelyér de l’émâge", "exif-rating": "Nota (sur 5)", - "exif-rightscertificate": "Cèrtificat d’administracion des drêts", + "exif-rightscertificate": "Cèrtificat de maneyance des drêts", "exif-copyrighted": "Statut des drêts d’ôtor", - "exif-copyrightowner": "Propriètèro du drêt d’ôtor", + "exif-copyrightowner": "Dètentior des drêts d’ôtor", "exif-usageterms": "Condicions d’usâjo", - "exif-webstatement": "Dècllaracion des drêts d’ôtor en legne", - "exif-originaldocumentid": "Numerô solèt du document originâl", - "exif-licenseurl": "URL de la licence", + "exif-webstatement": "Dècllaracion de drêts d’ôtor en legne", + "exif-originaldocumentid": "Identifient solèt du document originâl", + "exif-licenseurl": "URL de la licence des drêts d’ôtor", "exif-morepermissionsurl": "Enformacions sur les licences altèrnatives", - "exif-attributionurl": "Pendent lo reusâjo de cela ôvra, volyéd liyér a", - "exif-preferredattributionname": "Pendent lo reusâjo de cela ôvra, volyéd crèditar", + "exif-attributionurl": "Pendent lo reusâjo de cel’ôvra, se vos plét liyéd a", + "exif-preferredattributionname": "Pendent lo reusâjo de cel’ôvra, se vos plét crèditâd", "exif-pngfilecomment": "Comentèro de fichiér PNG", - "exif-disclaimer": "Avèrtissement", - "exif-contentwarning": "Avèrtissement sur lo contegnu", + "exif-disclaimer": "Semonce de nan-rèsponsabilitât", + "exif-contentwarning": "Semonce sur lo contegnu", "exif-giffilecomment": "Comentèro de fichiér GIF", - "exif-intellectualgenre": "Tipo d’èlèment", - "exif-subjectnewscode": "Code du sujèt", + "exif-intellectualgenre": "Tipo de piéce", + "exif-subjectnewscode": "Code de la chousa", "exif-scenecode": "Code de scèna IPTC", "exif-event": "Èvènement fotografiâ", - "exif-organisationinimage": "Organisacion fotografiâ", - "exif-personinimage": "Pèrsona fotografiâ", - "exif-originalimageheight": "Hôtior de l’émâge devant qu’el èye étâ tornâ cadrar", - "exif-originalimagewidth": "Largior de l’émâge devant qu’el èye étâ tornâ cadrar", - "exif-compression-1": "Pas comprèssâ", - "exif-compression-2": "CCITT tropa 3 longior du codâjo Huffman changiê de dimension 1", - "exif-compression-3": "CCITT tropa 3 codâjo du faxe", - "exif-compression-4": "CCITT tropa 4 codâjo du faxe", + "exif-organisationinimage": "Organisacion fotografiâye", + "exif-personinimage": "Pèrsona fotografiâye", + "exif-originalimageheight": "Hôtior de l’émâge devant que seye étâye recadrâye", + "exif-originalimagewidth": "Largior de l’émâge devant que seye étâye recadrâye", + "exif-compression-1": "Pas damâ", + "exif-compression-2": "CCITT Groupo 3 Longior du codâjo Huffman changiê de dimension 1", + "exif-compression-3": "CCITT Groupo 3 codâjo du faxe", + "exif-compression-4": "CCITT Groupo 4 codâjo du faxe", "exif-compression-6": "JPEG (viely)", - "exif-copyrighted-true": "Somês a drêt d’ôtor", - "exif-copyrighted-false": "Domêno publico", + "exif-copyrighted-true": "Protègiê per los drêts d’ôtor", + "exif-copyrighted-false": "Ètat des drêts d’ôtor pas dèfeni", + "exif-photometricinterpretation-1": "Nêr et blanc (0 por lo nêr)", "exif-unknowndate": "Dâta encognua", "exif-orientation-1": "Normala", - "exif-orientation-2": "Envèrsâ d’aplan", - "exif-orientation-3": "Veriê de 180°", - "exif-orientation-4": "Envèrsâ d’aplomb", - "exif-orientation-5": "Veriê de 90° dens la dirèccion antihorèra et envèrsâ d’aplomb", - "exif-orientation-6": "Veriê de 90° dens la dirèccion antihorèra", - "exif-orientation-7": "Veriê de 90° dens la dirèccion horèra et envèrsâ d’aplomb", - "exif-orientation-8": "Veriê de 90° dens la dirèccion horèra", - "exif-planarconfiguration-1": "Balyês ategnentes", - "exif-planarconfiguration-2": "Balyês sèparâs", + "exif-orientation-2": "Envèrsâye d’aplan", + "exif-orientation-3": "Veriêe de 180°", + "exif-orientation-4": "Envèrsâye d’aplomb", + "exif-orientation-5": "Veriêe de 90° du fllanc antihorèro et envèrsâye d’aplomb", + "exif-orientation-6": "Veriêe de 90° du fllanc antihorèro", + "exif-orientation-7": "Veriêe de 90° du fllanc horèro et envèrsâye d’aplomb", + "exif-orientation-8": "Veriêe de 90° du fllanc horèro", + "exif-planarconfiguration-1": "format en bocons", + "exif-planarconfiguration-2": "format plan", "exif-colorspace-65535": "Pas calibrâ", - "exif-componentsconfiguration-0": "Ègziste pas", + "exif-componentsconfiguration-0": "ègziste pas", "exif-componentsconfiguration-5": "V", "exif-exposureprogram-0": "Pas dèfeni", - "exif-exposureprogram-1": "Manuèl", + "exif-exposureprogram-1": "Manuâl", "exif-exposureprogram-2": "Programo normal", "exif-exposureprogram-3": "Prioritât a l’uvèrtura", "exif-exposureprogram-4": "Prioritât a l’ètopior", "exif-exposureprogram-5": "Programo crèacion (prèference a la provondior de champ)", "exif-exposureprogram-6": "Programo accion (prèference a la vitèsse d’ètopâ)", - "exif-exposureprogram-7": "Fôrma portrèt (por clich·ês de prés avouéc fond pas nèt)", - "exif-exposureprogram-8": "Fôrma payisâjo (por des clich·ês de payisâjos nèts)", - "exif-subjectdistance-value": "$1 mètre{{PLURAL:$1||s}}", + "exif-exposureprogram-7": "Fôrma portrèt (por visions de prés avouéc dèrriér troblo)", + "exif-exposureprogram-8": "Fôrma payisâjo (por visions de payisâjos avouéc dèrriér nèt)", + "exif-subjectdistance-value": "$1 mètro{{PLURAL:$1||s}}", "exif-meteringmode-0": "Encognua", "exif-meteringmode-1": "Moyena", - "exif-meteringmode-2": "Moyena èquilibrâ u centro", + "exif-meteringmode-2": "Moyena d’aplomb u centro", "exif-meteringmode-3": "Pouent", "exif-meteringmode-4": "MultiPouent", "exif-meteringmode-5": "Modèlo", @@ -3108,7 +3164,6 @@ "redirect-submit": "Emmodar", "fileduplicatesearch": "Rechèrche des fichiérs en doblo", "fileduplicatesearch-summary": "Rechèrche des fichiérs en doblo d’aprés lor mârca de chaplâjo.", - "fileduplicatesearch-legend": "Rechèrche d’un doblo", "fileduplicatesearch-filename": "Nom du fichiér :", "fileduplicatesearch-submit": "Rechèrchiér", "fileduplicatesearch-info": "$1 × $2 pixèls
Talye du fichiér : $3
Tipo MIME : $4", diff --git a/languages/i18n/frr.json b/languages/i18n/frr.json index 0306e65208..c52df0a8b8 100644 --- a/languages/i18n/frr.json +++ b/languages/i18n/frr.json @@ -10,7 +10,8 @@ "아라", "Purodha", "Macofe", - "Matma Rex" + "Matma Rex", + "Nemo bis" ] }, "tog-underline": "Ferwisangen onerstrik:", @@ -1252,7 +1253,7 @@ "recentchangeslinked-page": "Sidjennööm:", "recentchangeslinked-to": "Wise feranrangen üüb sidjen, diar heerhen ferwise.", "recentchanges-page-added-to-category": "[[:$1]] tu kategorii saat", - "recentchanges-page-added-to-category-bundled": "[[:$1]] an {{PLURAL:$2|ian sidj muar|$2 muar sidjen}} tu kategorii saat", + "recentchanges-page-added-to-category-bundled": "[[:$1]] an [[Special:WhatLinksHere/$1|{{PLURAL:$2|ian sidj muar|$2 muar sidjen}}]] tu kategorii saat", "recentchanges-page-removed-from-category": "[[:$1]] faan't kategorii wechnimen", "recentchanges-page-removed-from-category-bundled": "[[:$1]] an {{PLURAL:$2|ian sidj muar|$2 muar sidjen}} faan det kategorii wechnimen", "upload": "Datei huuchschüür", @@ -1682,8 +1683,6 @@ "categories": "Kategoriin", "categoriespagetext": "{{PLURAL:$1|Detdiar kategorii häält|Jodiar kategoriin hual}} sidjen of datein.\n[[Special:UnusedCategories|Leesag kategoriin]] wurd heer ei uunwiset.\nLuke uk bi det list faan [[Special:WantedCategories|nuadag kategoriin]].", "categoriesfrom": "Wise kategoriin mä began üüb:", - "special-categories-sort-count": "Efter taalen sortiaret", - "special-categories-sort-abc": "Efter't alfabeet sortiaret", "deletedcontributions": "Stregen bidracher", "deletedcontributions-title": "Stregen bidracher", "sp-deletedcontributions-contribs": "Bidracher", @@ -2280,11 +2279,7 @@ "import-logentry-upload-detail": "$1 {{PLURAL:$1|werjuun|werjuunen}} importiaret", "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|werjuun|werjuunen}} faan $2 importiaret", "javascripttest": "JavaScript-test", - "javascripttest-pagetext-noframework": "Detdiar sidj as för JavaScript-tests föörsen.", - "javascripttest-pagetext-unknownframework": "Ünbekäänd test-framework „$1“.", "javascripttest-pagetext-unknownaction": "Ünbekäänd aktjuun „$1“.", - "javascripttest-pagetext-frameworks": "Schük ian faan jodiar test-frameworks ütj: $1", - "javascripttest-pagetext-skins": "Schük en brüker-skak ütj, am di test ütjtufeeren:", "javascripttest-qunit-intro": "Luke efter bi [$1 test dokumentatjuun] üüb mediawiki.org", "tooltip-pt-userpage": "Din brükersidj", "tooltip-pt-anonuserpage": "Brükersidj faan det IP-adres, faan huar ütj dü werkest", @@ -2535,8 +2530,8 @@ "exif-colorspace": "Klöörenrüm", "exif-componentsconfiguration": "Enkelt komponenten", "exif-compressedbitsperpixel": "Komprimiaret bits per pixel", - "exif-pixelydimension": "Bilbreetje", - "exif-pixelxdimension": "Bilhööchde", + "exif-pixelxdimension": "Bilbreetje", + "exif-pixelydimension": "Bilhööchde", "exif-usercomment": "Brüker komentaaren", "exif-relatedsoundfile": "Ferbünjen tuundatei", "exif-datetimeoriginal": "Dootem an klooktidj faan't knipsin", @@ -2975,7 +2970,6 @@ "version-libraries-description": "Beskriiwang", "version-libraries-authors": "Skriiwern", "redirect": "Widjerfeerang faan en brüker, en sidj, en sidjenwerjuun of en datei.", - "redirect-legend": "Widjerfeerang üüb en sidjenwerjuun of datei.", "redirect-summary": "Detdiar spezial-sidj feert widjer üüb en brükersidj, sidj, sidjenwerjuun of datei.\nAn det woort so brükt: [[{{#Special:Redirect}}/user/101]], [[{{#Special:Redirect}}/page/64308]], [[{{#Special:Redirect}}/revision/328429]] of [[{{#Special:Redirect}}/file/Example.jpg]].", "redirect-submit": "Widjer", "redirect-lookup": "Schük:", @@ -2987,7 +2981,6 @@ "redirect-not-exists": "Wäärs ei fünjen", "fileduplicatesearch": "Schük dobelt datein", "fileduplicatesearch-summary": "Dobelt datein schük üüb grünjlaag faan hör hash-wäärs", - "fileduplicatesearch-legend": "Dobelt datein schük", "fileduplicatesearch-filename": "Dateinööm:", "fileduplicatesearch-submit": "Schük", "fileduplicatesearch-info": "$1 × $2 pixel
Dateigrate: $3
MIME-typ: $4", diff --git a/languages/i18n/fy.json b/languages/i18n/fy.json index 80329a0eda..41368ee86d 100644 --- a/languages/i18n/fy.json +++ b/languages/i18n/fy.json @@ -15,7 +15,8 @@ "Robin0van0der0vliet", "Macofe", "Xð", - "Robin van der Vliet" + "Robin van der Vliet", + "PiefPafPier" ] }, "tog-underline": "Keppelings ûnderstreekje:", @@ -287,6 +288,7 @@ "nstab-template": "Berjocht", "nstab-help": "Helpside", "nstab-category": "Kategory", + "mainpage-nstab": "Haadside", "nosuchaction": "Unbekende aksje.", "nosuchactiontext": "De opdracht yn de URL is ûnjildich.\nMooglik hasto in typefout makke yn de URL of in ferkearde keppeling folge.\nIt soe likegoed in programmatuerflater fan {{SITENAME}} wêze kinne.", "nosuchspecialpage": "Unbekende side", @@ -1262,8 +1264,6 @@ "categories": "Kategoryen", "categoriespagetext": "De folgjende kategoriyen befetsje siden of mediatriemmen.\n[[Special:UnusedCategories|Net brûkte kategoryen]] wurde hjir net werjûn.\nSjuch ek [[Special:WantedCategories|net-besteande kategoryen mei ferwizings]].", "categoriesfrom": "Kategoryen werjaan fan .. ôf:", - "special-categories-sort-count": "op tal sortearje", - "special-categories-sort-abc": "alfabetysk sortearje", "deletedcontributions": "Wiske meidogger bydragen", "deletedcontributions-title": "Wiske meidogger bydragen", "sp-deletedcontributions-contribs": "bydragen", @@ -1428,6 +1428,7 @@ "contributions": "{{GENDER:$1|Meidogger}}-bydragen", "contributions-title": "Bydragen fan $1", "mycontris": "Bydragen", + "anoncontribs": "Bydragen", "contribsub2": "Foar {{GENDER:$3|$1}} ($2)", "nocontribs": "Der binne gjin feroarings fûn dyt't hjirmei oerienkomme.", "uctop": "(lêste feroaring)", @@ -1579,7 +1580,7 @@ "tooltip-pt-preferences": "Myn foarkarynstellings", "tooltip-pt-watchlist": "List fan siden dy'sto besjochst op feroarings", "tooltip-pt-mycontris": "Oersjocht fan jo bydragen", - "tooltip-pt-login": "Jo wurde fan herten útnoege jo oan te melden, mar it hoecht net.", + "tooltip-pt-login": "Jo wurde fan herten útnûge jo oan te melden, mar it hoecht net.", "tooltip-pt-logout": "Ofmelde", "tooltip-ca-talk": "Oerlis oer dizze side", "tooltip-ca-edit": "Jo kinne dizze side bewurkje. Brûk a.j.w. de foarbyldwerjefteknop foar't Jo de boel bewarje.", @@ -1737,8 +1738,8 @@ "exif-exifversion": "Exif-ferzje", "exif-colorspace": "Kleurromte", "exif-compressedbitsperpixel": "Ofbylding kompresjemetoade", - "exif-pixelydimension": "Ofbyldingsbreedte", - "exif-pixelxdimension": "Ofbyldingshichte", + "exif-pixelxdimension": "Ofbyldingsbreedte", + "exif-pixelydimension": "Ofbyldingshichte", "exif-usercomment": "Opmerkings", "exif-relatedsoundfile": "Besibbe audiotriem", "exif-datetimeoriginal": "Tiidstip gegevensoanmaak", @@ -1929,7 +1930,6 @@ "redirect-file": "Triemnamme", "redirect-not-exists": "Wearde net fûn", "fileduplicatesearch": "Sykje op duplikaten", - "fileduplicatesearch-legend": "Sykje op duplikaten", "fileduplicatesearch-filename": "Triemnamme:", "fileduplicatesearch-submit": "Sykje", "fileduplicatesearch-info": "$1 × $2 pixel
Triemgrutte: $3
MIME-type: $4", @@ -1974,8 +1974,8 @@ "comparepages": "Siden ferlykje", "compare-page1": "Side 1", "compare-page2": "Side 2", - "compare-rev1": "Revyzje 1", - "compare-rev2": "Revyzje 2", + "compare-rev1": "Refyzje 1", + "compare-rev2": "Refyzje 2", "compare-submit": "Ferlykje", "compare-invalid-title": "Unjildige titel.", "htmlform-submit": "Ferstjoere", @@ -2005,7 +2005,7 @@ "duration-weeks": "$1 {{PLURAL:$1|wike|wiken}}", "duration-years": "$1 {{PLURAL:$1|jier|jierren}}", "duration-decades": "$1 {{PLURAL:$1|desennium|desennia}}", - "duration-centuries": "$1 {{PLURAL:$1|ieu|ieuwen}}", + "duration-centuries": "$1 {{PLURAL:$1|iuw|iuwen}}", "limitreport-cputime-value": "$1 {{PLURAL:$1|sekonde|sekonden}}", "limitreport-walltime-value": "$1 {{PLURAL:$1|sekonde|sekonden}}", "limitreport-ppvisitednodes-value": "$1/$2", @@ -2051,7 +2051,7 @@ "special-characters-group-arabic": "Arabysk", "special-characters-group-arabicextended": "Arabysk útwreide", "special-characters-group-persian": "Perzysk", - "special-characters-group-hebrew": "Hebrieusk", + "special-characters-group-hebrew": "Hebriuwsk", "special-characters-group-bangla": "Bengaalsk", "special-characters-group-tamil": "Tamyl", "special-characters-group-telugu": "Telugu", diff --git a/languages/i18n/ga.json b/languages/i18n/ga.json index 0beaec8176..06cbd5c5b7 100644 --- a/languages/i18n/ga.json +++ b/languages/i18n/ga.json @@ -19,7 +19,8 @@ "පසිඳු කාවින්ද", "아라", "SeoMac", - "Macofe" + "Macofe", + "Tem" ] }, "tog-underline": "Folínte faoi naisc:", @@ -150,6 +151,7 @@ "actions": "Gníomhartha", "namespaces": "Ainmspásanna", "variants": "Leaganacha Malartacha", + "navigation-heading": "Roghchlár nascleanúna", "errorpagetitle": "Earráid", "returnto": "Fill ar ais go $1.", "tagline": "Ó {{SITENAME}}.", @@ -186,7 +188,7 @@ "articlepage": "Féach ar an alt", "talk": "Plé", "views": "Radhairc", - "toolbox": "Bosca uirlisí", + "toolbox": "Uirlisí", "userpage": "Féach ar lch úsáideora", "projectpage": "Féach ar lch thionscadail", "imagepage": "Féach ar lch comhaid", @@ -267,6 +269,7 @@ "nstab-template": "Teimpléad", "nstab-help": "Cabhair", "nstab-category": "Catagóir", + "mainpage-nstab": "An príomhleathanach", "nosuchaction": "Níl a leithéid de ghníomh ann", "nosuchactiontext": "Níl aithníonn an vicí an gníomh atá ann san URL.\nAn ndearna tú botún san URL, no ar lean tú nasc mícheart?\nAn bhfuil fadhb sna bogearraí atá in usáid ar {{SITENAME}}?", "nosuchspecialpage": "Níl a leithéid de leathanach speisialta ann", @@ -312,9 +315,16 @@ "welcomecreation-msg": "Cruthaíodh do chuntas.", "yourname": "D'ainm úsáideora", "userlogin-yourname": "Ainm úsáideora", + "userlogin-yourname-ph": "Iontráil d'ainm úsáideora", "yourpassword": "D'fhocal faire", + "userlogin-yourpassword": "Pasfhocal", + "userlogin-yourpassword-ph": "Iontráil do phasfhocal", + "createacct-yourpassword-ph": "Iontráil pasfhocal", "yourpasswordagain": "Athiontráil d'fhocal faire", + "createacct-yourpasswordagain": "Deimhnigh an pasfhocal", + "createacct-yourpasswordagain-ph": "Iontráil an pasfhocal arís", "remembermypassword": "Cuimhnigh ar m'fhocal faire ar an ríomhaire seo (ar feadh uastréimhse de $1 {{PLURAL:$1|lá|lá}})", + "userlogin-remembermypassword": "Coinnigh logáilte isteach mé", "yourdomainname": "D'fhearann", "externaldberror": "Bhí earráid bhunachair sonraí ann maidir le fíordheimhniú seachtrach, nóThere was either an external authentication database error or you are not allowed to update your external account.", "login": "Logáil isteach", @@ -324,13 +334,18 @@ "logout": "Logáil amach", "userlogout": "Logáil amach", "notloggedin": "Níl tú logáilte isteach", + "userlogin-noaccount": "Níl cuntas agat?", + "userlogin-joinproject": "Cláraigh le {{SITENAME}}", "nologin": "Nach bhfuil logáil isteach agat? '''$1'''.", "nologinlink": "Cruthaigh cuntas", "createaccount": "Cruthaigh cuntas nua", "gotaccount": "An bhfuil cuntas agat cheana féin? '''$1'''.", "gotaccountlink": "Logáil isteach", "userlogin-resetlink": "Sonraí logála isteach dearmadta agat?", + "userlogin-resetpassword-link": "Pasfhocal dearmadta?", + "userlogin-helplink2": "Cabhair le logáil isteach", "createacct-emailrequired": "Seoladh ríomhphoist", + "createacct-emailoptional": "Seoladh ríomhphoist (roghnach)", "createacct-email-ph": "Iontráil do sheoladh ríomhphoist", "createacct-another-email-ph": "Iontráil seoladh ríomhphoist", "createaccountmail": "le ríomhphost", @@ -375,6 +390,10 @@ "createaccount-title": "Cuntas cruthú le {{SITENAME}}", "createaccount-text": "Chruthaigh duine éigin cuntas do do sheoladh ríomhphoist ar {{SITENAME}} ($4) leis an ainm \"$2\" agus pasfhocal \"$3\". Ba cheart duit logáil isteach agus do phasfhocal a athrú anois. Is féidir leat neamhaird a thabhairt don teachtaireacht seo má cruthaíodh trí earráid í.", "loginlanguagelabel": "Teanga: $1", + "pt-login": "Logáil isteach", + "pt-login-button": "Logáil isteach", + "pt-createaccount": "Cruthaigh cuntas", + "pt-userlogout": "Logáil amach", "php-mail-error-unknown": "Earráid anaithnid i bhfeidhm mail() de chuid PHP", "changepassword": "Athraigh d'fhocal faire", "resetpass_announce": "Tá tú logáilte isteach le cód sealadach a seoladh chugat i r-phost.\nChun d'iarratas logáil isteach a chríochnú, caithfidh tú focal faire nua a roghnú anseo:", @@ -662,21 +681,33 @@ "action-minoredit": "an athrú seo a mharcáil mar mionathrú", "action-upload": "uaslódáil an comhad", "nchanges": "{{PLURAL:$1|Athrú amháin|$1 athruithe}}", + "enhancedrc-history": "stair", "recentchanges": "Athruithe is déanaí", "recentchanges-legend": "Roghanna do na hathruithe is déanaí", "recentchanges-summary": "Déan faire ar na hathruithe is déanaí sa vicí ar an leathanach seo.", "recentchanges-feed-description": "Rianaigh na n-athruite vicí is déanaí sa fotha seo.", + "recentchanges-label-newpage": "Cruthaíodh lch nua leis an eagarthóireacht seo", "recentchanges-label-minor": "Mionathrú é seo", "recentchanges-label-bot": "Chomhlíon róbó an t-athrú seo", + "recentchanges-legend-heading": "Eochair:", "recentchanges-legend-newpage": "$1 - leathanach nua", "rcnotefrom": "Is iad seo a leanas na hathruithe ó $2 (go dti $1 taispeánaithe).", "rclistfrom": "Taispeáin athruithe nua ó $3 $2 anuas", "rcshowhideminor": "$1 mionathruithe", + "rcshowhideminor-show": "Taispeáin", + "rcshowhideminor-hide": "Folaigh", "rcshowhidebots": "$1 róbónna", - "rcshowhideliu": "$1 úsáideoirí atá logáilte isteach", + "rcshowhidebots-show": "Taispeáin", + "rcshowhidebots-hide": "Folaigh", + "rcshowhideliu": "$1 úsáideoir cláraithe", + "rcshowhideliu-hide": "Folaigh", "rcshowhideanons": "$1 úsáideoirí gan ainm", + "rcshowhideanons-show": "Taispeáin", + "rcshowhideanons-hide": "Folaigh", "rcshowhidepatr": "$1 athruithe faoi phatról", "rcshowhidemine": "$1 mo chuid athruithe", + "rcshowhidemine-show": "Taispeáin", + "rcshowhidemine-hide": "Folaigh", "rclinks": "Taispeáin an $1 athrú is déanaí sa $2 lá seo caite
$3", "diff": "difr", "hist": "stair", @@ -687,6 +718,7 @@ "boteditletter": "r", "number_of_watching_users_pageview": "[{{PLURAL:$1|úsáideoir amháin|$1 úsáideoirí}} ag faire]", "rc_categories_any": "Aon chatagóir", + "rc-change-size-new": "$1 {{PLURAL:$1|bheart|beart}} tar éis an athraithe", "newsectionsummary": "/* $1 */ mír nua", "rc-enhanced-expand": "Taispeáin mionsonraithe (JavaScript riachtanach)", "rc-enhanced-hide": "Folaigh shonraí", @@ -837,6 +869,7 @@ "pager-older-n": "{{PLURAL:$1|1 níos sine|$1 níos sine}}", "booksources": "Leabharfhoinsí", "booksources-search-legend": "Cuardaigh le foinsí leabhar", + "booksources-search": "Cuardaigh", "specialloguserlabel": "Úsáideoir:", "speciallogtitlelabel": "Teideal:", "log": "Logaí", @@ -994,6 +1027,7 @@ "contributions": "Dréachtaí {{GENDER:$1|úsáideora}}", "contributions-title": "Dréachtaí úsáideora do $1", "mycontris": "Dréachtaí", + "anoncontribs": "Dréachtaí", "contribsub2": "Do $1 ($2)", "nocontribs": "Ní bhfuarthas aon athrú a bhí cosúil le na crítéir seo.", "uctop": " (barr)", @@ -1141,7 +1175,7 @@ "tooltip-pt-anonuserpage": "Leathanach úsáideora don IP ina dhéanann tú do chuid athruithe", "tooltip-pt-mytalk": "Do leathanach phlé", "tooltip-pt-anontalk": "Plé maidir le na hathruithe a dhéantar ón seoladh IP seo", - "tooltip-pt-preferences": "Mo chuid sainroghanna", + "tooltip-pt-preferences": "{{GENDER:|Do}} chuid sainroghanna", "tooltip-pt-watchlist": "Liosta de na leathanaigh a bhfuil tú á bhfaire ar athruithe", "tooltip-pt-mycontris": "Liosta do chuid dréachtaí", "tooltip-pt-login": "Moltar duit logáil isteach, ach níl sé riachtanach.", @@ -1230,6 +1264,7 @@ "file-nohires": "Níl aon taifeach is mó ar fáil.", "svg-long-desc": "Comhad SVG, ainmniúil $1 × $2 picteilíni, méid comhaid: $3", "show-big-image": "Taispeáin leagan ardtaifigh den íomhá", + "show-big-image-size": "$1 × $2 picteilín", "newimages": "Gailearaí na n-íomhánna nua", "imagelisttext": "Tá liosta thíos de {{PLURAL:$1|comhad amháin|$1 comhaid $2}}.", "newimages-label": "Comhadainm (nó cuid de):", @@ -1276,8 +1311,8 @@ "exif-colorspace": "Dathspás", "exif-componentsconfiguration": "Ciall le gach giota", "exif-compressedbitsperpixel": "Modh chomhbhrú na n-íomhánna", - "exif-pixelydimension": "Leithead bailí don íomhá", - "exif-pixelxdimension": "Airde bailí don íomhá", + "exif-pixelxdimension": "Leithead bailí don íomhá", + "exif-pixelydimension": "Airde bailí don íomhá", "exif-usercomment": "Nótaí an úsáideora", "exif-relatedsoundfile": "comhad gaolmhara fuaime", "exif-datetimeoriginal": "Dáta agus am ghiniúint na sonraí", @@ -1518,7 +1553,9 @@ "specialpages-group-wiki": "Sonraí vicí agus uirslí", "specialpages-group-spam": "Uirlisí turscar", "blankpage": "Leathanach bán", + "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|chlib amháin|clib}}]]: $2)", "htmlform-selectorother-other": "Eile", + "logentry-move-move": "{{GENDER:$2|Bhog}} $1 an leathanach $3 go $4", "feedback-cancel": "Cealaigh", "feedback-message": "Teachtaireacht:", "searchsuggest-search": "Cuardaigh", diff --git a/languages/i18n/gan-hans.json b/languages/i18n/gan-hans.json index 10a15b7598..1b46daa72e 100644 --- a/languages/i18n/gan-hans.json +++ b/languages/i18n/gan-hans.json @@ -1388,8 +1388,8 @@ "exif-colorspace": "颜色空间", "exif-componentsconfiguration": "每部分𠮶意思", "exif-compressedbitsperpixel": "图像压缩模式", - "exif-pixelydimension": "有效图像𠮶阔", - "exif-pixelxdimension": "有效图像𠮶高", + "exif-pixelxdimension": "有效图像𠮶阔", + "exif-pixelydimension": "有效图像𠮶高", "exif-usercomment": "用户摘要", "exif-relatedsoundfile": "相关𠮶声气资料", "exif-datetimeoriginal": "资料创作时间", diff --git a/languages/i18n/gan-hant.json b/languages/i18n/gan-hant.json index 3894997a12..01edb80ece 100644 --- a/languages/i18n/gan-hant.json +++ b/languages/i18n/gan-hant.json @@ -1384,8 +1384,8 @@ "exif-colorspace": "顏色空間", "exif-componentsconfiguration": "每部分嗰意思", "exif-compressedbitsperpixel": "圖像壓縮模式", - "exif-pixelydimension": "有效圖像嗰闊", - "exif-pixelxdimension": "有效圖像嗰高", + "exif-pixelxdimension": "有效圖像嗰闊", + "exif-pixelydimension": "有效圖像嗰高", "exif-usercomment": "用戶摘要", "exif-relatedsoundfile": "相關嗰聲氣資料", "exif-datetimeoriginal": "資料創作時間", diff --git a/languages/i18n/gd.json b/languages/i18n/gd.json index 1bb1745180..d8659c0cc1 100644 --- a/languages/i18n/gd.json +++ b/languages/i18n/gd.json @@ -1618,8 +1618,6 @@ "categories": "Roinnean-seòrsa", "categoriespagetext": "Tha duilleagan no meadhan {{PLURAL:$1|san roinn-seòrsa|sna roinnean-seòrsa|}} a leanas.\nChan fhaicear [[Special:UnusedCategories|roinnean-seòrsa gun chleachdadh an-seo]].\nThoir sùil air na [[Special:WantedCategories|roinnean-seòrsa a thathar 'gan iarraidh cuideachd]].", "categoriesfrom": "Seall roinnean-seòrsa o seo a-mach:", - "special-categories-sort-count": "seòrsaich a-rèir an uireid", - "special-categories-sort-abc": "seòrsaich a rèir na h-aibidil", "deletedcontributions": "Obair air a sguabadh às", "deletedcontributions-title": "Obair air a sguabadh às", "sp-deletedcontributions-contribs": "obair", @@ -2202,10 +2200,6 @@ "import-logentry-upload-detail": "Chaidh $1 {{PLURAL:$1|mhùthadh|mùthadh|mùthaidhean|mùthadh}} ion-phortachadh", "import-logentry-interwiki-detail": "Chaidh $1 {{PLURAL:$1|mhùthadh|mhùthadh|mùthaidhean|mùthadh}} ion-phortachadh o $2", "javascripttest": "Deuchainn air JavaScript", - "javascripttest-pagetext-noframework": "Tha an duilleag seo glèidhte airson deuchainnean JavaScript a ruith.", - "javascripttest-pagetext-unknownframework": "Framework deuchainn \"$1\" neo-aithnichte.", - "javascripttest-pagetext-frameworks": "Feuch an tagh thu aon dhe na frameworks deuchainn seo: $1", - "javascripttest-pagetext-skins": "Tagh craiceann airson ruith nan deuchainnean:", "javascripttest-qunit-intro": "Faic [$1 docamaideadh nan deuchainnean] air mediawiki.org.", "tooltip-pt-userpage": "An duilleag phearsanta {{GENDER:|agad}}", "tooltip-pt-anonuserpage": "Duilleag a' chleachdaiche airson an t-seòlaidh IP leis a bheil thu a' deasachadh", @@ -2469,8 +2463,8 @@ "exif-colorspace": "Spàs datha", "exif-componentsconfiguration": "Ciall aig gach co-phàirt", "exif-compressedbitsperpixel": "Modh dùmhlachd-bhreacaidh an deilbh", - "exif-pixelydimension": "Leud an deilbh", - "exif-pixelxdimension": "Àirde an deilbh", + "exif-pixelxdimension": "Leud an deilbh", + "exif-pixelydimension": "Àirde an deilbh", "exif-usercomment": "Beachdan nan cleachdaichean", "exif-relatedsoundfile": "Faidhle fuaime co-cheangailte ris", "exif-datetimeoriginal": "Ceann-là 's àm a chaidh an dàta a chruthachadh", @@ -2956,7 +2950,6 @@ "version-entrypoints-articlepath": "[https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgArticlePath Slighe artaigil]", "version-entrypoints-scriptpath": "[https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgScriptPath slighe sgriobt]", "redirect": "Ath-stiùireadh le faidhle, cleachdaiche, duilleag no ID a' mhùthaidh", - "redirect-legend": "Cruthaich ath-stiùireadh gu faidhle no duilleag", "redirect-summary": "Nì an duilleag shònraichte seo ath-stiùireadh gu faidhle (le ainm faidhle), duilleag (le ID a' mhùthaidh no ID na duilleige) no duilleag cleachdaiche (le àireamh ID a' chleachdaiche). Seo mar a chleachdas tu e: [[{{#Special:Redirect}}/file/Ball-eisimpleir.jpg]], [[{{#Special:Redirect}}/page/64308]], [[{{#Special:Redirect}}/revision/328429]] no [[{{#Special:Redirect}}/user/101]].", "redirect-submit": "Siuthad", "redirect-lookup": "Rannsaich:", @@ -2968,7 +2961,6 @@ "redirect-not-exists": "Cha deach an luach a lorg", "fileduplicatesearch": "Lorg airson faidhlichean dùblaichte", "fileduplicatesearch-summary": "Lorg airson faidhlichean dùblaichte, stèidhichte air luachan hais.", - "fileduplicatesearch-legend": "Lorg airson dùblachadh", "fileduplicatesearch-filename": "Ainm an fhaidhle:", "fileduplicatesearch-submit": "Lorg", "fileduplicatesearch-info": "$1 × $2 piogsail
Meud an fhaidhle: $3
Seòrsa MIME: $4", diff --git a/languages/i18n/gl.json b/languages/i18n/gl.json index 28ac3028e6..4cf6c838d1 100644 --- a/languages/i18n/gl.json +++ b/languages/i18n/gl.json @@ -21,7 +21,8 @@ "Breogan2008", "VaiPolaSombra", "Macofe", - "Banjo" + "Banjo", + "Josep Maria Roca Peña" ] }, "tog-underline": "Subliñar as ligazóns:", @@ -39,6 +40,7 @@ "tog-watchdefault": "Engadir as páxinas e os ficheiros que edite á miña lista de vixilancia", "tog-watchmoves": "Engadir as páxinas e os ficheiros que mova á miña lista de vixilancia", "tog-watchdeletion": "Engadir as páxinas e os ficheiros que borre á miña lista de vixilancia", + "tog-watchuploads": "Engadir os novos ficheiros que subín á miña lista de vixilancia", "tog-watchrollback": "Engadir as páxinas nas que realice unha reversión á miña lista de vixilancia", "tog-minordefault": "Marcar todas as edicións como pequenas por defecto", "tog-previewontop": "Mostrar a vista previa antes da caixa de edición", @@ -162,7 +164,6 @@ "moredotdotdot": "Máis...", "morenotlisted": "Esta lista non está completa.", "mypage": "Páxina", - "anonuserpage": "Usuario descoñecido", "mytalk": "Conversa", "anontalk": "Conversa", "navigation": "Navegación", @@ -480,7 +481,7 @@ "noemail": "O usuario \"$1\" non posúe ningún enderezo de correo electrónico rexistrado.", "noemailcreate": "Ten que proporcionar un enderezo de correo electrónico válido", "passwordsent": "Enviouse un contrasinal novo ao enderezo de correo electrónico rexistrado de \"$1\".\nPor favor, acceda ao sistema de novo tras recibilo.", - "blocked-mailpassword": "O seu enderezo IP está bloqueado e ten restrinxida a edición de artigos. Tampouco se lle permite usar a función de recuperación do contrasinal para evitar abusos do sistema.", + "blocked-mailpassword": "O seu enderezo IP está bloqueado para editar. Tampouco se lle permite usar a función de recuperación do contrasinal para evitar abusos do sistema.", "eauthentsent": "Envióuselle un correo electrónico de confirmación ao enderezo especificado.\nAntes de que se lle envíe calquera outro correo a esta conta terá que seguir as instrucións que aparecen nesa mensaxe para confirmar que a conta é realmente súa.", "throttled-mailpassword": "Enviouse un correo electrónico de restablecemento do contrasinal {{PLURAL:$1|na última hora|nas últimas $1 horas}}.\nPara evitar o abuso do sistema só se enviará unha mensaxe de restablecemento cada {{PLURAL:$1|hora|$1 horas}}.", "mailerror": "Produciuse un erro ao enviar o correo electrónico: $1", @@ -1322,9 +1323,9 @@ "recentchangeslinked-page": "Nome da páxina:", "recentchangeslinked-to": "Mostrar os cambios relacionados das páxinas que ligan coa dada", "recentchanges-page-added-to-category": "\"[[:$1]]\" engadiuse á categoría", - "recentchanges-page-added-to-category-bundled": "\"[[:$1]]\" e {{PLURAL:$2|unha páxina|$2 páxinas}} engadíronse á categoría", + "recentchanges-page-added-to-category-bundled": "[[:$1]] engadida á categoría [[Special:WhatLinksHere/$1|esta páxina está incluída noutras páxinas]]", "recentchanges-page-removed-from-category": "\"[[:$1]]\" eliminouse da categoría", - "recentchanges-page-removed-from-category-bundled": "\"[[:$1]]\" e {{PLURAL:$2|unha páxina|$2 páxinas}} elimináronse da categoría", + "recentchanges-page-removed-from-category-bundled": "[[:$1]] eliminada da categoría [[Special:WhatLinksHere/$1||esta páxina está incluída noutras páxinas]]", "autochange-username": "Cambio automático de MediaWiki", "upload": "Subir un ficheiro", "uploadbtn": "Subir un ficheiro", @@ -1431,7 +1432,7 @@ "upload-too-many-redirects": "O enderezo URL contiña moitas redireccións", "upload-http-error": "Produciuse un erro HTTP: $1", "upload-copy-upload-invalid-domain": "A copia de cargas non está dispoñible neste dominio.", - "upload-foreign-cant-upload": "Esta wiki non está configurada para subir ficheiros ó repositorio de ficheiros externo solicitado.", + "upload-foreign-cant-upload": "Este wiki non está configurado para subir ficheiros ao repositorio de ficheiros externo solicitado.", "upload-dialog-title": "Subir un ficheiro", "upload-dialog-button-cancel": "Cancelar", "upload-dialog-button-done": "Feito", @@ -1504,6 +1505,7 @@ "uploadstash-badtoken": "A acción fallou, probablemente porque caducou a información de acceso. Por favor, inténteo de novo.", "uploadstash-errclear": "Fallou o borrado de ficheiros.", "uploadstash-refresh": "Actualizar a lista de ficheiros", + "uploadstash-thumbnail": "ver miniatura", "invalid-chunk-offset": "Desprazamento inválido do fragmento", "img-auth-accessdenied": "Acceso rexeitado", "img-auth-nopathinfo": "Falta a PATH_INFO.\nO seu servidor non está configurado para pasar esta información.\nPode ser que estea baseado en CGI e non soporte img_auth.\nVéxase https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Image_Authorization.", @@ -1803,7 +1805,7 @@ "checkbox-select": "Seleccionar: $1", "checkbox-all": "Todos", "checkbox-none": "Ningún", - "checkbox-invert": "Invertir", + "checkbox-invert": "Inverter", "allpages": "Todas as páxinas", "nextpage": "Páxina seguinte ($1)", "prevpage": "Páxina anterior ($1)", @@ -1823,8 +1825,6 @@ "categories-submit": "Mostrar", "categoriespagetext": "{{PLURAL:$1|A seguinte categoría contén|As seguintes categorías conteñen}} páxinas ou contidos multimedia.\nAquí non se mostran as [[Special:UnusedCategories|categorías sen uso]].\nOlle tamén as [[Special:WantedCategories|categorías requiridas]].", "categoriesfrom": "Mostrar as categorías que comecen por:", - "special-categories-sort-count": "ordenar por número", - "special-categories-sort-abc": "ordenar alfabeticamente", "deletedcontributions": "Contribucións borradas do usuario", "deletedcontributions-title": "Contribucións borradas do usuario", "sp-deletedcontributions-contribs": "contribucións", @@ -1992,7 +1992,7 @@ "delete-toobig": "Esta páxina conta cun historial longo, de máis {{PLURAL:$1|dunha revisión|de $1 revisións}}.\nLimitouse a eliminación destas páxinas para previr problemas de funcionamento accidentais en {{SITENAME}}.", "delete-warning-toobig": "Esta páxina conta cun historial de edicións longo, de máis {{PLURAL:$1|dunha revisión|de $1 revisións}}.\nAo eliminala pódense provocar problemas de funcionamento nas operacións da base de datos de {{SITENAME}};\nproceda con coidado.", "deleteprotected": "Non pode borrar esta páxina porque está protexida.", - "deleting-backlinks-warning": "Atención:[[Special:WhatLinksHere/{{FULLPAGENAME}}|Outras páxinas]] conteñen unha ligazón ou unha transclusión da páxina que está a piques de borrar.", + "deleting-backlinks-warning": "Atención: [[Special:WhatLinksHere/{{FULLPAGENAME}}|Outras páxinas]] conteñen unha ligazón ou unha transclusión da páxina que está a piques de borrar.", "rollback": "Reverter as edicións", "rollbacklink": "reverter", "rollbacklinkcount": "reverter $1 {{PLURAL:$1|edición|edicións}}", @@ -2201,6 +2201,7 @@ "ipb-unblock": "Desbloquear un usuario ou enderezo IP", "ipb-blocklist": "Ver os bloqueos vixentes", "ipb-blocklist-contribs": "Contribucións de {{GENDER:$1|$1}}", + "ipb-blocklist-duration-left": "$1 restantes", "unblockip": "Desbloquear un usuario", "unblockiptext": "Use o seguinte formulario para dar de novo acceso de escritura a un enderezo IP ou usuario que estea bloqueado.", "ipusubmit": "Retirar o bloqueo", @@ -2442,11 +2443,7 @@ "import-logentry-upload-detail": "{{PLURAL:$1|Importouse $1 revisión|Importáronse $1 revisións}}", "import-logentry-interwiki-detail": "{{PLURAL:$1|Importouse $1 revisión|Importáronse $1 revisións}} desde $2", "javascripttest": "Proba de JavaScript", - "javascripttest-pagetext-noframework": "Esta páxina está reservada para executar probas do JavaScript.", - "javascripttest-pagetext-unknownframework": "Descoñécese a infraestrutura dixital \"$1\" de probas.", "javascripttest-pagetext-unknownaction": "Acción descoñecida \"$1\".", - "javascripttest-pagetext-frameworks": "Seleccione unha das seguintes infraestruturas dixitais de probas: $1", - "javascripttest-pagetext-skins": "Escolla a aparencia na que executar as probas:", "javascripttest-qunit-intro": "Bótelle unha ollada á [$1 documentación das probas] en mediawiki.org.", "tooltip-pt-userpage": "A súa páxina de {{GENDER:|usuario|usuaria}}", "tooltip-pt-anonuserpage": "A páxina de usuario do enderezo IP desde o que está a editar", @@ -2714,8 +2711,8 @@ "exif-colorspace": "Espazo de cor", "exif-componentsconfiguration": "Significado de cada compoñente", "exif-compressedbitsperpixel": "Modo de compresión da imaxe", - "exif-pixelydimension": "Ancho da imaxe", - "exif-pixelxdimension": "Altura da imaxe", + "exif-pixelxdimension": "Ancho da imaxe", + "exif-pixelydimension": "Altura da imaxe", "exif-usercomment": "Comentarios do usuario", "exif-relatedsoundfile": "Ficheiro de son relacionado", "exif-datetimeoriginal": "Data e hora de xeración do ficheiro", @@ -3041,6 +3038,10 @@ "confirmemail_body_set": "Alguén, probablemente vostede, desde o enderezo IP $1,\nestableceu este enderezo de correo electrónico como o da conta \"$2\" en {{SITENAME}}.\n\nPara confirmar que realmente esta conta lle pertence a vostede e activar\nas características do correo electrónico en {{SITENAME}}, abra esta ligazón no seu navegador:\n\n$3\n\nSe a conta *non* é súa, siga estoutra ligazón\npara cancelar a confirmación do enderezo de correo electrónico:\n\n$5\n\nO código de confirmación caduca o $6 ás $7.", "confirmemail_invalidated": "A confirmación do enderezo de correo electrónico foi cancelada", "invalidateemail": "Cancelar a confirmación do correo electrónico", + "notificationemail_subject_changed": "A dirección de correo rexistrada en {{SITENAME}} foi modificada", + "notificationemail_subject_removed": "A dirección de correo rexistrada en {{SITENAME}} foi eliminada", + "notificationemail_body_changed": "Alguén, probablemente vostede, dende a dirección IP $1, cambiou a dirección de correo electrónico da conta \"$2\" a \"$3\" en {{SITENAME}}.\n\nSe non foi vostede, contacte cun administrador inmediatamente.", + "notificationemail_body_removed": "Alguén, probablemente vostede, dende a dirección IP $1, eliminou a dirección de correo electrónico da conta \"$2\" en {{SITENAME}}.\n\nSe non foi vostede, contacte cun administrador inmediatamente.", "scarytranscludedisabled": "[A transclusión interwiki está desactivada]", "scarytranscludefailed": "[Fallou a busca do modelo \"$1\"]", "scarytranscludefailed-httpstatus": "[Fallou a busca do modelo \"$1\": HTTP $2]", @@ -3161,7 +3162,6 @@ "version-libraries-description": "Descrición", "version-libraries-authors": "Autores", "redirect": "Redirixir por nome de ficheiro, usuario, páxina, modificación ou identificador de rexistro", - "redirect-legend": "Redirixir a un ficheiro ou unha páxina", "redirect-summary": "Esta páxina especial redirixe cara a un ficheiro (dado o nome), unha páxina (dado o ID da páxina ou o dunha revisión) ou unha páxina de usuario (dado o ID dun usuario), ou unha entrada do rexistro (dada polo ID do rexistro). Utilización: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/page/64308]], [[{{#Special:Redirect}}/revision/328429]] ou [[{{#Special:Redirect}}/user/101]], ou [[{{#Special:Redirect}}/logid/186]].", "redirect-submit": "Continuar", "redirect-lookup": "Procurar:", @@ -3174,7 +3174,6 @@ "redirect-not-exists": "Non se atopou o valor", "fileduplicatesearch": "Procurar ficheiros duplicados", "fileduplicatesearch-summary": "Procurar ficheiros duplicados a partir do valor de hash (un mecanismo de comprobación).", - "fileduplicatesearch-legend": "Procurar un duplicado", "fileduplicatesearch-filename": "Nome do ficheiro:", "fileduplicatesearch-submit": "Procurar", "fileduplicatesearch-info": "$1 × $2 píxeles
Tamaño do ficheiro: $3
Tipo MIME: $4", @@ -3375,7 +3374,7 @@ "logentry-protect-protect-cascade": "$1 {{GENDER:$2|protexeu}} a $3 $4 [en cascada]", "logentry-protect-modify": "$1 {{GENDER:$2|cambiou}} o nivel de protección de $3 $4", "logentry-protect-modify-cascade": "$1 {{GENDER:$2|cambiou}} o nivel de protección de $3 $4 [en cascada]", - "logentry-rights-rights": "$1 {{GENDER:$2|cambiou}} o grupo ao que pertence $3 de $4 a $5", + "logentry-rights-rights": "$1 {{GENDER:$2|cambiou}} o grupo ao que pertence {{GENDER:$3|$3}} de $4 a $5", "logentry-rights-rights-legacy": "$1 {{GENDER:$2|cambiou}} o grupo ao que pertence $3", "logentry-rights-autopromote": "$1 foi {{GENDER:$2|promovido|promovida}} automaticamente de $4 a $5", "logentry-upload-upload": "$1 {{GENDER:$2|cargou}} \"$3\"", @@ -3468,6 +3467,7 @@ "api-error-unknownerror": "Erro descoñecido: \"$1\".", "api-error-uploaddisabled": "As cargas están desactivadas neste wiki.", "api-error-verification-error": "Este ficheiro podería estar corrupto ou ter unha extensión incorrecta.", + "api-error-was-deleted": "Un ficheiro con este mesmo nome xa foi cargado con anterioridade e posteriormente eliminado.", "duration-seconds": "$1 {{PLURAL:$1|segundo|segundos}}", "duration-minutes": "$1 {{PLURAL:$1|minuto|minutos}}", "duration-hours": "$1 {{PLURAL:$1|hora|horas}}", @@ -3558,6 +3558,7 @@ "special-characters-group-ipa": "IPA", "special-characters-group-symbols": "Símbolos", "special-characters-group-greek": "Grego", + "special-characters-group-greekextended": "Grego estendido", "special-characters-group-cyrillic": "Cirílico", "special-characters-group-arabic": "Árabe", "special-characters-group-arabicextended": "Árabe estendido", @@ -3585,5 +3586,54 @@ "sessionprovider-generic": "sesións $1", "sessionprovider-mediawiki-session-cookiesessionprovider": "sesións baseadas nas cookies", "sessionprovider-nocookies": "As cookies poden estar desactivadas. Asegúrese de que ten activas as cookies e comece de novo.", - "randomrootpage": "Páxina raíz ao chou" + "randomrootpage": "Páxina raíz ao chou", + "log-action-filter-block": "Tipo de bloqueo:", + "log-action-filter-contentmodel": "Tipo de modificación de modelo de contido:", + "log-action-filter-delete": "Tipo de borrado:", + "log-action-filter-import": "Tipo de importación:", + "log-action-filter-managetags": "Tipo de acción de xestión das etiquetas:", + "log-action-filter-move": "Tipo de movemento:", + "log-action-filter-newusers": "Tipo de creación de conta:", + "log-action-filter-patrol": "Tipo de vixilancia:", + "log-action-filter-protect": "Tipo de protección:", + "log-action-filter-rights": "Tipo de cambio de dereito", + "log-action-filter-suppress": "Tipo de borrado", + "log-action-filter-upload": "Tipo de subida:", + "log-action-filter-all": "Todas", + "log-action-filter-block-block": "Bloquear", + "log-action-filter-block-reblock": "Modificación de bloqueo", + "log-action-filter-block-unblock": "Desbloquear", + "log-action-filter-contentmodel-change": "Cambio de modelo de contido", + "log-action-filter-contentmodel-new": "Creación de páxins cun modelo de contido non estándar", + "log-action-filter-delete-delete": "Borrado de páxinas", + "log-action-filter-delete-restore": "Restauración de páxinas", + "log-action-filter-delete-event": "Borrado de rexistros", + "log-action-filter-delete-revision": "Borrado de revisión", + "log-action-filter-import-interwiki": "Importar transwiki", + "log-action-filter-import-upload": "Importación por suba XML", + "log-action-filter-managetags-create": "Creación de etiqueta", + "log-action-filter-managetags-delete": "Borrado de etiqueta", + "log-action-filter-managetags-activate": "Activación de etiqueta", + "log-action-filter-managetags-deactivate": "Desactivación de etiqueta", + "log-action-filter-move-move": "Mover sen reescribir as redireccións", + "log-action-filter-move-move_redir": "Mover reescribindo as redireccións", + "log-action-filter-newusers-create": "Creación por usuario anónimo", + "log-action-filter-newusers-create2": "Creación por usuario rexistrado", + "log-action-filter-newusers-autocreate": "Creación automática", + "log-action-filter-newusers-byemail": "Creación con chave enviada por correo electrónico", + "log-action-filter-patrol-patrol": "Verificación manual", + "log-action-filter-patrol-autopatrol": "Verificación automática", + "log-action-filter-protect-protect": "Protección", + "log-action-filter-protect-modify": "Modificación de protección", + "log-action-filter-protect-unprotect": "Desproteccion", + "log-action-filter-protect-move_prot": "Protección contra movemento", + "log-action-filter-rights-rights": "Cambio manual", + "log-action-filter-rights-autopromote": "Cambio automático", + "log-action-filter-suppress-event": "Borrado de rexistro", + "log-action-filter-suppress-revision": "Borrado de revisión", + "log-action-filter-suppress-delete": "Borrado de páxina", + "log-action-filter-suppress-block": "Supresión de usuario por bloqueo", + "log-action-filter-suppress-reblock": "Supresión de usuario por bloqueo reiterado", + "log-action-filter-upload-upload": "Nova subida", + "log-action-filter-upload-overwrite": "Resubida" } diff --git a/languages/i18n/gom-deva.json b/languages/i18n/gom-deva.json index b48844daa4..530a48cf3a 100644 --- a/languages/i18n/gom-deva.json +++ b/languages/i18n/gom-deva.json @@ -447,8 +447,8 @@ "compareselectedversions": "वेंचिल्ल्या पुनर्नियाळांची तुळा करात", "editundo": "केल्लें परतावचें", "diff-multi-sameuser": "(ह्या वांगड्या सयत {{PLURAL:$1|केल्लें मदलें एक अवतरण दाखोवंक ना|केल्लें मदलें $1 अवतरण दाखोवंक ना}})", - "searchresults": "सोदाचे निकाल", - "searchresults-title": "\"$1\" हाच्या सोदाचे निकाल", + "searchresults": "सोदाचे परिणामां", + "searchresults-title": "\"$1\" हाच्या सोदाचे परिणामां", "prevn": "आदलें{{PLURAL:$1|$1}}", "nextn": "दुसरें {{PLURAL:$1|$1}}", "next-page": "दुसरें पान", diff --git a/languages/i18n/gom-latn.json b/languages/i18n/gom-latn.json index 5343a48124..9441df7714 100644 --- a/languages/i18n/gom-latn.json +++ b/languages/i18n/gom-latn.json @@ -231,7 +231,7 @@ "sort-descending": "Devtea kromacher kromboddh kor", "sort-ascending": "Chodtea kromacher kromboddh kor", "nstab-main": "Pan", - "nstab-user": "Vapuddpeachem pan", + "nstab-user": "Vaporpeachem pan", "nstab-media": "Madheomachem pan", "nstab-special": "Vixex pan", "nstab-project": "Prokolpache pan", @@ -255,7 +255,7 @@ "badtitletext": "Tuven maglelem panache nanv chukichem, rintem, vo ek sarkem zodunk-naslelem bhase-modlem vo wiki-modlem nanv.\n\nTantun ek vo sabaar okxor asot jenka nanvanim uzar korunk zainan.", "viewsource": "Mull polloi", "welcomeuser": "Ievkar, $1!", - "yourname": "Vapuddpeachem nanv:", + "yourname": "Vaporpeachem nanv:", "userlogin-yourname": "Vangdiachem nanv", "userlogin-yourname-ph": "Tujem 'vangdeachem nanv' boroi", "createacct-another-username-ph": "Vapurpeachem nanv boroi", @@ -450,8 +450,8 @@ "compareselectedversions": "Nivodloleo uzollneo comparar kor", "editundo": "kel'lem portavchem", "diff-multi-sameuser": "(Heach vangdian {{PLURAL:$1|kel'lo modlo ek bodol dakhounk na|kel'le modle $1 bodlopam dakhounk nan}})", - "searchresults": "Sodache nikal", - "searchresults-title": "\"$1\" -khatir sodacho nikal", + "searchresults": "Sodache porinaman", + "searchresults-title": "\"$1\" -khatir sodache porinaman", "prevn": "adlem {{PLURAL:$1|$1}}", "nextn": "fuddlem {{PLURAL:$1|$1}}", "next-page": "Fuddlem pan", @@ -517,7 +517,7 @@ "rcshowhidebots": "$1 robot", "rcshowhidebots-show": "Dakhoi", "rcshowhidebots-hide": "Lipoi", - "rcshowhideliu": "$1 nond zalele vapuddpi", + "rcshowhideliu": "$1 nond zalele vaporpi", "rcshowhideliu-hide": "Lipoi", "rcshowhideanons": "$1 nanv-naslelim vapurpi", "rcshowhideanons-show": "Dakhoi", @@ -610,7 +610,7 @@ "linksearch-ok": "Sod", "linksearch-line": "$1 $2 savn zoddlelem asa", "listusers-submit": "Dakhoi", - "listgrouprights-members": "(vapuddpeanchi suchi)", + "listgrouprights-members": "(vaporpeanchi suchi)", "emailuser": "Email dhadd", "emailusername": "Vapurpeachem nanv:", "watchlist": "Sadurvolleri", @@ -650,8 +650,8 @@ "namespace_association": "Sombondhit nanvtholl", "tooltip-namespace_association": "Vinchlele nanvthollache sombondhit bhasabhas vo vixoiacho nanvthollakui gheupak hem boks khunnai", "blanknamespace": "(Mukhel)", - "contributions": "{{GENDER:$1|Vapuddpi}} yogdanam", - "contributions-title": "$1 hea vapuddpean kelelim yogdanam", + "contributions": "{{GENDER:$1|Vaporpi}} yogdanam", + "contributions-title": "$1 hea vaporpean kelelim yogdanam", "mycontris": "Yogdanam", "anoncontribs": "Yogdanam", "contribsub2": "{{GENDER:$3|$1}} hacheo ($2)", @@ -664,7 +664,7 @@ "sp-contributions-logs": "sotr", "sp-contributions-talk": "bhasabhas", "sp-contributions-search": "Yogdanam sod", - "sp-contributions-username": "Antorzall namo vo vapuddpeachem nanv:", + "sp-contributions-username": "Antorzall namo vo vaporpeachem nanv:", "sp-contributions-toponly": "Fokot halincheo uzollnneo dakhoi", "sp-contributions-submit": "Sod", "whatlinkshere": "Hanga kitem zoddta", @@ -684,7 +684,7 @@ "whatlinkshere-hideimages": "Failinchim zoddpam $1", "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 vapuddpi", + "ipblocklist": "Addhailele vaporpi", "blocklink": "addavnnni", "unblocklink": "Addavnni kadd", "change-blocklink": "Addavnnni bodol", @@ -702,7 +702,7 @@ "allmessagesdefault": "Falta sondex mozkur", "thumbnail-more": "Vhodlem kor", "thumbnail_error": "Lhan-imaz toiar kortana chuk zali. Karonn: $1", - "tooltip-pt-userpage": "{{GENDER:|Tujem vapuddpachem}} pan", + "tooltip-pt-userpage": "{{GENDER:|Tujem vaporpeachem}} pan", "tooltip-pt-mytalk": "{{GENDER:|Tumchem}} bhasabhasachem pan", "tooltip-pt-preferences": "{{GENDER:|Tumcheo}} avddi", "tooltip-pt-watchlist": "Bodlachea dekhrekh korpachea panachi volleri", @@ -734,14 +734,14 @@ "tooltip-t-whatlinkshere": "Hanga zoddlelea sogllea wiki pananchi volleri", "tooltip-t-recentchangeslinked": "Hea panak-sun zoddlelea panachim halinche bodol", "tooltip-feed-atom": "Hea panak Atom purovnni", - "tooltip-t-contributions": "{{GENDER:$1|Hea vapuddpeachea}} yogdanachi suchi", - "tooltip-t-emailuser": "{{GENDER:$1|Hea vapuddpeak}} email patthoi", + "tooltip-t-contributions": "{{GENDER:$1|Hea vaporpeachea}} yogdanachi suchi", + "tooltip-t-emailuser": "{{GENDER:$1|Hea vaporpeak}} email dhadd", "tooltip-t-upload": "Faili upload kor", "tooltip-t-specialpages": "Sogllea vixex pananchi volleri", "tooltip-t-print": "Hea panachem chap'pakyogya avrutti", "tooltip-t-permalink": "Hea panache hea uzollnnek togpi zoddni", "tooltip-ca-nstab-main": "Mozkur pan polloi", - "tooltip-ca-nstab-user": "Vapuddpeachem pan polloi", + "tooltip-ca-nstab-user": "Vaporpeachem pan polloi", "tooltip-ca-nstab-special": "Hem ek kherit pan, ani hem bodlunk zaina", "tooltip-ca-nstab-project": "Prokolpachem pan polloi", "tooltip-ca-nstab-image": "Failichem pan polloi", diff --git a/languages/i18n/grc.json b/languages/i18n/grc.json index 72e24ccb67..1b3138d7a7 100644 --- a/languages/i18n/grc.json +++ b/languages/i18n/grc.json @@ -28,9 +28,9 @@ "tog-extendwatchlist": "Ἐφοροδιαλογὴν ἐκτείνειν ἵνα φανῶσιν ἅπασαι αἱ ἀλλαγαὶ, οὐχὶ μόνον αἱ ἁρμόδιαι", "tog-usenewrc": "Χρῆσθαι προσκεκοσμημέναις προσφάτοις ἀλλαγαῖς (ἀπαιτεῖται JavaScript)", "tog-numberheadings": "Ἐξαριθμεῖν ἐπικεφαλίδας αὐτομάτως", - "tog-showtoolbar": "Δεικνύναι τὴν τῶν ἐργαλείων μεταγραφῆς μετώπην (ἀπαιτεῖται JavaScript)", - "tog-editondblclick": "Ἐπὶ δέλτων δὶς θλίψας, μετάγραψον αὐτάς (ἀπαιτεῖται JavaScript)", - "tog-editsectiononrightclick": "Καθιστάναι δυνατὸν τὸ μεταγράφειν τμήματα διὰ τοῦ ἐπὶ τῶν ἐπιγραφῶν τῶν τμημάτων θλίβειν δεξιῶς (ἀπαιτεῖται JavaScript)", + "tog-showtoolbar": "Δεικνύναι τὴν τῶν ἐργαλείων μεταγραφῆς μετώπην", + "tog-editondblclick": "Ἐπὶ δέλτων δὶς θλίψας, μετάγραψον αὐτάς", + "tog-editsectiononrightclick": "Καθιστάναι δυνατὸν τὸ μεταγράφειν τμήματα διὰ τοῦ ἐπὶ τῶν ἐπιγραφῶν τῶν τμημάτων θλίβειν δεξιῶς", "tog-watchcreations": "Προστιθέναι τὰς δέλτους ἃς ποιῶ τοῖς ἐφορωμένοις μου", "tog-watchdefault": "Προστιθέναι τὰς δέλτους ἃς μεταγράφω τοῖς ἐφορωμένοις μου", "tog-watchmoves": "Προστιθέναι τὰς δέλτους ἃς κινῶ τοῖς ἐφορωμένοις μου", @@ -518,8 +518,8 @@ "histlegend": "Σύγκρισις διαφορῶν: Ἐπιλέξατε τὰς συγκριτέας ἐκδόσεις καὶ πατήσατε enter ἢ τὸ κομβίον \"Συγκρίνειν...\".
\nὙπόμνημα: (τρέχον) = διαφοραὶ ὡς πρὸς τὴν τρέχουσαν ἐκδοχήν,\n(ὕστατον) = διαφοραὶ ὡς πρὸς τὴν προηγουμένην ἔκδοσιν, μ = ἀλλαγαὶ μικρῆς κλίμακος.", "history-fieldset-title": "Ζήτησις ἐν ταῖς προτέραις", "history-show-deleted": "Διαγραφεῖσαι μόνον", - "histfirst": "πρώτη", - "histlast": "ἐσχάτη", + "histfirst": "ἐσχάτη", + "histlast": "νεωτέρα", "historysize": "({{PLURAL:$1|1 δυφίον|$1 δυφία}})", "historyempty": "(κενόν)", "history-feed-title": "Ἱστορία ἀναθεωρήσεων", @@ -837,7 +837,7 @@ "action-block": "φράττειν τὸ μεταγράφειν τοῦδε τοῦ χρωμένου", "action-protect": "ἀλλάττειν τὴν κλίμακα προστασίας τῆσδε τῆς δελτου", "action-import": "εἰσάγειν τήνδε τὴν δέλτον ἐξ ἑτέρου βίκι", - "action-importupload": "εἰσάγειν τήνδε τὴν δέλτον ἐξ ἐπιφορτίσεώς τινος ἀρχείου", + "action-importupload": "εἰσάγειν τήνδε τὴν δέλτον ἐξ ἐπιφορτίσεώς ἀρχείου", "action-patrol": "σημαίνειν τὰς μεταγραφὰς ἑτέρων ὡς φρουρουμένας", "action-autopatrol": "σήμανσις τῆς μεταγραφῆς σου ὡς περιπολουμένης", "action-unwatchedpages": "ὁρᾶν τὴν διαλογὴν τῶν μὴ ἐφορωμένων δέλτων", @@ -847,7 +847,7 @@ "action-siteadmin": "Κλῄειν ἢ ἐκκλῄειν τὴν βάσιν δεδομένων", "nchanges": "$1 {{PLURAL:$1|μεταβολή|μεταβολαί}}", "enhancedrc-history": "Αἱ πρότεραι", - "recentchanges": "Αἱ νέαι μεταβολαί", + "recentchanges": "Νέαι μεταβολαί", "recentchanges-legend": "Ἐπιλογαὶ προσφάτων μεταβολῶν", "recentchanges-summary": "Ἀνιχνεύσειν τὰς πλείω πρόσφατους ἀλλαγὰς οῦ βίκι ἐν τῇδε τῇ δέλτῳ.", "recentchanges-feed-description": "Παρακολουθεῖν τὰς πλείω προσφάτους ἀλλαγὰς τοῦ βίκι ἐν ταύτῃ περιλήψει.", @@ -1135,8 +1135,6 @@ "allpages-bad-ns": "Τὸ {{SITENAME}} οὐκ ἔχει ὀνοματεῖον \"$1\".", "categories": "Κατηγορίαι", "categoriesfrom": "Δεικνύναι κατηγορίας (γραμμαὶ ἐκκινουμέναι ἐκ/ἐξ):", - "special-categories-sort-count": "ἀπαριθμητικὴ ταξινόμησις", - "special-categories-sort-abc": "ἀλφαβητικὴ ταξινόμησις", "deletedcontributions": "Διαγράψαι τοὺς ἐράνους τοῦ χρωμένου", "deletedcontributions-title": "Διαγράψαι τοὺς ἐράνους τοῦ χρωμένου", "sp-deletedcontributions-contribs": "ἔρανoς", @@ -1717,8 +1715,8 @@ "exif-colorspace": "Χρωματικὸς χῶρος", "exif-componentsconfiguration": "Νόημα ἑκάστης συνιστώσης", "exif-compressedbitsperpixel": "Τρόπος συμπιέσεως εἰκόνος", - "exif-pixelydimension": "Πλάτος εἰκόνος", - "exif-pixelxdimension": "Ὕψος εἰκόνος", + "exif-pixelxdimension": "Πλάτος εἰκόνος", + "exif-pixelydimension": "Ὕψος εἰκόνος", "exif-usercomment": "Σχόλια χρωμένου", "exif-relatedsoundfile": "Σχετιζόμενον ἀρχεῖον ἤχου", "exif-datetimeoriginal": "Χρονολογία καὶ ὥρα παραγωγῆς δεδομένων", @@ -2005,7 +2003,6 @@ "version-software-version": "Ἔκδοσις", "fileduplicatesearch": "Ζήτησις διπλότυπων ἀρχείων", "fileduplicatesearch-summary": "Ζητεῖν διπλότυπα ἀρχεῖα βάσει κερματιζομένων τιμῶν.", - "fileduplicatesearch-legend": "Ζήτησις διπλότυπου", "fileduplicatesearch-filename": "Ὄνομα ἀρχείου:", "fileduplicatesearch-submit": "Ἀναζήτησις", "fileduplicatesearch-info": "$1 × $2 pixel
Μέγεθος ἀρχείου: $3
MIME τύπος: $4", diff --git a/languages/i18n/gsw.json b/languages/i18n/gsw.json index 77cfb9e892..75906f0631 100644 --- a/languages/i18n/gsw.json +++ b/languages/i18n/gsw.json @@ -1237,7 +1237,7 @@ "recentchangeslinked-page": "Syte:", "recentchangeslinked-to": "Zeig Änderige uf Syte, wu uff die Syte verwyyse", "recentchanges-page-added-to-category": "[[:$1]] zur Kategorie derzue ta", - "recentchanges-page-added-to-category-bundled": "[[:$1]] und {{PLURAL:$2|ei|$2}} anderi Syte zur Kategorie derzue ta", + "recentchanges-page-added-to-category-bundled": "[[:$1]] und [[Special:WhatLinksHere/$1|{{PLURAL:$2|ei|$2}}]] anderi Syte zur Kategorie derzue ta", "recentchanges-page-removed-from-category": "[[:$1]] vor Kategorie furtgnoh", "recentchanges-page-removed-from-category-bundled": "[[:$1]] und {{PLURAL:$2|ei|$2}} anderi Syte vor Kategorie furtgnoh", "autochange-username": "Automatischi MediaWiki-Änderig", @@ -1697,8 +1697,6 @@ "categories": "Kategorie", "categoriespagetext": "In {{PLURAL:$1|däre Kategorii|däne Kategorie}} het s Syte oder Dateie.\n[[Special:UnusedCategories|Nit benutzte Kategorie]] wäre do nit ufgfiert.\nLueg au d Lischt vu dr [[Special:WantedCategories|gwinschte Kategorie]].", "categoriesfrom": "Zeig Kategorie ab:", - "special-categories-sort-count": "Sortierig no Aazahl", - "special-categories-sort-abc": "Sortierig no Alfabet", "deletedcontributions": "Gleschti Bytreg", "deletedcontributions-title": "Gleschti Bytreg", "sp-deletedcontributions-contribs": "Byyträg", @@ -2294,11 +2292,7 @@ "import-logentry-upload-detail": "$1 {{PLURAL:$1|Version|Versionen}} importiert", "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|Version|Versione}} us $2 importiert", "javascripttest": "JavaScript-Tescht", - "javascripttest-pagetext-noframework": "Die Syte isch reserviert fir JavaSkript-Tescht.", - "javascripttest-pagetext-unknownframework": "Nit bekannt Framework „$1“.", "javascripttest-pagetext-unknownaction": "Unbekannti Aktion «$1».", - "javascripttest-pagetext-frameworks": "Bitte eis vu däne Framework uuswehle: $1", - "javascripttest-pagetext-skins": "Wehl e Benutzeroberflechi uus fir d Durfierig vu dr Tescht:", "javascripttest-qunit-intro": "Lueg d [$1 Dokumentation zue Tescht] uf mediawiki.org", "tooltip-pt-userpage": "Dyyni Benutzersyte", "tooltip-pt-anonuserpage": "D Benutzersyte vo der IP-Adress wo du mit schaffsch", @@ -2549,8 +2543,8 @@ "exif-colorspace": "Farbruum", "exif-componentsconfiguration": "Bedytig vu einzelne Komponente", "exif-compressedbitsperpixel": "Komprimierti Bit pro Pixel", - "exif-pixelydimension": "Bildbreiti", - "exif-pixelxdimension": "Bildhechi", + "exif-pixelxdimension": "Bildbreiti", + "exif-pixelydimension": "Bildhechi", "exif-usercomment": "Benutzerkommentar", "exif-relatedsoundfile": "Zuegherigi Tondatei", "exif-datetimeoriginal": "Erfassigszytpunkt", @@ -2989,7 +2983,6 @@ "version-libraries-description": "Beschrybig", "version-libraries-authors": "Autor/inne", "redirect": "Wyterleitig uf Benutzersyte, Syte, Syteversion oder Datei", - "redirect-legend": "Wyterleitig uf e Datei oder e Syte", "redirect-summary": "Die Spezialsyte leitet wyter uf e Benutzersyte (numerischi Benutzerkännig aagee), Syte (Sytekännig aagee), Syteversion (Versionskännig aagee) oder Datei (Dateiname aagee). Benutzig: [[{{#Special:Redirect}}/user/101]], [[{{#Special:Redirect}}/page/64308]], [[{{#Special:Redirect}}/revision/328429]] oder [[{{#Special:Redirect}}/file/Example.jpg]].", "redirect-submit": "Gang", "redirect-lookup": "Sueche:", @@ -3001,7 +2994,6 @@ "redirect-not-exists": "Wärt nit gfunde", "fileduplicatesearch": "Datei-Duplikat sueche", "fileduplicatesearch-summary": "Suech no Datei-Duplikat uf dr Grundlag vu ihrem Hash-Wärt.", - "fileduplicatesearch-legend": "No Duplikat sueche", "fileduplicatesearch-filename": "Dateiname:", "fileduplicatesearch-submit": "Sueche", "fileduplicatesearch-info": "$1 × $2 Pixel
Dateigressi: $3
MIME-Typ: $4", diff --git a/languages/i18n/gu.json b/languages/i18n/gu.json index 35bdcc0e72..85f17a5baa 100644 --- a/languages/i18n/gu.json +++ b/languages/i18n/gu.json @@ -164,7 +164,7 @@ "morenotlisted": "આ યાદી પૂર્ણ નથી.", "mypage": "પાનું", "mytalk": "ચર્ચા", - "anontalk": "આ IP માટેનું ચર્ચા પાનું", + "anontalk": "ચર્ચા", "navigation": "ભ્રમણ", "and": " અને", "qbfind": "શોધો", @@ -423,7 +423,7 @@ "createacct-reason": "કારણ", "createacct-reason-ph": "તમે કેમ બીજું ખાતું બનાવો છો", "createacct-submit": "તમારું ખાતું બનાવો", - "createacct-another-submit": "બીજું ખાતું બનાવો", + "createacct-another-submit": "ખાતું બનાવો", "createacct-benefit-heading": "{{SITENAME}} એ તમારા જેવા લોકોએ બનાવેલ છે.", "createacct-benefit-body1": "{{PLURAL:$1|ફેરફાર|ફેરફારો}}", "createacct-benefit-body2": "{{PLURAL:$1|પાનું|પાનાં}}", @@ -547,7 +547,7 @@ "sig_tip": "સમયછાપ સાથે તમારા હસ્તાક્ષર", "hr_tip": "આડી લીટી (શક્ય તેટલો ઓછો ઉપયોગ કરો)", "summary": "સારાંશ:", - "subject": "વિષય/શીર્ષક:", + "subject": "વિષય:", "minoredit": "આ એક નાનો સુધારો છે", "watchthis": "આ પાનાને ધ્યાનમાં રાખો", "savearticle": "પાનું સાચવો", @@ -1506,8 +1506,8 @@ "apihelp-no-such-module": "સાધન જૂથ \"$1\" ન મળ્યું.", "apisandbox-submit": "વિનંતી કરો", "apisandbox-reset": "સાફ કરો", - "apisandbox-examples": "ઉદાહરણ", - "apisandbox-results": "પરિણામ", + "apisandbox-examples": "ઉદાહરણો", + "apisandbox-results": "પરિણામો", "booksources": "પુસ્તક સ્રોત", "booksources-search-legend": "પુસ્તક સ્રોત શોધો", "booksources-isbn": "આઇએસબીએન:", @@ -1538,8 +1538,6 @@ "categories": "શ્રેણીઓ", "categoriespagetext": "નીચેની {{PLURAL:$1|શ્રેણી|શ્રેણીઓ}}માં પાના કે અન્ય સભ્યો છે.\n[[Special:UnusedCategories|વણ વપરાયેલી શ્રેણીઓ]] અત્રે દર્શાવવામાં આવી નથી.\n[[Special:WantedCategories|ઈચ્છિત શ્રેણીઓ]] પણ જોઈ જુઓ.", "categoriesfrom": "આનાથી શરૂ થતી શ્રેણી દર્શાવો:", - "special-categories-sort-count": "સંખ્યા આધારીત ચઢતા ક્રમમાં વર્ગીકરણ કરો", - "special-categories-sort-abc": "મૂળાક્ષરો પ્રમાણે ગોઠવો", "deletedcontributions": "સભ્યનું યોગદાન ભૂંસી નાખો", "deletedcontributions-title": "સભ્યનું ભૂંસેલું યોગદાન", "sp-deletedcontributions-contribs": "યોગદાન", @@ -1957,7 +1955,7 @@ "movenotallowedfile": "તમને ફાઈલ ખસેડવાની પરવાનગી નથી.", "cant-move-user-page": "તમને સભ્ય પાના હટાવવાની પરવાનગી નથી (ઉપપાના સિવાય).", "cant-move-to-user-page": "તમને કોઇ પાનાને સભ્ય પાનામાં ખસેડવાની પ્રવાનગી નથી (સિવાય કે સભ્ય ઉપપાના)", - "newtitle": "આ નવું નામ આપો:", + "newtitle": "નવું શીર્ષક:", "move-watch": "આ પાનું ધ્યાનમાં રાખો", "movepagebtn": "પાનું ખસેડો", "pagemovedsub": "પાનું સફળતા પૂર્વક ખસેડવામાં આવ્યું છે", @@ -2083,11 +2081,7 @@ "import-logentry-upload-detail": "$1 {{PLURAL:$1|પુનરાવર્તન|પુનરાવર્તનો}} આયાત કરેલ છે", "import-logentry-interwiki-detail": "$2 માંથી આયાત કરેલ $1 {{PLURAL:$1|પુનરાવર્તન|પુનરાવર્તનો}}", "javascripttest": "જાવા સ્ક્રીપ્ટ પરીક્ષણ", - "javascripttest-pagetext-noframework": "આ પાનું જાવા સ્ક્રીપ્ટ ચલાવવા આરક્ષિત છે.", - "javascripttest-pagetext-unknownframework": "અજાણ ચકાસણી ફ્રેમવર્ક \"$1\".", "javascripttest-pagetext-unknownaction": "\"$1\" અજ્ઞાત ક્રિયા.", - "javascripttest-pagetext-frameworks": "નીચેનામાંથી કોઈ એક ચકાસણી ફ્રેમવર્ક પસંદ કરો : $1", - "javascripttest-pagetext-skins": "ચકાસણી કરવા માટેની સ્કીન પસંદ કરો", "javascripttest-qunit-intro": "mediawiki.org પર [$1 testing documentation] તપાસ માહિતી જુઓ", "tooltip-pt-userpage": "{{GENDER:|તમારું સભ્ય}} પાનું", "tooltip-pt-anonuserpage": "IP સરનામું માટેના સભ્ય પાનામાં તમે ફેરફાર કરી રહ્યાં છો.", @@ -2127,7 +2121,7 @@ "tooltip-feed-rss": "આ પાના માટે આર.એસ.એસ. ફીડ", "tooltip-feed-atom": "આ પાના માટે એટમ ફીડ", "tooltip-t-contributions": "{{GENDER:$1|આ સભ્ય}} વડે કરાયેલા યોગદાનોની યાદી", - "tooltip-t-emailuser": "આ સભ્યને ઇ-મેલ મોકલો", + "tooltip-t-emailuser": "{{GENDER:$1|આ સભ્ય}}ને ઇમેલ મોકલો", "tooltip-t-info": "આ પાનાં વિષે વધુ માહિતી", "tooltip-t-upload": "ફાઇલ ચડાવો", "tooltip-t-specialpages": "બધા ખાસ પાનાંઓની યાદી", @@ -2320,8 +2314,8 @@ "exif-colorspace": "રંગ માટે જગ્યા", "exif-componentsconfiguration": "દરેક ભાગનો અર્થ", "exif-compressedbitsperpixel": "ચિત્ર સરખામણી મોડ", - "exif-pixelydimension": "ચિત્ર પહોળાઇ", - "exif-pixelxdimension": "ચિત્રની ઊઁચાઈ", + "exif-pixelxdimension": "ચિત્ર પહોળાઇ", + "exif-pixelydimension": "ચિત્રની ઊઁચાઈ", "exif-usercomment": "સભ્યની ટિપ્પણી", "exif-relatedsoundfile": "સંબંધિત શ્રાવ્ય ફાઈલો", "exif-datetimeoriginal": "નિર્મિતીનો સમય અને તારીખ", @@ -2744,7 +2738,6 @@ "version-entrypoints-header-url": "URL", "version-libraries-library": "લાઇબ્રેરી", "version-libraries-version": "આવૃત્તિ", - "redirect-legend": "ફાઇલ અથવા પાનાં તરફ વાળો", "redirect-submit": "જાઓ", "redirect-lookup": "જુઓ:", "redirect-value": "કિંમત:", @@ -2755,7 +2748,6 @@ "redirect-not-exists": "કિંમત મળી નહી", "fileduplicatesearch": "નકલ ફાઇલ શોધો", "fileduplicatesearch-summary": "હેશ કિંમત પર આધારિત આબેહૂબ ફાઇલો શોધો.", - "fileduplicatesearch-legend": "નકલ શોધો", "fileduplicatesearch-filename": "ફાઇલ નામ", "fileduplicatesearch-submit": "શોધ", "fileduplicatesearch-info": "$1 × $2 પીક્સલ, ફાઇલનું કદ: $3, MIME પ્રકાર: $4", @@ -2949,7 +2941,7 @@ "expand_templates_ok": "મંજૂર", "expand_templates_remove_comments": "ટીપ્પણીઓ દૂર કરો", "expand_templates_preview": "પૂર્વાવલોકન", - "pagelanguage": "પાનાની ભાષાનો ચયનકર્તા", + "pagelanguage": "પાનાની ભાષા બદલો", "pagelang-name": "પાનું", "pagelang-language": "ભાષા", "pagelang-use-default": "(મૂળભુત ભાષા)", diff --git a/languages/i18n/he.json b/languages/i18n/he.json index 49605f4faa..67c3b49b4c 100644 --- a/languages/i18n/he.json +++ b/languages/i18n/he.json @@ -37,24 +37,25 @@ ] }, "tog-underline": "סימון קישורים בקו תחתי:", - "tog-hideminor": "הסתרת שינויים משניים ברשימת השינויים האחרונים", - "tog-hidepatrolled": "הסתרת שינויים בדוקים ברשימת השינויים האחרונים", + "tog-hideminor": "הסתרת עריכות משניות בדף השינויים האחרונים", + "tog-hidepatrolled": "הסתרת שינויים בדוקים בדף השינויים האחרונים", "tog-newpageshidepatrolled": "הסתרת דפים בדוקים ברשימת הדפים החדשים", - "tog-hidecategorization": "הסתרת סיווג דפים לקטגוריות", + "tog-hidecategorization": "הסתרת שינויים בקטגוריות של דפים", "tog-extendwatchlist": "הרחבת רשימת המעקב כך שתציג את כל השינויים, לא רק את השינויים האחרונים בכל דף", - "tog-usenewrc": "קיבוץ השינויים לפי דף בשינויים האחרונים וברשימת המעקב", + "tog-usenewrc": "קיבוץ השינויים לפי דפים בדף השינויים האחרונים וברשימת המעקב", "tog-numberheadings": "מספור כותרות אוטומטי", "tog-showtoolbar": "הצגת סרגל העריכה", "tog-editondblclick": "עריכת דפים בלחיצה כפולה", - "tog-editsectiononrightclick": "הפעלת עריכת פסקאות באמצעות לחיצה ימנית על כותרות הפסקאות", + "tog-editsectiononrightclick": "עריכת פסקאות באמצעות לחיצה ימנית על כותרות הפסקאות", "tog-watchcreations": "הוספת דפים שיצרתי וקבצים שהעליתי לרשימת המעקב שלי", "tog-watchdefault": "הוספת דפים וקבצים שערכתי לרשימת המעקב שלי", "tog-watchmoves": "הוספת דפים וקבצים שהעברתי לרשימת המעקב שלי", "tog-watchdeletion": "הוספת דפים וקבצים שמחקתי לרשימת המעקב שלי", - "tog-watchrollback": "הוספת דפים שבהם ביצעתי שחזור לגרסה קודמת לרשימת המעקב שלי", - "tog-minordefault": "סימון כל פעולת עריכה כמשנית כברירת מחדל", + "tog-watchuploads": "הוספת קבצים חדשים שהעליתי לרשימת המעקב שלי", + "tog-watchrollback": "הוספת דפים שבהם ביצעתי שחזור מהיר לרשימת המעקב שלי", + "tog-minordefault": "סימון כל עריכה כמשנית כברירת מחדל", "tog-previewontop": "הצגת תצוגה מקדימה לפני תיבת העריכה", - "tog-previewonfirst": "הצגת תצוגה מקדימה בעריכה ראשונה", + "tog-previewonfirst": "הצגת תצוגה מקדימה בעריכה הראשונה", "tog-enotifwatchlistpages": "לשלוח אליי דוא\"ל כאשר משתנה דף או קובץ ברשימת המעקב שלי", "tog-enotifusertalkpages": "לשלוח אליי דוא\"ל כאשר נעשה שינוי בדף שיחת המשתמש שלי", "tog-enotifminoredits": "לשלוח אליי דוא\"ל גם על עריכות משניות של דפים וקבצים", @@ -62,30 +63,30 @@ "tog-shownumberswatching": "הצגת מספר המשתמשים העוקבים", "tog-oldsig": "החתימה הנוכחית:", "tog-fancysig": "התייחסות לחתימה כקוד ויקי (ללא קישור אוטומטי)", - "tog-uselivepreview": "שימוש בתצוגה מקדימה חיה", + "tog-uselivepreview": "שימוש בתצוגה מקדימה מהירה", "tog-forceeditsummary": "הצגת אזהרה בעת הכנסת תקציר עריכה ריק", "tog-watchlisthideown": "הסתרת העריכות שלי ברשימת המעקב", "tog-watchlisthidebots": "הסתרת עריכות של בוטים ברשימת המעקב", "tog-watchlisthideminor": "הסתרת עריכות משניות ברשימת המעקב", "tog-watchlisthideliu": "הסתרת עריכות של משתמשים רשומים ברשימת המעקב", - "tog-watchlistreloadautomatically": "רענון אוטומטי של רשימת המעקב בכל פעם שמסנן משתנה (נדרש JavaScript)", + "tog-watchlistreloadautomatically": "רענון אוטומטי של רשימת המעקב בכל פעם שמסנן משתנה (דרוש JavaScript)", "tog-watchlisthideanons": "הסתרת עריכות של משתמשים אנונימיים ברשימת המעקב", "tog-watchlisthidepatrolled": "הסתרת עריכות בדוקות ברשימת המעקב", - "tog-watchlisthidecategorization": "הסתרת סיווג דפים לקטגוריות", - "tog-ccmeonemails": "לשלוח אליי העתקים של הודעות דואר אלקטרוני ששלחתי למשתמשים אחרים", - "tog-diffonly": "ביטול הצגת תוכן הדף מתחת להשוואות הגרסאות", + "tog-watchlisthidecategorization": "הסתרת שינויים בקטגוריות של דפים", + "tog-ccmeonemails": "לשלוח אליי העתקים של הודעות דוא\"ל ששלחתי למשתמשים אחרים", + "tog-diffonly": "ביטול הצגת תוכן הדף מתחת להשוואת הגרסאות", "tog-showhiddencats": "הצגת קטגוריות מוסתרות", "tog-norollbackdiff": "השמטת ההבדלים בין הגרסאות לאחר ביצוע שחזור", "tog-useeditwarning": "הצגת אזהרה בעת עזיבת דף עריכה עם שינויים שטרם נשמרו", "tog-prefershttps": "תמיד להשתמש בתקשורת מאובטחת לאחר הכניסה לחשבון", "underline-always": "תמיד", "underline-never": "לעולם לא", - "underline-default": "ברירת מחדל של העיצוב או של הדפדפן", + "underline-default": "ברירת המחדל של העיצוב או של הדפדפן", "editfont-style": "הגופן בתיבת העריכה:", - "editfont-default": "ברירת מחדל של הדפדפן", + "editfont-default": "ברירת המחדל של הדפדפן", "editfont-monospace": "גופן ברוחב קבוע (monospace)", - "editfont-sansserif": "גופן ללא תגים (sans-serif)", - "editfont-serif": "גופן עם תגים (serif)", + "editfont-sansserif": "גופן לא מעוצב (sans-serif)", + "editfont-serif": "גופן מעוצב (serif)", "sunday": "ראשון", "monday": "שני", "tuesday": "שלישי", @@ -174,7 +175,6 @@ "moredotdotdot": "עוד…", "morenotlisted": "רשימה זו אינה מלאה.", "mypage": "דף משתמש", - "anonuserpage": "משתמש לא ידוע", "mytalk": "שיחה", "anontalk": "שיחה", "navigation": "ניווט", @@ -383,7 +383,7 @@ "actionthrottled": "הפעולה הוגבלה", "actionthrottledtext": "כאמצעי נגד שימוש לרעה, קיימת מגבלה על ביצוע פעולה זו פעמים רבות מדי בזמן קצר, וחרגת מהמגבלה הזאת.\nנא לנסות שוב בעוד מספר דקות.", "protectedpagetext": "דף זה מוגן כדי למנוע עריכה ופעולות אחרות.", - "viewsourcetext": "באפשרותך לצפות בטקסט המקור של הדף ולהעתיקו.", + "viewsourcetext": "באפשרותכם לצפות בטקסט המקור של הדף ולהעתיקו.", "viewyourtext": "באפשרותך לצפות בטקסט המקור של העריכות שלך בדף הזה ולהעתיקו.", "protectedinterface": "דף זה הוא אחד מסדרת דפים המספקים הודעות מערכת לתוכנה באתר ויקי זה, ומוגן כדי למנוע השחתות.\nכדי להוסיף או לשנות תרגומים בכל אתרי הוויקי, אנא השתמשו ב־[//translatewiki.net/ translatewiki.net], פרויקט התרגום של מדיה־ויקי.", "editinginterface": "אזהרה: הדף שאתם עורכים הוא אחד הדפים המספקים הודעות מערכת לתוכנה.\nשינויים בדף זה ישפיעו על תצוגת ממשק המשתמש של משתמשים אחרים באתר ויקי זה.", @@ -394,7 +394,7 @@ "customjsprotected": "אינך מורשה לערוך דף JavaScript זה כיוון שהוא כולל הגדרות אישיות של משתמש אחר.", "mycustomcssprotected": "אין לך הרשאה לערוך דף CSS זה.", "mycustomjsprotected": "אין לך הרשאה לערוך דף JavaScript זה.", - "myprivateinfoprotected": "אין לך הרשאה לערוך את המידע הפרטי שלך", + "myprivateinfoprotected": "אין לך הרשאה לערוך את המידע הפרטי שלך.", "mypreferencesprotected": "אין לך הרשאה לערוך את ההעדפות שלך.", "ns-specialprotected": "לא ניתן לערוך דפים מיוחדים.", "titleprotected": "[[User:$1|$1]] {{GENDER:$1|הפעיל|הפעילה}} הגנה על הדף הזה מפני יצירה.\nהסיבה שניתנה לכך היא $2.", @@ -407,7 +407,7 @@ "virus-badscanner": "הגדרות שגויות: סורק הווירוסים אינו ידוע: ''$1''", "virus-scanfailed": "הסריקה נכשלה (קוד: $1)", "virus-unknownscanner": "אנטי־וירוס בלתי ידוע:", - "logouttext": "'''יצאתם זה עתה מהחשבון.'''\n\nשימו לב כי ייתכן שדפים אחדים ימשיכו להיות מוצגים כאילו אתם עדיין מחוברים לחשבון עד שתנקו את המטמון של הדפדפן שלכם.", + "logouttext": "יצאתם זה עתה מהחשבון.\n\nשימו לב כי ייתכן שדפים אחדים ימשיכו להיות מוצגים כאילו אתם עדיין מחוברים לחשבון עד שתנקו את המטמון של הדפדפן שלכם.", "cannotlogoutnow-title": "לא ניתן לצאת מהחשבון עכשיו", "cannotlogoutnow-text": "היציאה אינה אפשרית בעת שימוש ב{{GRAMMAR:תחילית|$1}}.", "welcomeuser": "ברוך בואך, $1!", @@ -494,12 +494,12 @@ "noemail": "לא רשומה כתובת דואר אלקטרוני עבור ה{{GENDER:$1|משתמש|משתמשת}} \"$1\".", "noemailcreate": "יש לספק כתובת דואר אלקטרוני תקינה.", "passwordsent": "סיסמה חדשה נשלחה לכתובת הדואר האלקטרוני הרשומה עבור \"$1\".\nאנא היכנסו חזרה לאתר אחרי שתקבלו אותה.", - "blocked-mailpassword": "כתובת ה־IP שלך נחסמה מעריכה, ולפיכך אינך מורשה להשתמש באפשרות שחזור הסיסמה, וזאת כדי למנוע ניצול לרעה של התכונה.", + "blocked-mailpassword": "כתובת ה־IP שלך נחסמה מעריכה. כדי למנוע ניצול לרעה, אינך מורשה להשתמש באפשרות שחזור הסיסמה.", "eauthentsent": "דוא\"ל אימות נשלח לכתובת הדוא\"ל שצוינה.\nלפני שדברי דוא\"ל אחרים יישלחו לחשבון הזה, יהיה עליכם לפעול לפי ההוראות בדוא\"ל, כדי לאשר שהחשבון אכן שייך לכם.", "throttled-mailpassword": "כבר נשלח דוא\"ל לאיפוס הסיסמה ב{{PLURAL:$1|שעה האחרונה|שעתיים האחרונות|Ö¾$1 השעות האחרונות}}.\nכדי למנוע ניצול לרעה, יכול להישלח רק דוא\"ל אחד כזה בכל {{PLURAL:$1|שעה|שעתיים|$1 שעות}}.", "mailerror": "שגיאה בשליחת דואר: $1", "acct_creation_throttle_hit": "מבקרים באתר זה דרך כתובת ה־IP שלכם כבר יצרו {{PLURAL:$1|חשבון אחד|$1 חשבונות}} ביום האחרון. זהו המקסימום המותר בתקופה זו.\nלפיכך, מבקרים דרך כתובת ה־IP הזאת לא יכולים ליצור חשבונות נוספים ברגע זה.", - "emailauthenticated": "כתובת הדוא\"ל שלך אומתה ב־$3, $2.", + "emailauthenticated": "כתובת הדוא\"ל שלך אומתה ב־$2 בשעה $3.", "emailnotauthenticated": "כתובת הדוא\"ל שלכם עדיין לא אומתה.\nלא יישלח אליכם דוא\"ל עבור אף אחת מהתכונות הבאות.", "noemailprefs": "יש לציין כתובת דוא\"ל בהעדפות שלך כדי שתכונות אלה יעבדו.", "emailconfirmlink": "אישור כתובת הדוא\"ל שלך", @@ -667,14 +667,14 @@ "noarticletext": "אין כרגע טקסט בדף הזה.\nבאפשרותכם [[Special:Search/{{PAGENAME}}|לחפש את כותרת הדף]] בדפים אחרים,\n[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} לחפש את הדף ביומנים],\nאו [{{fullurl:{{FULLPAGENAME}}|action=edit}} ליצור את הדף].", "noarticletext-nopermission": "אין כרגע טקסט בדף הזה.\nבאפשרותכם [[Special:Search/{{PAGENAME}}|לחפש את כותרת הדף]] בדפים אחרים,\nאו [{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} לחפש את הדף ביומנים],\nאך אינכם מורשים ליצור את הדף.", "missing-revision": "גרסה #$1 של הדף \"{{FULLPAGENAME}}\" אינה קיימת.\n\nזה נגרם בדרך כלל על־ידי לחיצה על קישור ישן לגרסה קודמת של דף שנמחק.\nאפשר למצוא פרטים ב[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} יומן המחיקות].", - "userpage-userdoesnotexist": "חשבון המשתמש \"$1\" אינו רשום.\nאנא בדקו אם ברצונכם ליצור/לערוך דף זה.", + "userpage-userdoesnotexist": "חשבון המשתמש \"$1\" אינו רשום.\nאנא בִּדקו אם ברצונכם ליצור/לערוך את הדף הזה.", "userpage-userdoesnotexist-view": "חשבון המשתמש \"$1\" אינו רשום.", "blocked-notice-logextract": "{{GENDER:$1|המשתמש הזה חסום|המשתמשת הזו חסומה}} כרגע.\nהפעולה האחרונה ביומן החסימות מוצגת להלן:", "clearyourcache": "הערה: לאחר השמירה, ייתכן שתצטרכו לנקות את זיכרון המטמון (cache) של הדפדפן כדי להבחין בשינויים.\n* פיירפוקס / ספארי: לחצו והחזיקו את המקש Shift בעת לחיצתכם על טעינה מחדש (Reload), או לחצו על צירוף המקשים Ctrl-F5 או Ctrl-R‏ (⌘-R במחשב מק)\n* גוגל כרום: לחצו על צירוף המקשים Ctrl-Shift-R‏ (⌘-Shift-R במחשב מק)\n* אינטרנט אקספלורר: לחצו והחזיקו את המקש Ctrl בעת לחיצתכם על רענן (Refresh), או לחצו על צירוף המקשים Ctrl-F5\n* אופרה: נקו את המטמון ב־Tools‏ ← Preferences", - "usercssyoucanpreview": "'''עצה:''' השתמשו בלחצן \"{{int:showpreview}}\" כדי לבחון את גיליון ה־CSS החדש שלכם לפני השמירה.", - "userjsyoucanpreview": "'''עצה:''' השתמשו בלחצן \"{{int:showpreview}}\" כדי לבחון את סקריפט ה־JavaScript החדש שלכם לפני השמירה.", - "usercsspreview": "'''זכרו שזו רק תצוגה מקדימה של גיליון ה־CSS שלכם.'''\n'''הוא טרם נשמר!'''", - "userjspreview": "'''זכרו שזו רק בדיקה/תצוגה מקדימה של סקריפט ה־JavaScript שלכם.'''\n'''הוא טרם נשמר!'''", + "usercssyoucanpreview": "עצה: השתמשו בכפתור \"{{int:showpreview}}\" כדי לבחון את גיליון ה־CSS החדש שלכם לפני השמירה.", + "userjsyoucanpreview": "עצה: השתמשו בכפתור \"{{int:showpreview}}\" כדי לבחון את סקריפט ה־JavaScript החדש שלכם לפני השמירה.", + "usercsspreview": "זִכרו שזו רק תצוגה מקדימה של גיליון ה־CSS שלכם.\nהוא עדיין לא נשמר!", + "userjspreview": "זִכרו שזו רק בדיקה/תצוגה מקדימה של סקריפט ה־JavaScript שלכם.\nהוא עדיין לא נשמר!", "sitecsspreview": "'''זכרו שזו רק תצוגה מקדימה של גיליון ה־CSS הזה.'''\n'''הוא טרם נשמר!'''", "sitejspreview": "'''זכרו שזו רק תצוגה מקדימה של קוד ה־JavaScript הזה.'''\n'''הוא טרם נשמר!'''", "userinvalidcssjstitle": "'''אזהרה:''' העיצוב \"$1\" אינו קיים.\nדפי .css ו־.js מותאמים אישית משתמשים בכותרת עם אותיות קטנות – למשל, {{ns:user}}:דוגמה/vector.css ולא {{ns:user}}:דוגמה/Vector.css.", @@ -719,12 +719,12 @@ "sectioneditnotsupported-title": "עריכת פסקאות אינה נתמכת", "sectioneditnotsupported-text": "עריכת פסקאות אינה נתמכת בדף זה.", "permissionserrors": "שגיאת הרשאה", - "permissionserrorstext": "אינך מורשה לבצע פעולה זו, {{PLURAL:$1|מהסיבה הבאה|מהסיבות הבאות}}:", - "permissionserrorstext-withaction": "אינך מורשה $2, מה{{PLURAL:$1|סיבה הבאה|סיבות הבאות}}:", + "permissionserrorstext": "אינכם מורשים לבצע פעולה זו, {{PLURAL:$1|מהסיבה הבאה|מהסיבות הבאות}}:", + "permissionserrorstext-withaction": "אינכם מורשים $2, {{PLURAL:$1|מהסיבה הבאה|מהסיבות הבאות}}:", "contentmodelediterror": "לא ניתן לערוך את הגרסה הזאת כי מודל התוכן שלה הוא $1, השונה ממודל התוכן הנוכחי של הדף, $2.", "recreate-moveddeleted-warn": "'''אזהרה: הנכם יוצרים דף חדש שנמחק בעבר.'''\n\nכדאי לשקול אם יהיה זה נכון להמשיך לערוך את הדף.\nיומני המחיקות וההעברות של הדף מוצגים להלן:", "moveddeleted-notice": "דף זה נמחק.\nיומני המחיקות וההעברות של הדף מוצגים להלן.", - "moveddeleted-notice-recent": "מצטערים, הדף הזה נמחק לאחרונה (ב־24 השעות האחרונות).\nיומני המחיקה וההעברה של הדף מוצגים להלן לעיון.", + "moveddeleted-notice-recent": "מצטערים, הדף הזה נמחק לאחרונה (ב־24 השעות האחרונות).\nיומני המחיקות וההעברות של הדף מוצגים להלן לעיון.", "log-fulllog": "הצגת היומן המלא", "edit-hook-aborted": "העריכה בוטלה על־ידי Hook.\nלא ניתן הסבר לביטול.", "edit-gone-missing": "לא ניתן לעדכן את הדף.\nנראה שהוא נמחק.", @@ -768,7 +768,7 @@ "parser-unstrip-loop-warning": "נמצאה לולאה בפריסה", "parser-unstrip-recursion-limit": "עומק הרקורסיה של הפריסה עבר את המגבלה ($1)", "converter-manual-rule-error": "התגלתה שגיאה בכלל המרת שפה ידני", - "undo-success": "ניתן לבטל את העריכה. אנא בִדקו את השוואת הגרסאות למטה כדי לוודא שזה מה שאתם רוצים לעשות, ואז שמרו את השינויים למטה כדי לבצע את ביטול העריכה.", + "undo-success": "ניתן לבטל את העריכה.\nאנא בִּדקו את השוואת הגרסאות למטה כדי לוודא שזה אכן מה שאתם רוצים לעשות, ואז שִׁמרו את השינויים למטה כדי לסיים את ביטול העריכה.", "undo-failure": "לא ניתן היה לבטל את העריכה עקב התנגשות עם עריכות מאוחרות יותר.", "undo-norev": "לא ניתן היה לבטל את העריכה כי היא אינה קיימת או כי היא נמחקה.", "undo-nochange": "נראה שהעריכה כבר בוטלה.", @@ -818,8 +818,8 @@ "rev-deleted-unhide-diff": "אחת מהגרסאות שביקשתם להשוות '''נמחקה'''.\nניתן למצוא פרטים על כך ב[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} יומן המחיקות].\nאתם עדיין יכולים [$1 לצפות בהבדלים בין הגרסאות] אם ברצונכם להמשיך.", "rev-suppressed-unhide-diff": "אחת מהגרסאות שביקשתם להשוות הועלמה.\nניתן למצוא פרטים על כך ב[{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} יומן ההעלמות].\nאתם עדיין יכולים [$1 לצפות בהבדלים בין הגרסאות] אם ברצונכם להמשיך.", "rev-deleted-diff-view": "אחת מהגרסאות שביקשתם להשוות '''נמחקה'''.\nאתם עדיין יכולים לצפות בהבדלים בין הגרסאות; ניתן למצוא פרטים על כך ב[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} יומן המחיקות].", - "rev-suppressed-diff-view": "אחת מהגרסאות שביקשתם להשוות הועלמה\nאתם יכולים לצפות בהבדלים בין הגרסאות; ניתן למצוא פרטים על כך ב[{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} יומן ההעלמות].", - "rev-delundel": "הצגה/הסתרה", + "rev-suppressed-diff-view": "אחת מהגרסאות שביקשתם להשוות הועלמה.\nאתם יכולים לצפות בהבדלים בין הגרסאות; ניתן למצוא פרטים על כך ב[{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} יומן ההעלמות].", + "rev-delundel": "שינוי מצב התצוגה", "rev-showdeleted": "הצגה", "revisiondelete": "מחיקה ושחזור של גרסאות", "revdelete-nooldid-title": "גרסת מטרה בלתי תקינה", @@ -850,18 +850,18 @@ "revdelete-unsuppress": "הסרת הגבלות בגרסאות המשוחזרות", "revdelete-log": "סיבה:", "revdelete-submit": "ביצוע על {{PLURAL:$1|הגרסה שנבחרה|הגרסאות שנבחרו}}", - "revdelete-success": "מצב הצגת הגרסה עודכן.", - "revdelete-failure": "לא ניתן היה לעדכן את מצב הצגת הגרסה:\n$1", - "logdelete-success": "מצב הצגת פעולת היומן עודכן.", - "logdelete-failure": "לא ניתן היה לעדכן את מצב הצגת פעולת היומן:\n$1", - "revdel-restore": "שינוי ההצגה", + "revdelete-success": "מצב התצוגה של הגרסה שׁוּנה.", + "revdelete-failure": "לא ניתן היה לשנות את מצב התצוגה של הגרסה:\n$1", + "logdelete-success": "מצב התצוגה של פעולת היומן שׁוּנה.", + "logdelete-failure": "לא ניתן היה לשנות את מצב התצוגה של היומן:\n$1", + "revdel-restore": "שינוי מצב התצוגה", "pagehist": "היסטוריית הדף", "deletedhist": "הגרסאות המחוקות", "revdelete-hide-current": "שגיאה בהסתרת הפריט מתאריך $2, $1: זו הגרסה הנוכחית.\nלא ניתן להסתיר אותה.", "revdelete-show-no-access": "שגיאה בהצגת הפריט מתאריך $2, $1: פריט זה סומן כ\"מוגבל\".\nאין לך גישה אליו.", "revdelete-modify-no-access": "שגיאה בשינוי הפריט מתאריך $2, $1: פריט זה סומן כ\"מוגבל\".\nאין לכם גישה אליו.", "revdelete-modify-missing": "שגיאה בשינוי פריט מספר $1: הוא אינו נמצא בבסיס הנתונים!", - "revdelete-no-change": "'''אזהרה:''' לפריט מתאריך $2, $1 כבר יש את הגדרות ההצגה הנדרשות.", + "revdelete-no-change": "אזהרה: לפריט מ־$2, $1 כבר היו הגדרות התצוגה שביקשת.", "revdelete-concurrent-change": "שגיאה בשינוי הפריט מתאריך $2, $1: נראה שמצבו שונה על־ידי מישהו אחר בזמן שאתם ניסיתם לשנות אותו.\nאנא בדקו ביומנים.", "revdelete-only-restricted": "שגיאה בהסתרת הפריט מתאריך $2, $1: אין באפשרותך להעלים פריטים ממפעילי המערכת מבלי לבחור גם באחת מאפשרויות הנראוּת האחרות.", "revdelete-reason-dropdown": "* סיבות מחיקה נפוצות\n** הפרת זכויות יוצרים\n** תקציר עריכה או מידע אישי לא הולמים\n** שם משתמש לא הולם\n** מידע שעלול להיות לשון הרע", @@ -904,11 +904,11 @@ "mergelogpagetext": "זוהי רשימה של המיזוגים האחרונים של גרסאות מדף אחד לתוך דף שני.", "history-title": "היסטוריית גרסאות של הדף \"$1\"", "difference-title": "הבדלים בין גרסאות בדף \"$1\"", - "difference-title-multipage": "הבדלים בין הדף \"$1\" לבין הדף \"$2\"", + "difference-title-multipage": "הבדלים בין הדף \"$1\" לדף \"$2\"", "difference-multipage": "(הבדלים בין דפים)", "lineno": "שורה $1:", "compareselectedversions": "השוואת הגרסאות שנבחרו", - "showhideselectedversions": "הצגת/הסתרת הגרסאות שנבחרו", + "showhideselectedversions": "שינוי מצב התצוגה של הגרסאות שנבחרו", "editundo": "ביטול", "diff-empty": "(אין הבדלים)", "diff-multi-sameuser": "({{PLURAL:$1|גרסת ביניים אחת|$1 גרסאות ביניים}} של אותו משתמש {{PLURAL:$1|אינה מוצגת|אינן מוצגות}})", @@ -979,14 +979,14 @@ "prefs-rc": "שינויים אחרונים", "prefs-watchlist": "רשימת המעקב", "prefs-editwatchlist": "עריכת רשימת המעקב", - "prefs-editwatchlist-label": "עריכת ערכים ברשימת המעקב שלך:", - "prefs-editwatchlist-edit": "צפייה והסרת כותרות ברשימת המעקב שלך", + "prefs-editwatchlist-label": "עריכת דפים ברשימת המעקב שלך:", + "prefs-editwatchlist-edit": "הצגה או הסרה של דפים מרשימת המעקב שלך", "prefs-editwatchlist-raw": "עריכת רשימת המעקב הגולמית", "prefs-editwatchlist-clear": "ניקוי רשימת המעקב שלך", - "prefs-watchlist-days": "מספר הימים המרבי שיוצגו ברשימת המעקב:", + "prefs-watchlist-days": "מספר הימים שמוצגים ברשימת המעקב:", "prefs-watchlist-days-max": "לכל היותר {{PLURAL:$1|יום אחד|יומיים|$1 ימים}}", - "prefs-watchlist-edits": "מספר העריכות המרבי שיוצגו ברשימת המעקב המורחבת:", - "prefs-watchlist-edits-max": "מספר מרבי: 1000", + "prefs-watchlist-edits": "מספר העריכות המרבי שמוצגות ברשימת המעקב המורחבת:", + "prefs-watchlist-edits-max": "לכל היותר: 1000", "prefs-watchlist-token": "אסימון לרשימת המעקב:", "prefs-misc": "שונות", "prefs-resetpass": "שינוי סיסמה", @@ -995,19 +995,19 @@ "prefs-email": "אפשרויות דוא\"ל", "prefs-rendering": "מראה", "saveprefs": "שמירה", - "restoreprefs": "שחזור ההגדרות ההתחלתיות (בכל הלשוניות)", + "restoreprefs": "שחזור הגדרות ברירת המחדל (בכל הלשוניות)", "prefs-editing": "עריכה", "rows": "שורות:", "columns": "עמודות:", "searchresultshead": "חיפוש", - "stub-threshold": "סף לעיצוב קישורים לקצרמרים ($1):", + "stub-threshold": "סף לעיצוב קישורים כקצרמרים ($1):", "stub-threshold-sample-link": "דוגמה", "stub-threshold-disabled": "מבוטל", - "recentchangesdays": "מספר הימים שיוצגו בדף השינויים האחרונים:", + "recentchangesdays": "מספר הימים שמוצגים בדף השינויים האחרונים:", "recentchangesdays-max": "לכל היותר {{PLURAL:$1|יום אחד|יומיים|$1 ימים}}", - "recentchangescount": "מספר העריכות שיוצגו כברירת מחדל:", - "prefs-help-recentchangescount": "כולל דף השינויים האחרונים, דפי היסטוריית גרסאות ויומנים.", - "prefs-help-watchlist-token2": "זהו המפתח הסודי של ההזנה של רשימת המעקב שלך.\nכל מי שיודע אותו יוכל לקרוא את רשימת המעקב שלך, לכן אין לשתף אותו.\n[[Special:ResetTokens|אם יש בכך צורך, אפשר לאפס אותו כאן]].", + "recentchangescount": "מספר העריכות שמוצגות כברירת מחדל:", + "prefs-help-recentchangescount": "ההעדפה הזאת כוללת את דף השינויים האחרונים, דפי היסטוריית גרסאות ויומנים.", + "prefs-help-watchlist-token2": "זהו המפתח הסודי להזנה של רשימת המעקב שלך.\nכל מי שיודע אותו יוכל לקרוא את רשימת המעקב שלך, לכן אין לשתף אותו.\n[[Special:ResetTokens|אם יש בכך צורך, אפשר לאפס אותו כאן]].", "savedprefs": "ההעדפות שלך נשמרו.", "savedrights": "הרשאות {{GENDER:$1|המשתמש|המשתמשת}} של $1 נשמרו.", "timezonelegend": "אזור זמן:", @@ -1044,7 +1044,7 @@ "yourlanguage": "שפת הממשק:", "yourvariant": "סוג הכתב בשפת התוכן:", "prefs-help-variant": "סוג הכתב המועדף להצגת דפי התוכן באתר ויקי זה.", - "yournick": "חתימה:", + "yournick": "חתימה חדשה:", "prefs-help-signature": "על הודעות בדפי שיחה יש לחתום באמצעות הטקסט \"~~~~\", שיומר לחתימה שלך ואחריה תאריך ושעה.", "badsig": "חתימה מסוגננת שגויה.\nנא לבדוק את תגיות ה־HTML.", "badsiglength": "חתימתך ארוכה מדי.\nאורך החתימה המרבי הוא {{PLURAL:$1|תו אחד|$1 תווים}}.", @@ -1055,8 +1055,8 @@ "prefs-help-gender": "אין חובה למלא העדפה זו.\nהמערכת משתמשת במידע זה כדי לפנות אליך/אלייך ולציין את שם המשתמש שלך במין הדקדוקי הנכון.\nהמידע יהיה ציבורי.", "email": "דוא\"ל", "prefs-help-realname": "אין חובה למלא את השם האמיתי.\nהשם האמיתי עשוי לשמש כדי לייחס לך את עבודתך.", - "prefs-help-email": "כתובת דואר אלקטרוני היא אופציונאלית, אבל היא חיונית לאיפוס הסיסמה במקרה שתשכחו אותה.", - "prefs-help-email-others": "באפשרותך גם לבחור לאפשר לאחרים ליצור איתך קשר באמצעות דוא\"ל דרך קישור בדף המשתמש או בדף השיחה שלך.\nכתובת הדוא\"ל שלך לא תיחשף כשמשתמשים אחרים ייצרו קשר איתך.", + "prefs-help-email": "כתובת דואר אלקטרוני היא אופציונלית, אבל היא חיונית לאיפוס הסיסמה במקרה שתשכחו אותה.", + "prefs-help-email-others": "באפשרותך גם לבחור לאפשר לאחרים ליצור איתך קשר באמצעות דוא\"ל דרך קישור בדף המשתמש או בדף השיחה שלך.\nכתובת הדוא\"ל שלך לא תיחשף כשמשתמשים אחרים ייצרו איתך קשר.", "prefs-help-email-required": "כתובת דואר אלקטרוני נדרשת לכתיבה באתר.", "prefs-info": "מידע בסיסי", "prefs-i18n": "בינאום", @@ -1094,7 +1094,7 @@ "userrights-notallowed": "אין לך הרשאה להוסיף או להסיר הרשאות של משתמשים.", "userrights-changeable-col": "קבוצות שבאפשרותכם לשנות", "userrights-unchangeable-col": "קבוצות שאין באפשרותכם לשנות", - "userrights-conflict": "התנגשות בין שינויי הרשאות משתמש! אנא בדקו את השינויים שלכם ואשרו אותם.", + "userrights-conflict": "התנגשות בין שינויי הרשאות משתמש! אנא בִּדקו את השינויים שלכם ואשרו אותם.", "userrights-removed-self": "הסרת את הרשאות המשתמש של עצמך. לכן אין לך כעת אפשרות לגשת לדף זה.", "group": "קבוצה:", "group-user": "משתמשים", @@ -1102,20 +1102,20 @@ "group-bot": "בוטים", "group-sysop": "מפעילי מערכת", "group-bureaucrat": "ביורוקרטים", - "group-suppress": "מסתירים", + "group-suppress": "מעלימים", "group-all": "(הכול)", "group-user-member": "{{GENDER:$1|משתמש|משתמשת}}", "group-autoconfirmed-member": "{{GENDER:$1|משתמש ותיק|משתמשת ותיקה}}", "group-bot-member": "{{GENDER:$1|בוט}}", "group-sysop-member": "{{GENDER:$1|מפעיל מערכת|מפעילת מערכת}}", "group-bureaucrat-member": "{{GENDER:$1|ביורוקרט|ביורוקרטית}}", - "group-suppress-member": "{{GENDER:$1|מסתיר|מסתירה}}", + "group-suppress-member": "{{GENDER:$1|מעלים|מעלימה}}", "grouppage-user": "{{ns:project}}:משתמש רשום", "grouppage-autoconfirmed": "{{ns:project}}:משתמש ותיק", "grouppage-bot": "{{ns:project}}:בוט", "grouppage-sysop": "{{ns:project}}:מפעיל מערכת", "grouppage-bureaucrat": "{{ns:project}}:ביורוקרט", - "grouppage-suppress": "{{ns:project}}:מסתיר", + "grouppage-suppress": "{{ns:project}}:מעלים", "right-read": "קריאת דפים", "right-edit": "עריכת דפים", "right-createpage": "יצירת דפים שאינם דפי שיחה", @@ -1307,7 +1307,7 @@ "rcshowhidemine": "$1 עריכות שלי", "rcshowhidemine-show": "הצגת", "rcshowhidemine-hide": "הסתרת", - "rcshowhidecategorization": "$1 סיווג דפים לקטגוריות", + "rcshowhidecategorization": "$1 שינויים בקטגוריות של דפים", "rcshowhidecategorization-show": "הצגת", "rcshowhidecategorization-hide": "הסתרת", "rclinks": "הצגת $1 שינויים אחרונים ב־$2 הימים האחרונים.
$3", @@ -1334,9 +1334,9 @@ "recentchangeslinked-page": "שם הדף:", "recentchangeslinked-to": "הצגת השינויים בדפים המקשרים לדף הנתון במקום זאת", "recentchanges-page-added-to-category": "הדף [[:$1]] נוסף לקטגוריה", - "recentchanges-page-added-to-category-bundled": "הדף [[:$1]] {{PLURAL:$2|ועוד דף אחד|ועוד $2 דפים}} נוספו לקטגוריה", + "recentchanges-page-added-to-category-bundled": "הדף [[:$1]] נוסף לקטגוריה, [[Special:WhatLinksHere/$1|והוא מוכלל בדפים אחרים]]", "recentchanges-page-removed-from-category": "הדף [[:$1]] הוסר מקטגוריה", - "recentchanges-page-removed-from-category-bundled": "הדף [[:$1]] {{PLURAL:$2|ועוד דף אחד|ועוד $2 דפים}} הוסרו מקטגוריה", + "recentchanges-page-removed-from-category-bundled": "הדף [[:$1]] הוסר מקטגוריה, [[Special:WhatLinksHere/$1|והוא מוכלל בדפים אחרים]]", "autochange-username": "שינוי אוטומטי של מדיה־ויקי", "upload": "העלאת קובץ לשרת", "uploadbtn": "העלאה", @@ -1387,7 +1387,7 @@ "largefileserver": "גודל הקובץ חורג ממגבלת השרת.", "emptyfile": "נראה שהקובץ שהעלית ריק.\nייתכן שהסיבה לכך היא שגיאת הקלדה בשם הקובץ.\nיש לוודא שזה הקובץ שברצונך להעלות.", "windows-nonascii-filename": "אתר ויקי זה אינו תומך בשמות קבצים עם תווים מיוחדים או תווים שאינם באנגלית.", - "fileexists": "קובץ בשם הזה כבר קיים, אנא בדקו את [[:$1]] אם אינכם בטוחים שברצונכם להחליף אותו.\n[[$1|thumb]]", + "fileexists": "קובץ בשם הזה כבר קיים, אנא בִּדקו את [[:$1]] אם אינכם בטוחים שברצונכם להחליף אותו.\n[[$1|thumb]]", "filepageexists": "דף תיאור הקובץ עבור קובץ זה כבר נוצר ב[[:$1]], אך לא קיים קובץ בשם זה.\nתיאור הקובץ שתכתבו לא יופיע בדף תיאור הקובץ.\nכדי לגרום לו להופיע שם, יהיה עליכם לערוך אותו ידנית. [[$1|thumb]]", "fileexists-extension": "קובץ עם שם דומה כבר קיים: [[$2|thumb]]\n* שם הקובץ המועלה: [[:$1]]\n* שם הקובץ הקיים: [[:$2]]\nאולי כדאי לתת לקובץ שם ספציפי יותר?", "fileexists-thumbnail-yes": "נראה שהקובץ הוא תמונה מוקטנת (ממוזערת).\n[[$1|thumb]]\nיש לבדוק את הקובץ [[:$1]].\nאם הקובץ שבדקת הוא אותה התמונה בגודל מקורי, אין זה הכרחי להעלות גם תמונה ממוזערת.", @@ -1430,7 +1430,7 @@ "upload-description": "תיאור הקובץ", "upload-options": "אפשרויות העלאה", "watchthisupload": "מעקב אחרי קובץ זה", - "filewasdeleted": "קובץ בשם זה כבר הועלה בעבר, ולאחר מכן נמחק. אנא בדקו את הדף $1 לפני שתמשיכו להעלותו שנית.", + "filewasdeleted": "קובץ בשם זה כבר הועלה בעבר, ולאחר מכן נמחק.\nאנא בִּדקו את $1 לפני שתמשיכו להעלות את הקובץ שנית.", "filename-thumb-name": "נראה שכותרת הקובץ היא כותרת של תמונה מוקטנת (ממוזערת). יש להימנע מהעלאת תמונות ממוזערות בחזרה לאותו אתר ויקי. אם זו אינה תמונה ממוזערת, יש לתקן את שם הקובץ כך שיהיה משמעותי יותר ושלא יכלול את הקידומת של תמונה ממוזערת.", "filename-bad-prefix": "שם הקובץ שאתם מעלים מתחיל ב־\"$1\", שהוא שם שאינו מתאר את הקובץ ובדרך כלל מוקצה אוטומטית על־ידי מצלמות דיגיטליות.\nיש לבחור שם מתאים יותר לקובץ, שיתאר את תכניו.", "filename-prefix-blacklist": " #
\n# התחביר הוא כדלקמן:\n#   * כל דבר מתו \"#\" לסוף השורה הוא הערה\n#   * כל שורה לא ריקה היא קידומת לשמות קבצים טיפוסיים שמצלמות דיגיטליות נותנות אוטומטית\nCIMG # Casio\nDSC_ # Nikon\nDSCF # Fuji\nDSCN # Nikon\nDUW # מספר טלפונים סלולריים\nIMG # כללי\nJD # Jenoptik\nMGP # Pentax\nPICT # שונות\n #
", @@ -1516,6 +1516,7 @@ "uploadstash-badtoken": "ביצוע הפעולה נכשל, אולי בגלל פקיעת תוקפו של אסימון העריכה שלכם. נא לנסות שוב.", "uploadstash-errclear": "מחיקת הקבצים נכשלה.", "uploadstash-refresh": "רענון רשימת הקבצים", + "uploadstash-thumbnail": "הצגת תמונה ממוזערת", "invalid-chunk-offset": "היסט גוש לא תקין", "img-auth-accessdenied": "הגישה נדחתה", "img-auth-nopathinfo": "PATH_INFO חסר.\nהשרת אינו מוגדר להעברת מידע זה.\nייתכן שהוא מבוסס על CGI ולכן אינו יכול לתמוך ב־img_auth.\nראו https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Image_Authorization.", @@ -1607,7 +1608,7 @@ "filerevert-badversion": "אין גרסה מקומית קודמת של הקובץ שהועלתה בתאריך המבוקש.", "filedelete": "מחיקת $1", "filedelete-legend": "מחיקת קובץ", - "filedelete-intro": "אתם עומדים למחוק את הקובץ '''[[Media:$1|$1]]''' יחד עם כל ההיסטוריה שלו.", + "filedelete-intro": "אתם עומדים למחוק את הקובץ [[Media:$1|$1]] יחד עם כל היסטוריית הגרסאות שלו.", "filedelete-intro-old": "אתם מוחקים את הגרסה של '''[[Media:$1|$1]]''' מ־[$4 $3, $2].", "filedelete-comment": "סיבה:", "filedelete-submit": "מחיקה", @@ -1812,19 +1813,19 @@ "alllogstext": "תצוגה משולבת של כל סוגי היומנים הזמינים ב{{grammar:תחילית|{{SITENAME}}}}.\nניתן לצמצם את התצוגה על־ידי בחירת סוג היומן, שם המשתמש (תלוי רישיות) או הדף המושפע (גם כן תלוי רישיות).", "logempty": "אין פריטים תואמים ביומן.", "log-title-wildcard": "חיפוש כותרות המתחילות באותיות אלה", - "showhideselectedlogentries": "הצגת/הסתרת פעולות היומן שנבחרו", - "log-edit-tags": "עריכת התגיות של רשומות היומן שנבחרו", + "showhideselectedlogentries": "שינוי מצב התצוגה של פעולות היומן שנבחרו", + "log-edit-tags": "עריכת התגיות של פעולות היומן שנבחרו", "checkbox-select": "בחירה: $1", "checkbox-all": "הכול", "checkbox-none": "לא כלום", - "checkbox-invert": "להפוך", + "checkbox-invert": "הפיכה", "allpages": "כל הדפים", "nextpage": "הדף הבא ($1)", "prevpage": "הדף הקודם ($1)", "allpagesfrom": "הצגת דפים החל מ:", "allpagesto": "הצגת דפים עד:", "allarticles": "כל הדפים", - "allinnamespace": "כל הדפים (מרחב שם $1)", + "allinnamespace": "כל הדפים (מרחב השם $1)", "allpagessubmit": "הצגה", "allpagesprefix": "הדפים ששמם מתחיל ב־:", "allpagesbadtitle": "כותרת הדף שניתנה הייתה בלתי־תקינה או שהייתה בה קידומת של קישור לשפה אחרת או לוויקי אחר.\nייתכן שהיא מכילה תו אחד או יותר האסורים לשימוש בכותרות.", @@ -1837,8 +1838,6 @@ "categories-submit": "הצגה", "categoriespagetext": "{{PLURAL:$1|הקטגוריה הבאה כוללת|הקטגוריות הבאות כוללות}} דפים או קובצי מדיה.\n[[Special:UnusedCategories|קטגוריות שאינן בשימוש]] אינן מוצגות כאן.\nראו גם את [[Special:WantedCategories|רשימת הקטגוריות המבוקשות]].", "categoriesfrom": "הצגת קטגוריות החל מ:", - "special-categories-sort-count": "סידור לפי מספר הדפים", - "special-categories-sort-abc": "סידור לפי סדר האלף בית", "deletedcontributions": "תרומות משתמש מחוקות", "deletedcontributions-title": "תרומות משתמש מחוקות", "sp-deletedcontributions-contribs": "תרומות", @@ -1905,7 +1904,7 @@ "emailpagetext": "ניתן להשתמש בטופס כדי לשלוח הודעת דואר אלקטרוני {{GENDER:$1|למשתמש זה|למשתמשת זו}}.\nכתובת הדואר האלקטרוני שכתבת ב[[Special:Preferences|העדפות המשתמש שלך]] תופיע ככתובת שההודעה נשלחה ממנה, כדי לאפשר תגובה ישירה.", "defemailsubject": "דוא\"ל מ{{grammar:תחילית|{{SITENAME}}}} מהמשתמש \"$1\"", "usermaildisabled": "שליחת דוא\"ל למשתמשים מבוטלת", - "usermaildisabledtext": "אינכם רשאים לשלוח דואר אלקטרוני למשתמשים אחרים באתר זה", + "usermaildisabledtext": "אינכם מורשים לשלוח דואר אלקטרוני למשתמשים אחרים באתר זה", "noemailtitle": "אין כתובת דואר אלקטרוני", "noemailtext": "משתמש זה לא הזין כתובת דואר אלקטרוני תקינה.", "nowikiemailtext": "משתמש זה בחר שלא לקבל דואר אלקטרוני ממשתמשים אחרים.", @@ -1927,7 +1926,7 @@ "usermessage-summary": "השארת הודעת מערכת.", "usermessage-editor": "שולח הודעות המערכת", "watchlist": "רשימת המעקב", - "mywatchlist": "רשימת מעקב", + "mywatchlist": "רשימת המעקב", "watchlistfor2": "עבור $1 $2", "nowatchlist": "אין דפים ברשימת המעקב.", "watchlistanontext": "נדרשת כניסה לחשבון כדי לצפות או לערוך פריטים ברשימת המעקב.", @@ -1958,10 +1957,10 @@ "wlshowhideanons": "משתמשים אנונימיים", "wlshowhidepatr": "עריכות בדוקות", "wlshowhidemine": "עריכות שלי", - "wlshowhidecategorization": "סיווג דפים לקטגוריות", + "wlshowhidecategorization": "שינויים בקטגוריות של דפים", "watchlist-options": "אפשרויות ברשימת המעקב", - "watching": "בהוספה לרשימת המעקב…", - "unwatching": "בהסרה מרשימת המעקב…", + "watching": "בהוספה לרשימת המעקב...", + "unwatching": "בהסרה מרשימת המעקב...", "watcherrortext": "אירעה שגיאה בעת שינוי הגדרות רשימת המעקב של \"$1\".", "enotif_reset": "סימון כל הדפים כאילו נצפו", "enotif_impersonal_salutation": "משתמש ב{{GRAMMAR:תחילית|{{SITENAME}}}}", @@ -2040,7 +2039,7 @@ "protectlogtext": "להלן רשימה של שינויי ההגנה על דפים.\nראו גם את [[Special:ProtectedPages|רשימת הדפים המוגנים]] הנוכחית.", "protectedarticle": "הפעיל הגנה על הדף \"[[$1]]\"", "modifiedarticleprotection": "שינה את רמת ההגנה של הדף \"[[$1]]\"", - "unprotectedarticle": "ביטל את ההגנה על הדף \"[[$1]]\"", + "unprotectedarticle": "הסיר את ההגנה מהדף \"[[$1]]\"", "movedarticleprotection": "העביר את הגדרות ההגנה מ\"[[$2]]\" ל\"[[$1]]\"", "protect-title": "שינוי רמת ההגנה של הדף \"$1\"", "protect-title-notallowed": "הצגת רמת ההגנה של הדף \"$1\"", @@ -2121,8 +2120,8 @@ "undelete-search-prefix": "הצגת דפים החל מ:", "undelete-search-submit": "חיפוש", "undelete-no-results": "לא נמצאו דפים תואמים בארכיון המחיקות.", - "undelete-filename-mismatch": "שחזור גרסת הקובץ מהתאריך $1 נכשל: שם קובץ לא תואם", - "undelete-bad-store-key": "שחזור גרסת הקובץ מהתאריך $1 נכשל: הקובץ היה חסר לפני המחיקה.", + "undelete-filename-mismatch": "לא ניתן לשחזר את גרסת הקובץ מ־$1: שם הקובץ לא תואם.", + "undelete-bad-store-key": "לא ניתן לשחזר את גרסת הקובץ מ־$1: הקובץ היה חסר לפני המחיקה.", "undelete-cleanup-error": "שגיאת בעת מחיקת קובץ הארכיון \"$1\" שאינו בשימוש.", "undelete-missing-filearchive": "שחזור קובץ הארכיון שמספרו $1 נכשל כיוון שהוא אינו בבסיס הנתונים. ייתכן שהוא כבר שוחזר.", "undelete-error": "שגיאה בשחזור דף", @@ -2184,7 +2183,7 @@ "whatlinkshere-submit": "הצגה", "autoblockid": "חסימה אוטומטית #$1", "block": "חסימת משתמש", - "unblock": "שחרור משתמש", + "unblock": "שחרור חסימה של משתמש", "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.", @@ -2215,6 +2214,7 @@ "ipb-unblock": "הסרת חסימה של שם משתמש או כתובת IP", "ipb-blocklist": "הצגת החסימות הנוכחיות", "ipb-blocklist-contribs": "התרומות של {{GENDER:$1|$1}}", + "ipb-blocklist-duration-left": "נותרו $1", "unblockip": "שחרור חסימה", "unblockiptext": "השתמשו בטופס שלהלן כדי להחזיר את הרשאות הכתיבה למשתמש או כתובת IP חסומים.", "ipusubmit": "שחרור חסימה", @@ -2259,7 +2259,7 @@ "blocklogentry": "חסם את [[$1]] למשך $2 $3", "reblock-logentry": "שינה את הגדרות החסימה של [[$1]] עם זמן פקיעה של $2 $3", "blocklogtext": "זהו יומן פעולות החסימה והשחרור של משתמשים.\nכתובות IP שנחסמו אוטומטית אינן מופיעות.\nראו גם את [[Special:BlockList|רשימת החסומים]] לרשימה של החרמות וחסימות פעילות כעת.", - "unblocklogentry": "שחרר את $1", + "unblocklogentry": "שחרר את החסימה של $1", "block-log-flags-anononly": "משתמשים אנונימיים בלבד", "block-log-flags-nocreate": "יצירת חשבונות נחסמה", "block-log-flags-noautoblock": "חסימה אוטומטית מבוטלת", @@ -2275,7 +2275,7 @@ "ipb_already_blocked": "המשתמש \"$1\" כבר נחסם.", "ipb-needreblock": "$1 כבר נחסם. האם ברצונך לשנות את הגדרות החסימה?", "ipb-otherblocks-header": "{{PLURAL:$1|חסימה אחרת|חסימות אחרות}}", - "unblock-hideuser": "לא ניתן לשחרר משתמש זה, כיוון ששם המשתמש שלו הוסתר.", + "unblock-hideuser": "אין באפשרותך לשחרר את החסימה של המשתמש הזה, כיוון ששם המשתמש שלו הוסתר.", "ipb_cant_unblock": "שגיאה: חסימה מספר $1 לא נמצאה. ייתכן שהיא כבר שוחררה.", "ipb_blocked_as_range": "שגיאה: כתובת ה־IP $1 אינה חסומה ישירות ולכן לא ניתן לשחרר את חסימתה. עם זאת, היא חסומה כחלק מהטווח $2, שניתן לשחרר את חסימתו.", "ip_range_invalid": "טווח IP שגוי.", @@ -2291,7 +2291,7 @@ "lockdb": "נעילת בסיס נתונים", "unlockdb": "שחרור בסיס נתונים", "lockdbtext": "נעילת בסיס הנתונים תמנע ממשתמשים את האפשרות לערוך דפים, לשנות את העדפותיהם, לערוך את רשימות המעקב שלהם, ופעולות אחרות הדורשות ביצוע שינויים בבסיס הנתונים.\n\nאנא אשרו שזה מה שאתם מתכוונים לעשות, ושתשחררו את בסיס הנתונים מנעילה כאשר פעולת התחזוקה תסתיים.", - "unlockdbtext": "שחרור בסיס הנתונים מנעילה יחזיר למשתמשים את היכולת לערוך דפים, לשנות את העדפותיהם, לערוך את רשימות המעקב שלהם, ולבצע פעולות אחרות הדורשות ביצוע שינויים בבסיס הנתונים\nאנא אשרו שזה מה שבכוונתכם לעשות.", + "unlockdbtext": "שחרור בסיס הנתונים מנעילה יחזיר לכל המשתמשים את היכולת לערוך דפים, לשנות את העדפות המשתמש שלהם, לערוך את רשימות המעקב שלהם, ולבצע פעולות אחרות הדורשות ביצוע שינויים בבסיס הנתונים.\nאנא אשרו שזה מה אכן מה שברצונכם לעשות.", "lockconfirm": "כן, ברצוני לנעול את בסיס הנתונים.", "unlockconfirm": "כן, ברצוני לשחרר את בסיס הנתונים מנעילה.", "lockbtn": "נעילת בסיס הנתונים", @@ -2326,7 +2326,7 @@ "movepage-moved-redirect": "נוצרה הפניה.", "movepage-moved-noredirect": "יצירת ההפניה בוטלה.", "articleexists": "קיים כבר דף באותו שם, או שהשם שבחרת אינו תקין.\nנא לבחור שם אחר.", - "cantmove-titleprotected": "אינך מורשה להעביר את הדף לשם זה כיוון שהשם החדש מוגן מפני יצירה", + "cantmove-titleprotected": "אין לך הרשאה להעביר את הדף לכאן, כי השם החדש מוגן מפני יצירה.", "movetalk": "העברה גם של דף השיחה", "move-subpages": "העברת כל דפי המשנה (עד $1)", "move-talk-subpages": "העברת כל דפי המשנה של דף השיחה (עד $1)", @@ -2421,7 +2421,7 @@ "import-comment": "הערה:", "importtext": "נא לייצא את הקובץ מאתר המקור באמצעות ב[[Special:Export|כלי הייצוא]].\nשמרו אותו למחשב שלכם והעלו אותו לכאן.", "importstart": "מייבא דפים…", - "import-revision-count": "{{PLURAL:$1|גרסה אחת|$1 גרסאות}}", + "import-revision-count": "‏{{PLURAL:$1|גרסה אחת|$1 גרסאות}}", "importnopages": "אין דפים לייבוא.", "imported-log-entries": "{{PLURAL:$1|יובאה פעולת יומן אחת|יובאו $1 פעולות יומן}}.", "importfailed": "הייבוא נכשל: $1", @@ -2456,11 +2456,7 @@ "import-logentry-upload-detail": "{{PLURAL:$1|גרסה אחת יובאה|$1 גרסאות יובאו}}", "import-logentry-interwiki-detail": "{{PLURAL:$1|גרסה אחת של הדף $2 יובאה|$1 גרסאות של הדף $2 יובאו}}", "javascripttest": "בדיקת JavaScript", - "javascripttest-pagetext-noframework": "דף זה שמור להרצת בדיקות JavaScript.", - "javascripttest-pagetext-unknownframework": "סביבת הבדיקות \"$1\" אינה ידועה.", "javascripttest-pagetext-unknownaction": "הפעולה \"$1\" אינה ידועה.", - "javascripttest-pagetext-frameworks": "נא לבחור אחת מסביבות הבדיקות הבאות: $1", - "javascripttest-pagetext-skins": "בחירת עיצוב שאיתו יורצו הבדיקות:", "javascripttest-qunit-intro": "ראו את [$1 תיעוד הבדיקות] באתר mediawiki.org.", "tooltip-pt-userpage": "דף {{GENDER:|המשתמש|המשתמשת}} שלך", "tooltip-pt-anonuserpage": "דף המשתמש של משתמש אנונימי זה", @@ -2470,9 +2466,9 @@ "tooltip-pt-watchlist": "רשימת הדפים שאתם עוקבים אחרי השינויים בהם", "tooltip-pt-mycontris": "רשימת התרומות שלך", "tooltip-pt-anoncontribs": "רשימת העריכות שנעשו מכתובת ה־IP הזאת", - "tooltip-pt-login": "מומלץ להירשם, אך אין חובה לעשות כן", + "tooltip-pt-login": "מומלץ להיכנס לחשבון; עם זאת, אין חובה לעשות זאת", "tooltip-pt-logout": "יציאה מהחשבון", - "tooltip-pt-createaccount": "מומלץ ליצור חשבון ולהיכנס אליו; עם זאת, זו אינה חובה", + "tooltip-pt-createaccount": "מומלץ ליצור חשבון ולהיכנס אליו; עם זאת, אין חובה לעשות זאת", "tooltip-ca-talk": "שיחה על דף זה", "tooltip-ca-edit": "עריכת דף זה באמצעות קוד ויקי", "tooltip-ca-addsection": "הוספת פסקה חדשה", @@ -2504,7 +2500,7 @@ "tooltip-t-emailuser": "שליחת דואר אלקטרוני {{GENDER:$1|למשתמש זה|למשתמשת זו}}", "tooltip-t-info": "מידע נוסף על דף זה", "tooltip-t-upload": "העלאת קבצים", - "tooltip-t-specialpages": "רשימת כל הדפים המיוחדים", + "tooltip-t-specialpages": "רשימה של כל הדפים המיוחדים", "tooltip-t-print": "גרסה להדפסה של דף זה", "tooltip-t-permalink": "קישור קבוע לגרסה זו של הדף", "tooltip-ca-nstab-main": "צפייה בדף התוכן", @@ -2519,7 +2515,7 @@ "tooltip-ca-nstab-category": "צפייה בדף הקטגוריה", "tooltip-minoredit": "סימון עריכה זו כמשנית", "tooltip-save": "שמירת השינויים שלך", - "tooltip-preview": "תצוגה מקדימה, אנא השתמשו באפשרות זו לפני השמירה!", + "tooltip-preview": "תצוגה מקדימה של השינויים שלך. נא להשתמש באפשרות זו לפני השמירה.", "tooltip-diff": "צפייה בשינויים שערכתם בטקסט", "tooltip-compareselectedversions": "צפייה בהשוואת שתי גרסאות של דף זה", "tooltip-watch": "הוספת דף זה לרשימת המעקב", @@ -2625,7 +2621,7 @@ "patrol-log-page": "יומן שינויים בדוקים", "patrol-log-header": "יומן זה מציג גרסאות שנבדקו.", "log-show-hide-patrol": "$1 יומן שינויים בדוקים", - "log-show-hide-tag": "$1 יומן התגיות", + "log-show-hide-tag": "$1 יומן תגיות", "deletedrevision": "מחק גרסה ישנה $1", "filedeleteerror-short": "שגיאה במחיקת הקובץ: $1", "filedeleteerror-long": "שגיאות שאירעו בעת מחיקת הקובץ:\n\n$1", @@ -2636,8 +2632,8 @@ "previousdiff": "→ מעבר להשוואת הגרסאות הקודמת", "nextdiff": "מעבר להשוואת הגרסאות הבאה ←", "mediawarning": "אזהרה: סוג קובץ זה עלול להכיל קוד זדוני.\nהרצת הקוד עלולה לסכן את המחשב שלך.", - "imagemaxsize": "גודל תמונה מרבי:
(לדפי תיאור קובץ)", - "thumbsize": "הקטנה לגודל של:", + "imagemaxsize": "גודל תמונה מרבי:
(בדפי תיאור של קבצים)", + "thumbsize": "גודל של תמונות ממוזערות:", "widthheightpage": "$1 × $2, {{PLURAL:$3|דף אחד|$3 דפים}}", "file-info": "גודל הקובץ: $1, סוג MIME‏: $2", "file-info-size": "$1 × $2 פיקסלים, גודל הקובץ: $3, סוג MIME‏: $4", @@ -2660,7 +2656,7 @@ "file-no-thumb-animation-gif": "'''לתשומת לבך: בשל מגבלות טכניות, תמונות ממוזערות של תמונות GIF בעלות רזולוציה גבוהה כמו זאת לא תהיינה מונפשות.'''", "newimages": "גלריית קבצים חדשים", "imagelisttext": "להלן רשימה של {{PLURAL:$1|קובץ אחד|$1 קבצים}}, ממוינים $2:", - "newimages-summary": "דף זה מציג את הקבצים האחרונים שהועלו", + "newimages-summary": "דף מיוחד זה מציג את הקבצים האחרונים שהועלו.", "newimages-legend": "מסנן", "newimages-label": "שם הקובץ (או חלק ממנו):", "newimages-showbots": "הצגת העלאות שבוצעו על־ידי בוטים", @@ -2732,8 +2728,8 @@ "exif-colorspace": "מרחב הצבע", "exif-componentsconfiguration": "משמעות כל רכיב", "exif-compressedbitsperpixel": "שיטת דחיסת התמונה", - "exif-pixelydimension": "רוחב התמונה הנכון", - "exif-pixelxdimension": "גובה התמונה הנכון", + "exif-pixelxdimension": "רוחב התמונה הנכון", + "exif-pixelydimension": "גובה התמונה הנכון", "exif-usercomment": "הערות המשתמש", "exif-relatedsoundfile": "קובץ שמע מקושר", "exif-datetimeoriginal": "התאריך והשעה של יצירת הקובץ", @@ -3073,6 +3069,10 @@ "confirmemail_body_set": "מישהו, כנראה אתם (מכתובת ה־IP הזאת: $1),\nהגדיר את כתובת הדוא\"ל של החשבון \"$2\" לכתובת הזאת ב{{grammar:תחילית|{{SITENAME}}}}.\n\nכדי לאמת שחשבון זה באמת שייך לכם ולהפעיל את שירותי הדוא\"ל באתר, אנא פתחו את הכתובת הבאה בדפדפן שלכם:\n\n$3\n\nאם החשבון *אינו* שייך לכם, השתמשו בקישור הבא כדי לבטל את אימות כתובת הדוא\"ל:\n\n$5\n\nקוד האימות יפקע ב־$4.", "confirmemail_invalidated": "אימות כתובת הדוא\"ל בוטל", "invalidateemail": "ביטול האימות של כתובת הדוא\"ל", + "notificationemail_subject_changed": "כתובת הדואר האלקטרוני הרשומה ב{{grammar:תחילית|{{SITENAME}}}} הוחלפה", + "notificationemail_subject_removed": "כתובת הדואר האלקטרוני הרשומה ב{{grammar:תחילית|{{SITENAME}}}} הוסרה", + "notificationemail_body_changed": "מישהו, כנראה אתם (מכתובת ה־IP הזאת: $1),\nשינה את כתובת הדואר האלקטרוני של החשבון \"$2\" ל־\"$3\" ב{{grammar:תחילית|{{SITENAME}}}}.\n\nאם לא אתם עשיתם זאת, אנא צרו קשר מיידי עם מפעיל מערכת באתר.", + "notificationemail_body_removed": "מישהו, כנראה אתם (מכתובת ה־IP הזאת: $1),\nהסיר את כתובת הדואר האלקטרוני של החשבון \"$2\" ב{{grammar:תחילית|{{SITENAME}}}}.\n\nאם לא אתם עשיתם זאת, אנא צרו קשר מיידי עם מפעיל מערכת באתר.", "scarytranscludedisabled": "[הכללת דפים בין אתרים מבוטלת]", "scarytranscludefailed": "[אחזור התבנית נכשל עבור $1]", "scarytranscludefailed-httpstatus": "[אחזור התבנית נכשל עבור $1‏: HTTP $2]", @@ -3136,9 +3136,9 @@ "watchlistedit-raw-done": "רשימת המעקב עודכנה.", "watchlistedit-raw-added": "{{PLURAL:$1|כותרת אחת נוספה|$1 כותרות נוספו}}:", "watchlistedit-raw-removed": "{{PLURAL:$1|כותרת אחת הוסרה|$1 כותרות הוסרו}}:", - "watchlistedit-clear-title": "רשימת המעקב נמחקה", + "watchlistedit-clear-title": "ניקוי רשימת המעקב", "watchlistedit-clear-legend": "ניקוי רשימת המעקב", - "watchlistedit-clear-explain": "כל הכותרות של הדפים שיוסרו מרשימת המעקב", + "watchlistedit-clear-explain": "כל הדפים יוסרו מרשימת המעקב שלך", "watchlistedit-clear-titles": "כותרות:", "watchlistedit-clear-submit": "ניקוי רשימת המעקב (לצמיתות!)", "watchlistedit-clear-done": "רשימת המעקב שלך נוקתה.", @@ -3251,7 +3251,6 @@ "version-libraries-description": "תיאור", "version-libraries-authors": "יוצרים", "redirect": "הפניה לפי שם קובץ, מספר משתמש, מספר דף, מספר גרסה או מזהה יומן", - "redirect-legend": "הפניה לקובץ או לדף", "redirect-summary": "דף מיוחד זה מפנה לקובץ (בהינתן שם הקובץ), לדף (בהינתן מספר גרסה או מספר דף), לדף משתמש (בהינתן מספר משתמש), או לרשומת יומן (בהינתן מזהה יומן). דוגמאות לשימוש: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/page/64308]], [[{{#Special:Redirect}}/revision/328429]], או [[{{#Special:Redirect}}/user/101]], או [[{{#Special:Redirect}}/logid/186]].", "redirect-submit": "מעבר", "redirect-lookup": "סוג:", @@ -3264,7 +3263,6 @@ "redirect-not-exists": "הערך לא נמצא", "fileduplicatesearch": "חיפוש קבצים כפולים", "fileduplicatesearch-summary": "חיפוש קבצים כפולים על בסיס ערכי הגיבוב שלהם.", - "fileduplicatesearch-legend": "חיפוש קבצים כפולים", "fileduplicatesearch-filename": "קובץ:", "fileduplicatesearch-submit": "חיפוש", "fileduplicatesearch-info": "$1 × $2 פיקסלים
גודל הקובץ: $3
סוג MIME‏: $4", @@ -3438,7 +3436,7 @@ "revdelete-uname-unhid": "הסתרת שם המשתמש בוטלה", "revdelete-restricted": "נוספו הגבלות למפעילי מערכת", "revdelete-unrestricted": "הוסרו הגבלות ממפעילי מערכת", - "logentry-block-block": "$1 {{GENDER:$2|חסם|חסמה}} את {{GENDER:$4|$3}} עם זמן פקיעה של $5 $6", + "logentry-block-block": "$1 {{GENDER:$2|חסם|חסמה}} את {{GENDER:$4|$3}} למשך $5 $6", "logentry-block-unblock": "$1 {{GENDER:$2|שחרר|שחררה}} את החסימה של {{GENDER:$4|$3}}", "logentry-block-reblock": "$1 {{GENDER:$2|שינה|שינתה}} את הגדרות החסימה של {{GENDER:$4|$3}} עם זמן פקיעה של $5 $6", "logentry-suppress-block": "$1 {{GENDER:$2|חסם|חסמה}} את {{GENDER:$4|$3}} עם זמן פקיעה של $5 $6", @@ -3446,9 +3444,9 @@ "logentry-import-upload": "$1 {{GENDER:$2|ייבא|ייבאה}} את $3 באמצעות העלאת קובץ", "logentry-import-upload-details": "$1 {{GENDER:$2|ייבא|ייבאה}} את $3 באמצעות העלאת קובץ ({{PLURAL:$4|גרסה אחת|$4 גרסאות}})", "logentry-import-interwiki": "$1 {{GENDER:$2|ייבא|ייבאה}} את $3 מאתר ויקי אחר", - "logentry-import-interwiki-details": "$1 {{GENDER:$2|ייבא|ייבאה}} את $3 מ־$5 ({{PLURAL:$4|גרסה אחת|$4 גרסאות}})", + "logentry-import-interwiki-details": "$1 {{GENDER:$2|ייבא|ייבאה}} את $3 מ־$5‏ ({{PLURAL:$4|גרסה אחת|$4 גרסאות}})‏", "logentry-merge-merge": "$1 {{GENDER:$2|מיזג|מיזגה}} את $3 לתוך $4 (גרסאות עד $5)", - "logentry-move-move": "$1 {{GENDER:$2|העביר|העבירה}} את הדף $3 ל{{GRAMMAR:תחילית|$4}}", + "logentry-move-move": "$1 {{GENDER:$2|העביר|העבירה}} את הדף $3 ל{{GRAMMAR:תחילית|$4}}‏", "logentry-move-move-noredirect": "$1 {{GENDER:$2|העביר|העבירה}} את הדף $3 ל{{GRAMMAR:תחילית|$4}} בלי להשאיר הפניה", "logentry-move-move_redir": "$1 {{GENDER:$2|העביר|העבירה}} את הדף $3 ל{{GRAMMAR:תחילית|$4}} תוך דריסת הפניה", "logentry-move-move_redir-noredirect": "$1 {{GENDER:$2|העביר|העבירה}} את הדף $3 ל{{GRAMMAR:תחילית|$4}} תוך דריסת הפניה ובלי להשאיר הפניה", @@ -3461,11 +3459,11 @@ "logentry-newusers-autocreate": "חשבון המשתמש $1 {{GENDER:$2|נוצר}} אוטומטית", "logentry-protect-move_prot": "$1 {{GENDER:$2|העביר|העבירה}} את הגדרות ההגנה מהדף $4 אל הדף $3", "logentry-protect-unprotect": "$1 {{GENDER:$2|הסיר|הסירה}} את ההגנה מהדף $3", - "logentry-protect-protect": "$1 {{GENDER:$2|הגן|הגנה}} על הדף $3 $4", - "logentry-protect-protect-cascade": "$1 {{GENDER:$2|הגן|הגנה}} על הדף $3 $4 [מדורג]", + "logentry-protect-protect": "$1 {{GENDER:$2|הפעיל|הפעילה}} הגנה על הדף $3 $4", + "logentry-protect-protect-cascade": "$1 {{GENDER:$2|הפעיל|הפעילה}} הגנה על הדף $3 $4 [מדורג]", "logentry-protect-modify": "$1 {{GENDER:$2|שינה|שינתה}} את רמת ההגנה של הדף $3 $4", "logentry-protect-modify-cascade": "$1 {{GENDER:$2|שינה|שינתה}} את רמת ההגנה של הדף $3 $4 [מדורג]", - "logentry-rights-rights": "$1 {{GENDER:$2|שינה|שינתה}} את ההרשאות של $3 מ{{GRAMMAR:תחילית|$4}} ל{{GRAMMAR:תחילית|$5}}‏", + "logentry-rights-rights": "$1 {{GENDER:$2|שינה|שינתה}} את ההרשאות של {{GENDER:$3|$3}} מ{{GRAMMAR:תחילית|$4}} ל{{GRAMMAR:תחילית|$5}}‏", "logentry-rights-rights-legacy": "$1 {{GENDER:$2|שינה|שינתה}} את ההרשאות של $3‏", "logentry-rights-autopromote": "$1 קודם אוטומטית מ{{GRAMMAR:תחילית|$4}} ל{{GRAMMAR:תחילית|$5}}", "logentry-upload-upload": "$1 {{GENDER:$2|העלה|העלתה}} את $3", @@ -3474,7 +3472,7 @@ "log-name-managetags": "יומן ניהול תגיות", "log-description-managetags": "דף זה כולל רשימה של פעולות ניהול הקשורות ל[[Special:Tags|תגיות]]. היומן כולל רק פעולות שבוצעו ידנית על־ידי מפעיל מערכת; ייתכן שתגיות ייווצרו או יימחקו על־ידי תוכנת הוויקי ללא הוספת ערך ליומן זה.", "logentry-managetags-create": "$1 {{GENDER:$2|יצר|יצרה}} את התגית \"$4\"", - "logentry-managetags-delete": "$1 {{GENDER:$2|מחק|מחקה}} את התגית \"4$\" (שהוסרה {{PLURAL:$5|מגרסה אחת/פריט יומן אחד|מ־$5 גרסאות ו/או פריטי יומן}})", + "logentry-managetags-delete": "$1 {{GENDER:$2|מחק|מחקה}} את התגית \"$4\" (שהוסרה {{PLURAL:$5|מגרסה אחת/פריט יומן אחד|מ־$5 גרסאות ו/או פריטי יומן}})", "logentry-managetags-activate": "$1 {{GENDER:$2|הפעיל|הפעילה}} את התגית \"$4\" לשימוש על־ידי משתמשים ובוטים", "logentry-managetags-deactivate": "$1 {{GENDER:$2|ביטל|ביטלה}} את הפעלת התגית \"$4\" לשימוש על־ידי משתמשים ובוטים", "log-name-tag": "יומן תגיות", @@ -3558,6 +3556,7 @@ "api-error-unknownerror": "שגיאה בלתי ידועה: \"$1\".", "api-error-uploaddisabled": "ההעלאה מבוטלת באתר הוויקי הזה.", "api-error-verification-error": "קובץ זה עשוי להיות פגום או בעל סיומת שגויה.", + "api-error-was-deleted": "קובץ בשם הזה הועלה מוקדם יותר ונמחק לאחר מכן.", "duration-seconds": "{{PLURAL:$1|שנייה|$1 שניות}}", "duration-minutes": "{{PLURAL:$1|דקה|$1 דקות}}", "duration-hours": "{{PLURAL:$1|שעה|שעתיים|$1 שעות}}", @@ -3648,6 +3647,7 @@ "special-characters-group-ipa": "אלפבית פונטי בינלאומי (IPA)", "special-characters-group-symbols": "סימנים", "special-characters-group-greek": "יווני", + "special-characters-group-greekextended": "יוונית מורחבת", "special-characters-group-cyrillic": "קירילי", "special-characters-group-arabic": "ערבי", "special-characters-group-arabicextended": "ערבי מורחב", @@ -3673,5 +3673,54 @@ "sessionprovider-generic": "התחברויות של $1", "sessionprovider-mediawiki-session-cookiesessionprovider": "התחברויות המבוססות על עוגיות", "sessionprovider-nocookies": "ייתכן שאפשרות השימוש בעוגיות כבויה. יש לוודא שאפשרות השימוש בעוגיות מופעלת ולהתחיל מחדש.", - "randomrootpage": "דף שורש אקראי" + "randomrootpage": "דף שורש אקראי", + "log-action-filter-block": "סוג החסימות:", + "log-action-filter-contentmodel": "סוג השינויים במודל תוכן:", + "log-action-filter-delete": "סוג המחיקות:", + "log-action-filter-import": "סוג פעולות הייבוא:", + "log-action-filter-managetags": "סוג פעולות ניהול התגיות:", + "log-action-filter-move": "סוג ההעברות:", + "log-action-filter-newusers": "סוג יצירות החשבון:", + "log-action-filter-patrol": "סוג השינויים הבדוקים:", + "log-action-filter-protect": "סוג ההגנות:", + "log-action-filter-rights": "סוג שינויי ההרשאה", + "log-action-filter-suppress": "סוג ההעלמות", + "log-action-filter-upload": "סוג ההעלאות:", + "log-action-filter-all": "הכול", + "log-action-filter-block-block": "חסימות", + "log-action-filter-block-reblock": "שינויי חסימה", + "log-action-filter-block-unblock": "שחרורי חסימה", + "log-action-filter-contentmodel-change": "שינויים במודל תוכן", + "log-action-filter-contentmodel-new": "יצירות דפים עם מודל תוכן לא־סטנדרטי", + "log-action-filter-delete-delete": "מחיקת דפים", + "log-action-filter-delete-restore": "שחזור דפים מחוקים", + "log-action-filter-delete-event": "מחיקת פעולות יומן", + "log-action-filter-delete-revision": "מחיקת גרסאות", + "log-action-filter-import-interwiki": "פעולות ייבוא מאתרי ויקי אחרים", + "log-action-filter-import-upload": "פעולות ייבוא על־ידי העלאת XML", + "log-action-filter-managetags-create": "יצירות של תגיות", + "log-action-filter-managetags-delete": "מחיקות של תגיות", + "log-action-filter-managetags-activate": "הפעלות של תגיות", + "log-action-filter-managetags-deactivate": "ביטול הפעלות של תגיות", + "log-action-filter-move-move": "העברות ללא דריסת הפניות", + "log-action-filter-move-move_redir": "העברות עם דריסת הפניות", + "log-action-filter-newusers-create": "יצירות על־ידי משתמשים אנונימיים", + "log-action-filter-newusers-create2": "יצירות על־ידי משתמשים רשומים", + "log-action-filter-newusers-autocreate": "יצירות אוטומטיות", + "log-action-filter-newusers-byemail": "יצירות עם סיסמה שנשלחה בדוא\"ל", + "log-action-filter-patrol-patrol": "סימוניים ידניים כבדוק", + "log-action-filter-patrol-autopatrol": "סימונים אוטומטיים כבדוק", + "log-action-filter-protect-protect": "הגנות", + "log-action-filter-protect-modify": "שינויי הגנה", + "log-action-filter-protect-unprotect": "הסרות הגנה", + "log-action-filter-protect-move_prot": "העברות של הגנה", + "log-action-filter-rights-rights": "שינויים ידניים", + "log-action-filter-rights-autopromote": "שינויים אוטומטיים", + "log-action-filter-suppress-event": "העלמות של פעולות יומן", + "log-action-filter-suppress-revision": "העלמות של גרסאות", + "log-action-filter-suppress-delete": "העלמות של דפים", + "log-action-filter-suppress-block": "העלמות של משתמשים באמצעות חסימה", + "log-action-filter-suppress-reblock": "העלמות של משתמשים באמצעות חסימה מחדש", + "log-action-filter-upload-upload": "העלאות חדשות", + "log-action-filter-upload-overwrite": "דריסת קבצים קיימים" } diff --git a/languages/i18n/hi.json b/languages/i18n/hi.json index ebe10c7025..b5f461d6f8 100644 --- a/languages/i18n/hi.json +++ b/languages/i18n/hi.json @@ -71,7 +71,9 @@ "Niharika29", "जनक राज भट्ट", "YmKavishwar", - "Upendradutt93" + "Upendradutt93", + "Nemo bis", + "Wassan.anmol" ] }, "tog-underline": "कड़ियाँ अधोरेखन:", @@ -106,6 +108,7 @@ "tog-watchlisthidebots": "मेरी ध्यानसूची से बॉट द्वारा किए परिवर्तन छिपाएँ", "tog-watchlisthideminor": "मेरी ध्यानसूची से छोटे परिवर्तन छिपाएँ", "tog-watchlisthideliu": "मेरी ध्यानसूची में सत्रारम्भित सदस्यों के सम्पादन न दिखाएँ", + "tog-watchlistreloadautomatically": "जब भी छननी बदलने पर ध्यानसूची को अपने आप ही लोड करें (जावास्क्रिप्ट अनिवार्य)", "tog-watchlisthideanons": "आई॰पी॰ सदस्यों द्वारा किए सम्पादनों को मेरी ध्यानसूची में न दिखायें", "tog-watchlisthidepatrolled": "परीक्षित सम्पादन मेरी ध्यानसूची में छुपाएँ", "tog-watchlisthidecategorization": "पृष्ठों का श्रेणीकरण छुपाएँ", @@ -138,7 +141,7 @@ "fri": "शुक्र", "sat": "शनि", "january": "जनवरी", - "february": "फ़रवरी", + "february": "फरवरी", "march": "मार्च", "april": "अप्रैल", "may_long": "मई", @@ -150,7 +153,7 @@ "november": "नवम्बर", "december": "दिसम्बर", "january-gen": "जनवरी", - "february-gen": "फ़रवरी", + "february-gen": "फरवरी", "march-gen": "मार्च", "april-gen": "अप्रैल", "may-gen": "मई", @@ -162,7 +165,7 @@ "november-gen": "नवम्बर", "december-gen": "दिसम्बर", "jan": "जन॰", - "feb": "फ़र॰", + "feb": "फर॰", "mar": "मार्च", "apr": "अप्रै॰", "may": "मई", @@ -174,7 +177,7 @@ "nov": "नव॰", "dec": "दिस॰", "january-date": "$1 जनवरी", - "february-date": "$1 फ़रवरी", + "february-date": "$1 फरवरी", "march-date": "$1 मार्च", "april-date": "$1 अप्रैल", "may-date": "$1 मई", @@ -211,7 +214,6 @@ "moredotdotdot": "और...", "morenotlisted": "यह सूची पूर्ण नहीं है।", "mypage": "पृष्ठ", - "anonuserpage": "अज्ञात सदस्य", "mytalk": "वार्ता", "anontalk": "वार्ता", "navigation": "भ्रमण", @@ -316,6 +318,9 @@ "versionrequired": "मीडीयाविकी का $1 अवतरण ज़रूरी है।", "versionrequiredtext": "यह पृष्ठ प्रयोग करने के लिये मीडियाविकी का $1 अवतरण ज़रूरी है।\nदेखें [[Special:Version|अवतरण पृष्ठ]]।", "ok": "ठीक है", + "pagetitle": "$1 - {{SITENAME}}", + "pagetitle-view-mainpage": "{{SITENAME}}", + "backlinksubtitle": "← $1", "retrievedfrom": "\"$1\" से लिया गया", "youhavenewmessages": "आपके लिए $1 हैं। ($2)", "youhavenewmessagesfromusers": "आपके लिये {{PLURAL:$3|एक अन्य सदस्य|$3 अन्य सदस्यों}} के $1 हैं। ($2)", @@ -374,10 +379,11 @@ "databaseerror-query": "अनुरोध: $1", "databaseerror-function": "फ़ंक्शन: $1", "databaseerror-error": "त्रुटि: $1", + "transaction-duration-limit-exceeded": "अत्यधिक बोझ को कम करने लिए यह कार्य रोक दिया गया है, क्योंकि यह लिखने की अवधि ($1) से बढ़ कर $2 {{PLURAL:$2|सेकंड|सेकंड}} को पार कर गया।\nIf यदि आप बहुत सारे वस्तु को एक साथ बदल रहे हैं, तो कृपया छोटे होते रूप में बदलें।", "laggedslavemode": "'''चेतावनी:''' यह पृष्ठ अद्यतनीत जानकारी-युक्त ना होने की आशंका है।", "readonly": "डाटाबेस लॉक किया हुआ है", "enterlockreason": "लॉक करने का कारण दीजिए, साथ ही लॉक खुलने के समय का लगभग आकलन दीजिये।", - "readonlytext": "शायद मेंटेनन्स के चलते डाटाबेस नये संपादन और अन्य बदलावों से लॉक किया गया है, जिसके बाद यह सामान्य स्थिति में आ जाना चाहिये।\n\nजिस प्रबंधक ने यह लॉक किया था उसने यह कारण दिया है: $1", + "readonlytext": "शायद मेंटेनन्स के चलते डाटाबेस नये संपादन और अन्य बदलावों से लॉक किया गया है, जिसके बाद यह सामान्य स्थिति में आ जाना चाहिये।\n\nजिस कार्यकारी प्रबंधक ने यह लॉक किया था उसने यह कारण दिया है: $1", "missing-article": "डाटाबेस में $2 के अंदर कहीं भी \"$1\" नहीं मिला।\n\nआम तौर पर हटाए जा चुके पृष्ठ की इतिहास कड़ी का प्रयोग करने पर ऐसा होता है।\n\nअगर ऐसा नहीं है, तो शायद आपने सॉफ़्टवेयर में त्रुटि खोज ली है।\nकृपया यू॰आर॰एल पते समेत किसी [[Special:ListUsers/sysop|प्रबंधक]] को इसका ब्यौरा दें।", "missingarticle-rev": "(अवतरण#: $1)", "missingarticle-diff": "(अंतर: $1, $2)", @@ -434,7 +440,7 @@ "mypreferencesprotected": "आपके पास अपनी वरीयताएँ बदलने की अनुमति नहीं है।", "ns-specialprotected": "विशेष पृष्ठ सम्पादित नहीं किये जा सकते।", "titleprotected": "सदस्य [[User:$1|$1]] ने इस शीर्षक का पृष्ठ बनाने से सुरक्षित किया हुआ है।\nइसके लिये निम्न कारण दिया गया है: $2", - "filereadonlyerror": "\"$1\" फ़ाइल को बदलने में असक्षम क्योंकि भण्डार \"$2\" इस समय 'केवल पाठन हेतु' (रीड ओनली) है।\n\nजिस प्रबंधक ने ये प्रबंध लगाया है उन्होंने निम्न विवरण प्रदान किया है: \"$3\"।", + "filereadonlyerror": "\"$1\" फ़ाइल को बदलने में असक्षम क्योंकि भण्डार \"$2\" इस समय 'केवल पाठन हेतु' (रीड ओनली) है।\n\nजिस कार्यकारी प्रबंधक ने ये प्रबंध लगाया है उन्होंने निम्न विवरण प्रदान किया है: \"$3\"।", "invalidtitle-knownnamespace": "\"$2\" नामस्थान और \"$3\" नाम वाला गलत शीर्षक", "invalidtitle-unknownnamespace": "अज्ञात नामस्थान संख्या $1 और नाम \"$2\" वाला गलत शीर्षक", "exception-nologin": "लॉग इन नहीं किया है", @@ -445,6 +451,7 @@ "virus-unknownscanner": "अज्ञात ऐंटीवायरस:", "logouttext": "'''अब आप लॉग आउट कर चुके हैं।'''\n\nध्यान दें कि जब तक आप अपनी ब्राउज़र कैशे खाली नहीं करते हैं, कुछ पृष्ठ अब भी ऐसे दिख सकते हैं जैसे कि आप अभी भी लॉगिन हैं।", "cannotlogoutnow-title": "अभी प्रस्थान नहीं हो रहा है", + "cannotlogoutnow-text": "$1 के उपयोग समय प्रस्थान नहीं किया जा सकता है।", "welcomeuser": "आपका स्वागत है, $1!", "welcomecreation-msg": "आपका खाता बना दिया गया है।\nअपनी [[Special:Preferences|{{SITENAME}} वरीयताएँ]] बदलना ना भूलियेगा।", "yourname": "सदस्यनाम:", @@ -470,8 +477,8 @@ "nav-login-createaccount": "सत्रारंभ / खाता खोलें", "userlogin": "सत्रारंभ / खाता खोलें", "userloginnocreate": "लॉग इन", - "logout": "सत्रांत", - "userlogout": "सत्रांत", + "logout": "प्रस्थान करें", + "userlogout": "प्रस्थान करें", "notloggedin": "लॉग इन नहीं किया है", "userlogin-noaccount": "खाता नहीं है?", "userlogin-joinproject": "{{SITENAME}} से जुड़ें", @@ -479,7 +486,7 @@ "nologinlink": "नया खाता बनाएँ", "createaccount": "खाता बनाएँ", "gotaccount": "पहले से आपका खाता है? '''$1''' करें।", - "gotaccountlink": "लॉग इन", + "gotaccountlink": "प्रवेश करें", "userlogin-resetlink": "अपनी प्रवेश जानकारी भूल गए हैं?", "userlogin-resetpassword-link": "अपना पासवर्ड भूल गए?", "userlogin-helplink2": "लॉग इन करने में सहायता", @@ -510,7 +517,7 @@ "nocookieslogin": "{{SITENAME}} पर लॉग इन करने के लिये कुकीज़ का प्रयोग होता है।\nआपने कुकीज़ अक्षम कर रखी हैं।\nकृपया अपने ब्राउज़र में कुकीज़ सक्षम करें और फिर पुनः कोशिश करें।", "nocookiesfornew": "स्रोत की पुष्टि ना हो पाने के कारण यह खाता निर्मित नहीं किया गया। \nसुनिश्चित करें कि आपने कुकीज़ सक्षम की हैं, पृष्ठ को पुनः लोड करें और पुनः प्रयास करें।", "noname": "आपने वैध सदस्यनाम नहीं दिया है।", - "loginsuccesstitle": "लॉग इन हो गया है", + "loginsuccesstitle": "प्रवेश हुआ", "loginsuccess": "'''आप {{SITENAME}} में \"$1\" सदस्यनाम से लॉग इन हो {{GENDER:$1|चुके|चुकी|चुके}} हैं।'''", "nosuchuser": "\"$1\" नाम का कोई सदस्य नहीं है।\nसदस्यनाम में लघु और दीर्घ अक्षरों से फ़र्क पड़ता है।\nअपनी वर्तनी जाँचें, या [[Special:UserLogin/signup|नया खाता खोलें]]।", "nosuchusershort": "\"$1\" नाम का कोई सदस्य नहीं है।\nकृपया अपनी दी हुई वर्तनी जाँचें।", @@ -520,6 +527,7 @@ "wrongpasswordempty": "कूटशब्द खाली है।\nपुनः यत्न करें।", "passwordtooshort": "आपका कूटशब्द कम से कम {{PLURAL:$1|1 अक्षर|$1 अक्षरों}} का होना चाहिये।", "passwordtoolong": "पासवर्ड {{PLURAL:$1|1 वर्ण|$1 वर्णों}} से ज़्यादा लम्बे नही हो सकते।", + "passwordtoopopular": "आम पासवर्ड आप नहीं चुन सकते हैं। कृपया अनोखा पासवर्ड चुनें।", "password-name-match": "आपका कूटशब्द आपके सदस्यनाम से भिन्न होना चाहिए।", "password-login-forbidden": "इस सदस्यनाम और कूटशब्द का उपयोग वर्जित है।", "mailmypassword": "कूटशब्द पुनःस्थापित करें", @@ -545,7 +553,7 @@ "createaccount-title": "{{SITENAME}} के लिये खाता बनाएँ", "createaccount-text": "आपके ई-मेल पते के लिये किसी ने {{SITENAME}} ($4) पर \"$2\" सदस्य नाम से \"$3\" कूटशब्द (पासवर्ड) सहित खाता खोला है।\nआपको लॉग इन कर के अपना कूटशब्द (पासवर्ड) तुरंत बदल लेना चाहिये।\n\nयदि यह खाता गलती से खोला गया है, तो आप इस मेसेज को नज़रंदाज़ कर सकते हैं।", "login-throttled": "आपने हाल ही में कई बार लॉग इन करने के प्रयास किये हैं।\nपुनः प्रयास करने से पहले कृपया $1 प्रतीक्षा करें।", - "login-abort-generic": "आपका सत्रारम्भ असफल रहा - निष्फलित", + "login-abort-generic": "आपका प्रवेश असफल हुआ - रोका गया", "login-migrated-generic": "आपका खाता माइग्रेट हो गया है और आपका सदस्यनाम इस विकी पर अब मौजूद नहीं है।", "loginlanguagelabel": "भाषा: $1", "suspicious-userlogout": "अपका लॉग आउट करने का अनुरोध अस्वीकृत कर दिया गया है क्योंकि ऐसा प्रतीत होता है कि यह किसी खराब ब्राउज़र या कैश करने वाली प्रॉक्सी द्वारा भेजा गया था।", @@ -568,7 +576,9 @@ "changepassword-success": "आपका कूटशब्द बदल दिया गया है!", "changepassword-throttled": "आपने हाल ही में कई बार लॉग इन करने के प्रयास किये हैं।\nपुनः प्रयास करने से पहले कृपया $1 प्रतीक्षा करें।", "botpasswords": "बॉट पासवर्ड", + "botpasswords-summary": "बॉट पासवर्ड सदस्य खाते को एपीआई के द्वारा बिना मुख्य खाते के जानकारी के उपयोग करने देता है। बॉट पासवर्ड का उपयोग कर के प्रवेश करने पर यदि पाबंदी होने पर सदस्य अधिकार उपलब्ध रहेगा।\n\nयदि आपको इस बारे में कुछ नहीं पता तो इसका उपयोग न करें। कोई भी आपसे इसे निर्मित करने के लिए नहीं पूछेगा।", "botpasswords-disabled": "बॉट पासवर्ड अभी निष्क्रिय है।", + "botpasswords-no-central-id": "बॉट पासवर्ड का उपयोग करने के लिए आपको मुख्य खाते से प्रवेश करना होगा।", "botpasswords-existing": "वर्तमान बॉट पासवर्ड", "botpasswords-createnew": "बॉट के लिए नया पासवर्ड बनाएँ", "botpasswords-editexisting": "बॉट के वर्तमान पासवर्ड को बदलें", @@ -578,18 +588,29 @@ "botpasswords-label-cancel": "रद्द करें", "botpasswords-label-delete": "हटाएँ", "botpasswords-label-resetpassword": "पासवर्ड पुनः तय करें", + "botpasswords-label-grants": "अनुदान आवेदन:", + "botpasswords-help-grants": "हर अनुदान जो सदस्य अधिकार में पहले से आता है, उसे अधिकार तक पहुँच देता है। देखें : [[Special:ListGrants|अनुदान सारणी]]", + "botpasswords-label-restrictions": "उपयोग मनाही:", + "botpasswords-label-grants-column": "प्रदान किया", + "botpasswords-bad-appid": "बॉट नाम \"$1\" मान्य नहीं है।", + "botpasswords-insert-failed": "बॉट नाम \"$1\" को जोड़ने में विफल हुआ। क्या यह पहले से है?", + "botpasswords-update-failed": "बॉट नाम \"$1\" को अद्यतन करने में विफल हुआ। क्या ये हट गया?", "botpasswords-created-title": "बॉट पासवर्ड निर्मित हुआ", - "botpasswords-created-body": "बॉट पासवर्ड \"$1\" सफलतापूर्वक निर्मित हुआ।", + "botpasswords-created-body": "सदस्य \"$2\" के बॉट नाम \"$1\" के लिए पासवर्ड निर्मित हुआ।", "botpasswords-updated-title": "बॉट पासवर्ड अद्यतन हुआ", - "botpasswords-updated-body": "बॉट पासवर्ड \"$1\" सफलतापूर्वक अद्यतन हुआ।", + "botpasswords-updated-body": "सदस्य \"$2\" के बॉट नाम \"$1\" का पासवर्ड सफलतापूर्वक अद्यतन हुआ।", "botpasswords-deleted-title": "बॉट पासवर्ड हट गया", - "botpasswords-deleted-body": "बॉट पासवर्ड \"$1\" हट गया।", + "botpasswords-deleted-body": "सदस्य \"$2\" के बॉट नाम \"$1\" का पासवर्ड हट गया।", + "botpasswords-newpassword": "आपका नया पासवर्ड आपके प्रवेश $1 के साथ $2 है। भविष्य में उपयोग करने हेतु इसे याद रखें", + "botpasswords-no-provider": "BotPasswordsSessionProvider उपलब्ध नहीं है।", + "botpasswords-restriction-failed": "इस प्रवेश में बॉट पासवर्ड रुकावट डाल रहा है।", + "botpasswords-invalid-name": "जो सदस्य नाम आप बता रहे हो, उसमें बॉट पासवर्ड अलग करने वाला (\"$1\") नहीं है।", "botpasswords-not-exist": "सदस्य \"$1\" के आप बॉट पासवर्ड नहीं है, जिसका नाम \"$2\" है।", "resetpass_forbidden": "कूटशब्द बदले नहीं जा सकते", "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-password": "अस्थायी कूटशब्द:", @@ -611,7 +632,7 @@ "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-emailsentemail": "यदि आपका यह ईमेल आपके खाते के साथ जोड़ा गया है तो पासवर्ड बदलने का ईमेल इसमें भेज दिया गया है।", "passwordreset-emailsentusername": "यदि कोई ईमेल इस खाते से जुड़ी है तो पासवर्ड आपके ईमेल में भेज दिया जाएगा।", "passwordreset-emailsent-capture": "नीचे दिखाया गया कूटशब्द रीसेट ई-मेल भेज दिया गया है।", "passwordreset-emailerror-capture": "नीचे दृष्टित कूटशब्द रीसेट ई-मेल उत्पन्न किया गया था, परंतु उसे {{GENDER:$2|सदस्य}} को भेजना असफल रहा।\nत्रुटि: $1", @@ -636,9 +657,9 @@ "resettokens-done": "टोकन रीसेट कर दिए गए।", "resettokens-resetbutton": "चुने हुए टोकन रीसेट करें", "bold_sample": "मोटा पाठ", - "bold_tip": "बोल्ड पाठ", + "bold_tip": "गहरा पाठ", "italic_sample": "तिरछा पाठ", - "italic_tip": "इटैलिक पाठ", + "italic_tip": "तिरछा पाठ", "link_sample": "कड़ी शीर्षक", "link_tip": "आंतरिक कड़ी", "extlink_sample": "http://www.example.com कड़ी शीर्षक", @@ -706,8 +727,8 @@ "previewnote": "'''याद रखें, यह केवल एक झलक है।'''\nआपके बदलाव अभी तक संजोये नहीं गए हैं!", "continue-editing": "संपादन क्षेत्र को जाएँ", "previewconflict": "यह झलक ऊपरी पाठ सम्पादन क्षेत्र में हुए बदलाव दिखाती है, और यदि आप अभी संजोते हैं तो यही पाठ संजोया जाएगा।", - "session_fail_preview": "'''क्षमा करें! सेशन डाटा के नष्ट होने के कारण आपके बदलाव संजोये नहीं जा सके।'''\nकृपया पुन: यत्न करें।\nअगर इसके बाद भी ऐसा ही होता है तो कृपया [[Special:UserLogout|लॉग आउट]] कर के पुनः लॉग इन करें।", - "session_fail_preview_html": "'''क्षमा करें! सेशन डाटा के नष्ट होने के कारण आपके बदलाव संजोये नहीं जा सके।'''\n\n''चूँकि {{SITENAME}} पर raw HTML सक्षम है, जावास्क्रिप्ट हमलों से बचाव के लिये झलक नहीं दिखाई गई है।''\n\n'''अगर यह आपका वैध संपादन यत्न था, तो कृपया पुनः यत्न करें।'''\nअगर इसके बाद भी ऐसा ही होता है तो कृपया [[Special:UserLogout|लॉग आउट]] कर के पुनः लॉग इन करें।", + "session_fail_preview": "'''क्षमा करें! सेशन डाटा के नष्ट होने के कारण आपके बदलाव संजोये नहीं जा सके।'''\nकृपया पुन: यत्न करें। अगर इसके बाद भी ऐसा ही होता है तो कृपया [[Special:UserLogout|लॉग आउट]] कर के पुनः लॉग इन करें।", + "session_fail_preview_html": "क्षमा करें! सेशन डाटा के नष्ट होने के कारण आपके बदलाव संजोये नहीं जा सके।\n\nचूँकि {{SITENAME}} पर raw HTML सक्षम है, जावास्क्रिप्ट हमलों से बचाव के लिये झलक नहीं दिखाई गई है।\n\nअगर यह आपका वैध संपादन यत्न था, तो कृपया पुनः यत्न करें।\nअगर इसके बाद भी ऐसा ही होता है तो कृपया [[Special:UserLogout|लॉग आउट]] कर के पुनः लॉग इन करें तथा जांचिए यदि आपका ब्राउज़र इस साइट से कुकीज़ की अनुमति देता है।", "token_suffix_mismatch": "'''आपके द्वारा किये गये बदलाव रद्द कर दिये गये हैं क्योंकि आपके क्लायंट ने आपके संपादन टोकन में दिये हुए विरामचिन्हों में बदलाव किये हैं।'''\nलेख के पाठ में खराबी ना आये इसलिये आपके बदलाव रद्द कर दिये गये हैं।\nऐसा तब भी हो सकता है यदि आप कोई खराब वेब-आधारित अनामक प्रौक्सी प्रयोग कर रहे हों।", "edit_form_incomplete": "'''सम्पादन फ़ॉर्म के कुछ भाग सर्वर तक नहीं पहुँच पाए; जाँच लें कि आपके द्वारा किये बदलाव अक्षुण्ण हैं, और सहेजने का पुनः यत्न करें।'''", "editing": "$1 सम्पादन", @@ -725,7 +746,7 @@ "copyrightwarning2": "{{SITENAME}} पर किया कोई भी योगदान अन्य सदस्यों द्वारा बदला जा सकता है और हटाया भी जा सकता है।\nअगर आपको अपने लिखे हुए पाठ में संपादन होना नामंजूर है तो यहाँ पर न लिखें।
\nआप हमें यह भी वचन देतें हैं कि यह आपने स्वयं लिखा है अथवा सार्वजनिक क्षेत्र या किसी समान मुक्त स्रोत से प्रतिलिपित किया है (अधिक जानकारी के लिये $1 देखें)।\n'''कॉपीराइट सुरक्षित कार्यों को बिना अनुमति के यहाँ न डालें!'''", "editpage-cannot-use-custom-model": "इस पृष्ठ का मुख्य सामग्री परिवर्तित नहीं हुआ।", "longpageerror": "'''त्रुटि: आपका दिया हुआ पाठ {{PLURAL:|$1 किलोबाइट|$1 किलोबाइट}} लंबा है, जो {{PLURAL:|$2 किलोबाइट|$2 किलोबाइट}} की सीमा से बाहर है।\nइसे संजोया नहीं जा सकता।'''", - "readonlywarning": "'''सावधान: डाटाबेस को रख-रखाव के लिये बंद कर दिया गया है, इसलिये अभी आपके बदलाव संजोए नहीं जा सकते।\nअगर आप चाहें तो इस सामग्री को बाद के लिए कॉपी-पेस्ट कर के किसी टेक्स्ट फ़ाइल में रख सकते हैं।'''\n\nबंद करने वाले प्रबंधक ने बंद करने का यह कारण दिया है: $1", + "readonlywarning": "सावधान: डाटाबेस को रख-रखाव के लिये बंद कर दिया गया है, इसलिये अभी आपके बदलाव संजोए नहीं जा सकते।\nअगर आप चाहें तो इस सामग्री को बाद के लिए कॉपी-पेस्ट कर के किसी टेक्स्ट फ़ाइल में रख सकते हैं।\n\nबंद करने वाले कार्यकारी प्रबंधक ने बंद करने का यह कारण दिया है: $1", "protectedpagewarning": "'''चेतावनी: इस पृष्ठ को सुरक्षित कर दिया गया है और इसे केवल प्रबंधक ही सम्पादित कर सकते हैं।'''\nनवीनतम लॉग प्रविष्टि संदर्भ के लिये नीचे दी है:", "semiprotectedpagewarning": "'''सूचना:''' यह पृष्ठ सुरक्षित कर दिया गया है और इसे केवल पंजीकृत सदस्य ही सम्पादित कर सकते हैं।\nनवीनतम लॉग प्रविष्टि संदर्भ के लिये नीचे दी है:", "cascadeprotectedwarning": "'''सावधान:''' यह पृष्ठ निम्नलिखित सुरक्षा-सीढ़ी {{PLURAL:$1|पृष्ठ से|पन्नों से}} जुड़ा हुआ होने के कारण सुरक्षित है, और केवल प्रबंधक ही इसमें बदलाव कर सकते हैं:", @@ -744,7 +765,7 @@ "permissionserrors": "अधिकार त्रुटि", "permissionserrorstext": "निम्नलिखित {{PLURAL:$1|कारण|कारणों}} से आपको ऐसा करने की अनुमति नहीं हैं:", "permissionserrorstext-withaction": "आपको $2 की अनुमति नहीं हैं, निम्नलिखित {{PLURAL:$1|कारण|कारणों}} की वजह से:", - "contentmodelediterror": "आप इस पृष्ठ का इतिहास में सम्पादन नहीं कर सकते हैं क्योंकि इसका सामग्री $1, और वर्तमान सामग्री $2 है।", + "contentmodelediterror": "आप इस पृष्ठ का इतिहास में सम्पादन नहीं कर सकते हैं क्योंकि इसका सामग्री $1, जो की वर्तमान सामग्री से $2 अलग है।", "recreate-moveddeleted-warn": "'''चेतावनी: आप एक पहले हटाए गए पृष्ठ को पुनर्निर्मित कर रहे हैं।'''\n\nआप को विचार करना चाहिये कि क्या इस पृष्ठ का संपादन जारी रखना उचित होगा।\nइस पृष्ट के हटाने व स्थानांतरण का लॉग सुविधा के लिये उपलब्ध है:", "moveddeleted-notice": "यह पृष्ठ हटाया जा चुका है।\nपृष्ठ के हटाने और स्थानांतरण का लॉग संदर्भ के लिए नीचे दिया गया है।", "moveddeleted-notice-recent": "क्षमा करें, यह पृष्ठ कुछ ही समय पहले हटाया गया है। (24 घण्टों के भीतर)\nइसके हटाये और स्थानांतरित करने का लोग नीचे दिया हुआ है।", @@ -764,10 +785,11 @@ "editwarning-warning": "इस पृष्ठ को छोड़ने पर आपके द्वारा किये गए कोई भी बदलाव गायब हो जाएँगे।\nयदि आपने लॉग इन किया हुआ है तो आप इस सूचना का दिखना अपनी वरीयताओं के \"{{int:prefs-editing}}\" भाग में बंद कर सकते हैं।", "editpage-notsupportedcontentformat-title": "सामग्री स्वरूप समर्थित नहीं है", "editpage-notsupportedcontentformat-text": "$1 सामग्री स्वरूप $2 सामग्री मॉडल द्वारा समर्थित नहीं है।", - "content-model-wikitext": "विकिटेक्स्ट", + "content-model-wikitext": "विकिपाठ्य", "content-model-text": "सामान्य पाठ", "content-model-javascript": "जावास्क्रिप्ट", "content-model-css": "सी॰एस॰एस", + "content-model-json": "जेसन", "content-json-empty-object": "रिक्त ऑब्जेक्ट", "content-json-empty-array": "रिक्त ऐरे", "duplicate-args-warning": "चेतावनी: [[:$1]] प्राचल \"$3\" के लिए [[:$2]] को एक से अधिक बार काम में ले रहा है। केवल अन्त में दिया गया मान ही काम में लिया जायेगा।", @@ -873,9 +895,9 @@ "revdelete-unsuppress": "पुनर्स्थापित अवतरणों पर से प्रतिबन्ध हटाएँ", "revdelete-log": "कारण:", "revdelete-submit": "चयनित {{PLURAL:$1|अवतरण|अवतरणों}} पर लागू करें", - "revdelete-success": "'''अवतरण दृश्यता सफलतापूर्वक अद्यातानीत की गई।'''", + "revdelete-success": "अवतरण दृश्यता सफलतापूर्वक अद्यातानीत की गई।", "revdelete-failure": "'''अवतरण दृश्यता अद्यातानीत नहीं की जा सकी:'''\n$1", - "logdelete-success": "'''लॉग दृष्यता बदली गई।'''", + "logdelete-success": "लॉग दृष्यता बदली गई।", "logdelete-failure": "'''लॉग दृश्यता का जमाव नहीं किया जा सका:'''\n$1", "revdel-restore": "दृश्यता बदलें", "pagehist": "पृष्ठ इतिहास", @@ -906,8 +928,13 @@ "mergehistory-empty": "कोई भी अवतरण एकत्रित नहीं कर सकते।", "mergehistory-done": "$1 {{PLURAL:$3|का|के}} $3 अवतरण [[:$2]] में एकत्रित कर {{PLURAL:$3|दिया गया है|दिये गए हैं}}।", "mergehistory-fail": "इतिहास एकत्रित नहीं कर सकते, कृपया पृष्ठ और समय की पुनः जाँच करें।", + "mergehistory-fail-bad-timestamp": "समय संख्या अमान्य", "mergehistory-fail-invalid-source": "अमान्य स्रोत पृष्ठ", "mergehistory-fail-invalid-dest": "अमान्य लक्ष्य पृष्ठ", + "mergehistory-fail-no-change": "इतिहास विलय किसी भी अवतरण को विलय नहीं कर पाया। कृपया लेख और समय को दोबारा देखें।", + "mergehistory-fail-permission": "इतिहास विलय हेतु अधिकार कम है।", + "mergehistory-fail-self-merge": "स्रोत और भेजने वाला पृष्ठ समान है।", + "mergehistory-fail-timestamps-overlap": "स्रोत अवतरण भेजने वाले अवतरण के बाद आ रहा है।", "mergehistory-fail-toobig": "इतिहास विलय करना संभव नहीं है क्योंकि अवतरण सीमा $1 से अधिक {{PLURAL:$1|अवतरण|अवतरणों}} को स्थानांतरित करना होगा।", "mergehistory-no-source": "स्रोत पृष्ठ $1 मौजूद नहीं है।", "mergehistory-no-destination": "लक्ष्य पृष्ठ $1 मौजूद नहीं है।", @@ -1030,7 +1057,7 @@ "savedrights": "प्रयोक्ता {{GENDER:$1|$1}} का सदस्य अधिकार सहेजा गया।", "timezonelegend": "समयमंडल:", "localtime": "स्थानीय समय:", - "timezoneuseserverdefault": "विकी डिफ़ॉल्ट का उपयोग करें ($1)", + "timezoneuseserverdefault": "विकि मूल का उपयोग करें ($1)", "timezoneuseoffset": "अन्य (समयांतर निर्दिष्ट करें)", "servertime": "सर्वर का समय:", "guesstimezone": "ब्राउज़र से भरें", @@ -1098,10 +1125,10 @@ "userrights": "सदस्य अधिकार व्यवस्थापन", "userrights-lookup-user": "सदस्य समूहों का व्यवस्थापन करें", "userrights-user-editname": "सदस्यनाम दें:", - "editusergroup": "सदस्य समूहों का संपादन करें", + "editusergroup": "{{GENDER:$1|सदस्य}} समूहों का संपादन करें", "editinguser": "सदस्य '''[[User:$1|$1]]''' $2 के अधिकार बदलें\n{{GENDER:$1|सदस्य}} के सदस्य अधिकार बदले जा रहे हैं [[User:$1|$1]] $2", "userrights-editusergroup": "सदस्य समूहों का संपादन करें", - "saveusergroups": "सदस्य समूह संजोएँ", + "saveusergroups": "{{GENDER:$1|सदस्य}} समूह सहेजें", "userrights-groupsmember": "निम्न {{PLURAL:$1|समूह|समूहों}} का सदस्य:", "userrights-groupsmember-auto": "निम्न {{PLURAL:$1|समूह|समूहों}} का अंतर्निहित सदस्य:", "userrights-groups-help": "आप इस सदस्य की समूह-सदस्यता बदल सकते हैं:\n* बक्से पर सही का निशान लगे होने का अर्थ है कि सदस्य उस समूह में है।\n* बक्से पर सही का निशान न लगे होने का अर्थ है कि सदस्य उस समूह में नहीं है।\n* एक * का अर्थ है कि एक बार जोड़ने के बाद वह समूह हटा नहीं सकते हैं, और हटाने के बाद जोड़ नहीं सकते हैं।", @@ -1120,25 +1147,26 @@ "group-bot": "बॉट", "group-sysop": "प्रबंधक", "group-bureaucrat": "प्रशासक", - "group-suppress": "ओवरसाईट्स", + "group-suppress": "छुपाने वाले", "group-all": "(सभी)", "group-user-member": "{{GENDER:$1|सदस्य}}", "group-autoconfirmed-member": "{{GENDER:$1|स्वतः स्थापित सदस्य}}", "group-bot-member": "{{GENDER:$1|बॉट}}", "group-sysop-member": "{{GENDER:$1|प्रबंधक}}", "group-bureaucrat-member": "{{GENDER:$1|प्रशासक}}", - "group-suppress-member": "{{GENDER:$1|ओवरसाईट}}", + "group-suppress-member": "{{GENDER:$1|छुपाने वाले}}", "grouppage-user": "{{ns:project}}:सदस्य", "grouppage-autoconfirmed": "{{ns:project}}:स्वतः स्थापित सदस्य", "grouppage-bot": "{{ns:project}}:बॉट", "grouppage-sysop": "{{ns:project}}:प्रबंधक", "grouppage-bureaucrat": "{{ns:project}}:प्रशासक", - "grouppage-suppress": "{{ns:project}}:ओवरसाईट", + "grouppage-suppress": "{{ns:project}}:छुपाना", "right-read": "पृष्ठ पढ़ें", "right-edit": "पृष्ठ सम्पादित करें", "right-createpage": "पृष्ठ बनाएँ (जो चर्चा पृष्ठ नहीं हैं)", "right-createtalk": "वार्ता पृष्ठ बनाएँ", "right-createaccount": "नये सदस्य खाते बनाएँ", + "right-autocreateaccount": "बाहरी खाते से स्वतः प्रवेश", "right-minoredit": "अपने बदलाव छोटे चिन्हित करें", "right-move": "पृष्ठ स्थानांतरित करें", "right-move-subpages": "पृष्ठ उपपृष्ठों सहित स्थानांतरीत करें", @@ -1207,14 +1235,33 @@ "right-managechangetags": "डेटाबेस से [[Special:Tags|चिप्पियाँ]] बनायें और हटायें", "right-applychangetags": "प्रयोग में लाइये [[Special:Tags|tags]] किसी के बदलाव के साथ।", "right-changetags": "जमा करो और हटाओ स्वतंत्र [[Special:Tags|टैग]] व्यक्तिगत अवतरणों और लॉग प्रविक्तियों पर", + "grant-generic": "\"$1\" अधिकार संग्रह", + "grant-group-page-interaction": "पृष्ठों से जुड़ें", + "grant-group-file-interaction": "मीडिया से जुड़ें", + "grant-group-watchlist-interaction": "ध्यानसूची से जुड़ें", "grant-group-email": "ई-मेल भेजें", + "grant-group-high-volume": "उच्च कार्य गतिविधि करें", + "grant-group-customization": "पसंद और तय", + "grant-group-administration": "प्रबंधकीय कार्य करें", + "grant-group-other": "अन्य गतिविधि", + "grant-blockusers": "प्रतिबंधित और अप्रतिबंधित करना", "grant-createaccount": "खाता बनाएँ", + "grant-createeditmovepage": "निर्माण, सम्पादन, और स्थानांतरण करना", + "grant-delete": "लेख, अवतरण और लॉग हटाना", + "grant-editinterface": "मीडियाविकि नामस्थान और सदस्य सीएसएस/जेएस को संपादित करना।", "grant-editmycssjs": "अपने सदस्य सीएसएस/जेएस को संपादित करें", "grant-editmyoptions": "अपने सदस्य पसंद को संपादित करें", "grant-editmywatchlist": "ध्यानसूची संपादित करें", "grant-editpage": "बने पृष्ठ संपादित करें", "grant-editprotected": "सुरक्षित पृष्ठ संपादित करें", + "grant-highvolume": "अत्यधिक तेजी से सम्पादन", + "grant-oversight": "सदस्य को छुपाना और अवतरण हटाना", + "grant-patrol": "पृष्ठों को जांचा हुआ चिन्हित करना", + "grant-protect": "पृष्ठों को सुरक्षित व असुरक्षित करना", + "grant-rollback": "पृष्ठ से सम्पादन वापस लेना", "grant-sendemail": "अन्य सदस्यों को ई-मेल भेजें", + "grant-uploadeditmovefile": "फ़ाइल अपलोड, बदलना, स्थानांतरण करना", + "grant-uploadfile": "नए फ़ाइल डालें", "grant-basic": "सामान्य अधिकार", "grant-viewdeleted": "हटाये गए फ़ाइल व पृष्ठ देखें", "grant-viewmywatchlist": "अपनी ध्यानसूची देखें", @@ -1251,7 +1298,7 @@ "action-protect": "इस पृष्ठ के सुरक्षा स्तर बदलने", "action-rollback": "किसी पृष्ठ का अंतिम सम्पादन करने वाले सदस्य के सम्पादन वापिस लेने", "action-import": "किसी और विकि से पृष्ठ आयात करने", - "action-importupload": "फ़ाइल अपलोड द्वारा यह पृष्ठ आयात करे", + "action-importupload": "फ़ाइल अपलोड द्वारा यह पृष्ठ आयात करें", "action-patrol": "अन्य सदस्यों के सम्पादन परीक्षित करने", "action-autopatrol": "अपने सम्पादन स्वचालित रूप से परीक्षित करने", "action-unwatchedpages": "ऐसे पृष्ठ जो किसी की ध्यानसूची में नहीं हैं की सूची देखने", @@ -1331,9 +1378,9 @@ "recentchangeslinked-page": "पृष्ठ नाम:", "recentchangeslinked-to": "इसके बदले में दिये हुए पृष्ठसे जुडे पन्नोंके बदलाव दर्शायें", "recentchanges-page-added-to-category": "[[:$1]] श्रेणी में जुड़ा", - "recentchanges-page-added-to-category-bundled": "[[:$1]] और {{PLURAL:$2|एक पृष्ठ|$2 पृष्ठ}} श्रेणी में जुड़ा", + "recentchanges-page-added-to-category-bundled": "[[:$1]] और [[Special:WhatLinksHere/$1|{{PLURAL:$2|एक पृष्ठ|$2 पृष्ठ}}]] श्रेणी में जुड़ा", "recentchanges-page-removed-from-category": "[[:$1]] श्रेणी से हटा", - "recentchanges-page-removed-from-category-bundled": "[[:$1]] और {{PLURAL:$2|एक पृष्ठ|$2 पृष्ठ}} श्रेणी से हटा", + "recentchanges-page-removed-from-category-bundled": "[[:$1]] और [[Special:WhatLinksHere/$1|{{PLURAL:$2|एक पृष्ठ|$2 पृष्ठ}}]] श्रेणी से हटा", "autochange-username": "मीडियाविकि स्वतः परिवर्तन", "upload": "फ़ाइल अपलोड करें", "uploadbtn": "फ़ाइल अपलोड करें", @@ -1406,6 +1453,7 @@ "uploaded-script-svg": "अपलोड की गयी एसवीजी फ़ाइल में स्क्रीप्ट अवयव \"$1\" पाया गया।", "uploaded-hostile-svg": "अपलोड की गयी एसवीजी फाइल के शैली अवयव में असुरक्षित सीएसएस पायी गयी।", "uploaded-event-handler-on-svg": "सेटिंग ईवेंट हैंडलर (आयोजन प्रबन्धनकर्ता वरियता) $1=\"$2\" एसवीजी फ़ाइल में अनुमत नहीं है।", + "uploaded-href-attribute-svg": "href केवल एसवीजी फ़ाइल हेतु ही http:// या https:// उपयोग करने देता है। <$1 $2=\"$3\">", "uploaded-href-unsafe-target-svg": "अपलोड की गयी फ़ाइल में असुरक्षित लक्ष्य <$1 $2=\"$3\"> पाये गए।", "uploaded-animate-svg": "चिप्पि \"animate\" पायी गई जिससे href परिवर्तित हो सकता है, अपलोड की गयी फ़ाइल में \"from\" विशेषता <$1 $2=\"$3\"> काम में ली जा रही है।", "uploaded-setting-event-handler-svg": "विकल्प आयोजन-संभालने वाला अवरोधित है, एसवीजी फ़ाइल में मिला <$1 $2=\"$3\"> है।", @@ -1439,6 +1487,7 @@ "upload-too-many-redirects": "इस यू॰आर॰एल में अत्यधिक पुनर्निर्देशन हैं", "upload-http-error": "एक एच॰टी॰टी॰पी त्रुटि आई: $1", "upload-copy-upload-invalid-domain": "कॉपी अपलोड इस डोमेन से उपलब्ध नहीं हैं।", + "upload-foreign-cant-upload": "यह विकि अन्य फ़ाइल संग्रह में अपलोड हेतु तय नहीं किया गया है।", "upload-dialog-title": "फ़ाइल डालें", "upload-dialog-button-cancel": "रद्द करें", "upload-dialog-button-done": "पूर्ण हुआ", @@ -1446,7 +1495,9 @@ "upload-dialog-button-upload": "डालें", "upload-form-label-infoform-title": "विवरण", "upload-form-label-infoform-name": "नाम", + "upload-form-label-infoform-name-tooltip": "एक अनोखा विवरण शीर्षक इस फ़ाइल हेतु डालें, जी इसे फ़ाइल के रूप में दिखाये। आप इसके लिए साधारण भाषा और रिक्त स्थान का उपयोग कर सकते हैं। फ़ाइल प्रारूप को न जोड़ें। \\", "upload-form-label-infoform-description": "विवरण", + "upload-form-label-infoform-description-tooltip": "छोटे रूप में बतायें इस के उलेखनीयता के बारे में। \n चित्र हेतु, जो मुख्य वस्तु नहीं दिखाया गया है आदि के स्थान।", "upload-form-label-usage-title": "उपयोग", "upload-form-label-usage-filename": "फ़ाइल का नाम", "foreign-structured-upload-form-label-own-work": "यह मेरा कार्य है", @@ -1479,7 +1530,7 @@ "backend-fail-read": "फ़ाइल $1 पढ़ी नहीं जा सकी।", "backend-fail-create": "फ़ाइल $1 लिखी नहीं जा सकी।", "backend-fail-maxsize": "फ़ाइल $1 लिखी नहीं जा सकी क्योंकि यह {{PLURAL:$2|$2 बाईट}} से बड़ी है।", - "backend-fail-readonly": "भंडारण बैकेंड \"$1\" इस समय केवल पढ़ा जा सकता है (रीड-ओन्ली है)। दिया गया कारण था: \"$2\"", + "backend-fail-readonly": "भंडारण बैकेंड \"$1\" इस समय केवल पढ़ा जा सकता है (रीड-ओन्ली है)। दिया गया कारण था: $2", "backend-fail-synced": "फ़ाइल \"$1\" आतंरिक भंडारण बैकेंड में असंगत स्थिति में है।", "backend-fail-connect": "\"$1\" भंडारण बैकेंड से सम्पर्क स्थापित नहीं किया जा सका।", "backend-fail-internal": "भंडारण बैकेंड \"$1\" में कोई अज्ञात त्रुटि उत्पन्न हुई।", @@ -1507,8 +1558,9 @@ "uploadstash-clear": "स्टैश की गई फ़ाइलें साफ़ करें", "uploadstash-nofiles": "आपके पास कोई स्टैश की हुई फ़ाइलें नहीं हैं।", "uploadstash-badtoken": "वह कार्य असफल रहा, सम्भवतः आपके सम्पादन प्रमाणपत्र की अवधि समाप्त हो गई है। पुनः प्रयास करें।", - "uploadstash-errclear": "फ़ाइलों को साफ़ करना असफल रहा।", + "uploadstash-errclear": "फ़ाइलों को साफ़ करना असफल रहा।", "uploadstash-refresh": "फ़ाइलों की सूची रिफ़्रेश करें", + "uploadstash-thumbnail": "छवि देखें", "invalid-chunk-offset": "अग्राह्य चंक ऑफ़सेट", "img-auth-accessdenied": "अनुमति नहीं है", "img-auth-nopathinfo": "PATH_INFO मौजूद नहीं है।\nआपके सर्वर में इस जानकारी को भेजने के लिए जमाव नहीं है।\nयह सी॰जी॰आई-आधारित हो सकता है और img_auth को स्वीकार नहीं करता है।\nhttps://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Image_Authorization देखें।", @@ -1561,7 +1613,7 @@ "filehist-deleteall": "सभी हटाएँ", "filehist-deleteone": "हटाएँ", "filehist-revert": "पूर्ववत करें", - "filehist-current": "सद्य", + "filehist-current": "वर्तमान", "filehist-datetime": "दिनांक/समय", "filehist-thumb": "अंगूठाकार प्रारूप", "filehist-thumbtext": "$1 के संस्करण का अंगूठाकार प्रारूप।", @@ -1587,12 +1639,13 @@ "uploadnewversion-linktext": "इस फ़ाइल का नया अवतरण अपलोड करें", "shared-repo-from": "$1 से", "shared-repo": "एक साझे भंडार", + "shared-repo-name-wikimediacommons": "विकिमीडिया कॉमन्स", "upload-disallowed-here": "आप इस फ़ाइल को अधिलेखित नहीं कर सकते।", "filerevert": "$1 पूर्ववत करें", "filerevert-legend": "फ़ाइल पूर्ववत करें", "filerevert-intro": "आप '''[[Media:$1|$1]]''' के [$4 $2 को $3 बजे के अवतरण] को पूर्ववत कर रहे हैं।", "filerevert-comment": "कारण:", - "filerevert-defaultcomment": "$1 को $2 बजे के अवतरण को पूर्ववत किया", + "filerevert-defaultcomment": "$2, $1 ($3) के अवतरण को पूर्ववत किया", "filerevert-submit": "पूर्ववत करें", "filerevert-success": "'''[[Media:$1|$1]]''' को [$4 $2 को $3 बजे के अवतरण] को पूर्ववत कर दिया गया है।", "filerevert-badversion": "दिये हुए समय से मेल खाने वाला इस फ़ाइल का पुराना अवतरण नहीं है।", @@ -1751,21 +1804,44 @@ "nopagetext": "आपके द्वारा लक्षित पृष्ठ मौजूद नहीं है।", "pager-newer-n": "{{PLURAL:$1|नया|नये}} $1", "pager-older-n": "{{PLURAL:$1|पुराना|पुराने}} $1", - "suppress": "ओवरसाइट", + "suppress": "छुपाना", "querypage-disabled": "प्रदर्शन कारणों से यह विशेष पृष्ठ अक्षम किया गया है।", - "apihelp": "ए पी आई सहाएता", + "apihelp": "एपीआई सहायता", "apihelp-no-such-module": "मॉड्यूल \"$1\" नहीं मिला", "apisandbox": "ए॰पी॰आइ प्रयोगस्थल", + "apisandbox-jsonly": "एपीआई प्रयोगपृष्ठ का उपयोग करने हेतु जावास्क्रिप्ट अनिवार्य है।", "apisandbox-api-disabled": "इस स्थल पर ए०पी०आई० सक्षम नहीं हैं।", - "apisandbox-intro": "याद रखिए कि, हालांकि यह प्रयोगपृष्ठ है, इस पृष्ठ पर किए गए आपके काम इस विकि में बदलाव ला सकते हैं।", + "apisandbox-intro": "इस पृष्ठ का उपयोग मीडियाविकि वेब एपीआई के लिए करें। इसके उपयप्ग हेतु देखें: [[mw:API:Main page|एपीआई प्रलेखन]] उदाहरण: [//www.mediawiki.org/wiki/API#A_simple_example मुख्यपृष्ठ के सामग्री हेतु]", + "apisandbox-fullscreen": "विस्तार करें", + "apisandbox-fullscreen-tooltip": "ब्राउज़र को पूरी तरह भरने हेतु विस्तार करें।", "apisandbox-unfullscreen": "पृष्ठ दिखाएँ", + "apisandbox-unfullscreen-tooltip": "प्रयोगपृष्ठ हिस्से को छोटा करें, जिससे मीडियाविकि के संचरण कड़ी उपलब्ध हो जाएगा।", "apisandbox-submit": "अनुरोध करें", "apisandbox-reset": "स्पष्ट", "apisandbox-retry": "दुबारा प्रयास करें", + "apisandbox-loading": "एपीआई मॉड्यूल के द्वारा जानकारी लोड कर रहा \"$1\"...", + "apisandbox-load-error": "एपीआई मॉड्यूल के जानकारी लोड करते समय त्रुटि हुई \"$1\": $2", + "apisandbox-no-parameters": "इस एपीआई मॉड्यूल का कोई प्राचल नहीं है।", + "apisandbox-helpurls": "सहायता कड़ी", "apisandbox-examples": "उदाहरण", + "apisandbox-dynamic-parameters": "अन्य प्राचल", + "apisandbox-dynamic-parameters-add-label": "प्राचल जोड़ें:", + "apisandbox-dynamic-parameters-add-placeholder": "प्राचल नाम", + "apisandbox-dynamic-error-exists": "प्राचल नाम \"$1\" पहले से मौजूद है।", + "apisandbox-deprecated-parameters": "प्राचल पुराना हो चुका है", + "apisandbox-fetch-token": "टोकन स्वतः भरें", + "apisandbox-submit-invalid-fields-title": "कुछ जगह अमान्य है", + "apisandbox-submit-invalid-fields-message": "कृपया चिन्हित जगह को ठीक कर दुबारा प्रयास करें।", "apisandbox-results": "परिणाम", + "apisandbox-sending-request": "एपीआई अनुरोध भेज रहा...", + "apisandbox-loading-results": "एपीआई परिणाम ले रहा...", + "apisandbox-results-error": "एपीआई के समय कोई त्रुटि हुई: $1", "apisandbox-request-url-label": "अनुरोध URL:", - "apisandbox-request-time": "अनुरोध समय: $1", + "apisandbox-request-time": "अनुरोध समय: {{PLURAL:$1|$1 मि}}", + "apisandbox-results-fixtoken": "टोकन सही करें और दोबारा भेजें।", + "apisandbox-results-fixtoken-fail": "टोकन \"$1\" डालने में विफल", + "apisandbox-alert-page": "इस पृष्ठ के जगह अमान्य है।", + "apisandbox-alert-field": "जगह में डाला गया जानकारी अमान्य है।", "booksources": "पुस्तकों के स्रोत", "booksources-search-legend": "पुस्तकों के स्रोत खोजें", "booksources-isbn": "आइ॰एस॰बी॰एन:", @@ -1773,7 +1849,7 @@ "booksources-text": "नीचे पुरानी और नई पुस्तकें बेचने वाली वेबसाइटों के एड्रेस हैं, जिसमें आपको आप द्वारा खोजी जाने वाली पुस्तक के बारे में अधिक जानकारी मिल सकती है:", "booksources-invalid-isbn": "यह आइ॰एस॰बी॰एन सही नहीं लग रहा है; मूल स्रोत से नकल करने में हुई त्रुटि के लिए जाँचें।", "specialloguserlabel": "कर्ता:", - "speciallogtitlelabel": "प्रयोजन (शीर्षक अथवा सदस्यनाम):", + "speciallogtitlelabel": "प्रयोजन (शीर्षक अथवा {{ns:सदस्यनाम}}:सदस्य नाम):", "log": "लॉग", "logeventslist-submit": "दिखाएँ", "all-logs-page": "सभी सार्वजनिक लॉग", @@ -1784,6 +1860,8 @@ "log-edit-tags": "चुने गए लॉग प्रविक्तियों एक सम्पादन टैग", "checkbox-select": "चुनें: $1", "checkbox-all": "सभी", + "checkbox-none": "कोई नहीं", + "checkbox-invert": "बदलें", "allpages": "सभी पृष्ठ", "nextpage": "अगला पृष्ठ ($1)", "prevpage": "पिछला पृष्ठ ($1)", @@ -1803,8 +1881,6 @@ "categories-submit": "दिखाएँ", "categoriespagetext": "निम्नोक्त {{PLURAL:$1|श्रेणी|श्रेणियों}} में पृष्ठ या मीडिया है।\nजिन श्रेणियों का [[Special:UnusedCategories|अप्रयुक्त श्रेणियाँ]] यहाँ नहीं दिखाई गई हैं।\n[[Special:WantedCategories|वांछित श्रेणियाँ]] भी देखें।", "categoriesfrom": "इस अक्षर से शुरू होने वाली श्रेणीयाँ दर्शायें:", - "special-categories-sort-count": "संख्यानुसार शक्रमांकित करें", - "special-categories-sort-abc": "वर्णानुक्रम के अनुसार दर्शायें", "deletedcontributions": "हटाए गए सदस्य योगदान", "deletedcontributions-title": "हटाए गए सदस्य योगदान", "sp-deletedcontributions-contribs": "योगदान", @@ -1845,6 +1921,9 @@ "listgrouprights-namespaceprotection-header": "नामस्थान की बंदिशें", "listgrouprights-namespaceprotection-namespace": "नामस्थान", "listgrouprights-namespaceprotection-restrictedto": "उपयोगकर्ता को सम्पादन करने में सक्षम करने वाले अधिकार", + "listgrants": "प्रदान", + "listgrants-summary": "यह प्रदान की गई सूची है। सदस्य अपने खाते को अनुपयोग के द्वारा उपयोग कर सकते हैं, लेकिन केवल कुछ सीमित अधिकार तक ही। यह अधिकार सदस्य द्वारा दिया गया अधिकार तक ही सीमित रहता है। यहाँ [[{{MediaWiki:Listgrouprights-helppage}}|अन्य जानकारी]] भी है, जो एक अधिकार के बारे में बताता है। \\", + "listgrants-grant": "अधिकार", "listgrants-rights": "अधिकार", "trackingcategories": "चिह्नित श्रेणियाँ", "trackingcategories-summary": "इस पृष्ठ पर उन जोड़ने वाली श्रेणियों की सूची मिलती है जो स्वतः रूप से मीडियाविकि सॉफ़्टवेयर द्वारा बनते हैं। उनके नाम सम्बंधित प्रणालि सन्देश को बदलने से {{ns:8}} नामस्थान में बदले जा सकते हैं।", @@ -1869,13 +1948,13 @@ "defemailsubject": "{{SITENAME}} ई-मेल \"$1\" सदस्य से", "usermaildisabled": "सदस्य ई-मेल अक्षम किया गया", "usermaildisabledtext": "आप इस विकि पर ई-मेल अन्य सदस्यों को ई-मेल नहीं भेज सकते हैं", - "noemailtitle": "कोई ई-मेल एड्रेस नहीं", + "noemailtitle": "कोई ई-मेल पता नहीं", "noemailtext": "इस सदस्य ने वैध ई-मेल पता नहीं दिया है।", "nowikiemailtext": "इस सदस्य ने अन्य सदस्यों से ई-मेल न प्राप्त करने का फ़ैसला लिया हुआ है।", "emailnotarget": "प्राप्तकर्ता के लिए अस्तित्वहीन या अमान्य सदस्यनाम।", "emailtarget": "प्राप्तकर्ता का सदस्यनाम भरें", "emailusername": "सदस्यनाम:", - "emailusernamesubmit": "जमा करें", + "emailusernamesubmit": "भेजें", "email-legend": "किसी और {{SITENAME}} सदस्य को ई-मेल भेजें", "emailfrom": "प्रेषक:", "emailto": "प्राप्तकर्ता:", @@ -1886,7 +1965,7 @@ "emailccsubject": "आपके ई-मेल की प्रति जो $1 को भेजा गया: $2", "emailsent": "ई-मेल भेज दिया गया है।", "emailsenttext": "आपका ई-मेल संदेश भेज दिया गया है।", - "emailuserfooter": "इस ई-मेल को $1 द्वारा $2 को भेजा गया था जिसके लिए \"{{int:emailuser}}\" कार्य को {{SITENAME}} पर प्रयोग में लाया गया था।", + "emailuserfooter": "इस ई-मेल को $1 {{GENDER:$1|द्वारा}} {{GENDER:$2|$2}} को भेजा गया था जिसके लिए \"{{int:emailuser}}\" कार्य को {{SITENAME}} पर प्रयोग में लाया गया था।", "usermessage-summary": "प्रणाली सन्देश छोड़ रहा है।", "usermessage-editor": "सिस्टम दूत", "watchlist": "ध्यानसूची", @@ -1896,7 +1975,7 @@ "watchlistanontext": "अपनी ध्यानसूची में मौजूद पृष्ठ देखने या फिर संपादित करने के लिये कॄपया लॉग इन करें।", "watchnologin": "लॉग इन नहीं किया है", "addwatch": "ध्यानसूची में जोड़ें", - "addedwatchtext": "आपकी [[Special:Watchlist|ध्यानसूची]] में \"[[:$1]]\" पृष्ठ जोड़ दिया गया है।\nभविष्य में इस पृष्ठ तथा इसके वार्ता पृष्ठ में होने वाले बदलाव आपकी ध्यानसूची में दिखेंगे।", + "addedwatchtext": "आपकी [[Special:Watchlist|ध्यानसूची]] में \"[[:$1]]\" और इसके चर्चा पृष्ठ जोड़ दिए गए हैं।", "addedwatchtext-short": "पृष्ठ \"$1\" को आपकी ध्यानसूची से जोड़ा गया है।", "removewatch": "ध्यानसूची से हटाएँ", "removedwatchtext": "\"[[:$1]]\" नामक पृष्ठ को आपकी [[Special:Watchlist|ध्यानसूची]] से हटा दिया गया है।", @@ -1921,6 +2000,7 @@ "wlshowhideanons": "अनाम प्रयोक्ता", "wlshowhidepatr": "परीक्षित सम्पादन", "wlshowhidemine": "मेरा संपादन", + "wlshowhidecategorization": "पृष्ठ श्रेणीकरण", "watchlist-options": "ध्यानसूची विकल्प", "watching": "ध्यान दे रहे हैं...", "unwatching": "ध्यान हटा रहे हैं...", @@ -1946,7 +2026,7 @@ "deletepage": "पृष्ठ हटाएँ", "confirm": "सुनिश्चित करें", "excontent": "पाठ था: '$1'", - "excontentauthor": "पाठ था: '$1' (और सिर्फ '[[Special:Contributions/$2|$2]]' का योगदान था।)", + "excontentauthor": "पाठ था: '$1' (और सिर्फ '[[Special:Contributions/$2|$2]]' का योगदान था। ([[User talk:$2|वार्ता]])", "exbeforeblank": "खाली करने से पहले पाठ था: '$1'", "delete-confirm": "\"$1\" को हटाएँ", "delete-legend": "हटाएँ", @@ -1994,6 +2074,7 @@ "changecontentmodel-nodirectediting": "$1 सामग्री सीधे सम्पादन समर्थित नहीं करता है", "log-name-contentmodel": "सामाग्री परिवर्तन लॉग", "log-description-contentmodel": "आयोजन जो इस पृष्ठ के सामग्री से मिलते जुलते हैं", + "logentry-contentmodel-new": "$1 ने $3 पृष्ठ का {{GENDER:$2|निर्माण}} किया बिना मूल सामग्री प्रारूप के \"$5\"", "logentry-contentmodel-change": "$1 ने $3 पृष्ठ का सामग्री \"$4\" से \"$5\" {{GENDER:$2|परिवर्तित किया}}", "logentry-contentmodel-change-revertlink": "पूर्ववत करें", "logentry-contentmodel-change-revert": "पूर्ववत करें", @@ -2105,7 +2186,7 @@ "contribsub2": "{{GENDER:$3|$1}} ($2) के लिये", "contributions-userdoesnotexist": "उपयोगकर्ता खाता \"$1\" पंजीकृत नहीं है।", "nocontribs": "इन कसौटियों से मिलनेवाले बदलाव मिले नहीं।", - "uctop": "(मौजूदा)", + "uctop": "(वर्तमान)", "month": "इस महिनेसे (और पुरानें):", "year": "इस सालसे (और पुराने):", "sp-contributions-newbies": "सिर्फ़ नये सदस्यों के योगदान दर्शायें", @@ -2121,7 +2202,7 @@ "sp-contributions-blocked-notice": "यह सदस्य फ़िलहाल अवरोधित हैं। सदंर्भ के लिए ताज़ातरीन अवरोध चिट्ठा प्रविष्टि नीचे है:", "sp-contributions-blocked-notice-anon": "यह आईपी पता अभी अवरोधित है। \nनवीनतम अवरोध अभिलेख प्रविष्टि सन्दर्भ के लिए नीचे दी गई है:", "sp-contributions-search": "योगदान के लिये खोज", - "sp-contributions-username": "आईपी एड्रेस या सदस्यनाम:", + "sp-contributions-username": "आईपी पता या सदस्यनाम:", "sp-contributions-toponly": "केवल उन सम्पादनों को दिखाएँ जो नवीनतम संशोधन हैं", "sp-contributions-newonly": "केवल वे सम्पादन दिखाएँ जिनसे पृष्ठ निर्मित हुए हों", "sp-contributions-submit": "खोजें", @@ -2176,6 +2257,7 @@ "ipb-unblock": "सदस्य अथवा आईपी एड्रेस को अनब्लॉक करें", "ipb-blocklist": "सद्य ब्लॉक देखें", "ipb-blocklist-contribs": "{{GENDER:$1|$1}} के लिए योगदान", + "ipb-blocklist-duration-left": "$1 बाकी", "unblockip": "सदस्य को अनब्लॉक करें", "unblockiptext": "पहले ब्लॉक किये हुए आईपी एड्रेस या सदस्यनाम को अनब्लॉक करने के लिये नीचे दिया गया फार्म भरें।", "ipusubmit": "यह अवरोध हटाएँ", @@ -2230,6 +2312,7 @@ "block-log-flags-hiddenname": "सदस्य नाम छिपा हुआ", "range_block_disabled": "प्रबंधकोंको अब रेंज ब्लॉक करने की अनुमति नहीं हैं।", "ipb_expiry_invalid": "अवैध समाप्ति कालावधी।", + "ipb_expiry_old": "समाप्ती समय बीत चुका है।", "ipb_expiry_temp": "छुपायें हुए सदस्यनाम ब्लॉक्स हमेशा के लिये होने चाहिये।", "ipb_hide_invalid": "इस खाते को छिपा नहीं पाए; इस से {{PLURAL:$1|एक सम्पादन किया गया है|$1 सम्पादन किये गये हैं}}।", "ipb_already_blocked": "\"$1\" को पहलेसे ब्लॉक हैं", @@ -2278,7 +2361,7 @@ "cant-move-to-user-page": "आपको किसी पन्नो को सदस्य पृष्ठ पर ले जाने की अनुमति नहीं है (सिवाय सदस्य उप पृष्ठ के)", "cant-move-category-page": "आपको श्रेणी प्रष्ठों को स्थानांतरित करने की अनुमति नहीं है।", "cant-move-to-category-page": "आपको किसी पृष्ठ को श्रेणी पृष्ठ पर स्थानांतरित करने की अनुमति नहीं है।", - "newtitle": "नये शीर्षक की ओर:", + "newtitle": "नया शीर्षक:", "move-watch": "ध्यान रखें", "movepagebtn": "नाम बदलें", "pagemovedsub": "नाम बदल दिया गया है", @@ -2366,8 +2449,8 @@ "thumbnail_gd-library": "अवैध जीडी लाइब्रेरी जमाव: कार्यसमूह $1 मौजूद नहीं है", "thumbnail_image-missing": "लगता है संचिका नामौजूद है: $1", "thumbnail_image-failure-limit": "हाल के समय में इस थंबनेल को दूसरा रूप देने के कई असफल प्रयास हुए हैं ($1 या उससे अधिक) । कृपया फिर से प्रयास कुछ समय बाद कीजिए।", - "import": "पृष्ठ इम्पोर्ट करें", - "importinterwiki": "किसी और विकि से आयात करे", + "import": "पृष्ठ आयात करें", + "importinterwiki": "किसी और विकि से आयात करें", "import-interwiki-text": "आयात करने के लिये एक विकि और एक पृष्ठ चुनें।\nअवतरण दिनांक और संपादक नाम ज्यों-के-त्यों रखे जाएँगे।\nअन्य विकि से सभी आयात [[Special:Log/import|आयात लॉग]] में डाली जाती हैं।", "import-interwiki-sourcewiki": "स्रोत विकि:", "import-interwiki-sourcepage": "स्रोत पृष्ठ:", @@ -2416,11 +2499,7 @@ "import-logentry-upload-detail": "$1 अवतरण आयात {{PLURAL:$1|किया गया|किये गए}}", "import-logentry-interwiki-detail": "$2 से $1 अवतरण आयात {{PLURAL:$1|किया गया|किये गए}}", "javascripttest": "जावास्क्रिप्ट परीक्षण", - "javascripttest-pagetext-noframework": "यह पृष्ठ जावास्क्रिप्ट परीक्षण चलाने के लिए है।", - "javascripttest-pagetext-unknownframework": "अज्ञात परीक्षण ढाँचा \"$1\"", "javascripttest-pagetext-unknownaction": "अज्ञात क्रिया \"$1\" ।", - "javascripttest-pagetext-frameworks": "कृपया निम्न परीक्षण ढाँचों में से एक चुनें: $1", - "javascripttest-pagetext-skins": "परीक्षण करने के लिए त्वचा चुनें:", "javascripttest-qunit-intro": "mediawiki.org पर [$1 परीक्षण के प्रलेखन] देखें।", "tooltip-pt-userpage": "{{GENDER:|आपका प्रयोक्ता}} पृष्ठ", "tooltip-pt-anonuserpage": "आप जिस आईपी से बदलाव कर रहें हैं उसका सदस्य पान", @@ -2431,7 +2510,7 @@ "tooltip-pt-mycontris": "आपके योगदानों की सूची", "tooltip-pt-anoncontribs": "इस आईपी पते से संपादन की सूची", "tooltip-pt-login": "आपको सत्रारम्भ करने के लिए प्रोत्साहित किया जाता है; लेकिन यह अनिवार्य नहीं है", - "tooltip-pt-logout": "सत्रांत", + "tooltip-pt-logout": "प्रस्थान", "tooltip-pt-createaccount": "हमारा सुझाव है की आप खाता बनाएँ और लॉगिन करें, परन्तु यह अनिवार्य नहीं है", "tooltip-ca-talk": "सामग्री पृष्ठ के बारे में वार्तालाप", "tooltip-ca-edit": "यह पृष्ठ संपादित करें", @@ -2460,8 +2539,8 @@ "tooltip-t-recentchangeslinked": "यहाँ जुड़े हुए सभी पन्नों में हुए हाल के बदलाव", "tooltip-feed-rss": "इस पृष्ठ की आरएसएस फ़ीड", "tooltip-feed-atom": "इस पृष्ठ की अणु फ़ीड", - "tooltip-t-contributions": "इस सदस्य के योगदान की सूची", - "tooltip-t-emailuser": "इस सदस्य को इमेल भेजें", + "tooltip-t-contributions": "{{GENDER:$1|इस सदस्य}} के योगदाओं की सूची", + "tooltip-t-emailuser": "{{GENDER:$1|इस सदस्य}} को इमेल भेजें", "tooltip-t-info": "इस पृष्ठ के बारे में अधिक जानकारी", "tooltip-t-upload": "फ़ाइल अपलोड करें", "tooltip-t-specialpages": "सभी विशेष पृष्ठों की सूची", @@ -2492,14 +2571,26 @@ "tooltip-preferences-save": "वरीयताएं सहेजें", "tooltip-summary": "एक संक्षिप्त सारांश दर्ज करें", "common.css": "/* यहां रखी css सभी त्वचाओंपर असर करेगी */", + "print.css": "/* CSS यहाँ डालने से यह प्रिंट निकालते समय ही प्रभावी होगा। */", + "noscript.css": "/* CSS यहाँ डालने से यह केवल जावास्क्रिप्ट निष्क्रिय सदस्यो पर ही प्रभावी होगा। */", + "group-autoconfirmed.css": "/* CSS यहाँ डालने से यह केवल स्वतः स्थापित सदस्यो पर ही प्रभावी होगा। */", + "group-user.css": "/* CSS यहाँ डालने से यह केवल पंजीकृत सदस्यो पर ही प्रभावी होगा। */", + "group-bot.css": "/* CSS यहाँ डालने से यह केवल बॉट सदस्यो पर ही प्रभावी होगा। */", + "group-sysop.css": "/* CSS यहाँ डालने से यह केवल प्रबन्धकों पर ही प्रभावी होगा। */", + "group-bureaucrat.css": "/* CSS यहाँ डालने से यह केवल प्रशासकों सदस्यो पर ही प्रभावी होगा। */", "common.js": "/* यहां लिखी गई जावास्क्रीप्ट सभी सदस्योंके लिये इस्तेमाल में लाई जायेगी। */", + "group-autoconfirmed.js": "/* जावास्क्रिप्ट यहाँ डालने से यह केवल स्वतः स्थापित सदस्यो पर ही प्रभावी होगा। */", + "group-user.js": "/* जावास्क्रिप्ट यहाँ डालने से यह केवल पंजीकृत सदस्यो पर ही प्रभावी होगा। */", + "group-bot.js": "/* जावास्क्रिप्ट यहाँ डालने से यह केवल बॉट सदस्यो पर ही प्रभावी होगा। */", + "group-sysop.js": "/* जावास्क्रिप्ट यहाँ डालने से यह केवल प्रबन्धकों पर ही प्रभावी होगा। */", + "group-bureaucrat.js": "/* जावास्क्रिप्ट यहाँ डालने से यह केवल प्रशासकों पर ही प्रभावी होगा। */", "anonymous": "{{SITENAME}} के {{PLURAL:$1||}} बेनामी सदस्य", "siteuser": "विकिपीडिया सदस्य $1", "anonuser": "{{SITENAME}} अज्ञात उपयोगकर्ता $1", "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": "इस पृष्ठ के लिये क्रेडिट जानकारी नहीं है।", @@ -2560,6 +2651,7 @@ "pageinfo-category-files": "फ़ाइलों की संख्या", "markaspatrolleddiff": "जाँचा हुआ चिन्हित करें", "markaspatrolledtext": "इस पृष्ठ को जाँचा हुआ चिन्हित करें", + "markaspatrolledtext-file": "इस फ़ाइल संस्करण को जांचा हुआ चिन्हित करें", "markedaspatrolled": "जाँचा हुआ चिन्हित किया", "markedaspatrolledtext": "[[:$1]] का चयनित अवतरण जाँचा हुआ चिन्हित किया गया।", "rcpatroldisabled": "हाल में हुए बदलावों का परीक्षण अक्षम है", @@ -2611,6 +2703,7 @@ "newimages-legend": "छननी", "newimages-label": "संचिका नाम (या उसका अंश):", "newimages-showbots": "बॉट के अपलोड दिखाइये", + "newimages-hidepatrolled": "जाँचा हुआ अपलोड छुपाएँ", "noimages": "देखने के लिए कुछ नहीं है।", "ilsubmit": "खोजें", "bydate": "तिथि अनुसार", @@ -2641,7 +2734,7 @@ "metadata-expand": "विस्तृत जानकारियां दिखाएं", "metadata-collapse": "विस्तृत जानकारियां छिपाएं", "metadata-fields": "जब मेटाडाटा तालिका को लघुरूप किया जाएगा तो इस सन्देश में सूचीबद्ध इएक्सआयएफ मेटाडाटा जानकारियां छवि प्रदर्शित होते समय सम्मिलित की जाएंगी।\nअन्य डिफ़ॉल्ट रूप से छिपी रहेंगी।\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-imagewidth": "चौडाई", + "exif-imagewidth": "चौड़ाई", "exif-imagelength": "ऊँचाई", "exif-bitspersample": "प्रति घटक बीट्स", "exif-compression": "कम्प्रेशन योजना", @@ -2674,8 +2767,8 @@ "exif-colorspace": "रंग स्थान", "exif-componentsconfiguration": "हर घटक का मतलब", "exif-compressedbitsperpixel": "चित्र कॉम्प्रेशन मोड", - "exif-pixelydimension": "छवि चौड़ाई", - "exif-pixelxdimension": "छवि ऊँचाई", + "exif-pixelxdimension": "छवि चौड़ाई", + "exif-pixelydimension": "छवि ऊँचाई", "exif-usercomment": "सदस्य टिप्पणी", "exif-relatedsoundfile": "संबंधित ध्वनी फ़ाईल", "exif-datetimeoriginal": "डाटा बनाने का दिनांक और समय", @@ -2823,6 +2916,8 @@ "exif-compression-4": "CCITT ग्रुप 4 फ़ैक्स एनकोडिंग", "exif-copyrighted-true": "कॉपीराईट", "exif-copyrighted-false": "कॉपीराइट स्थिति अनिर्दिष्ट", + "exif-photometricinterpretation-0": "काला और सफेद (सफेद 0 है)", + "exif-photometricinterpretation-1": "काला और सफेद (काला 0 है)", "exif-unknowndate": "अज्ञात तारीख", "exif-orientation-1": "सामान्य", "exif-orientation-2": "हॉरिज़ॉन्टली बदला", @@ -3008,6 +3103,7 @@ "confirmrecreate": "सदस्य [[User:$1|$1]] ([[User talk:$1|वार्ता]]) ने आपके द्वारा संपादन शुरू होने के बाद यह पृष्ठ निम्नलिखित कारण देकर हटाया हैं:\n: ''$2''\nक्या आप इसे फिरसे बनाना चाहतें हैं, इसकी निश्चिती करें।", "confirmrecreate-noreason": "जब आपने इस पृष्ठ का सम्पादन शुरू किया था, उसके बाद से सदस्य [[User:$1|$1]] ([[User talk:$1|talk]]) ने इसे हटा दिया है। कृपया पुष्टि करें कि आप इस पृष्ठ को पुनः बनाना चाहते हैं।", "recreate": "फिरसे बनायें", + "unit-pixel": "px", "confirm_purge_button": "ओके", "confirm-purge-top": "क्या आप यह पृष्ठ का कैश ख़ाली करने चाहिए?", "confirm-purge-bottom": "किसी पृष्ठ को मिटाने से संचिका साफ़ हो जाती है और इस वजह से ताज़ातरीन संस्करण प्रकट हो जाता है।", @@ -3082,6 +3178,8 @@ "iranian-calendar-m10": "डे", "iranian-calendar-m11": "बाहमान", "iranian-calendar-m12": "एसफण्ड (Esfand)", + "hijri-calendar-m1": "मुहर्रम", + "hijri-calendar-m2": "सफर", "hebrew-calendar-m1": "तिश्रेई (Tishrei)", "hebrew-calendar-m2": "शेस्वान (Cheshvan)", "hebrew-calendar-m3": "किस्लेव (Kislev)", @@ -3161,7 +3259,6 @@ "version-libraries-description": "विवरण", "version-libraries-authors": "लेखक", "redirect": "अनुप्रेषित करें फ़ाइल, उपयोगकर्ता, या संशोधन पहचान के आधार पर", - "redirect-legend": "फ़ाइल अथवा पृष्ठ को पुनर्प्रेषण", "redirect-summary": "यह विशेष पृष्ठ फ़ाइलनाम प्रदान करने पर फ़ाइल नाम को, पृष्ठ आइ॰दी अथवा अवतरण आइ॰दी देने पर पृष्ठ को, और सदस्य आइ॰दी देने पर सदस्य पृष्ठ को पुनर्प्रेषित करता है। उदाहरण: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/page/64308]], [[{{#Special:Redirect}}/revision/328429]], या [[{{#Special:Redirect}}/user/101]]।", "redirect-submit": "जायें", "redirect-lookup": "ढूँढें:", @@ -3170,10 +3267,10 @@ "redirect-page": "पृष्ठ आइ॰डी", "redirect-revision": "पृष्ठ अवतरण संख्या", "redirect-file": "फ़ाइल नाम", + "redirect-logid": "प्रवेश आईडी", "redirect-not-exists": "यह मान प्राप्त नहीं हुआ", "fileduplicatesearch": "फ़ाईल द्विरावृत्ति खोजें", "fileduplicatesearch-summary": "हैश वैल्यू के अनुसार फ़ाईल की द्विरावृत्ति खोजें।", - "fileduplicatesearch-legend": "द्विरावृत्ति के लिये खोजें", "fileduplicatesearch-filename": "फ़ाईलनाम:", "fileduplicatesearch-submit": "खोजें", "fileduplicatesearch-info": "$1 × $2 पीक्सेल
फ़ाईल का आकार: $3
MIME प्रकार: $4", @@ -3223,6 +3320,7 @@ "tags-deactivate": "निष्क्रिय करें", "tags-hitcount": "$1 {{PLURAL:$1|बदलाव|बदलाव}}", "tags-manage-no-permission": "आपको बदलाव टैग के प्रबंधन की अनुमति नहीं है।", + "tags-manage-blocked": "आप प्रतिबंधित रहते समय टैग में कोई जोड़ना या हटाने का कार्य नहीं कर सकते हैं।", "tags-create-heading": "नया टैग बनाएँ", "tags-create-explanation": "पुनः निर्धारित रूप से, नवनिर्मित टैग उपयोगकर्ताओं और बॉट के लिए मौजूद रहेंगे।", "tags-create-tag-name": "चिप्पी का नाम", @@ -3257,9 +3355,11 @@ "tags-deactivate-not-allowed": "टैग \"$1\" को असक्रिय करना सम्भव नहीं है।", "tags-deactivate-submit": "निष्क्रिय करें", "tags-apply-no-permission": "आपको अनुमति नहीं है कि बदलाव टैगों को अपने बदलावों से जोड़ें।", + "tags-apply-blocked": "आप प्रतिबंधित रहते समय टैग में कोई बदलाव नहीं कर सकते हैं।", "tags-apply-not-allowed-one": "टैग \"$1\" मानवीय रूप से जोड़े जाने की अनुमति नहीं है।", "tags-apply-not-allowed-multi": "निम्न लिखित {{PLURAL:$2|टैग की अनुमति नहीं है|टैगों की अनुमति नहीं है}} कि उसे मानवीय रूप से प्रयोग में लाया जाए: $1", "tags-update-no-permission": "आपको व्यक्तिगत संशोधनों या लॉग प्रविष्टियों से बदलाव टैग जोड़ने या उन्हें हटाने की अनुमति नहीं है।", + "tags-update-blocked": "आप प्रतिबंधित रहते समय टैग में कोई जोड़ना या हटाने का कार्य नहीं कर सकते हैं।", "tags-update-add-not-allowed-one": "टैग \"\"$1\" को मानवीय रूप से जोड़ा नहीं जा सकता", "tags-update-add-not-allowed-multi": "निम्न लिखित {{PLURAL:$2|टैग|या टैगों का समूह}} मानवीय रूप से जोड़ा नहीं जा सकता है: $1", "tags-update-remove-not-allowed-one": "टैग \"$1\" को हटाए जाने की अनुमति नहीं है।", @@ -3271,7 +3371,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": "इन टैगों को हटाएँ", @@ -3281,7 +3381,7 @@ "tags-edit-reason": "कारण:", "tags-edit-revision-submit": "बदलाव जोड़िए {{PLURAL:$1|इस अवतरण|$1 अवतरण}}", "tags-edit-logentry-submit": "बदलाव जोड़िए {{PLURAL:$1|इस लौग प्रवक्ति|$1 लॉग प्रवक्तियाँ}}", - "tags-edit-success": "बदलाव सफलता पूर्वक जोड़े जा चुके हैं।", + "tags-edit-success": "बदलाव सफलता लागू हुई।", "tags-edit-failure": "बदलाव नहीं जोडे जा सके हैं: $1", "tags-edit-nooldid-title": "अवैध लक्ष्य का संशोधन", "tags-edit-nooldid-text": "या तो आपने किसी लक्षित संशोधन का विवरण नहीं दिया है जहाँ इस कार्य को सम्पन्न करना है, या विवरण किया गया संशोधन है ही नहीं।", @@ -3350,7 +3450,9 @@ "logentry-suppress-block": "$1 {{GENDER:$2|प्रतिबंधित}} {{GENDER:$4|$3}} जिसमें समय समाप्ति की अवधि है $5 $6", "logentry-suppress-reblock": "$1 {{GENDER:$2|बदल दिया गया}} प्रतिबंध सेटिंग {{GENDER:$4|$3}} के लिए जिसमें समय समाप्ति की अवधि है $5 $6", "logentry-import-upload": "$1 {{GENDER:$2|आयात किया गया}} $3 फ़ाइल अपलोड के माध्यम से", + "logentry-import-upload-details": "$1 ने फ़ाइल अपलोड द्वारा $3 को {{GENDER:$2|आयात}} किया ($4 {{PLURAL:$4|अवतरण|अवतरण}})", "logentry-import-interwiki": "$1 {{GENDER:$2|आयात किया गया}} $3 किसी और विकि से", + "logentry-import-interwiki-details": "$1 ने $5 से $3 को {{GENDER:$2|आयात}} किया ($4 {{PLURAL:$4|अवतरण|अवतरण}})", "logentry-merge-merge": "$1 {{GENDER:$2|विलय किया गया}} $3 को $4 में (संशोधन $5 तक)", "logentry-move-move": "$1 ने $3 पृष्ठ $4 पर {{GENDER:$2|स्थानांतरित}} किया", "logentry-move-move-noredirect": "$1 ने $3 पर पुनर्निर्देश छोड़े बिना उसे $4 पर {{GENDER:$2|स्थानांतरित}} किया", @@ -3394,7 +3496,7 @@ "feedback-adding": "पृष्ठ पर प्रतिक्रिया जोड़ना ...", "feedback-back": "पीछे जाएँ", "feedback-bugcheck": "शानदार! जांच ले कहीं ये [ $1 known bugs] पहले से ही न हो ।", - "feedback-bugnew": "मैं जाँच कीया। एक नया बग रिपोर्ट करें", + "feedback-bugnew": "मैं जाँच किया, एक नया बग रिपोर्ट करें", "feedback-bugornote": "यदि आप किसी तकनीकी परेशानी को विस्तार से समझाने के लिये तैयार हैं तो कृपया [$1 बग फ़ाइल करें]।\nयदि नहीं, तो आप नीचे दिये सरल फ़ॉर्म का प्रयोग कर सकते हैं। आपकी टिप्पणी आपके सदस्य नाम और आपके ब्राउज़र के नाम के सहित \"[$3 $2]\" पृष्ठ में जोड़ दी जाएगी।", "feedback-cancel": "रद्द करें", "feedback-close": "हो गया", @@ -3462,6 +3564,7 @@ "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|घंटा|घंटे}}", @@ -3500,16 +3603,18 @@ "expand_templates_preview": "झलक", "expand_templates_preview_fail_html": "अगर यह वैध पूर्ववावलोकन प्रयास है, तो फिर से प्रयास कीजिए।\nअगर इससे काम न बने तो [[Special:UserLogout|लॉग आउट होकर]] फिर से लॉग इन हो जाइये।", "expand_templates_preview_fail_html_anon": "चूँकि {{SITENAME}} सीधे-साधे रूप से एचटीएमएल-सक्षम है और आप लॉग्ड इन नहीं है, पूर्वावलोकन छिपा हुआ है ताकि सम्भावित जावास्क्रिप्ट हमले को रोका सके।\n\nअगर यह वैध पूर्वावलोकन प्रयास है तो कृपया [[Special:UserLogin|लॉग इन करके]] फिर से प्रयास कीजिए।", - "pagelanguage": "पृष्ठ भाषा चुनाव", + "expand_templates_input_missing": "आपको कम से कम कुछ पाठ्य प्रदान करने पड़ेंगे।", + "pagelanguage": "पृष्ठ भाषा बदलें", "pagelang-name": "पृष्ठ", "pagelang-language": "भाषा", "pagelang-use-default": "डिफ़ॉल्ट भाषा का प्रयोग करें", "pagelang-select-lang": "भाषा चुनें", + "pagelang-submit": "भेजें", "right-pagelang": "पृष्ठ भाषा बदलें", "action-pagelang": "पृष्ठ भाषा बदलने", - "log-name-pagelang": "पृष्ठ भाषा बदलाव लॉग", + "log-name-pagelang": "भाषा बदलाव लॉग", "log-description-pagelang": "यह पृष्ठ भाषाओं में परिवर्तन का लॉग है।", - "logentry-pagelang-pagelang": "$1 {{GENDER:$2|बदल दिया गया}} पृष्ठ भाषा को $3 के लिए $4 से $5 ।", + "logentry-pagelang-pagelang": "$1 {{GENDER:$2|बदल दिया गया}} पृष्ठ भाषा को $3 के लिए $4 से $5।", "default-skin-not-found": "ओह! आपकी विकि का पूर्व निर्धारित चमड़ा जैसा कि $wgDefaultSkin में बताया गया है$1, उपलब्ध नहीं है।\n\nआपका इन्स्टालेशन इन चमड़ो को सम्मिलित करता है {{PLURAL:$4|चमड़ा|चमड़े}}। देखिए [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual: चमड़ो का सम्मित करना] ताकि आपको जानकारी मिले कि कैसे {{PLURAL:$4|उसे|उनको सम्मिलित किया जाए और निर्धारित को तय करें}}.\n\n$2\n\n; अगर आपने अभी मीडियाविकि इन्स्टाल किया है:\n: आपने शायद गिट से इन्स्टाल किया है, या सीधे स्रोत कोड से किया है जिसके लिए कोई और तरीक़े का प्रयोग किया है। यह तो आशा के अनुरूप है। कोशिश कीजिए कि कुछ चमड़े [https://www.mediawiki.org/wiki/Category:All_skins mediawiki.org's अमीडिया-विकि के चमड़े वाली डाइरेक्ट्री से डाउन्लोड करें], जिसके लिए आप:\n:* डाउनलोड कीजिए [https://www.mediawiki.org/wiki/Download तारबॉल इन्स्टालर], जो कई चमड़ों और विस्तारों में मौजूद है। आप चमड़ों का कोड skins/ उसकी डाइरेक्ट्री से कॉपी-पेस्ट कर सकते हैं। \n:* डाउनलोड कीजिए व्यक्तिगत चमड़े के तारबॉल [https://www.mediawiki.org/wiki/Special:SkinDistributor मीडिया विकि] से।\n:* [https://www.mediawiki.org/wiki/Download_from_Git#Using_Git_to_download_MediaWiki_skins गिट का प्रयोग करके डाउलोड कर सकते हैं].\n: ऐसा करने के दौरान आपकी गिट-रिपॉज़िटरी को कुछ नहीं होना चाहिए यदि आप विकासकर्ता हो। \n; अगर आपने मीडियाविकि को अभी अपग्रेड किया है:\n: मीडियाविकि 1.24 और इसके नवीन रूप स्वतः रूप से चमड़ों को सक्षम नहीं करते (देखिए [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Manual: चमड़ो की स्वतः खोज]). आप निम्न लिखित को पेस्ट कर सकते हैं: {{PLURAL:$5|लाइन|लाइनें}} LocalSettings.php में ताकि {{PLURAL:$5|वह|सभी}} सक्षम हों जैसा कि इन्स्टाल किए गए {{PLURAL:$5|चमड़े|चमड़ों}} का मामला है:\n\n
$3
\n\n; अगर आपने अभी बदलाव किए हैंLocalSettings.php:\n: डबल-क्लिक करें चमड़े नामों के आगे ताकि आपको विभिन्न प्रकारों के विकल्प मिलें।", "default-skin-not-found-no-skins": "ओह! आपकी विकि का पूर्व निर्धारित चमड़ा जैसा कि $wgDefaultSkin में बताया गया है$1, उपलब्ध नहीं है। \n\nआपके पास कोई इन्स्टाल किया गया चमड़ा नहीं है। \n\n; अगर आपने अभी मीडियाविकि इन्स्टाल किया है या उसका उद्यतन किया है:\n: आपने शायद गिट से इन्स्टाल किया है, या सीधे स्रोत कोड से किया है जिसके लिए कोई और तरीक़े का प्रयोग किया है। यह तो आशा के अनुरूप है। कोशिश कीजिए कि कुछ चमड़े [https://www.mediawiki.org/wiki/Category:All_skins mediawiki.org's मीडिया-विकि के चमड़े वाली डाइरेक्ट्री से डाउन्लोड करें], जिसके लिए आप:\n:* डाउनलोड कीजिए [https://www.mediawiki.org/wiki/Download तारबॉल इन्स्टालर], जो कई चमड़ों और विस्तारों में मौजूद है। आप चमड़ों का कोड skins/ उसकी डाइरेक्ट्री से कॉपी-पेस्ट कर सकते हैं। \n:* डाउनलोड कीजिए व्यक्तिगत चमड़े के तारबॉल [https://www.mediawiki.org/wiki/Special:SkinDistributor मीडिया विकि] से।\n:* [https://www.mediawiki.org/wiki/Download_from_Git#Using_Git_to_download_MediaWiki_skins गिट का प्रयोग करके डाउलोड कर सकते हैं].\n: ऐसा करने के दौरान आपकी गिट-रिपॉज़िटरी को कुछ नहीं होना चाहिए यदि आप विकासकर्ता हो।", "default-skin-not-found-row-enabled": "* $1 / $2 (सक्षम)", @@ -3517,6 +3622,8 @@ "mediastatistics": "मीडिया के आंकड़े", "mediastatistics-summary": "अपलोड किए गए फ़ाइल प्रकारों के आंकड़े। इसमें केवल नवीनतम फ़ाइल के अवतरण शामिल हैं। पुराने या हटाए गए फ़ाइलों के अवतरणों को अलग रखा गया है। \n\nThis only includes the most recent version of a file. Old or deleted versions of files are excluded.", "mediastatistics-nbytes": "{{PLURAL:$1|$1 बाइट|$1 बाइट्स}} ($2; $3%)", + "mediastatistics-bytespertype": "इस अनुभाग का कुल फ़ाइल आकार : {{PLURAL:$1|$1 बाइट|$1 बाइट्स}} ($2; $3%)", + "mediastatistics-allbytes": "सभी फ़ाइल का कुल फ़ाइल आकार : {{PLURAL:$1|$1 बाइट|$1 बाइट्स}} ($2)", "mediastatistics-table-mimetype": "माइम प्रकार", "mediastatistics-table-extensions": "सम्भवतः विस्तार", "mediastatistics-table-count": "फ़ाइलों की संख्या", @@ -3531,6 +3638,7 @@ "mediastatistics-header-text": "पाठ", "mediastatistics-header-executable": "निष्पादन योग्य", "mediastatistics-header-archive": "संकुचित प्रारूप", + "mediastatistics-header-total": "सभी फ़ाइल", "json-warn-trailing-comma": "$1 पीछे रह रहा {{PLURAL:$1|कॉमा को| कॉमाओं को}} जे०एस०ओ०एन० से हटाया गया", "json-error-unknown": "जे०एस०ओ०एन० में एक समस्या थी। त्रुटि: $1", "json-error-depth": "स्टैक की अधिकतम गहराई बढ़ चुकी है।", @@ -3547,12 +3655,13 @@ "special-characters-group-ipa": "आइपीए", "special-characters-group-symbols": "प्रतीक", "special-characters-group-greek": "ग्रीक", + "special-characters-group-greekextended": "ग्रीक विस्तृत", "special-characters-group-cyrillic": "सिरिलिक", "special-characters-group-arabic": "अरबी", "special-characters-group-arabicextended": "अरबी विस्तारित", "special-characters-group-persian": "फार्सी", "special-characters-group-hebrew": "हिब्रू", - "special-characters-group-bangla": "बांग्ला", + "special-characters-group-bangla": "बंगाली", "special-characters-group-tamil": "तमिल", "special-characters-group-telugu": "तेलूगू", "special-characters-group-sinhala": "सिंहल", @@ -3565,8 +3674,33 @@ "special-characters-title-emdash": "एम डैश", "special-characters-title-minus": "ऋण चिह्न", "mw-widgets-dateinput-no-date": "कुछ चयनित नहीं", + "mw-widgets-dateinput-placeholder-day": "DD-MM-YYYY", "mw-widgets-titleinput-description-new-page": "पृष्ठ अभी मौजूद नहीं है", "mw-widgets-titleinput-description-redirect": "$1 को अनुप्रेषित", "api-error-blacklisted": "कृपया कोई दूसरा विवरणात्मक शीर्षक चुनें।", - "randomrootpage": "अविशिष्ट मूल पृष्ठ" + "sessionmanager-tie": "एक साथ कई अनुरोध को नहीं मिला सकता: $1", + "sessionprovider-generic": "$1 सत्र", + "sessionprovider-mediawiki-session-cookiesessionprovider": "कुकी-आधारित सत्र", + "sessionprovider-nocookies": "हो सकता है कि कुकी निष्क्रिय है। कृपया देखें कि और सक्रिय करें।", + "randomrootpage": "अविशिष्ट मूल पृष्ठ", + "log-action-filter-block": "प्रतिबंध के प्रकार:", + "log-action-filter-delete": "हटाने के प्रकार:", + "log-action-filter-patrol": "परीक्षण के प्रकार:", + "log-action-filter-protect": "सुरक्षा के प्रकार:", + "log-action-filter-upload": "अपलोड के प्रकार:", + "log-action-filter-all": "सभी", + "log-action-filter-block-block": "अवरोध", + "log-action-filter-block-reblock": "अवरोध परिवर्तन", + "log-action-filter-block-unblock": "अवरोधरहित", + "log-action-filter-delete-delete": "पृष्ठ हटाना", + "log-action-filter-delete-restore": "पृष्ठ न हटाना", + "log-action-filter-delete-event": "पृष्ठ हटाने का लॉग", + "log-action-filter-delete-revision": "अवतरण हटाना", + "log-action-filter-patrol-patrol": "अपने से परीक्षण", + "log-action-filter-patrol-autopatrol": "स्वतः पुनरीक्षण", + "log-action-filter-protect-protect": "सुरक्षा", + "log-action-filter-protect-modify": "सुरक्षा परिवर्तन", + "log-action-filter-protect-unprotect": "असुरक्षा", + "log-action-filter-upload-upload": "नया अपलोड", + "log-action-filter-upload-overwrite": "फिर से अपलोड" } diff --git a/languages/i18n/hif-latn.json b/languages/i18n/hif-latn.json index e18aa14f46..6586e89434 100644 --- a/languages/i18n/hif-latn.json +++ b/languages/i18n/hif-latn.json @@ -1636,8 +1636,6 @@ "categories": "Vibhag", "categoriespagetext": "Niche ke {{PLURAL:$1|vibhag me|vibhag me}} panna aur media hae.\n[[Special:UnusedCategories|Unused categories]] hian nai dekhawa jaawe hae.\n[[Special:WantedCategories|wanted categories]] ke bhi dekho.", "categoriesfrom": "Vibhag jon ki hian pe suruu hoe hai, ke dekhao:", - "special-categories-sort-count": "ginti se sort karo", - "special-categories-sort-abc": "alphabetically sort karo", "deletedcontributions": "Sadasya ke yogdaan ke mitae dia hai", "deletedcontributions-title": "Sadasya ke yogdaan ke mitae dia hai", "sp-deletedcontributions-contribs": "yogdaan", @@ -2216,11 +2214,7 @@ "import-logentry-upload-detail": "$1 {{PLURAL:$1|badlao|badlao}} import karaa gais hae", "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|badlao|badlao}} $2 se import karaa gais hae", "javascripttest": "JavaScript ke testing", - "javascripttest-pagetext-noframework": "Ii panna ke JavaScript test ke kare ke khatir reserve karaa gais hae.", - "javascripttest-pagetext-unknownframework": "Anjaan testing framework \"$1\".", "javascripttest-pagetext-unknownaction": "Unknown action \"$1\".", - "javascripttest-pagetext-frameworks": "Meharbaani kar ke ek testing framework ke chuno: $1", - "javascripttest-pagetext-skins": "Test kare ke khatir ek chamrraa ke chuno:", "javascripttest-qunit-intro": "mediawiki.org me [$1 testing documentation] ke dekho.", "tooltip-pt-userpage": "Aap ke sadasya panna", "tooltip-pt-anonuserpage": "IP jisme se aap edit karta hai ke sadasya panna", @@ -2466,8 +2460,8 @@ "exif-colorspace": "Rang ke jagha", "exif-componentsconfiguration": "Har ek component ke matlab", "exif-compressedbitsperpixel": "Chapa ke compression mode", - "exif-pixelydimension": "Chaapa ke thiik chaurrai", - "exif-pixelxdimension": "Chaapa ke thiik uunchai", + "exif-pixelxdimension": "Chaapa ke thiik chaurrai", + "exif-pixelydimension": "Chaapa ke thiik uunchai", "exif-usercomment": "Sadasysa ke bichar", "exif-relatedsoundfile": "Saathe waala awaaj waala file", "exif-datetimeoriginal": "Data generation ke tarik aur time", @@ -2902,7 +2896,6 @@ "version-libraries-library": "Library", "version-libraries-version": "Version", "redirect": "File, sadasya, panna, nai to, revision ID se redirect", - "redirect-legend": "File nai to panna pe redirect karo", "redirect-summary": "Ii khaas panna ek file (given the filename), panna (given a revision ID or page ID), nai to, sadasya ke panna (given a numeric user ID) pe redirect hoe hae. Usage: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/page/64308]], [[{{#Special:Redirect}}/revision/328429]], or [[{{#Special:Redirect}}/user/101]].", "redirect-submit": "Jaao", "redirect-lookup": "Lookup:", @@ -2914,7 +2907,6 @@ "redirect-not-exists": "Value ke nai paawa gais hae", "fileduplicatesearch": "Duplicate files ke khojo", "fileduplicatesearch-summary": "Duplicate files based on hash values ke khojo.", - "fileduplicatesearch-legend": "Ek duplicate ke khojo", "fileduplicatesearch-filename": "File ke naam:", "fileduplicatesearch-submit": "Khojo", "fileduplicatesearch-info": "$1 × $2 pixel
File size: $3
MIME type: $4", diff --git a/languages/i18n/hr.json b/languages/i18n/hr.json index dbe4fcb6ff..0c33094733 100644 --- a/languages/i18n/hr.json +++ b/languages/i18n/hr.json @@ -609,7 +609,7 @@ "newarticle": "(Novo)", "newarticletext": "Došli ste na stranicu koja još ne postoji.\nAko želite stvoriti tu stranicu, počnite tipkati u prozor ispod ovog teksta (pogledajte [$1 stranicu za pomoć]).\nAko ste ovamo dospjeli slučajno, kliknite gumb '''natrag''' (back) u svom pregledniku.", "anontalkpagetext": "----''Ovo je stranica za razgovor s neprijavljenim suradnikom koji još nije otvorio suradnički račun ili se njime ne koristi. Zbog toga se moramo služiti brojčanom IP adresom kako bismo ga identificirali. Takvu adresu često može dijeliti više ljudi. Ako ste neprijavljeni suradnik i smatrate da su Vam upućeni irelevantni komentari, molimo Vas da [[Special:UserLogin/signup|otvorite suradnički račun]] ili [[Special:UserLogin|se prijavite]] te tako u budućnosti izbjegnete zamjenu s drugim neprijavljenim suradnicima.''", - "noarticletext": "Na ovoj stranici trenutačno nema sadržaja.\nMožete [[Special:Search/{{PAGENAME}}|potražiti ovaj naslov]] na drugim stranicama,\n[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} pretražiti povezane evidencije]\nili [{{fullurl:{{FULLPAGENAME}}|action=edit}} urediti ovu stranicu].", + "noarticletext": "Na ovoj stranici trenutačno nema sadržaja.\nMožete [[Special:Search/{{PAGENAME}}|potražiti ovaj naslov]] na drugim stranicama,\n[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} pretražiti povezane evidencije]\nili [{{fullurl:{{FULLPAGENAME}}|action=edit}} stvoriti ovu stranicu].", "noarticletext-nopermission": "Ova stranica nema sadržaja.\nMožete [[Special:Search/{{PAGENAME}}|tražiti naslov ove stranice]] na drugim stranicama ili [{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} pretražiti povezane evidencije], ali ne možete stvoriti ovu stranicu.", "missing-revision": "Uređivanje broj $1 na stranici \"{{FULLPAGENAME}}\" ne postoji.\n\nOvo je obično uzrokovano kada kliknete na zastarjelu poveznicu na stranice koja je obrisana.\nViše informacija možete pronaći u [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} evidenciji brisanja].", "userpage-userdoesnotexist": "Suradničko ime \"$1\" nije prijavljeno. Jeste li sigurni da želite stvoriti/uređivati ovu stranicu?", @@ -1644,8 +1644,6 @@ "categories-submit": "Prikaži", "categoriespagetext": "Sljedeće {{PLURAL:$1|kategorija sadrži|kategorije sadrže}} stranice ili datoteke.\n[[Special:UnusedCategories|Nekorištene kategorije]] ovdje nisu prikazane.\nTakođer pogledajte [[Special:WantedCategories|tražene kategorije]].", "categoriesfrom": "Prikaži kategorije počevši od:", - "special-categories-sort-count": "razvrstavanje po broju", - "special-categories-sort-abc": "abecedno razvrstavanje", "deletedcontributions": "Obrisani suradnički doprinosi", "deletedcontributions-title": "Obrisani suradnički doprinosi", "sp-deletedcontributions-contribs": "doprinosi", @@ -2213,18 +2211,14 @@ "import-logentry-upload-detail": "$1 {{PLURAL:$1|izmjena|izmjene|izmjena}}", "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|promjena|promjene|promjena}} od $2", "javascripttest": "Testiranje JavaScripta", - "javascripttest-pagetext-noframework": "Ova je stranica rezervirana za izvršavanje JavaScript testova.", - "javascripttest-pagetext-unknownframework": "Nepoznata testna okolina \"$1\".", - "javascripttest-pagetext-frameworks": "Molimo izaberite jednu od sljedećih testnih okolina: $1", - "javascripttest-pagetext-skins": "Izaberite temu (''skin'') za testiranje:", "javascripttest-qunit-intro": "Pogledajte [$1 testnu dokumentaciju] na mediawiki.org.", "tooltip-pt-userpage": "Stranica suradnika {{GENDER:|Your user}}", "tooltip-pt-anonuserpage": "Suradnička stranica za IP adresu pod kojom uređujete", - "tooltip-pt-mytalk": "Moja stranica za razgovor", + "tooltip-pt-mytalk": "Vaša stranica za razgovor", "tooltip-pt-anontalk": "Razgovor o suradnicima s ove IP adrese", "tooltip-pt-preferences": "Vaše postavke", "tooltip-pt-watchlist": "Popis stranica koje pratite.", - "tooltip-pt-mycontris": "Popis mojih doprinosa", + "tooltip-pt-mycontris": "Popis Vaših doprinosa", "tooltip-pt-login": "Predlažemo Vam da se prijavite, ali nije obvezno.", "tooltip-pt-logout": "Odjavi se", "tooltip-pt-createaccount": "Nudimo vam mogućnost da napravite račun i prijavite se, iako to nije nužno.", @@ -2467,8 +2461,8 @@ "exif-colorspace": "Kolor prostor", "exif-componentsconfiguration": "Značenje pojedinih komponenti", "exif-compressedbitsperpixel": "Dubina boje poslije sažimanja", - "exif-pixelydimension": "Važeća širina slike", - "exif-pixelxdimension": "Važeća visina slike", + "exif-pixelxdimension": "Važeća širina slike", + "exif-pixelydimension": "Važeća visina slike", "exif-usercomment": "Suradnički komentar", "exif-relatedsoundfile": "Povezani zvučni zapis", "exif-datetimeoriginal": "Datum i vrijeme slikanja", @@ -2954,7 +2948,6 @@ "redirect-file": "Datotečno ime", "fileduplicatesearch": "Traži kopije datoteka", "fileduplicatesearch-summary": "Traži kopije datoteka na temelju njihove hash vrijednosti.", - "fileduplicatesearch-legend": "Traži kopije datoteka", "fileduplicatesearch-filename": "Ime datoteke:", "fileduplicatesearch-submit": "Traži", "fileduplicatesearch-info": "$1 × $2 piksela
Veličina datoteke: $3
MIME tip: $4", diff --git a/languages/i18n/hrx.json b/languages/i18n/hrx.json index 160e2b6d02..af3840ce1f 100644 --- a/languages/i18n/hrx.json +++ b/languages/i18n/hrx.json @@ -1558,8 +1558,6 @@ "categories": "Kategoriee", "categoriespagetext": "Follichende {{PLURAL:$1|Kategorie enthält|Kategorie enthalle}} Seite orrer Dateie.\n[[Special:UnusedCategories|Verwaiste Kategorie]] werre hie net uffgeführt.\nSieh ooch die List von der [[Special:WantedCategories|gewünschte Kategorie]].", "categoriesfrom": "Zeich Kategorie ab:", - "special-categories-sort-count": "Sortierung noh Oonzoohl", - "special-categories-sort-abc": "Sortierung noh Alphabet", "deletedcontributions": "Abgewischte Beiträch", "deletedcontributions-title": "Abgewischte Beiträch", "sp-deletedcontributions-contribs": "Benutzerbeiträche", @@ -2124,10 +2122,6 @@ "import-logentry-upload-detail": "$1 {{PLURAL:$1|Version|Versione}}", "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|Version|Versione}} von $2", "javascripttest": "JavaScript-Test", - "javascripttest-pagetext-noframework": "Die Seit ist JavaSkript-Tests voarbehalt.", - "javascripttest-pagetext-unknownframework": "Unbekanntes Framework \"$1\".", - "javascripttest-pagetext-frameworks": "Bittschön wähl en von der follichende Prüfumgebunge aus: $1", - "javascripttest-pagetext-skins": "Wähl en Benutzeroberfläch zur Doorrichführung von der Test aus:", "javascripttest-qunit-intro": "Sieh die [$1 Dokumentation zu Tests] uff mediawiki.org", "tooltip-pt-userpage": "Dein Benutzerseit", "tooltip-pt-anonuserpage": "Benutzerseit von der IP-Adress von der aus du Ännrunge doorrichführst", @@ -2370,8 +2364,8 @@ "exif-colorspace": "Farrebraum", "exif-componentsconfiguration": "Bedeitung einzelner Komponente", "exif-compressedbitsperpixel": "Komprimierte Bits por Pixel", - "exif-pixelydimension": "Bildbreit", - "exif-pixelxdimension": "Bildhöch", + "exif-pixelxdimension": "Bildbreit", + "exif-pixelydimension": "Bildhöch", "exif-usercomment": "Benutzerkommentare", "exif-relatedsoundfile": "Zugehöriche Tondatei", "exif-datetimeoriginal": "Erfassungszeitpunkt", @@ -2794,7 +2788,6 @@ "version-libraries-description": "Beschreibung", "version-libraries-authors": "Autore", "redirect": "Weiterleitung uff Benutzerseit, Seit, Seiteversion orrer Datei", - "redirect-legend": "Weiterleitung uff en Benutzerseit, Seit, Seiteversion orrer Datei", "redirect-summary": "Die Spezialseit leitet uff en Benutzerseit (numerische Benutzerkennung oongeb), Seit (Seitekennung oongeb), Seiteversion (Versionskennung oongeb) orrer Datei (Dateinoome oongeb) weiter. Benutzung: [[{{#Special:Redirect}}/user/101]], [[{{#Special:Redirect}}/page/64308]], [[{{#Special:Redirect}}/revision/328429]] orrer [[{{#Special:Redirect}}/file/Example.jpg]].", "redirect-submit": "Los, geh", "redirect-lookup": "Suche:", @@ -2806,7 +2799,6 @@ "redirect-not-exists": "Der Weart woard net gefund", "fileduplicatesearch": "Dateiduplikatsuch", "fileduplicatesearch-summary": "Such noh Dateiduplikate uff Basis von ihres Hashwearte.", - "fileduplicatesearch-legend": "Such noh Duplikate", "fileduplicatesearch-filename": "Dateinoome:", "fileduplicatesearch-submit": "Such", "fileduplicatesearch-info": "$1 × $2 Pixel
Dateigröss: $3
MIME-Typ: $4", diff --git a/languages/i18n/hsb.json b/languages/i18n/hsb.json index 6e8b482cab..f8069bfc74 100644 --- a/languages/i18n/hsb.json +++ b/languages/i18n/hsb.json @@ -1619,8 +1619,6 @@ "categories": "Kategorije", "categoriespagetext": "{{PLURAL:$1|Slědowaca kategorija wobsahuje|Slědowacej kategoriji wobsahujetej|Slědowace kategorije wobsahuja|Slědowace kategorije wobsahuja}} strony abo medije.\n[[Special:UnusedCategories|Njewužiwane kategorije]] so tu njepokazuja.\nHlej tež [[Special:WantedCategories|požadane kategorije]].", "categoriesfrom": "Kategorije pokazać, započinajo z:", - "special-categories-sort-count": "Po ličbje sortěrować", - "special-categories-sort-abc": "Alfabetisce sortěrować", "deletedcontributions": "wušmórnjene přinoški", "deletedcontributions-title": "wušmórnjene přinoški", "sp-deletedcontributions-contribs": "přinoški", @@ -2198,11 +2196,7 @@ "import-logentry-upload-detail": "$1 {{PLURAL:$1|wersija importowana|wersiji importowanej|wersije importowane|wersijow importowane}}", "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|wersija|wersiji|wersije|wersijow}} z $2 {{PLURAL:$1|importowana|importowanej|importowane|importowanych}}", "javascripttest": "JavaScriptowy test", - "javascripttest-pagetext-noframework": "Tuta strona je za přewjedźenje javascriptowych testow přewostajena.", - "javascripttest-pagetext-unknownframework": "Njeznaty wobłuk \"$1\".", "javascripttest-pagetext-unknownaction": "Njeznata akcija \"$1\"", - "javascripttest-pagetext-frameworks": "Prošu wubjer jedyn ze slědowacych testowanskich wobłukow: $1", - "javascripttest-pagetext-skins": "Wubjer drastu za přewjedźenje testow:", "javascripttest-qunit-intro": "Hlej [$1 testowansku dokumentaciju] na mediawiki.org.", "tooltip-pt-userpage": "Twoja wužiwarska strona", "tooltip-pt-anonuserpage": "Wužiwarska strona IP-adresy, z kotrejž tuchwilu dźěłaš", @@ -2455,8 +2449,8 @@ "exif-colorspace": "Barbny rum", "exif-componentsconfiguration": "Woznam kóždeje komponenty", "exif-compressedbitsperpixel": "Modus wobrazoweje kompresije", - "exif-pixelydimension": "Šěrokosć wobraza", - "exif-pixelxdimension": "Wysokosć wobraza", + "exif-pixelxdimension": "Šěrokosć wobraza", + "exif-pixelydimension": "Wysokosć wobraza", "exif-usercomment": "Přispomjenja wužiwarja", "exif-relatedsoundfile": "Zwjazana zynkowa dataja", "exif-datetimeoriginal": "Datum a čas wutworjenja datow", @@ -2892,7 +2886,6 @@ "version-libraries-library": "Biblioteka", "version-libraries-version": "Wersija", "redirect": "Po datajowym mjenje, wužiwarju, stronje abo wersijowym ID dale sposrědkować", - "redirect-legend": "Do dataje abo strony dale sposrědkować", "redirect-summary": "Tuta specialna strona so do dataje (datajowe mjeno je podate), strony (wersijowy ID abo ID strony je podaty) abo wužiwarskeje strony (numeriski wužiwarski ID je podaty) dale sposrědkuje. Wužiće:\n[[{{#Special:Redirect}}/file/Přikład.jpg]], [[{{#Special:Redirect}}/page/64308]], [[{{#Special:Redirect}}/revision/328429]] abo [[{{#Special:Redirect}}/user/101]].", "redirect-submit": "Los", "redirect-lookup": "Pytać:", @@ -2904,7 +2897,6 @@ "redirect-not-exists": "Hódnota njeje so namakała", "fileduplicatesearch": "Dwójne dataje pytać", "fileduplicatesearch-summary": "Pytanje za duplikatnymi datajemi na zakładźe jich hašoweje hódnoty.", - "fileduplicatesearch-legend": "Duplikaty pytać", "fileduplicatesearch-filename": "Datajowe mjeno:", "fileduplicatesearch-submit": "Pytać", "fileduplicatesearch-info": "$1 × $2 pikselow
Datajowa wulkosć: $3
Typ MIME: $4", diff --git a/languages/i18n/hu.json b/languages/i18n/hu.json index e6565237ee..621b567de0 100644 --- a/languages/i18n/hu.json +++ b/languages/i18n/hu.json @@ -43,7 +43,8 @@ "Matma Rex", "JulesWinnfield-hu", "Bencoke", - "Máté" + "Máté", + "Wolf Rex" ] }, "tog-underline": "Hivatkozások aláhúzása:", @@ -501,7 +502,7 @@ "noemail": "„$1” e-mail címe nincs megadva.", "noemailcreate": "Meg kell adnod egy valós e-mail címet", "passwordsent": "Az új jelszót elküldtük „$1” e-mail címére.\nLépj be a levélben található adatokkal.", - "blocked-mailpassword": "Az IP-címedet blokkoltuk, azaz eltiltottunk a szerkesztéstől, ezért a visszaélések elkerülése érdekében a jelszó-visszaállítás funkciót nem használhatod.", + "blocked-mailpassword": "Az IP-címed blokkoltuk. A visszaélések megelőzése érdekében a jelszó-visszaállítás funkció nem használható erről az IP-címről.", "eauthentsent": "Egy ellenőrző e-mailt küldtünk a megadott címre. Mielőtt más leveleket kaphatnál, igazolnod kell az e-mailben írt utasításoknak megfelelően, hogy valóban a tiéd a megadott cím.", "throttled-mailpassword": "Már elküldtünk egy jelszóemlékeztetőt az utóbbi {{PLURAL:$1|egy|$1}} órában.\nA visszaélések elkerülése végett {{PLURAL:$1|egy|$1}} óránként csak egy jelszó-emlékeztetőt küldünk.", "mailerror": "Hiba történt az e-mail küldése közben: $1", @@ -538,7 +539,7 @@ "newpassword": "Új jelszó:", "retypenew": "Új jelszó ismét:", "resetpass_submit": "Add meg a jelszót és jelentkezz be", - "changepassword-success": "A jelszavad megváltoztatása sikeresen befejeződött!", + "changepassword-success": "A jelszavad megváltozott!", "changepassword-throttled": "Túl sok hibás bejelentkezés.\nVárj $1, mielőtt újra próbálkozol.", "botpasswords": "Botjelszavak", "botpasswords-summary": "A botjelszavak lehetővé teszik egy felhasználói fiókhoz való hozzáférést az API-n keresztül a fiók fő bejelentkezési adatainak megadása nélkül. A botjelszóval történő bejelentkezéskor a felhasználói jogok korlátozottak lehetnek.\n\nHa nem tudod, hogy miért szeretnél ilyet, valószínűleg nem kell csinálnod. Soha senkinek nem szabadna megkérnie téged, hogy generálj neki egyet, hogy odaadhasd neki.", @@ -853,7 +854,7 @@ "revdelete-unsuppress": "Korlátozások eltávolítása a visszaállított változatokról", "revdelete-log": "Ok:", "revdelete-submit": "Alkalmazás a kiválasztott {{PLURAL:$1|változatra|változatokra}}", - "revdelete-success": "'''A változat láthatósága sikeresen frissítve.'''", + "revdelete-success": "A változat láthatósága sikeresen frissítve.", "revdelete-failure": "'''Nem sikerült frissíteni a változat láthatóságát:'''\n$1", "logdelete-success": "'''Az esemény láthatóságának beállítása sikeresen elvégezve.'''", "logdelete-failure": "'''Nem sikerült módosítani a naplóbejegyzés láthatóságát:'''\n$1", @@ -889,6 +890,7 @@ "mergehistory-fail-bad-timestamp": "Érvénytelen időbélyeg.", "mergehistory-fail-invalid-source": "Érvénytelen forráslap.", "mergehistory-fail-invalid-dest": "Érvénytelen céllap.", + "mergehistory-fail-permission": "Nincsen jogod a laptörténetek egyesítéséhez.", "mergehistory-fail-self-merge": "A forrás- és céllap megegyezik.", "mergehistory-fail-toobig": "Nem lehetséges a laptörténetek egyesítése, mivel több mint $1 {{PLURAL:$1|változást}} kellene áthelyezni.", "mergehistory-no-source": "Nem létezik forráslap $1 néven.", @@ -1332,7 +1334,7 @@ "recentchangeslinked-page": "Lap neve:", "recentchangeslinked-to": "Inkább az erre linkelő lapok változtatásait mutasd", "recentchanges-page-added-to-category": "[[:$1]] hozzáadva a kategóriához", - "recentchanges-page-added-to-category-bundled": "[[:$1]] és {{PLURAL:$2|egy oldal|$2 oldal}} hozzáadva a kategóriához", + "recentchanges-page-added-to-category-bundled": "[[:$1]] és [[Special:WhatLinksHere/$1|{{PLURAL:$2|egy oldal|$2 oldal}}]] hozzáadva a kategóriához", "recentchanges-page-removed-from-category": "[[:$1]] eltávolítva a kategóriából", "recentchanges-page-removed-from-category-bundled": "[[:$1]] és {{PLURAL:$2|egy oldal|$2 oldal}} eltávolítva a kategóriából", "upload": "Fájl feltöltése", @@ -1508,6 +1510,7 @@ "uploadstash-badtoken": "A művelet végrehajtása sikertelen volt. Lehetséges, hogy lejártak a szerkesztést hitelesítő adataid. Próbáld újra!", "uploadstash-errclear": "A fájlok törlése nem sikerült.", "uploadstash-refresh": "Fájlok listájának frissítése", + "uploadstash-thumbnail": "bélyegkép megjelenítése", "invalid-chunk-offset": "Érvénytelen darab eltolás", "img-auth-accessdenied": "Hozzáférés megtagadva", "img-auth-nopathinfo": "Hiányzó PATH_INFO.\nA szerver nincs beállítva, hogy továbbítsa ezt az információt.\nLehet, hogy CGI-alapú, és nem támogatja az img_auth-ot.\nLásd https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Image_Authorization!", @@ -1571,7 +1574,7 @@ "filehist-comment": "Megjegyzés", "imagelinks": "Fájlhasználat", "linkstoimage": "Az alábbi {{PLURAL:$1|lap hivatkozik|lapok hivatkoznak}} erre a fájlra:", - "linkstoimage-more": "Több, mint {{PLURAL:$1|egy|$1}} oldal hivatkozik erre a fájlra.\nA következő lista csak az {{PLURAL:$1|első linket|első $1 linket}} tartalmazza.\nA teljes lista [[Special:WhatLinksHere/$2|ezen a lapon]] található meg.", + "linkstoimage-more": "Több mint $1 oldal hivatkozik erre a fájlra.\nA következő lista csak az {{PLURAL:$1|első linket|első $1 linket}} tartalmazza.\nA teljes lista [[Special:WhatLinksHere/$2|ezen a lapon]] található meg.", "nolinkstoimage": "Erre a fájlra nem hivatkozik lap.", "morelinkstoimage": "[[Special:WhatLinksHere/$1|További hivatkozások]] megtekintése", "linkstoimage-redirect": "$1 (fájlátirányítás) $2", @@ -1759,6 +1762,8 @@ "apisandbox-jsonly": "Az API-homokozó használatához JavaScriptre van szükség.", "apisandbox-api-disabled": "API le van tiltva ezen az oldalon.", "apisandbox-intro": "Ezen az oldalon kísérletezhetsz a MediaWiki web service API-val.\nA használattal kapcsolatos további részletek az [[mw:API:Main page|API-dokumentációnál]] találhatók. Példa: [//www.mediawiki.org/wiki/API#A_simple_example olvasd el a főoldal tartalomjegyzékét]. További példákért válassz egy tevékenységet!\n\nFigyelj rá, hogy bár ez csak egy „homokozó”, ettől még az általad végzett műveletek módosíthatják a wikit!", + "apisandbox-fullscreen": "Panel kinyitása", + "apisandbox-unfullscreen": "Lap mutatása", "apisandbox-submit": "Kérés végrehajtása", "apisandbox-reset": "Törlés", "apisandbox-retry": "Újra", @@ -1818,8 +1823,6 @@ "categories-submit": "Mutat", "categoriespagetext": "A következő {{PLURAL:$1|kategória tartalmaz|kategóriák tartalmaznak}} lapokat vagy fájlokat.\nA [[Special:UnusedCategories|nem használt kategóriák]] nem jelennek meg.\nLásd még a [[Special:WantedCategories|keresett kategóriák]] listáját.", "categoriesfrom": "Kategóriák listázása a következő névtől kezdve:", - "special-categories-sort-count": "rendezés elemszám szerint", - "special-categories-sort-abc": "rendezés ABC szerint", "deletedcontributions": "Törölt szerkesztések", "deletedcontributions-title": "Törölt szerkesztések", "sp-deletedcontributions-contribs": "közreműködései", @@ -2006,6 +2009,7 @@ "changecontentmodel-title-label": "Lapcím", "changecontentmodel-model-label": "Új tartalommodell", "changecontentmodel-reason-label": "Indoklás:", + "changecontentmodel-submit": "Változtatás", "changecontentmodel-success-title": "A tartalommodell megváltozott", "changecontentmodel-success-text": "A(z) [[:$1]] lap tartalommodellje sikeresen megváltoztatva.", "changecontentmodel-cannot-convert": "A(z) [[:$1]] lap nem alakítható át $2 típusúvá.", @@ -2194,6 +2198,7 @@ "ipb-unblock": "Felhasználónév vagy IP-cím blokkolásának feloldása", "ipb-blocklist": "Létező blokkok megtekintése", "ipb-blocklist-contribs": "$1 közreműködései", + "ipb-blocklist-duration-left": "$1 van hátra", "unblockip": "Blokk feloldása", "unblockiptext": "Itt tudod visszaadni egy blokkolt felhasználónévnek vagy IP-nek a szerkesztési jogosultságot.", "ipusubmit": "Blokk eltávolítása", @@ -2435,11 +2440,7 @@ "import-logentry-upload-detail": "$1 változat importálva", "import-logentry-interwiki-detail": "$1 változat innen: $2", "javascripttest": "JavaScript tesztelés", - "javascripttest-pagetext-noframework": "Ez az oldal JavaStript tesztek futtatására van fenntartva.", - "javascripttest-pagetext-unknownframework": "Ismeretlen teszt keretrendszer: $1.", "javascripttest-pagetext-unknownaction": "Ismeretlen akció: $1", - "javascripttest-pagetext-frameworks": "Kérlek válaszd valamelyik teszt keretrendszert az alábbiak közül: $1", - "javascripttest-pagetext-skins": "Válassz egy megjelenítő felületet, amin a tesztet futtatod:", "javascripttest-qunit-intro": "Lásd a [$1 tesztelési dokumentációt] a mediawiki.org helyen.", "tooltip-pt-userpage": "A szerkesztőlapod", "tooltip-pt-anonuserpage": "Az általad használt IP-címhez tartozó felhasználói lap", @@ -2705,8 +2706,8 @@ "exif-colorspace": "Színtér", "exif-componentsconfiguration": "Az egyes összetevők jelentése", "exif-compressedbitsperpixel": "Képtömörítési mód", - "exif-pixelydimension": "Képszélesség", - "exif-pixelxdimension": "Képmagasság", + "exif-pixelxdimension": "Képszélesség", + "exif-pixelydimension": "Képmagasság", "exif-usercomment": "Felhasználók megjegyzései", "exif-relatedsoundfile": "Kapcsolódó hangfájl", "exif-datetimeoriginal": "EXIF információ létrehozásának dátuma", @@ -3148,7 +3149,6 @@ "version-libraries-description": "Leírás", "version-libraries-authors": "Szerzők", "redirect": "Átirányítás fájl, szerkesztő, oldal vagy oldalváltozat alapján", - "redirect-legend": "Átirányítás egy fájlra vagy lapra", "redirect-summary": "Ez a speciális lap átirányít egy fájlra (megadott fájlnévvel), lapra (megadott lapváltozat- vagy lapazonosító számmal) vagy felhasználóra (felhasználó azonosítószáma alapján). Használat: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/page/64308]], [[{{#Special:Redirect}}/revision/328429]] vagy [[{{#Special:Redirect}}/user/101]].", "redirect-submit": "Mehet", "redirect-lookup": "Keresés:", @@ -3160,7 +3160,6 @@ "redirect-not-exists": "Érték nem található", "fileduplicatesearch": "Duplikátumok keresése", "fileduplicatesearch-summary": "Fájlok duplikátumainak keresése hash értékük alapján.", - "fileduplicatesearch-legend": "Duplikátum keresése", "fileduplicatesearch-filename": "Fájlnév:", "fileduplicatesearch-submit": "Keresés", "fileduplicatesearch-info": "$1 × $2 pixel
Fájlméret: $3
MIME-típus: $4", @@ -3562,5 +3561,15 @@ "sessionprovider-generic": "$1-munkamenetek", "sessionprovider-mediawiki-session-cookiesessionprovider": "sütialapú munkamenetek", "sessionprovider-nocookies": "A sütik le lehetnek tiltva. Engedélyezd a sütiket, és próbáld meg újra!", - "randomrootpage": "Véletlen lap a gyökérből" + "randomrootpage": "Véletlen lap a gyökérből", + "log-action-filter-delete": "Törlés típusa:", + "log-action-filter-import": "Importálás típusa:", + "log-action-filter-all": "Mind", + "log-action-filter-block-block": "Blokk", + "log-action-filter-block-reblock": "Blokk módosítása", + "log-action-filter-block-unblock": "Blokk feloldása", + "log-action-filter-newusers-autocreate": "Automatikus létrehozás", + "log-action-filter-protect-protect": "Lapvédelem", + "log-action-filter-protect-unprotect": "Védelem feloldása", + "log-action-filter-upload-upload": "Új feltöltés" } diff --git a/languages/i18n/hy.json b/languages/i18n/hy.json index 7b0dd885f5..39436f8dc3 100644 --- a/languages/i18n/hy.json +++ b/languages/i18n/hy.json @@ -531,7 +531,7 @@ "preview": "Նախադիտում", "showpreview": "Նախադիտել", "showdiff": "Կատարված փոփոխությունները", - "blankarticle": "Զգուշացում: Էջը, որը Դուք ստեղծում եք, դատարկ է:\nԵթե նորից սեղմեք «\"{{int:savearticle}}\"» կոճակը, էջը կստեղծվի առանց որևէ բովանդակության:", + "blankarticle": "Զգուշացում: Էջը, որը Դուք ստեղծում եք, դատարկ է:\nԵթե նորից սեղմեք «{{int:savearticle}}» կոճակը, էջը կստեղծվի առանց որևէ բովանդակության:", "anoneditwarning": "Ուշադրություն, Դուք չեք մտել համակարգ։ Ցանկացած խմբագրման դեպքում Ձեր IP հասցեն կդառնա բոլորին տեսանելի։ Եթե Դուք [$1 մուտք գործեք] կամ [$2 ստեղծեք մասնակցային հաշիվ], Ձեր կատարած խմբագրումները կկապվեն Ձեր մասնակցային անվան հետ, ինչպես նաև կունենաք այլ առավելություններ։", "anonpreviewwarning": "Դուք չեք մտել համակարգ։\nՀիշելով Ձեր կատարած խմբագրումը, այն կպահանվի Ձեր IP հասցեի հետ միասին այս էջի խմբագրումների պատմության մեջ։", "missingsummary": "'''Հիշեցում.''' Դուք չեք տվել խմբագրման ամփոփում։ «Հիշել» կոճակի կրկնակի մատնահարման դեպքում փոփոխությունները կհիշվեն առանց ամփոփման։", diff --git a/languages/i18n/ia.json b/languages/i18n/ia.json index 922803ae01..ebba6310e3 100644 --- a/languages/i18n/ia.json +++ b/languages/i18n/ia.json @@ -129,6 +129,8 @@ "october-date": "$1 de octobre", "november-date": "$1 de novembre", "december-date": "$1 de decembre", + "period-am": "AM", + "period-pm": "PM", "pagecategories": "{{PLURAL:$1|Categoria|Categorias}}", "category_header": "Articulos in le categoria \"$1\"", "subcategories": "Subcategorias", @@ -153,7 +155,6 @@ "moredotdotdot": "Plus...", "morenotlisted": "Iste lista non es complete.", "mypage": "Pagina", - "anonuserpage": "Usator incognite", "mytalk": "Discussion", "anontalk": "Discussion", "navigation": "Navigation", @@ -385,6 +386,8 @@ "virus-scanfailed": "scannamento fallite (codice $1)", "virus-unknownscanner": "antivirus non cognoscite:", "logouttext": "'''Tu ha claudite le session.'''\n\nNota que alcun paginas pote continuar a apparer como si tu esserea ancora authenticate. Pro remediar isto, tu pote vacuar le cache de tu navigator.", + "cannotlogoutnow-title": "Impossibile clauder session ora", + "cannotlogoutnow-text": "Non es possibile clauder le session usante $1.", "welcomeuser": "Benvenite, $1!", "welcomecreation-msg": "Tu conto ha essite create.\nNon oblida personalisar tu [[Special:Preferences|preferentias in {{SITENAME}}]].", "yourname": "Nomine de usator:", @@ -401,6 +404,8 @@ "remembermypassword": "Memorar mi contrasigno in iste navigator (pro un maximo de $1 {{PLURAL:$1|die|dies}})", "userlogin-remembermypassword": "Mantener mi session aperte", "userlogin-signwithsecure": "Usar un connexion secur", + "cannotloginnow-title": "Impossibile aperir session ora", + "cannotloginnow-text": "Non es possibile aperir un session usante $1.", "yourdomainname": "Tu dominio:", "password-change-forbidden": "Non es possibile cambiar le contrasigno in iste wiki.", "externaldberror": "O il occurreva un error in le base de datos de authentication, o tu non ha le autorisation de actualisar tu conto externe.", @@ -448,7 +453,7 @@ "nocookieslogin": "{{SITENAME}} usa ''cookies'' pro mantener le sessiones del usatores.\nTu ha disactivate le functionalitate del ''cookies''.\nPer favor activa lo e reprova.", "nocookiesfornew": "Le conto de usator non esseva create, proque nos non poteva confirmar su origine.\nVerifica que tu ha activate le \"cookies\", recarga iste pagina e reproba.", "noname": "Tu non specificava un nomine de usator valide.", - "loginsuccesstitle": "Session aperite con successo", + "loginsuccesstitle": "Session aperite", "loginsuccess": "'''Tu es ora authenticate in {{SITENAME}} como \"$1\".'''", "nosuchuser": "Non existe un usator con le nomine \"$1\".\nIn le nomines de usator se distingue inter majusculas e minusculas.\nVerifica le orthographia, o [[Special:UserLogin/signup|crea un nove conto]].", "nosuchusershort": "Non existe un usator con le nomine \"$1\".\nVerifica le orthographia.", @@ -467,7 +472,7 @@ "noemail": "Il non ha un adresse de e-mail registrate pro le usator \"$1\".", "noemailcreate": "Es necessari fornir un adresse de e-mail valide", "passwordsent": "Un nove contrasigno ha essite inviate al adresse de e-mail registrate pro \"$1\".\nPer favor aperi session de novo post reciper lo.", - "blocked-mailpassword": "Tu adresse IP es blocate de facer modificationes, e pro impedir le abuso, le uso del function pro recuperar contrasignos es equalmente blocate.", + "blocked-mailpassword": "Tu adresse IP es blocate pro modification. Pro evitar abusos, il non es permittite recuperar contrasignos ab iste adresse IP.", "eauthentsent": "Un message de confirmation ha essite inviate al adresse de e-mail specificate.\nPro permitter que le systema invia altere messages a iste adresse, tu debe sequer le instructiones in iste message pro confirmar que le adresse es realmente tue.", "throttled-mailpassword": "Un message pro le reinitialisation del contrasigno ha jam essite inviate intra le ultime {{PLURAL:$1|hora|$1 horas}}.\nPro prevenir le abuso, solmente un message pro le reinitialisation del contrasigno essera inviate per {{PLURAL:$1|hora|$1 horas}}.", "mailerror": "Error de inviar e-mail: $1", @@ -484,7 +489,7 @@ "createaccount-title": "Creation de un conto pro {{SITENAME}}", "createaccount-text": "Un persona ha create un conto in tu adresse de e-mail a {{SITENAME}} ($4) denominate \"$2\", con le contrasigno \"$3\".\nTu deberea aperir un session e cambiar tu contrasigno ora.\n\nTu pote ignorar iste message si iste conto ha essite create in error.", "login-throttled": "Tu ha facite troppo de tentativas de aperir session.\nPer favor attende $1 ante de probar lo novemente.", - "login-abort-generic": "Apertura de session non succedite - Abortate", + "login-abort-generic": "Apertura de session fallite - Abortate", "login-migrated-generic": "Tu conto ha essite migrate, e tu nomine de usator non plus existe in iste wiki.", "loginlanguagelabel": "Lingua: $1", "suspicious-userlogout": "Le requesta de clauder le session ha essite refusate proque illo pare haber essite inviate per un navigator o proxy de cache defectuose.", @@ -506,9 +511,37 @@ "resetpass_submit": "Definir contrasigno e aperir un session", "changepassword-success": "Tu contrasigno ha essite cambiate!", "changepassword-throttled": "Tu ha recentemente facite troppo de tentativas de aperir session.\nPer favor attende $1 ante de probar lo novemente.", + "botpasswords": "Contrasignos de robot", + "botpasswords-summary": "Le contrasignos de robot permitte acceder a un conto de usator via API sin usar le credentiales de authentication principal del conto. Le derectos de usator concedite per un contrasigno de robot pote esser limitate.\n\nSi tu non sape proque tu volerea facer isto, tu probabilemente non debe facer lo. Nemo deberea jammais demandar te a crear un tal contrasigno e dar lo a ille.", + "botpasswords-disabled": "Le contrasignos de robot es disactivate.", + "botpasswords-no-central-id": "Pro usar le contrasignos de robot, tu debe aperir session per medio de un conto centralisate.", + "botpasswords-existing": "Contrasignos de robot existente", + "botpasswords-createnew": "Crear un nove contrasigno de robot", + "botpasswords-editexisting": "Modificar un contrasigno de robot existente", + "botpasswords-label-appid": "Nomine del robot:", + "botpasswords-label-create": "Crear", + "botpasswords-label-update": "Actualisar", + "botpasswords-label-cancel": "Cancellar", + "botpasswords-label-delete": "Deler", + "botpasswords-label-resetpassword": "Reinitialisar le contrasigno", + "botpasswords-label-grants": "Concessiones applicabile:", + "botpasswords-help-grants": "Cata concession da accesso al derectos de usator listate que un conto de usator jam ha. Vide le [[Special:ListGrants|tabula de concessiones]] pro plus information.", + "botpasswords-label-restrictions": "Restrictiones de uso:", + "botpasswords-label-grants-column": "Concedite", + "botpasswords-bad-appid": "Le nomine del robot \"$1\" non es valide.", + "botpasswords-insert-failed": "Le addition del nomine de robot \"$1\" ha fallite. Esque illo ha jam essite addite?", + "botpasswords-update-failed": "Le actualisation del nomine de robot \"$1\" ha fallite. Esque illo ha essite delite?", + "botpasswords-created-title": "Contrasigno de robot create", "botpasswords-created-body": "Le contrasigno pro le robot \"$1\" del usator \"$2\" ha essite create.", + "botpasswords-updated-title": "Contrasigno de robot actualisate", "botpasswords-updated-body": "Le contrasigno pro le robot \"$1\" del usator \"$2\" ha essite actualisate.", + "botpasswords-deleted-title": "Contrasigno de robot delite", "botpasswords-deleted-body": "Le contrasigno pro le robot \"$1\" del usator \"$2\" ha essite delite.", + "botpasswords-newpassword": "Le nove contrasigno pro aperir session con $1 es $2. Per favor, conserva isto pro uso futur.", + "botpasswords-no-provider": "BotPasswordsSessionProvider non es disponibile.", + "botpasswords-restriction-failed": "Session impedite per restrictiones de contrasigno de robot.", + "botpasswords-invalid-name": "Iste nomine de usator non contine le separator pro contrasigno de robot (\"$1\").", + "botpasswords-not-exist": "Le usator \"$1\" non ha un contrasigno de robot del nomine \"$2\".", "resetpass_forbidden": "Le contrasignos non pote esser cambiate", "resetpass-no-info": "Tu debe aperir un session pro poter acceder directemente a iste pagina.", "resetpass-submit-loggedin": "Cambiar contrasigno", @@ -535,8 +568,8 @@ "passwordreset-emailtext-ip": "Un persona (probabilemente tu, ab le adresse IP $1) requestava le reinitialisation de tu\ncontrasigno de {{SITENAME}} ($4). Le {{PLURAL:$3|conto|contos}} de usator sequente es\nassociate con iste adresse de e-mail:\n\n$2\n\nIste {{PLURAL:$3|contrasigno|contrasignos}} temporari expirara post {{PLURAL:$5|un die|$5 dies}}.\nTu deberea ora aperir session e eliger un nove contrasigno. Si un altere persona faceva iste\nrequesta, o si tu te ha rememorate tu contrasigno original e non plus\nvole cambiar lo, tu pote ignorar iste message e continuar a usar le ancian\ncontrasigno.", "passwordreset-emailtext-user": "Le usator $1 in {{SITENAME}} requestava un reinitialisation de tu contrasigno in {{SITENAME}}\n($4). Le {{PLURAL:$3|conto|contos}} de usator sequente es associate con iste adresse de e-mail:\n\n$2\n\nIste {{PLURAL:$3|contrasigno|contrasignos}} temporari expirara post {{PLURAL:$5|un die|$5 dies}}.\nTu deberea ora aperir session e eliger un nove contrasigno. Si un altere persona faceva iste\nrequesta, o si tu te ha rememorate tu contrasigno original e non plus\nvole cambiar lo, tu pote ignorar iste message e continuar a usar le ancian\ncontrasigno.", "passwordreset-emailelement": "Nomine de usator: \n$1\n\nContrasigno temporari: \n$2", - "passwordreset-emailsentemail": "Si iste es un adresse de e-mail registrate pro tu conto, alora un message de e-mail pro le reinitialisation del contrasigno essera inviate.", - "passwordreset-emailsentusername": "Si il ha un correspondente adresse de e-mail registrate, alora un e-mail pro reinitialisar le contrasigno essera inviate.", + "passwordreset-emailsentemail": "Si iste adresse es associate a tu conto, alora un e-mail pro reinitialisar le contrasigno essera inviate.", + "passwordreset-emailsentusername": "Si il ha un adresse de e-mail associate a iste conto, alora un e-mail pro reinitialisar le contrasigno essera inviate.", "passwordreset-emailsent-capture": "Un message de e-mail pro le reinitialisation del contrasigno ha essite inviate; iste message es monstrate hic infra.", "passwordreset-emailerror-capture": "Un e-mail pro le reinitialisation del contrasigno ha essite generate; iste message es monstrate hic infra, ma le invio al {{GENDER:$2|usator}} ha fallite: $1", "changeemail": "Cambiar o remover adresse de e-mail", @@ -630,8 +663,8 @@ "previewnote": "'''Isto es solmente un previsualisation.'''\nLe modificationes non ha ancora essite publicate!", "continue-editing": "Saltar al quadro de modification", "previewconflict": "Iste previsualisation reflecte le apparentia final del texto in le area de modification superior\nsi tu opta pro publicar lo.", - "session_fail_preview": "'''Nos non poteva processar tu modification proque nos perdeva le datos del session.\nPer favor reprova.\nSi illo ancora non va, prova [[Special:UserLogout|clauder tu session]] e aperir un nove session.'''", - "session_fail_preview_html": "'''Nos non poteva processar tu modification proque nos perdeva le datos del session.'''\n\n''Post que HTML crude es active in {{SITENAME}}, le previsualisation es celate como precaution contra attaccos via JavaScript.''\n\n'''Si isto es un tentativa de modification legitime, per favor reprova lo.\nSi illo ancora non va, prova [[Special:UserLogout|clauder tu session]] e aperir un nove session.'''", + "session_fail_preview": "Oh guai! Iste modification ha essite impedite per un perdita de datos del session.\n\nEs possibile que tu session ha essite claudite. Per favor, verifica que tu session es ancora aperte e tenta lo de novo.\nSi le problema persiste, proba a [[Special:UserLogout|clauder session]] e aperir un nove session, verificante que tu navigator accepta le cookies ab iste sito.", + "session_fail_preview_html": "Oh guai! Iste modification ha essite impedite per un perdita de datos del session.\n\nPost que HTML crude es active in {{SITENAME}}, le previsualisation es celate como precaution contra attaccos via JavaScript.\n\nSi iste tentativa de modification es legitime, per favor, tenta lo de novo.\nSi le problema persiste, proba a [[Special:UserLogout|clauder session]] e aperir un nove session, verificante que tu navigator accepta le cookies ab iste sito.", "token_suffix_mismatch": "'''Tu modification ha essite refusate proque tu cliente corrumpeva le characteres de punctuation in le indicio de modification.\nIste refusa es pro evitar le corruption del texto del pagina.\nIsto pote occurrer quando tu usa un servicio problematic de ''proxy'' anonyme a base de web.'''", "edit_form_incomplete": "'''Certe partes del formulario de modification non attingeva le servitor; re-verifica que tu modificationes es intacte e reproba.'''", "editing": "Modification de $1", @@ -797,7 +830,7 @@ "revdelete-unsuppress": "Eliminar restrictiones super versiones restaurate", "revdelete-log": "Motivo:", "revdelete-submit": "Applicar al {{PLURAL:$1|version|versiones}} seligite", - "revdelete-success": "'''Le visibilitate del version ha essite actualisate con successo.'''", + "revdelete-success": "Le visibilitate del version ha essite actualisate.", "revdelete-failure": "'''Le visibilitate del version non poteva esser actualisate:'''\n$1", "logdelete-success": "Le visibilitate del registro ha essite definite.", "logdelete-failure": "'''Le visibilitate del registro non poteva esser cambiate:'''\n$1", @@ -830,6 +863,13 @@ "mergehistory-empty": "Nulle versiones pote esser fusionate.", "mergehistory-done": "$3 {{PLURAL:$3|version|versiones}} de $1 fusionate in [[:$2]] con successo.", "mergehistory-fail": "Impossibile executar le fusion del historia. Per favor reverifica le parametros del pagina e del tempore.", + "mergehistory-fail-bad-timestamp": "Data e hora non valide.", + "mergehistory-fail-invalid-source": "Pagina de origine non valide.", + "mergehistory-fail-invalid-dest": "Pagina de destination non valide.", + "mergehistory-fail-no-change": "Nulle version de historia ha essite fusionate. Per favor, reverifica le parametros de pagina e de tempore.", + "mergehistory-fail-permission": "Permissiones insufficiente pro fusionar le historia.", + "mergehistory-fail-self-merge": "Le paginas de origine e de destination es identic.", + "mergehistory-fail-timestamps-overlap": "Le versiones de origine se superpone o seque le versiones de destination.", "mergehistory-fail-toobig": "Le historias de versiones non pote esser fusionate con plus de $1 {{PLURAL:$1|version|versiones}} a displaciar.", "mergehistory-no-source": "Le pagina de origine $1 non existe.", "mergehistory-no-destination": "Le pagina de destination $1 non existe.", @@ -1020,10 +1060,10 @@ "userrights": "Gestion de derectos de usator", "userrights-lookup-user": "Gerer gruppos de usatores", "userrights-user-editname": "Entra un nomine de usator:", - "editusergroup": "Modificar gruppos de usatores", + "editusergroup": "Modificar gruppos de {{GENDER:$1|usator}}", "editinguser": "Cambia le derectos del {{GENDER:$1|usator}} [[User:$1|$1]] $2", "userrights-editusergroup": "Modificar gruppos de usatores", - "saveusergroups": "Salveguardar gruppos de usatores", + "saveusergroups": "Salveguardar gruppos de {{GENDER:$1|usator}}", "userrights-groupsmember": "Membro de:", "userrights-groupsmember-auto": "Membro implicite de:", "userrights-groups-help": "Tu pote alterar le gruppos del quales iste usator es membro:\n* Un quadrato marcate significa que le usator es membro del gruppo in question.\n* Un non marcate significa que ille non es membro de illo.\n* Un * indica que tu non potera eliminar le gruppo quando tu lo ha addite, o vice versa.", @@ -1061,6 +1101,7 @@ "right-createpage": "Crear paginas (non discussion)", "right-createtalk": "Crear paginas de discussion", "right-createaccount": "Crear nove contos de usator", + "right-autocreateaccount": "Aperir session automaticamente con un conto de usator externe", "right-minoredit": "Marcar modificationes como minor", "right-move": "Renominar paginas", "right-move-subpages": "Renominar paginas con lor subpaginas", @@ -1129,25 +1170,35 @@ "right-managechangetags": "Crear e deler [[Special:Tags|etiquettas]] in le base de datos", "right-applychangetags": "Applicar [[Special:Tags|etiquettas]] al proprie modificationes", "right-changetags": "Adder e remover qualcunque [[Special:Tags|etiquettas]] sur individual versiones e entratas de registro", - "grant-generic": "gruppo de derectos \"$1\"", + "grant-generic": "Gruppo de derectos \"$1\"", + "grant-group-page-interaction": "Interager con paginas", + "grant-group-file-interaction": "Interager con multimedia", + "grant-group-watchlist-interaction": "Interager con tu observatorio", + "grant-group-email": "Inviar e-mail", + "grant-group-high-volume": "Exequer actiones in massa", + "grant-group-customization": "Personalisation e perferentias", "grant-group-administration": "Exequer actiones administrative", + "grant-group-other": "Activitates diverse", "grant-blockusers": "Blocar e disblocar usatores", + "grant-createaccount": "Crear contos", "grant-createeditmovepage": "Crear, modificar e renominar paginas", "grant-delete": "Deler paginas, versiones e entratas de registro", - "grant-editinterface": "Modificar le spatio de nomines MediaWiki e le CSS/JS de usatores", - "grant-editmycssjs": "Modificar le CSS/JS del proprie usator", - "grant-editmywatchlist": "Modificar le proprie observatorio", + "grant-editinterface": "Modificar le spatio de nomines MediaWiki e le CSS/JavaScript de usatores", + "grant-editmycssjs": "Modificar le CSS/JavaScript del proprie usator", + "grant-editmyoptions": "Modificar tu preferentias de usator", + "grant-editmywatchlist": "Modificar tu observatorio", "grant-editpage": "Modificar paginas existente", "grant-editprotected": "Modificar paginas protegite", "grant-highvolume": "Modification in massa", "grant-oversight": "Celar usatores e supprimer versiones", - "grant-patrol": "Patruliar cambiamentos in paginas", + "grant-patrol": "Patruliar cambiamentos a paginas", "grant-protect": "Proteger e disproteger paginas", - "grant-rollback": "Revocar cambiamentos in paginas", + "grant-rollback": "Revocar cambiamentos a paginas", "grant-sendemail": "Inviar e-mail a altere usatores", "grant-uploadeditmovefile": "Actualisar, reimplaciar e renominar files", "grant-uploadfile": "Incargar nove files", - "grant-viewdeleted": "Vider information delite", + "grant-basic": "Derectos de base", + "grant-viewdeleted": "Vider files e paginas delite", "grant-viewmywatchlist": "Vider le proprie observatorio", "newuserlogpage": "Registro de creation de usatores", "newuserlogpagetext": "Isto es un registro de creation de usatores.", @@ -1158,6 +1209,7 @@ "action-createpage": "crear paginas", "action-createtalk": "crear paginas de discussion", "action-createaccount": "crear iste conto de usator", + "action-autocreateaccount": "crear automaticamente iste conto de usator externe", "action-history": "vider le historia de iste pagina", "action-minoredit": "marcar iste modification como minor", "action-move": "renominar iste pagina", @@ -1262,9 +1314,9 @@ "recentchangeslinked-page": "Nomine del pagina:", "recentchangeslinked-to": "Monstrar modificationes in paginas con ligamines al pagina specificate", "recentchanges-page-added-to-category": "[[:$1]] addite al categoria", - "recentchanges-page-added-to-category-bundled": "[[:$1]] e {{PLURAL:$2|un pagina|$2 paginas}} addite al categoria", + "recentchanges-page-added-to-category-bundled": "[[:$1]] e [[Special:WhatLinksHere/$1|{{PLURAL:$2|un pagina|$2 paginas}}]] addite al categoria", "recentchanges-page-removed-from-category": "[[:$1]] removite del categoria", - "recentchanges-page-removed-from-category-bundled": "[[:$1]] e {{PLURAL:$2|un pagina|$2 paginas}} removite del categoria", + "recentchanges-page-removed-from-category-bundled": "[[:$1]] e [[Special:WhatLinksHere/$1|{{PLURAL:$2|un pagina|$2 paginas}}]] removite del categoria", "autochange-username": "Cambiamento automatic de MediaWiki", "upload": "Incargar file", "uploadbtn": "Incargar file", @@ -1337,7 +1389,8 @@ "uploaded-script-svg": "Un elemento de script \"$1\" se trova in le file SVG incargate.", "uploaded-hostile-svg": "Certe codice CSS insecur se trova in le elemento de stilo del file SVG incargate.", "uploaded-event-handler-on-svg": "Fixar attributos de gestion de eventos $1=\"$2\" non es permittite in files SVG.", - "uploaded-href-unsafe-target-svg": "Un href a un objectivo non secur <$1 $2=\"$3\"> se trova in le file SVG incargate.", + "uploaded-href-attribute-svg": "Le attributos href in files SVG pote solmente ligar a adresses http:// o https://, ma un adresse <$1 $2=\"$3\"> ha essite trovate.", + "uploaded-href-unsafe-target-svg": "Un href a datos non secur: le URI <$1 $2=\"$3\"> se trova in le file SVG incargate.", "uploaded-animate-svg": "Un etiqueta \"animate\" que poterea cambiar le href, usante le attributo \"from\" <$1 $2=\"$3\">, se trova in le file SVG incargate.", "uploaded-setting-event-handler-svg": "Fixar le attributos de gestion de eventos non es permittite, ma le codice <$1 $2=\"$3\"> se trova in le file SVG incargate.", "uploaded-setting-href-svg": "Usar le etiquetta \"set\" pro adder le attributo \"href\" al elemento genitor non es permittite.", @@ -1370,6 +1423,7 @@ "upload-too-many-redirects": "Le URL contineva troppo de redirectiones", "upload-http-error": "Un error HTTP occurreva: $1", "upload-copy-upload-invalid-domain": "Le incargamento de copias non es disponibile ab iste dominio.", + "upload-foreign-cant-upload": "Iste wiki non es configurate pro incargar files al repositorio de files externe demandate.", "upload-dialog-title": "Incargar file", "upload-dialog-button-cancel": "Cancellar", "upload-dialog-button-done": "Facite", @@ -1377,7 +1431,9 @@ "upload-dialog-button-upload": "Incargar", "upload-form-label-infoform-title": "Detalios", "upload-form-label-infoform-name": "Nomine", + "upload-form-label-infoform-name-tooltip": "Un titulo descriptive e unic pro le file, que servira de nomine de file. Tu pote usar linguage simple con spatios. Non includer le extension del nomine del file.", "upload-form-label-infoform-description": "Description", + "upload-form-label-infoform-description-tooltip": "Describe brevemente tote le aspectos notabile de iste obra. Pro un photo, mentiona le cosas principal que es representate, le occasion o le loco.", "upload-form-label-usage-title": "Uso", "upload-form-label-usage-filename": "Nomine del file", "foreign-structured-upload-form-label-own-work": "Iste es mi proprie obra", @@ -1410,7 +1466,7 @@ "backend-fail-read": "Non poteva leger le file $1", "backend-fail-create": "Non poteva crear le file $1.", "backend-fail-maxsize": "Impossibile scriber le file $1 perque illo es plus grande que {{PLURAL:$2|un byte|$2 bytes}}.", - "backend-fail-readonly": "Le systema de immagazinage \"$1\" es actualmente in lectura sol. Le sequente motivo esseva specificate: \"$2\"", + "backend-fail-readonly": "Le systema de immagazinage \"$1\" es actualmente in lectura sol. Le ration indicate es: \"$2\"", "backend-fail-synced": "Le file \"$1\" es in un stato inconsistente inter le systemas interne de immagazinage", "backend-fail-connect": "Impossibile connecter al systema de immagazinage \"$1\".", "backend-fail-internal": "Un error incognite occurreva in le systema de immagazinage \"$1\".", @@ -1440,6 +1496,7 @@ "uploadstash-badtoken": "Le execution de iste action ha fallite, forsan perque le datos del session ha expirate. Tenta lo de novo.", "uploadstash-errclear": "Le radimento del files ha fallite.", "uploadstash-refresh": "Refrescar le lista de files", + "uploadstash-thumbnail": "vider miniatura", "invalid-chunk-offset": "Position de segmento invalide", "img-auth-accessdenied": "Accesso refusate", "img-auth-nopathinfo": "PATH_INFO manca.\nLe servitor non ha essite configurate pro passar iste information.\nIllo pote esser basate super CGI e non pote supportar img_auth.\nVide https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Image_Authorization.", @@ -1637,6 +1694,7 @@ "mostrevisions": "Paginas le plus modificate", "prefixindex": "Tote le paginas con prefixo", "prefixindex-namespace": "Tote le paginas con prefixo (spatio de nomines $1)", + "prefixindex-submit": "Monstrar", "prefixindex-strip": "Remover prefixo in lista", "shortpages": "Paginas curte", "longpages": "Paginas longe", @@ -1654,11 +1712,13 @@ "protectedpages-performer": "Protegite per", "protectedpages-params": "Parametros de protection", "protectedpages-reason": "Motivo", + "protectedpages-submit": "Monstrar paginas", "protectedpages-unknown-timestamp": "Incognite", "protectedpages-unknown-performer": "Usator incognite", "protectedtitles": "Titulos protegite", "protectedtitles-summary": "Iste pagina lista titulos actualmente protegite contra creation. Pro un lista de paginas existente que ha essite protegite, vide [[{{#special:ProtectedPages}}|{{int:protectedpages}}]].", "protectedtitlesempty": "Nulle titulos es actualmente protegite con iste parametros.", + "protectedtitles-submit": "Monstrar titulos", "listusers": "Lista de usatores", "listusers-editsonly": "Monstrar solmente usatores con modificationes", "listusers-creationsort": "Ordinar per data de creation", @@ -1666,6 +1726,7 @@ "usereditcount": "$1 {{PLURAL:$1|modification|modificationes}}", "usercreated": "{{GENDER:$3|Create}} le $1 a $2", "newpages": "Nove paginas", + "newpages-submit": "Monstrar", "newpages-username": "Nomine de usator:", "ancientpages": "Paginas le plus ancian", "move": "Renominar", @@ -1683,14 +1744,39 @@ "apihelp": "Adjuta con le API", "apihelp-no-such-module": "Modulo \"$1\" non trovate.", "apisandbox": "Cassa de sablo pro API", + "apisandbox-jsonly": "JavaScript es necessari pro usar le cassa a sablo del API.", "apisandbox-api-disabled": "Le API ha essite disactivate in iste sito.", - "apisandbox-intro": "Usa iste pagina pro experimentar con le '''API de servicio web de MediaWiki'''.\nConsulta [//www.mediawiki.org/wiki/API:Main_page le documentation del API] pro ulterior detalios concernente le uso del API. Per exemplo: [//www.mediawiki.org/wiki/API#A_simple_example obtener le contento de un Pagina principal]. Selige un action pro vider altere exemplos.", + "apisandbox-intro": "Usa iste pagina pro experimentar con le API de servicio web de MediaWiki.\nConsulta [[mw:API:Main page|le documentation del API]] pro ulterior detalios concernente le uso del API. Per exemplo: [//www.mediawiki.org/wiki/API#A_simple_example obtener le contento de un Pagina principal]. Selige un action pro vider altere exemplos.\n\nAttention: Ben que isto es un cassa a sablo, le actiones que tu exeque in iste pagina pote modificar tote le wiki.", + "apisandbox-fullscreen": "Expander pannello", + "apisandbox-fullscreen-tooltip": "Expander le pannello del cassa a sablo pro impler le fenestra del navigator.", + "apisandbox-unfullscreen": "Monstrar pagina", + "apisandbox-unfullscreen-tooltip": "Reducer le pannello del cassa a sablo de sorta que le ligamines de navigation de MediaWiki es disponibile.", "apisandbox-submit": "Facer requesta", "apisandbox-reset": "Rader", - "apisandbox-examples": "Exemplo", - "apisandbox-results": "Resultato", + "apisandbox-retry": "Reprobar", + "apisandbox-loading": "Carga information pro le modulo API \"$1\"...", + "apisandbox-load-error": "Un error ha occurrite durante le cargamento del information pro le modulo API \"$1\": $2", + "apisandbox-no-parameters": "Iste modulo API non ha parametros.", + "apisandbox-helpurls": "Ligamines de adjuta", + "apisandbox-examples": "Exemplos", + "apisandbox-dynamic-parameters": "Parametros additional", + "apisandbox-dynamic-parameters-add-label": "Adder parametro:", + "apisandbox-dynamic-parameters-add-placeholder": "Nomine del parametro", + "apisandbox-dynamic-error-exists": "Un parametro con le nomine \"$1\" jam existe.", + "apisandbox-deprecated-parameters": "Parametros obsolescente", + "apisandbox-fetch-token": "Auto-reimpler le indicio", + "apisandbox-submit-invalid-fields-title": "Alcun campos non es valide", + "apisandbox-submit-invalid-fields-message": "Per favor, corrige le campos marcate e reproba.", + "apisandbox-results": "Resultatos", + "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-url-label": "URL de requesta:", - "apisandbox-request-time": "Duration del requesta: $1", + "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\".", + "apisandbox-alert-page": "Certe campos in iste pagina non es valide.", + "apisandbox-alert-field": "Le valor de iste campo non es valide.", "booksources": "Fontes de libros", "booksources-search-legend": "Cercar fontes de libros", "booksources-search": "Cercar", @@ -1699,12 +1785,17 @@ "specialloguserlabel": "Executor:", "speciallogtitlelabel": "Objectivo (titulo o {{ns:user}}:nomine de usator):", "log": "Registros", + "logeventslist-submit": "Monstrar", "all-logs-page": "Tote le registros public", "alllogstext": "Presentation combinate de tote le registros disponibile de {{SITENAME}}.\nPro restringer le presentation, selige un typo de registro, le nomine de usator (sensibile al majusculas e minusculas), o le pagina in question (etiam sensibile al majusculas e minusculas).", "logempty": "Le registro contine nihil pro iste pagina.", "log-title-wildcard": "Cercar titulos que comencia con iste texto", "showhideselectedlogentries": "Monstrar/celar le entratas de registro seligite", "log-edit-tags": "Modificar le etiquettas del entratas de registro seligite", + "checkbox-select": "Seliger: $1", + "checkbox-all": "Totes", + "checkbox-none": "Nulle", + "checkbox-invert": "Inverter", "allpages": "Tote le paginas", "nextpage": "Sequente pagina ($1)", "prevpage": "Precedente pagina ($1)", @@ -1721,10 +1812,9 @@ "cachedspecial-viewing-cached-ts": "Tu vide un version in cache de iste pagina, que pote non esser completemente actual.", "cachedspecial-refresh-now": "Vider le plus recente.", "categories": "Categorias", + "categories-submit": "Monstrar", "categoriespagetext": "Le sequente {{PLURAL:$1|categoria|categorias}} contine paginas o multimedia.\nLe [[Special:UnusedCategories|categorias non usate]] non se monstra hic.\nVide etiam le [[Special:WantedCategories|categorias desirate]].", "categoriesfrom": "Monstrar categorias a partir de:", - "special-categories-sort-count": "ordinar per numero", - "special-categories-sort-abc": "ordinar alphabeticamente", "deletedcontributions": "Contributiones delite de usatores", "deletedcontributions-title": "Contributiones delite de usatores", "sp-deletedcontributions-contribs": "contributiones", @@ -1746,6 +1836,7 @@ "activeusers-hidebots": "Celar bots", "activeusers-hidesysops": "Celar administratores", "activeusers-noresult": "Nulle usator trovate.", + "activeusers-submit": "Monstrar usatores active", "listgrouprights": "Derectos del gruppos de usatores", "listgrouprights-summary": "Lo sequente es un lista de gruppos de usatores definite in iste wiki, con lor derectos de accesso associate.\nIl pote haber [[{{MediaWiki:Listgrouprights-helppage}}|informationes additional]] super derectos individual.", "listgrouprights-key": "Legenda:\n* Derecto concedite\n* Derecto revocate", @@ -1764,6 +1855,10 @@ "listgrouprights-namespaceprotection-header": "Restrictiones de spatio de nomines", "listgrouprights-namespaceprotection-namespace": "Spatio de nomines", "listgrouprights-namespaceprotection-restrictedto": "Derecto(s) que permitte al usator de modificar", + "listgrants": "Concessiones", + "listgrants-summary": "Lo sequente es un lista de concessiones con lor accesso associate a derectos de usator. Le usatores pote autorisar applicationes a usar lor conto, ma con permissiones limitate secundo le concessiones que le usator ha date al application. Nonobstante, un application agente in nomine de un usator non pote vermente usar derectos que le usator non ha.\nIl ha possibilemente [[{{MediaWiki:Listgrouprights-helppage}}|informationes supplementari]] sur derectos individual.", + "listgrants-grant": "Conceder", + "listgrants-rights": "Derectos", "trackingcategories": "Categorias de sequimento", "trackingcategories-summary": "Iste pagina lista le categorias de sequimento que es automaticamente plenate per le software MediaWiki. Lor nomines pote esser cambiate alterante le correspondente messages de systema in le spatio de nomines \"{{ns:8}}\".", "trackingcategories-msg": "Categoria de sequimento", @@ -1831,6 +1926,7 @@ "wlnote": "Ecce le ultime {{PLURAL:$1|modification|$1 modificationes}} durante le ultime {{PLURAL:$2|hora|$2 horas}}, a partir del $3 a $4.", "wlshowlast": "Monstrar le ultime $1 horas $2 dies", "watchlist-hide": "Celar", + "watchlist-submit": "Monstrar", "wlshowtime": "Periodo de tempore a monstrar:", "wlshowhideminor": "modificationes minor", "wlshowhidebots": "robots", @@ -1838,6 +1934,7 @@ "wlshowhideanons": "usatores anonyme", "wlshowhidepatr": "modificationes patruliate", "wlshowhidemine": "mi modificationes", + "wlshowhidecategorization": "categorisation de paginas", "watchlist-options": "Optiones del observatorio", "watching": "Observation in curso...", "unwatching": "Disobservation in curso...", @@ -1868,6 +1965,7 @@ "delete-confirm": "Deler \"$1\"", "delete-legend": "Deler", "historywarning": "Attention: Le pagina que tu vole deler ha un historia de circa $1 {{PLURAL:$1|version|versiones}}:", + "historyaction-submit": "Monstrar", "confirmdeletetext": "Tu va deler un pagina con tote su historia.\nPer favor confirma que tu ha le intention de facer isto, que tu comprende le consequentias, e que tu face isto in accordo con [[{{MediaWiki:Policy-url}}|le politicas]].", "actioncomplete": "Action complete", "actionfailed": "Action fallite", @@ -1884,7 +1982,7 @@ "delete-toobig": "Iste pagina ha un grande historia de modificationes con plus de $1 {{PLURAL:$1|version|versiones}}.\nLe deletion de tal paginas ha essite restringite pro impedir le disruption accidental de {{SITENAME}}.", "delete-warning-toobig": "Iste pagina ha un grande historia de modificationes con plus de $1 {{PLURAL:$1|version|versiones}}.\nLe deletion de illo pote disrumper le operationes del base de datos de {{SITENAME}};\nprocede con caution.", "deleteprotected": "Tu non pote deler iste pagina perque illo ha essite protegite.", - "deleting-backlinks-warning": "'''Attention:''' Il ha [[Special:WhatLinksHere/{{FULLPAGENAME}}|altere paginas]] que liga a o transclude le pagina que tu es sur le puncto de deler.", + "deleting-backlinks-warning": "Attention: Il ha [[Special:WhatLinksHere/{{FULLPAGENAME}}|altere paginas]] que liga a o transclude le pagina que tu es sur le puncto de deler.", "rollback": "Revocar modificationes", "rollbacklink": "revocar", "rollbacklinkcount": "revocar $1 {{PLURAL:$1|modification|modificationes}}", @@ -1910,6 +2008,7 @@ "changecontentmodel-nodirectediting": "Le modello de contento $1 non supporta le modification directe", "log-name-contentmodel": "Registro de cambiamentos de modello de contento", "log-description-contentmodel": "Eventos relative al modellos de contento de un pagina", + "logentry-contentmodel-new": "$1 {{GENDER:$2|creava}} le pagina $3 con le modello de contento non predefinite \"$5\"", "logentry-contentmodel-change": "$1 {{GENDER:$2|cambiava}} le modello de contento del pagina $3 de \"$4\" a \"$5\"", "logentry-contentmodel-change-revertlink": "reverter", "logentry-contentmodel-change-revert": "reversion", @@ -2058,12 +2157,13 @@ "whatlinkshere-hidelinks": "$1 ligamines", "whatlinkshere-hideimages": "$1 le ligamines a files", "whatlinkshere-filters": "Filtros", + "whatlinkshere-submit": "Va", "autoblockid": "Auto-blocada №$1", "block": "Blocar usator", "unblock": "Disblocar usator", "blockip": "Blocar {{GENDER:$1|usator}}", "blockip-legend": "Blocar usator", - "blockiptext": "Usa le formulario infra pro blocar le accesso de scriptura\na partir de un adresse IP specific.\nIsto debe esser facite solmente pro impedir vandalismo, e de\naccordo con le [[{{MediaWiki:Policy-url}}|politica de {{SITENAME}}]].\nScribe un motivo specific infra (per exemplo, citante paginas\nspecific que ha essite vandalisate).", + "blockiptext": "Usa le formulario infra pro blocar le accesso de scriptura\na partir de un adresse IP specific.\nIsto debe esser facite solmente pro impedir vandalismo, e de\naccordo con le [[{{MediaWiki:Policy-url}}|politica de {{SITENAME}}]].\nScribe un motivo specific infra (per exemplo, citante paginas\nspecific que ha essite vandalisate).\nTu pote blocar intervallos de adresses IP con le syntaxe [https://en.wikipedia.org/wiki/Classless_Inter-Domain_Routing CIDR]; le intervallo le plus grande permittite es /$1 pro IPv4 e /$2 pro IPv6.", "ipaddressorusername": "Adresse IP o nomine de usator:", "ipbexpiry": "Expiration:", "ipbreason": "Motivo:", @@ -2091,6 +2191,7 @@ "ipb-unblock": "Disblocar un nomine de usator o un adresse IP", "ipb-blocklist": "Vider blocadas existente", "ipb-blocklist-contribs": "Contributiones de {{GENDER:$1|$1}}", + "ipb-blocklist-duration-left": "$1 restante", "unblockip": "Disblocar adresse IP", "unblockiptext": "Usa le formulario infra pro restaurar le accesso de scriptura\na un adresse IP blocate previemente.", "ipusubmit": "Cancellar iste blocada", @@ -2145,6 +2246,7 @@ "block-log-flags-hiddenname": "nomine de usator celate", "range_block_disabled": "Le capacitate del administratores a blocar intervallos de adresses IP es disactivate.", "ipb_expiry_invalid": "Tempore de expiration invalide.", + "ipb_expiry_old": "Le hora de expiration es in le passato.", "ipb_expiry_temp": "Le blocadas de nomines de usator celate debe esser permanente.", "ipb_hide_invalid": "Impossibile supprimer iste conto; illo ha plus de {{PLURAL:$1|un modification|$1 modificationes}}.", "ipb_already_blocked": "\"$1\" es ja blocate", @@ -2181,8 +2283,8 @@ "lockedbyandtime": "(per $1 le $2 a $3)", "move-page": "Renominar $1", "move-page-legend": "Renominar pagina", - "movepagetext": "Per medio del formulario hic infra tu pote renominar un pagina, transferente tote su historia al nove nomine.\nLe ancian titulo devenira un pagina de redirection verso le nove titulo.\nTu pote actualisar automaticamente le redirectiones que puncta verso le titulo original.\nSi tu prefere non facer isto, non oblida de reparar omne redirectiones [[Special:DoubleRedirects|duple]] o [[Special:BrokenRedirects|rupte]].\nTu ha le responsabilitate de assecurar que le ligamines continua a punctar verso le paginas correcte.\n\nNota que le pagina '''non''' essera renominate si existe jam un pagina sub le nove titulo, excepte si iste es un redirection sin historia de modificationes passate.\nIsto te lassa le possibilitate de restaurar le titulo original de un pagina si tu ha committite un error, sin permitter te de supplantar un pagina existente.\n\n'''Attention!'''\nIsto pote esser un cambio drastic e inexpectate pro un pagina popular;\nper favor assecura te de haber comprendite le consequentias de isto ante de continuar.", - "movepagetext-noredirectfixer": "Per medio del formulario infra tu pote renominar un pagina, transferente tote su historia al nove nomine.\nLe ancian titulo devenira un pagina de redirection verso le nove titulo.\nNon oblida de reparar omne redirectiones [[Special:DoubleRedirects|duple]] o [[Special:BrokenRedirects|rupte]].\nTu ha le responsabilitate de assecurar que le ligamines continua a punctar verso le paginas correcte.\n\nNota que le pagina '''non''' essera renominate si existe jam un pagina sub le nove titulo, excepte si iste es un redirection sin historia de modificationes passate.\nIsto te lassa le possibilitate de restaurar le titulo original de un pagina si tu ha committite un error, sin permitter te de supplantar un pagina existente.\n\n'''Attention!'''\nIsto pote esser un cambio drastic e inexpectate pro un pagina popular;\nper favor assecura te de haber comprendite le consequentias de isto ante de continuar.", + "movepagetext": "Per medio del formulario hic infra tu pote renominar un pagina, transferente tote su historia al nove nomine.\nLe ancian titulo devenira un pagina de redirection verso le nove titulo.\nTu pote actualisar automaticamente le redirectiones que puncta verso le titulo original.\nSi tu prefere non facer isto, non oblida de reparar omne redirectiones [[Special:DoubleRedirects|duple]] o [[Special:BrokenRedirects|rupte]].\nTu ha le responsabilitate de assecurar que le ligamines continua a punctar verso le paginas correcte.\n\nNota que le pagina non essera renominate si existe jam un pagina sub le nove titulo, excepte si iste es un redirection sin historia de modificationes passate.\nIsto te lassa le possibilitate de restaurar le titulo original de un pagina si tu ha committite un error, sin permitter te de supplantar un pagina existente.\n\nAttention:\nisto pote esser un cambio drastic e inexpectate pro un pagina popular;\nper favor assecura te de haber comprendite le consequentias de isto ante de continuar.", + "movepagetext-noredirectfixer": "Per medio del formulario infra tu pote renominar un pagina, transferente tote su historia al nove nomine.\nLe ancian titulo devenira un pagina de redirection verso le nove titulo.\nNon oblida de reparar omne redirectiones [[Special:DoubleRedirects|duple]] o [[Special:BrokenRedirects|rupte]].\nTu ha le responsabilitate de assecurar que le ligamines continua a punctar verso le paginas correcte.\n\nNota que le pagina non essera renominate si existe jam un pagina sub le nove titulo, excepte si iste es un redirection sin historia de modificationes passate.\nIsto te lassa le possibilitate de restaurar le titulo original de un pagina si tu ha committite un error, sin permitter te de supplantar un pagina existente.\n\nAttention:\nisto pote esser un cambio drastic e inexpectate pro un pagina popular;\nper favor assecura te de haber comprendite le consequentias de isto ante de continuar.", "movepagetalktext": "Si tu marca iste quadrato, le pagina de discussion associate essera automaticamente renominate al nove titulo, a minus que un pagina de discussion non vacue ja existe sub le nove nomine.\n\nIn tal caso, tu debera renominar o fusionar le pagina manualmente si desirate.", "moveuserpage-warning": "'''Attention:''' Tu es super le puncto de renominar un pagina de usator. Nota ben que solmente le pagina, e ''non'' le usator, essera renominate.", "movecategorypage-warning": "Attention: Tu es sur le puncto de renominar un pagina de categoria. Nota ben que solmente le pagina essera renominate e tote le paginas in le ancian categoria non essera recategorisate in le nove.", @@ -2216,7 +2318,7 @@ "movenosubpage": "Iste pagina non ha subpaginas.", "movereason": "Motivo:", "revertmove": "reverter", - "delete_and_move_text": "==Deletion requirite==\nLe pagina de destination \"[[:$1]]\" existe ja.\nEsque tu vole deler lo pro permitter le renomination?", + "delete_and_move_text": "Le pagina de destination \"[[:$1]]\" jam existe.\nVole tu deler lo pro permitter iste renomination?", "delete_and_move_confirm": "Si, deler le pagina", "delete_and_move_reason": "Delite pro permitter le renomination de \"[[$1]]\"", "selfmove": "Le titulos de origine e de destination es identic;\nnon pote renominar un pagina al mesme titulo.", @@ -2234,7 +2336,7 @@ "move-leave-redirect": "Lassar un redirection", "protectedpagemovewarning": "'''Attention:''' Iste pagina ha essite protegite de sorta que solmente usatores con privilegios de administrator pote renominar lo. Le ultime entrata del registro es fornite hic infra pro referentia:", "semiprotectedpagemovewarning": "'''Nota:''' Iste pagina ha essite protegite de sorta que solmente usatores registrate pote renominar lo. Le ultime entrata del registro es fornite hic infra pro referentia:", - "move-over-sharedrepo": "== File existe ==\n[[:$1]] existe in un repositorio partite. Si le file es renominate a iste titulo, illo supplantara le file partite.", + "move-over-sharedrepo": "[[:$1]] jam existe in un repositorio commun. Si le file es renominate a iste titulo, illo supplantara le file commun.", "file-exists-sharedrepo": "Le nomine de file seligite es ja in uso in un repositorio partite.\nPer favor selige un altere nomine.", "export": "Exportar paginas", "exporttext": "Tu pote exportar le texto e historia de modificationes de un pagina particular o collection de paginas, incapsulate in un poco de XML.\nIsto pote esser importate in un altere wiki que usa MediaWiki via le [[Special:Import|pagina pro importar]].\n\nPro exportar paginas, entra le titulos in le quadro de texto infra, un titulo per linea, e indica si tu vole haber le version currente con tote le versiones ancian, con le lineas de historia de paginas, o simplemente le version actual con le informationes super le ultime modification.\n\nIn le secunde caso tu pote etiam usar un ligamine, p.ex. [[{{#Special:Export}}/{{MediaWiki:Mainpage}}]] pro le pagina \"[[{{MediaWiki:Mainpage}}]]\".", @@ -2250,6 +2352,7 @@ "export-download": "Salveguardar como file", "export-templates": "Includer patronos", "export-pagelinks": "Includer paginas ligate a un profunditate de:", + "export-manual": "Adder paginas manualmente:", "allmessages": "Messages del systema", "allmessagesname": "Nomine", "allmessagesdefault": "Texto predefinite", @@ -2313,7 +2416,7 @@ "import-nonewrevisions": "Nulle version ha essite importate (totes esseva jam presente o ha essite saltate a causa de errores).", "xml-error-string": "$1 al linea $2, col $3 (byte $4): $5", "import-upload": "Incargar datos XML", - "import-token-mismatch": "Perdita del datos del session. Per favor reprova.", + "import-token-mismatch": "Perdita del datos del session.\n\nEs possibile que tu session ha essite claudite. Per favor, verifica que tu session es ancora aperte e tenta lo de novo.\nSi le problema persiste, proba a [[Special:UserLogout|clauder session]] e aperir un nove session, verificante que tu navigator accepta le cookies ab iste sito.", "import-invalid-interwiki": "Non pote importar ab le wiki specificate.", "import-error-edit": "Le pagina \"$1\" non ha essite importate perque tu non ha le permission de modificar lo.", "import-error-create": "Le pagina \"$1\" non ha essite importate perque tu non ha le permission de crear lo.", @@ -2330,11 +2433,7 @@ "import-logentry-upload-detail": "$1 {{PLURAL:$1|version|versiones}} importate", "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|version|versiones}} importate desde $2", "javascripttest": "Test de JavaScript", - "javascripttest-pagetext-noframework": "Iste pagina es reservate pro le execution de tests de JavaScript.", - "javascripttest-pagetext-unknownframework": "Structura de test \"$1\" incognite.", "javascripttest-pagetext-unknownaction": "Action \"$1\" incognite.", - "javascripttest-pagetext-frameworks": "Per favor selige un del sequente structuras de test: $1", - "javascripttest-pagetext-skins": "Selige un apparentia con le qual executar le tests:", "javascripttest-qunit-intro": "Vide [$1 documentation de tests] sur mediawiki.org.", "tooltip-pt-userpage": "{{GENDER:|Tu}} pagina de usator", "tooltip-pt-anonuserpage": "Le pagina de usator pro le adresse IP desde le qual tu face modificationes", @@ -2375,7 +2474,7 @@ "tooltip-feed-rss": "Syndication RSS pro iste pagina", "tooltip-feed-atom": "Syndication Atom pro iste pagina", "tooltip-t-contributions": "Un lista de contributiones de {{GENDER:$1|iste usator}}", - "tooltip-t-emailuser": "Inviar un e-mail a iste usator", + "tooltip-t-emailuser": "Inviar un e-mail a {{GENDER:$1|iste usator}}", "tooltip-t-info": "Plus information super iste pagina", "tooltip-t-upload": "Incargar files", "tooltip-t-specialpages": "Lista de tote le paginas special", @@ -2415,7 +2514,7 @@ "lastmodifiedatby": "Le modification le plus recente de iste pagina esseva facite le $1 a $2 per $3.", "othercontribs": "A base de contributiones per $1.", "others": "alteres", - "siteusers": "le {{PLURAL:$2|usator|usatores}} $1 de {{SITENAME}}", + "siteusers": "le {{PLURAL:$2|{{GENDER:$1|usator}}|usatores}} $1 de {{SITENAME}}", "anonusers": "le {{PLURAL:$2|usator|usatores}} anonyme $1 de {{SITENAME}}", "creditspage": "Autores del pagina", "nocredits": "Nulle information es disponibile super le autores de iste pagina.", @@ -2476,6 +2575,7 @@ "pageinfo-category-files": "Numero de files", "markaspatrolleddiff": "Marcar como patruliate", "markaspatrolledtext": "Marcar iste pagina como patruliate", + "markaspatrolledtext-file": "Marcar iste version del file como patruliate", "markedaspatrolled": "Marcate como patruliate", "markedaspatrolledtext": "Le version seligite de [[:$1]] ha essite marcate como patruliate.", "rcpatroldisabled": "Patrulia de modificationes recente disactivate", @@ -2527,6 +2627,7 @@ "newimages-legend": "Filtro", "newimages-label": "Nomine del file (o un parte de illo):", "newimages-showbots": "Monstrar files incargate per robots", + "newimages-hidepatrolled": "Celar le files incargate patruliate", "noimages": "Nihil a vider.", "ilsubmit": "Cercar", "bydate": "per data", @@ -2590,8 +2691,8 @@ "exif-colorspace": "Spatio de colores", "exif-componentsconfiguration": "Significato de cata componente", "exif-compressedbitsperpixel": "Modo de compression del imagine", - "exif-pixelydimension": "Latitude del imagine", - "exif-pixelxdimension": "Altitude del imagine", + "exif-pixelxdimension": "Latitude del imagine", + "exif-pixelydimension": "Altitude del imagine", "exif-usercomment": "Commentos del usator", "exif-relatedsoundfile": "File audio connexe", "exif-datetimeoriginal": "Data e hora del generation del datos", @@ -2739,6 +2840,7 @@ "exif-compression-4": "CCITT Group 4 codification fax", "exif-copyrighted-true": "Sub copyright", "exif-copyrighted-false": "Stato de copyright non definite", + "exif-photometricinterpretation-1": "Nigre e blanc (0 pro nigre)", "exif-unknowndate": "Data incognite", "exif-orientation-1": "Normal", "exif-orientation-2": "Invertite horizontalmente", @@ -2920,8 +3022,8 @@ "scarytranscludefailed-httpstatus": "[Obtention de patrono fallite pro $1: HTTP $2]", "scarytranscludetoolong": "[URL es troppo longe]", "deletedwhileediting": "'''Attention:''' Iste pagina esseva delite post que tu comenciava a modificar lo!", - "confirmrecreate": "Le usator [[User:$1|$1]] ([[User talk:$1|discussion]]) ha delite iste pagina post que tu comenciava a modificar lo, dante le motivo:\n: ''$2''\nPer favor confirma que tu realmente vole recrear iste pagina.", - "confirmrecreate-noreason": "Le usator [[User:$1|$1]] ([[User talk:$1|discussion]]) ha delite iste pagina post que tu comenciava a modificar lo. Per favor confirma que tu realmente vole recrear iste pagina.", + "confirmrecreate": "Le usator [[User:$1|$1]] ([[User talk:$1|discussion]]) ha {{GENDER:$1|delite}} iste pagina post que tu comenciava a modificar lo, dante le motivo:\n: $2\nPer favor confirma que tu realmente vole recrear iste pagina.", + "confirmrecreate-noreason": "Le usator [[User:$1|$1]] ([[User talk:$1|discussion]]) ha {{GENDER:$1|delite}} iste pagina post que tu comenciava a modificar lo. Per favor confirma que tu realmente vole recrear iste pagina.", "recreate": "Recrear", "confirm_purge_button": "OK", "confirm-purge-top": "Rader le cache de iste pagina?", @@ -2981,6 +3083,7 @@ "watchlisttools-edit": "Vider e modificar le observatorio", "watchlisttools-raw": "Modificar observatorio crude", "signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|discussion]])", + "timezone-local": "Local", "duplicate-defaultsort": "Attention: Le clave de ordination predefinite \"$2\" supplanta le anterior clave de ordination predefinite \"$1\".", "duplicate-displaytitle": "Attention: Le titulo a monstrar \"$2\" supplanta le ancian titulo a monstrar \"$1\".", "invalid-indicator-name": "Error: Le attributo name del indicatores del stato del pagina non pote esser vacue.", @@ -3031,8 +3134,7 @@ "version-libraries-license": "Licentia", "version-libraries-description": "Description", "version-libraries-authors": "Autores", - "redirect": "Rediriger per nomine de file, ID de usator, ID de pagina o ID de version", - "redirect-legend": "Rediriger a un file o pagina", + "redirect": "Rediriger per ID de file, usator, pagina, version o registro", "redirect-summary": "Iste pagina special redirige a un file (si es date le nomine de un file), a un pagina (si es date un ID de version o ID de pagina) o a un pagina de usator (si es date un ID de usator numeric). Usage: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/page/64308]], [[{{#Special:Redirect}}/revision/328429]] o [[{{#Special:Redirect}}/user/101]].", "redirect-submit": "Va", "redirect-lookup": "Cercar:", @@ -3044,7 +3146,6 @@ "redirect-not-exists": "Valor non trovate", "fileduplicatesearch": "Cercar files duplicate", "fileduplicatesearch-summary": "Cercar files duplicate a base de lor summas de verification ''(hash).''", - "fileduplicatesearch-legend": "Cercar un duplicato", "fileduplicatesearch-filename": "Nomine del file:", "fileduplicatesearch-submit": "Cercar", "fileduplicatesearch-info": "$1 × $2 pixel
Grandor del file: $3
Typo MIME: $4", diff --git a/languages/i18n/id.json b/languages/i18n/id.json index be3b009ec9..e19b63b4f1 100644 --- a/languages/i18n/id.json +++ b/languages/i18n/id.json @@ -44,7 +44,8 @@ "Matma Rex", "WongKentir", "Rachmat.Wahidi", - "Arief" + "Arief", + "Nemo bis" ] }, "tog-underline": "Garis bawahi pranala:", @@ -1354,7 +1355,7 @@ "recentchangeslinked-page": "Nama halaman:", "recentchangeslinked-to": "Perlihatkan perubahan dari halaman-halaman yang terhubung dengan halaman yang disajikan", "recentchanges-page-added-to-category": "[[:$1]] ditambahkan pada kategori", - "recentchanges-page-added-to-category-bundled": "[[:$1]] dan {{PLURAL:$2|satu halaman|$2 halaman-halaman}} lagi halaman ditambahkan pada kategori", + "recentchanges-page-added-to-category-bundled": "[[:$1]] dan [[Special:WhatLinksHere/$1|{{PLURAL:$2|satu halaman|$2 halaman-halaman}}]] lagi halaman ditambahkan pada kategori", "recentchanges-page-removed-from-category": "[[:$1]] dihapus dari kategori", "recentchanges-page-removed-from-category-bundled": "[[:$1]] dan {{PLURAL:$2|satu halaman|$2 halaman-halaman}} lagi halaman dihapus dari kategori", "autochange-username": "Perubahan otomatis MediaWiki", @@ -1837,8 +1838,6 @@ "categories-submit": "Tampilkan", "categoriespagetext": "{{PLURAL:$1|Kategori berikut|Kategori-kategori berikut}} memiliki isi halaman atau media.\n[[Special:UnusedCategories|Kategori yang tak digunakan]] tidak ditampilkan di sini.\nLihat pula [[Special:WantedCategories|kategori yang diinginkan]].", "categoriesfrom": "Tampilkan kategori-kategori dimulai dengan:", - "special-categories-sort-count": "urutkan menurut jumlah", - "special-categories-sort-abc": "urutkan menurut abjad", "deletedcontributions": "Kontribusi yang dihapus", "deletedcontributions-title": "Kontribusi yang dihapus", "sp-deletedcontributions-contribs": "kontribusi", @@ -2458,11 +2457,7 @@ "import-logentry-upload-detail": "$1 {{PLURAL:$1|revisi|revisi}} diimpor", "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|revisi}} diimpor dari $2", "javascripttest": "Pengujian JavaScript", - "javascripttest-pagetext-noframework": "Halaman ini disediakan untuk pengujian JavaScript yang sedang berjalan.", - "javascripttest-pagetext-unknownframework": "Pengujian kerangka kerja \"$1\" tidak diketahui", "javascripttest-pagetext-unknownaction": "Tindakan \"$1\" tidak dikenali.", - "javascripttest-pagetext-frameworks": "Silakan pilih satu di antara kerangka kerja pengujian berikut: $1", - "javascripttest-pagetext-skins": "Pilih kulit yang ingin Anda uji:", "javascripttest-qunit-intro": "Lihat [$1 dokumentasi pengujian] di mediawiki.org.", "tooltip-pt-userpage": "Halaman {{GENDER:|pengguna Anda}}", "tooltip-pt-anonuserpage": "Halaman pengguna IP Anda", @@ -2755,8 +2750,8 @@ "exif-colorspace": "Ruang warna", "exif-componentsconfiguration": "Arti tiap komponen", "exif-compressedbitsperpixel": "Mode kompresi gambar", - "exif-pixelydimension": "Lebar gambar", - "exif-pixelxdimension": "Tinggi gambar", + "exif-pixelxdimension": "Lebar gambar", + "exif-pixelydimension": "Tinggi gambar", "exif-usercomment": "Komentar pengguna", "exif-relatedsoundfile": "Berkas audio yang berhubungan", "exif-datetimeoriginal": "Tanggal dan waktu pembuatan data", @@ -3272,7 +3267,6 @@ "version-libraries-description": "Deskripsi", "version-libraries-authors": "Pembuat", "redirect": "Pengalihan berdasarkan ID berkas, pengguna, halaman, revisi, atau log", - "redirect-legend": "Pengalihan ke sebuah berkas atau halaman", "redirect-summary": "Halaman istimewa ini beralih ke berkas (sesuai nama berkasnya), halaman (sesuai ID revisinya), atau halaman pengguna (sesuai ID numerik penggunanya). Penggunaan: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/revision/328429]], atau [[{{#Special:Redirect}}/user/101]].", "redirect-submit": "Lanjut", "redirect-lookup": "Pencarian:", @@ -3285,7 +3279,6 @@ "redirect-not-exists": "Nilai tidak ditemukan", "fileduplicatesearch": "Pencarian berkas duplikat", "fileduplicatesearch-summary": "Pencarian duplikat berkas berdasarkan nilai hash-nya.", - "fileduplicatesearch-legend": "Cari duplikat", "fileduplicatesearch-filename": "Nama berkas:", "fileduplicatesearch-submit": "Cari", "fileduplicatesearch-info": "$1 × $2 piksel
Besar berkas: $3
Tipe MIME: $4", diff --git a/languages/i18n/ilo.json b/languages/i18n/ilo.json index 1f80e0179d..e54d6cf89f 100644 --- a/languages/i18n/ilo.json +++ b/languages/i18n/ilo.json @@ -8,7 +8,8 @@ "Urhixidur", "לערי ריינהארט", "아라", - "Macofe" + "Macofe", + "Nemo bis" ] }, "tog-underline": "Pinag-ugisan ti silpo:", @@ -445,7 +446,7 @@ "nocookieslogin": "Ti {{SITENAME}} ket agus-usar kadagiti galietas tapno maiserrek dagiti agar-aramat.\nNabaldado dagiti galietam.\nPangngaasi a pakabaelam ida ken padasem manen ti sumrek.", "nocookiesfornew": "Ti pakabilangan ti agar-aramat ket saan a napartuat, saanmi a mapasingkedan ti taudanna.\nSiguraduem a napakabaelan dagita galietam, ikarga manen daytoy a panid ken padasen manen.", "noname": "Saanmo a nainaganan ti umisu a nagan ti agar-aramat.", - "loginsuccesstitle": "Balligi ti panagserrek", + "loginsuccesstitle": "Nakastrek", "loginsuccess": "Nakastrekkan iti {{SITENAME}} a kas ni \"$1\".", "nosuchuser": "Awan ti agar-aramat nga agnagan iti \"$1\". \n\nDagiti nagan ti agar-aramat ket sensitibo ti kadakkel ti letra.\n\nKitaem ti panangiletram, wenno [[Special:UserLogin/signup|agpartuat iti baro a pakabilangan]].", "nosuchusershort": "Awan ti agar-aramat nga agnagan iti \"$1\".\nKitaem ti panangiletram.", @@ -500,7 +501,7 @@ "newpassword": "Baro a kontrasenias:", "retypenew": "Imakinilya manen ti baro a kontrasenias:", "resetpass_submit": "Isaad ti kontrasenias ken sumrek", - "changepassword-success": "Balligi a nasukatan ti kontraseniasmo!", + "changepassword-success": "Nasukatanen ti kontraseniasmo!", "changepassword-throttled": "Nakaaramidka kadagiti adu unay a nabiit a panangipadas ti panagserrek.\nPangngaasi nga aguray iti $1 sakbay a padasen manen.", "botpasswords": "Dagiti kontrasenias ti bot", "botpasswords-summary": "Dagiti kontrasenias ti bot ket mangpalubos a maserrekan ti pakabilangan ti agar-aramat babaen ti API a saan nga agusar kadagiti nangruna a kredensial ti pakabilangan. Dagiti magun-od a karbengan ti agar-aramat no nakastrek iti kontrasenias ti bot ket mabalin a nagawidan.\n\nNo saanmo nga ammo no apay a kayatmo nga aramiden daytoy, mabalin a saanmo koma nga aramiden daytoy. Awan koma ti mangdamag kaniam iti agpataud iti maysa kadagitoy ken itedmo kaniada.", @@ -523,11 +524,11 @@ "botpasswords-insert-failed": "Napaay iti pananginayon ti nagan ti bot iti \"$1\". Nainayon kadi idin?", "botpasswords-update-failed": "Napaay iti panagpabaro ti nagan ti bot iti \"$1\". Naikkat kadi idin?", "botpasswords-created-title": "Napartuat ti kontrasenias ti bot", - "botpasswords-created-body": "Balligi ti pannakapartuat ti kontrasenias ti bot iti \"$1\".", + "botpasswords-created-body": "Napartuat ti kontrasenias ti bot para iti nagan ti bot iti \"$1\" ni agar-aramat \"$2\".", "botpasswords-updated-title": "Napabaro ti kontrasenias ti bot", - "botpasswords-updated-body": "Balligi ti pannakapabaro ti kontrasenias ti bot iti \"$1\".", + "botpasswords-updated-body": "Napabaro ti kontrasenias ti bot para iti nagan ti bot iti \"$1\" ni agar-aramat \"$2\".", "botpasswords-deleted-title": "Naikkat ti kontrasenias ti bot", - "botpasswords-deleted-body": "Naikkat ti kontrasenias ti bot iti \"$1\".", + "botpasswords-deleted-body": "Naikkat ti kontrasenias ti bot para iti nagan ti bot iti \"$1\" ni agar-aramat \"$2\".", "botpasswords-newpassword": "Ti baro a kontrasenias iti panagserrek iti $1 ket $2. Pangngaasi nga irekord daytoy para iti masakbayan a reperensia.", "botpasswords-no-provider": "Saan a magun-od ti BotPasswordsSessionProvider.", "botpasswords-restriction-failed": "Ti panangigawid ti kontrasenias ti bot ket nangpawil iti daytoy a panagserrek.", @@ -1301,7 +1302,7 @@ "recentchangeslinked-page": "Nagan ti panid:", "recentchangeslinked-to": "Ipakita dagiti sinukatan kadagiti panid nga imbes a naisilpo iti naited a panid", "recentchanges-page-added-to-category": "nainayon ti [[:$1]] iti kategoria", - "recentchanges-page-added-to-category-bundled": "nainayon ti [[:$1]] ken {{PLURAL:$2|maysa a panid|$2 a pampanid}} iti kategoria", + "recentchanges-page-added-to-category-bundled": "nainayon ti [[:$1]] ken [[Special:WhatLinksHere/$1|{{PLURAL:$2|maysa a panid|$2 a pampanid}}]] iti kategoria", "recentchanges-page-removed-from-category": "naikkat ti [[:$1]] manipud iti kategoria", "recentchanges-page-removed-from-category-bundled": "Naikkat ti [[:$1]] ken {{PLURAL:$2|maysa a panid|$2 a pampanid}} manipud iti kategoria", "autochange-username": "Automatiko a panagbaliw iti MediaWiki", @@ -1465,8 +1466,8 @@ "uploadstash-summary": "Daytoy a panid ket mangited ti panagserrek kadagiti papeles a naikarga wenno mangrugrugi iti proseso a maikarga, ngem saan pay a naipablaak iti wiki. Dagitoy a papeles ket saan a makita ti sinoman ngem ti laeng agar-aramat a nagikarga kaniada.", "uploadstash-clear": "Dalusan dagiti na-stash a papeles", "uploadstash-nofiles": "Awan ti na-stash a papelesmo.", - "uploadstash-badtoken": "Ti panag-tungpal dayta nga aramid ket napaay, ngamin ta dagiti talekmo ti panagurnos ket nagpason. Padasen manen.", - "uploadstash-errclear": "Ti panagdalus kadagiti papeles ket napaay.", + "uploadstash-badtoken": "Napaay ti panagtungpal dayta nga aramid. Mabalin a ti talekmo nga agurnos ket nagpason. Pangngaasi a padasen manen.", + "uploadstash-errclear": "Napaay ti panagdalus kadagiti papeles.", "uploadstash-refresh": "Pasadiwaen dagiti listaan ti papeles", "invalid-chunk-offset": "Imbalido a pirgis ti timbengan", "img-auth-accessdenied": "Nalibak ti iseserrek", @@ -1786,8 +1787,6 @@ "categories-submit": "Ipakita", "categoriespagetext": "Ti sumaganad a {{PLURAL:$1|kategoria ket aglaon|katkategoria ket aglaon}} kadagiti panid wenno midia.\n[[Special:UnusedCategories|Dagiti saan a nausar a kategoria]] ket saan a maiparang ditoy.\nKitaen met [[Special:WantedCategories|dagiti makiddaw a kategoria]].", "categoriesfrom": "Ipakita dagiti kategoria a mangrugi iti:", - "special-categories-sort-count": "ilasin babaen ti bilang", - "special-categories-sort-abc": "ilasin nga alpabetiko", "deletedcontributions": "Dagiti naikkat a kontribusion ti agar-aramat", "deletedcontributions-title": "Dagiti naikkat a kontribusion ti agar-aramat", "sp-deletedcontributions-contribs": "dagiti kontribusion", @@ -1973,6 +1972,7 @@ "changecontentmodel-title-label": "Titulo ti panid", "changecontentmodel-model-label": "Baro a modelo ti linaon", "changecontentmodel-reason-label": "Rason:", + "changecontentmodel-submit": "Baliwan", "changecontentmodel-success-title": "Nabaliwan ti modelo ti linaon", "changecontentmodel-success-text": "Nabaliwanen ti kita ti linaon ti [[:$1]].", "changecontentmodel-cannot-convert": "Ti linaon iti [[:$1]] ket saan a mabaliwan iti kita ti $2.", @@ -2402,11 +2402,7 @@ "import-logentry-upload-detail": "$1 {{PLURAL:$1|a rebision|kadagiti rebision}} ti naala", "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|rebision|dagiti rebision}} ti naala manipud ti $2", "javascripttest": "Panagsubok ti JavaScript", - "javascripttest-pagetext-noframework": "Daytoy a panid ket naireserba para iti panagpataray kadagiti panagsubok ti JavaScript.", - "javascripttest-pagetext-unknownframework": "Di ammo a tabas ti panagsubok ti \"$1\".", "javascripttest-pagetext-unknownaction": "Di ammo a tignay ti \"$1\".", - "javascripttest-pagetext-frameworks": "Pangngaasi nga agpili ti maysa kadagiti sumaganad a tabas ti panagsubok: $1", - "javascripttest-pagetext-skins": "Agpili ti kudil a pangipatarayan kadagiti panagsubok:", "javascripttest-qunit-intro": "Kitaen ti [ $1 dukomentasion ti panagsubok] idiay mediawiki.org.", "tooltip-pt-userpage": "Panidmo nga agar-aramat", "tooltip-pt-anonuserpage": "Ti panid ti agar-aramat para iti daytoy nga IP a pagtaengan a kas ur-urnosem", @@ -2447,7 +2443,7 @@ "tooltip-feed-rss": "RSS a pakan para iti daytoy a panid", "tooltip-feed-atom": "Atom a pakan para iti daytoy a panid", "tooltip-t-contributions": "Ti listaan dagiti kontribusion babaen {{GENDER:$1|daytoy nga agar-aramat}}", - "tooltip-t-emailuser": "Patulodan ti esurat daytoy nga agar-aramat", + "tooltip-t-emailuser": "Patulodan ti esurat {{GENDER:$1|daytoy nga agar-aramat}}", "tooltip-t-info": "Adu pay a pakaammo a maipanggep iti daytoy a panid", "tooltip-t-upload": "Agikarga kadagiti papeles", "tooltip-t-specialpages": "Listaan ti amin nga espesial a pampanid", @@ -2483,7 +2479,7 @@ "lastmodifiedatby": "Daytoy a panid ket naudi a nabaliwan idi $2, $1 babaen ni $3.", "othercontribs": "Naibasar iti obra ni $1.", "others": "dadduma pay", - "siteusers": "{{SITENAME}} {{PLURAL:$2|agar-aramat|dagiti agar-aramat}} $1", + "siteusers": "{{PLURAL:$2|{{GENDER:$1|ni agar-aramat}}|da agar-aramat}} $1 ti {{SITENAME}}", "anonusers": "{{SITENAME}} di ammo {{PLURAL:$2|nga agar-aramat|a digiti agar-aramat}} $1", "creditspage": "Dagiti pammadayaw ti panid", "nocredits": "Awan dagiti pakaammo ti pammadayaw a magun-od para iti daytoy a panid.", @@ -2657,8 +2653,8 @@ "exif-colorspace": "Espasio ti maris", "exif-componentsconfiguration": "Kaibuksilan iti tunggal maysa a komponente", "exif-compressedbitsperpixel": "Moda ti kompresion ti ladawan", - "exif-pixelydimension": "Kaakaba ti ladawan", - "exif-pixelxdimension": "Katayag ti ladawan", + "exif-pixelxdimension": "Kaakaba ti ladawan", + "exif-pixelydimension": "Katayag ti ladawan", "exif-usercomment": "Dagiti komentario ti agar-aramat", "exif-relatedsoundfile": "Mainaig a papeles ti audio", "exif-datetimeoriginal": "Petsa ken oras ti pannakaaramid ti datos", @@ -2985,8 +2981,8 @@ "scarytranscludefailed-httpstatus": "[Napaay ti panagala ti plantilia para iti $1: HTTP $2]", "scarytranscludetoolong": "[Atiddog unay ti URL]", "deletedwhileediting": "Ballaag: Naikkaten daytoy a panid kalpasan idi rinugiam ti agurnos!", - "confirmrecreate": "Ti ([[User talk:$1|patungtungan]]) ti agar-aramat [[User:$1|$1]] ket inikkatna daytoy a panid kalpasan ti panagrugim nga agurnos nga adda rason:\n: ''$2''\nPangngaasi a pasingkedam nga agpayso a kayatmo a partuten manen daytoy a panid.", - "confirmrecreate-noreason": "Ti ([[User talk:$1|patungtungan]]) ti agar-aramat [[User:$1|$1]] ket inikkat na daytoy a panid idi kalkalpas mo a magirugi ti agurnos. Pangngaasi ta pasingkedam a kayatmo nga aramiden manen daytoy a panid.", + "confirmrecreate": "{{GENDER:$1|Inikkat}} ni agar-aramat [[User:$1|$1]] ([[User talk:$1|tungtungan]]) daytoy a panid kalpasan idi nangrugika nga agurnos iti rason a:\n: $2\nPangngaasi a pasingkedan no agpayso a kayatmo a partuaten manen daytoy a panid", + "confirmrecreate-noreason": "{{GENDER:$1|Inikkat}} ni agar-aramat [[User:$1|$1]] ([[User talk:$1|tungtungan]]) daytoy a panid kalpasan idi nangrugika nga agurnos. Pangngaasi a pasingkedan no agpayso a kayatmo a partuaten manen daytoy a panid.", "recreate": "Partuaten manen", "confirm_purge_button": "Sige", "confirm-purge-top": "Dalusan ti cache daytoy a panid?", @@ -3096,7 +3092,6 @@ "version-libraries-description": "Deskripsion", "version-libraries-authors": "Dagiti mannurat", "redirect": "Baw-ing babaen ti papeles, agar-aramat, panid, rebision, wenno ID ti listaan", - "redirect-legend": "Ibaw-ing iti papeles wenno panid", "redirect-summary": "Daytoy nga espesial a panid ket maibaw-ing iti papeles (iti nagan ti papeles), ti panid (iti ID ti rebision wenno ID ti panid), wenno ti panid ti agar-aramat (iti numeriko nga ID ti agar-aramat). Panagusar:\n[[{{#Special:Redirect}}/file/Example.jpg]], \n[[{{#Special:Redirect}}/page/64308]], \n[[{{#Special:Redirect}}/revision/328429]], wenno\n[[{{#Special:Redirect}}/user/101]].", "redirect-submit": "Inkan", "redirect-lookup": "Kitaen:", @@ -3109,7 +3104,6 @@ "redirect-not-exists": "Saan a nabirukan ti pateg", "fileduplicatesearch": "Agbiruk kadagiti duplikado a papeles", "fileduplicatesearch-summary": "Agbiruk kadagiti duplikado a papeles a naibatay kadagiti pateg ti hash.", - "fileduplicatesearch-legend": "Agbiruk para iti duplikado", "fileduplicatesearch-filename": "Nagan ti papeles:", "fileduplicatesearch-submit": "Biruken", "fileduplicatesearch-info": "$1 × $2 a piksel
Rukod ti papeles: $3
Kita ti MIME: $4", @@ -3181,7 +3175,7 @@ "tags-delete-not-allowed": "Dagiti etiketa nga inpalawag babaen ti maysa a pagpaatiddog ket saan a maikkat malaksid no naisangayan nga ipalubos ti pagpaatiddog.", "tags-delete-not-found": "Awan ti etiketa ti \"$1\".", "tags-delete-too-many-uses": "Ti etiketa ti \"$1\" ket naipakat iti ad-adu ngem $2 {{PLURAL:$2|a rebision|kadagiti rebision}}, a ti kaibuksillanna ket saan a mabalin a maikkat.", - "tags-delete-warnings-after-delete": "Ti etiketa ti \"$1\" ket balligi a naikkat, ngem nakita {{PLURAL:$2|ti sumaganad a ballag|dagiti sumaganad a balaag}}:", + "tags-delete-warnings-after-delete": "Ti etiketa ti \"$1\" ket naikkat, ngem nakita {{PLURAL:$2|ti sumaganad a ballaag|dagiti sumaganad a ballaag}}:", "tags-activate-title": "Patarayen ti etiketa", "tags-activate-question": "Isagsaganamon a patarayen ti etiketa ti \"$1\".", "tags-activate-reason": "Rason:", diff --git a/languages/i18n/inh.json b/languages/i18n/inh.json index 7feb6b334a..faa6b5a14e 100644 --- a/languages/i18n/inh.json +++ b/languages/i18n/inh.json @@ -59,82 +59,82 @@ "editfont-monospace": "Башхалон зарба", "editfont-sansserif": "Белгало йоаца шрифт", "editfont-serif": "Белгало йола шрифт", - "sunday": "К|иранди", - "monday": "Оршот", - "tuesday": "Шинара", + "sunday": "кIиранди", + "monday": "оршот", + "tuesday": "шинара", "wednesday": "Кхаьра", - "thursday": "Ера", - "friday": "ПӀаьраска", - "saturday": "Шоатта", + "thursday": "ера", + "friday": "пӀаьраска", + "saturday": "шоатта", "sun": "К|и", "mon": "Ор", - "tue": "Ши", + "tue": "Шин", "wed": "Кха", "thu": "Ер", "fri": "П|аь", "sat": "Шоа", - "january": "Нажгамсхой", - "february": "Саькур", - "march": "Муттхьол", - "april": "Тушоли", - "may_long": "Бекарг", - "june": "Аьтинг", - "july": "К|имарс", - "august": "Мангал", - "september": "Моажол", - "october": "Тов", - "november": "Лайчил", - "december": "Чантар", + "january": "АгIой бутт", + "february": "Саь-кур бутт", + "march": "Мутт-хьал бутт", + "april": "Тушоли бутт", + "may_long": "Села бутт", + "june": "Этинга бутт", + "july": "Баьцамеа\\Меа бутт", + "august": "Мяцхали бутт", + "september": "Тов\\Михий бутт", + "october": "Ардарий\\АьрхIий бутт", + "november": "Лай чилла бутт", + "december": "Чан-тар бутт", "january-gen": "Нажгамсхой бетт", - "february-gen": "Саькур бетт", + "february-gen": "Саь-кур бетт", "march-gen": "Муттхьол бетт", "april-gen": "Тушоли бетт", - "may-gen": "Бекарг бетт", - "june-gen": "Аьтинг бетт", - "july-gen": "К|имарс бетт", - "august-gen": "Мангал бетт", - "september-gen": "Моажол бетт", - "october-gen": "Тов бетт", - "november-gen": "Лайчил бетт", + "may-gen": "Села бетт", + "june-gen": "Этинга бетт", + "july-gen": "Баьцамеа\\Меа бетт", + "august-gen": "Мецхали бетт", + "september-gen": "Тов\\Михий бетт", + "october-gen": "Ардарий\\АьрхIий бетт", + "november-gen": "Лай чилла бетт", "december-gen": "Чантар бетт", - "jan": "Нажг.", - "feb": "Саьк.", - "mar": "Мутт.", - "apr": "Tуш.", - "may": "Бек.", - "jun": "Аьт.", - "jul": "К|им.", - "aug": "Манг.", - "sep": "Моаж.", - "oct": "Тов.", - "nov": "Лайч.", - "dec": "Чант.", + "jan": "АгIой", + "feb": "Саь-кур", + "mar": "Мутт-хьал", + "apr": "Tушоли", + "may": "Села", + "jun": "Мангал\\Этинга", + "jul": "Баьцамеа\\Меа", + "aug": "Мяцхали", + "sep": "Тов\\Михий", + "oct": "Ардарий\\АьрхIий", + "nov": "Лай чилла", + "dec": "Чан-тар", "january-date": "Нажгамсхой $1", - "february-date": "Саькур $1", + "february-date": "Саь-кур бутт $1", "march-date": "Муттхьол $1", "april-date": "Тушоли $1", - "may-date": "Бекарг $1", + "may-date": "Села бутт $1", "june-date": "Аьтинг $1", "july-date": "К|имарс $1", "august-date": "Мангал $1", "september-date": "Моажол $1", "october-date": "Тов $1", - "november-date": "Лайчил $1", + "november-date": "Лай чилла бутт $1", "december-date": "Чантар $1", "period-am": "ДЦ", "period-pm": "ДТ", - "pagecategories": "{{PLURAL:$1|1=Катаг|Катагаш}}", + "pagecategories": "{{PLURAL:$1|1=Категори|Категореш}}", "category_header": "\"$1\" Катага чура оаг|онаш", "subcategories": "Чуракатагаш", - "category-media-header": "\"$1\" Катага чура паьлаш", + "category-media-header": "\"$1\" Категори чура файлаш", "category-empty": "''Укх катага чу цхьаккха оаг|онаш е паьлаш яц.''", - "hidden-categories": "{{PLURAL:$1|1=Къайла катаг|Къайла катагаш}}", + "hidden-categories": "{{PLURAL:$1|1=Къайла категори|Къайла категореш}}", "hidden-category-category": "Къайла катагаш", "category-subcat-count": "{{PLURAL:$2|Укх катагa т|ехьара бухкатаг чулоац.|{{PLURAL:$1|1=$1 бухкатаг хьахьекха я|$1 бухкатагаш хьахьекха я}} $2 йолачарex.}}", "category-subcat-count-limited": "Укх катагa чу {{PLURAL:$1|1=$1 к|алкатаг|$1 к|алкатагаш}}.", "category-article-count": "{{PLURAL:$2|Укх катага цхьа оаг|ув мара чулоацац.|{{PLURAL:$1|1=$1 оаг|ув хьахекха я|$1 оаг|oнаш хьахекха я}} укх катага $2 йолачарeх.}}", "category-article-count-limited": "Укх катага чу {{PLURAL:$1|1=$1 оаг|ув|$1 оаг|oнаш}}.", - "category-file-count": "{{PLURAL:$2|Укх катаг чу цхьа лурдар мара дац.|{{PLURAL:$1|1=$1 лурдар хьахьекха я|$1 лурдараш хьахьекха я}} укх катагa $2 долачаьрeх.}}", + "category-file-count": "{{PLURAL:$2|Укх катагори чу цаI мара файл дац.|{{PLURAL:$1|1=$1 файл хьахьокхаш я|$1 файл хьахьокхаш я}} укх категори $2 долачарeх.}}", "category-file-count-limited": "Укх катага чу {{PLURAL:$1|1=$1 лурдар|$1 лурдараш}}.", "listingcontinuesabbrev": "д|ахо", "index-category": "Д|ахьожама оаг|онаш", @@ -147,11 +147,10 @@ "moredotdotdot": "Д|ахо", "morenotlisted": "Ер |ояздар хьалдиззанз да.", "mypage": "Oаг|ув", - "anonuserpage": "Вовзаш воаца доакъашхо", "mytalk": "Дувцам", "anontalk": "Дувцар", - "navigation": "Наькъатохкарг", - "and": " кхы", + "navigation": "Навигаци", + "and": " а", "qbfind": "Лахар", "qbbrowse": "Б|аргтасса", "qbedit": "Хувца", @@ -160,26 +159,26 @@ "faq": "КТХ", "faqpage": "Project:КТХ", "actions": "Х|амдараш", - "namespaces": "Ц|ерий аренаш", - "variants": "Дешкепаш", - "navigation-heading": "Наькъагойтара хоржаг|ирс", + "namespaces": "ЦIерий мотташ", + "variants": "Ке́паш", + "navigation-heading": "Навигацен меню", "errorpagetitle": "Г|алат", "returnto": "цу $1 оаг|он т|а юхаг|о", - "tagline": "Кечал укхазара я {{SITENAME}}", - "help": "Куцтохкам", + "tagline": "Кечал укхазара: {{grammar:genitive|{{SITENAME}}}}", + "help": "ГӀо", "search": "Лахаp", - "searchbutton": "Лахар", + "searchbutton": "Хьалáха", "go": "Дехьа г|о", - "searcharticle": "Дехьа г|о", + "searcharticle": "Дехьавала", "history": "Истори", - "history_short": "Тархьар", + "history_short": "Истори", "updatedmarker": "Со ханача денца хувцамаш хиннaд", - "printableversion": "Кепатохара нийсхьал", - "permalink": "Даиман латташ йола хьожадерг", + "printableversion": "Зарба тохара верси", + "permalink": "Даиман латташ йола хьожаярг", "print": "Кепатохар", - "view": "Б|аргтассам", + "view": "Хьажар", "view-foreign": "Мазаоаг|он чу $1 хьажа", - "edit": "Хувца", + "edit": "Нийсде", "edit-local": "Хувца локальни йоазонца сурт оттадар", "create": "Хьаде", "create-local": "ТIатоха локальни йоазонца сурт оттадар", @@ -197,67 +196,67 @@ "unprotectthispage": "Лорам хувца", "newpage": "Керда оагӀув", "talkpage": "Укх оаг|он т|а дувцам бе", - "talkpagelinktext": "дувцам", + "talkpagelinktext": "дувца оттадар", "specialpage": "Г|улакхадара оаг|ув", - "personaltools": "Са г|ирсаш", + "personaltools": "Доакъашхочун гӀирсаш", "articlepage": "Йоазон т|а б|аргтасса", - "talk": "Дувцам", - "views": "БӀаргтассамаш", + "talk": "Дувца оттадар", + "views": "Хьажараш", "toolbox": "ГӀирсаш", "userpage": "Доакъошхочун оаг|он т|а б|аргтасса", "projectpage": "Хьахьоадайтама оаг|oн т|а б|аргтасса", "imagepage": "Лурдара оаг|oн т|а б|аргтасса", "mediawikipage": "Xоаман оаг|ув хьахьокха", "templatepage": "Ч|абала оаг|oн т|а б|аргтасса", - "viewhelppage": "Куцтохкам беха", + "viewhelppage": "ГӀо хьаэцар", "categorypage": "Катага оаг|oн т|а б|аргтасса", "viewtalkpage": "Дувцамага б|аргтасса", "otherlanguages": "Кхыча меттаех", - "redirectedfrom": "($1 т|aра хьадейта да)", + "redirectedfrom": "($1 тIaра хьахьожадаь да)", "redirectpagesub": "Д|а-хьа дайта оаг|ув", - "redirectto": "Д|ахьожаде укх т|а:", - "lastmodifiedat": "Укх оаг|oн т|ехьара хувцам: $2, $1.", + "redirectto": "ТIахьожадар укхаза:", + "lastmodifiedat": "Укх оагIoн тIеххьара хувцам: $2, $1.", "viewcount": "Укх оаг|oн т|а б|аргтассаб {{PLURAL:$1|цхьааца\n|$1 times}}. {{PLURAL:$1|1=цхьазза|$1за}}.", "protectedpage": "Лорама оаг|ув", - "jumpto": "Укхаза дехьаг|о:", - "jumptonavigation": "наькъатоxкар", - "jumptosearch": "лaхаp", + "jumpto": "Дехьавала укхаза:", + "jumptonavigation": "навигаци", + "jumptosearch": "лахар", "pool-timeout": "ЧIегатохара сабаран ха чакхаяьннай", "pool-queuefull": "Хаттарий цӀа хьалдизад", "pool-errorunknown": "Довзаш доаца гӀалат", "poolcounter-usage-error": "Лелдара г|алат: $1", - "aboutsite": "Лоацам {{SITENAME}}", + "aboutsite": "{{grammar:genitive|{{SITENAME}}}} лаьца", "aboutpage": "Project:Лоацам", "copyright": "$1 чулоацамаца тIакхоачаш да.", "copyrightpage": "{{ns:project}}:Яздаьчунна бокъо", - "currentevents": "ХӀанзара хоамаш", - "currentevents-url": "Project:ХӀанзара хоамаш", - "disclaimers": "Бокъонах юхавалаp", - "disclaimerpage": "Project:Бокъонах юхавалаp", - "edithelp": "Хувцама куцтохкам", - "helppage-top-gethelp": "Г|о", + "currentevents": "ХӀанзара хинна хIамаш", + "currentevents-url": "Project:ХӀанзара хинна хIамаш", + "disclaimers": "Бехктокхам хьацаэцар", + "disclaimerpage": "Project:Бехктокхам хьацаэцар", + "edithelp": "Хувцама гӀо", + "helppage-top-gethelp": "ГӀо", "mainpage": "Кертера оагӀув", "mainpage-description": "Кертера оагӀув", "policy-url": "Project:Бокъонаш", - "portal": "Гулламков", - "portal-url": "Project:Гулламков", - "privacy": "Паьлбокъо", - "privacypage": "Project:Паьлбокъо", + "portal": "Юкъара ков", + "portal-url": "Project:Юкъара ков", + "privacy": "КъайлагIара хIамай политика", + "privacypage": "Project:КъайлагIара хIамай политика", "badaccess": "Чуваларa гӀалат", "badaccess-group0": "Оаш хьадийха дулархIам шун де йишяц.", "badaccess-groups": "Дахта кхоачашдар {{PLURAL:$2|1=тоабачара|тоабашкара}} $1 дакъалаьцархой мара де бокъо яц.", "versionrequired": "$1 MediaWiki доржам эша", "versionrequiredtext": "Укх оагӀув бeлха MediaWiki доржамаш эша $1. Хьажа [[Special:Version|version page]].", "ok": "ХӀаа", - "retrievedfrom": "\"$1\" ГӀувам", + "retrievedfrom": "Хьаст — «$1»", "youhavenewmessages": "Оаш $1 ($2) дӀайийцад", "youhavenewmessagesmulti": "Оаш $1чу керда хоамаш дӀайийцад", - "editsection": "хувца", + "editsection": "нийсде", "editold": "хувца", "viewsourceold": "xьайоагӀа къайлорг тӀа бӀаргтасса", "editlink": "хувца", - "viewsourcelink": "xьайоагӀа къайлорг тӀа бӀаргтасса", - "editsectionhint": "Декъам хувца: $1", + "viewsourcelink": "Хьажа дIадолалу ко́дага", + "editsectionhint": "Дáкъа хувца: $1", "toc": "Чулоацам", "showtoc": "хьахьокха", "hidetoc": "къайладаккха", @@ -270,7 +269,7 @@ "restorelink": "{{PLURAL:$1|1=д|адaьккха хувцам|$1 д|адaьккха хувцамаш}}", "feedlinks": "Цу тайпара:", "site-rss-feed": "$1 RSS мугӀ", - "site-atom-feed": "$1 Atom мугӀ", + "site-atom-feed": "$1 — Atom-мугI", "page-rss-feed": "\"$1\" RSS мугӀ", "page-atom-feed": "«$1» — Atom-мугI", "red-link-title": "$1 (укх тайпара оагӀув яц)", @@ -278,12 +277,12 @@ "nstab-user": "Дакъалаьцархо", "nstab-media": "Медифаг", "nstab-special": "ГӀулакха оагӀув", - "nstab-project": "Хьахоадайтамах лаьца", - "nstab-image": "Паьл", + "nstab-project": "Проектах лаьца", + "nstab-image": "Файл", "nstab-mediawiki": "Хоам", - "nstab-template": "ЧIабал", - "nstab-help": "Куцтохкам", - "nstab-category": "Катаг", + "nstab-template": "Кеп", + "nstab-help": "ГӀо", + "nstab-category": "Категори", "mainpage-nstab": "Кертера оагӀув", "nosuchaction": "Цу тайпара дулархIам бац", "nosuchspecialpage": "Изза мо гӀон оагӀув яц", @@ -298,7 +297,7 @@ "internalerror_info": "Чура гӀалат: $1", "cannotdelete-title": "ОагIув дIаяккха йиш яц \"$1\"", "badtitle": "Мегаш йоаца цӀи", - "badtitletext": "Дехаш дола оагӀувни цӀи, нийса яц, яьсса я е меттаюкъара е массаюкъара цӀи харцахь я. ЦӀера юкъе мегаш доаца харакъаш нийсаденна хила мегаш да.", + "badtitletext": "Езаш йола оагӀува цӀи нийса яц, яьсса я, е харцахь я меттаюкъара цIи е интервики цӀи. Иштта, цӀера юкъе оттаде мегаш доаца хьаракъаш нийсаденна хила тарлуш да.", "viewsource": "БIаргтассам", "actionthrottled": "Сихален овзамал", "protectedpagetext": "Ер оаг|ув къайла я хувцамаш дергдоацаш е кхы дола х|амдараш.", @@ -321,7 +320,7 @@ "notloggedin": "Оаш шоай цӀи хьааьннадац", "nologin": "Леламе дIаяздар дац? '''$1'''.", "nologinlink": "Леламе дIаяздар кхолла", - "createaccount": "Керда дакъалаьцархо кхолла", + "createaccount": "Учёта яздар кхолла", "gotaccount": "Укхаза дӀаязабенна дий шо? '''$1'''.", "gotaccountlink": "Чувала/яла", "userlogin-resetlink": "Чувала/яла цӀии дIоагӀаи дийцаденнадий?", @@ -335,7 +334,7 @@ "emailconfirmlink": "Доаржален хоамни хьожадорг дIачIоагIаде", "loginlanguagelabel": "Мотт: $1", "pt-login": "Чувала/яла", - "pt-createaccount": "Дакъалаьцархо кхолла", + "pt-createaccount": "Учёта яздар кхолла", "changepassword": "КъайладIоaгIа дIахувцар", "oldpassword": "Къаьна къайладIоагӀа:", "newpassword": "Керда къайладIоагӀа:", @@ -349,7 +348,7 @@ "italic_sample": "Кулга яздам", "italic_tip": "Кулга яздам", "link_sample": "Ӏинка кортале", - "link_tip": "ЧураӀинк", + "link_tip": "Чура хьожаярг", "extlink_sample": "Ӏинка кортале http://www.example.com", "extlink_tip": "Арен Ӏинка (http:// тамагӀах дийца ма ле)", "headline_sample": "Кортален яздам", @@ -357,7 +356,7 @@ "nowiki_sample": "Укхаза кийчаде дезаш доаца яздам оттаде", "nowiki_tip": "Масса-бустамлорг теркамза дита", "image_tip": "Чуяьккха паьла", - "media_tip": "Паьла Ӏинк", + "media_tip": "Файлан тIахьожавар", "sig_tip": "Шун кулгаяздар а, хӀанзара ха а", "hr_tip": "Мухала мугӀ (могаш тайпара к|еззига хайраде)", "summary": "Хувцамий белгалдер", @@ -377,25 +376,25 @@ "loginreqpagetext": "Кхыйола оагӀувнашка хьожаргдолаш, оаш $1 де деза.", "accmailtitle": "КъайладIоагӀа дӀадахьийтад", "newarticle": "(Kерда)", - "newarticletext": "Шо йоаца оагӀув тӀа Ӏинкаца дехьадаьннад.\nИз хьае, кӀалхагӀа доала корачу яздам очуязаде (кхета хала дале [$1 новкъостала оагӀув тӀа] бӀаргтасса).\nЦаховш укхаза нийсадена дале, юхавала/яла яха тоӀобама тӀа пӀелга тоӀобе.", - "noarticletext": "ХIанз укх оагӀув тӀа яздам доацаш да.\n[[Special:Search/{{PAGENAME}}|цу тайпара цӀи дувцам кораде]] кхыдола йоазувашках йийша я шун, вешта\n[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} тара дола таптарий йоазув карае], е\n'''[{{fullurl:{{FULLPAGENAME}}|action=edit}} изза мо цӀи йолаш оагӀув ела]'''.", + "newarticletext": "Шо хьожаяргаца дехьадаьннад йоаца оагӀув тӀа.\nИз кхолларгьйолаш кӀалхагӀа доала корачу текст Iочуязаде (нагахьа кхетаде хала дале [$1 новкъосталан оагӀувага] хьажа).\nЦа ховш укхаза нийсденнадале, шоай браузера кнопка '''Юха''' тӀа пӀелга тоӀабе.", + "noarticletext": "ХIанз укх оагӀув тӀа текст яц.\nШун аьттув ба [[Special:Search/{{PAGENAME}}|цу тайпара цӀи хьоаяр кораде]] кхыйола йоазуваш чу, иштта\n[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} тара дола тептарий яздаьраш], е\n'''[{{fullurl:{{FULLPAGENAME}}|action=edit}} изза мо цӀи йолаш оагӀув кхолла]'''.", "noarticletext-nopermission": "ХIанз укх оагӀув тӀа яздам дац.\nШун йиш я, кхыдола йоазувнашках [[Special:Search/{{PAGENAME}}|дола цӀерий хаттам корае]] е [{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} нийсамий тептара йоазувнаш корае].", "note": "'''ХӀамоалар:'''", "previewnote": "'''Хьалхе б|аргтассам мара бац.'''\nЯздам кхы яздаь дац!", - "editing": "ГӀалатнийсдар: $1", - "editingsection": "ГIалатнийсдар $1 (оагӀувдакъа)", + "editing": "Хувцам: $1", + "editingsection": "Хувцам: $1 (оагӀува дáкъа)", "editingcomment": "ГӀалатнийсдар $1 (керда декъам)", "editconflict": "ГӀалатнийсдара къовсам: $1", "yourtext": "Хьа яздам", "copyrightwarning": "Теркам бе, $2 ($1 хьажа) бокъонаца лорадеш, тӀахьежама кӀала уллаш, оаш мел чуяккхаш дола хоамаш, яздамаш долга.\nНаггахь санна шоай яздамаш пурам доацаш мала волашву саго хувца е кхы дола моттиге яздердолаш, безам беци, укхаз Ӏочуцаяздеча, дикаьгӀа да.
\nОаш дош лу, даь дола хувцама да волга/йолга, е оаш пурам долаш Ӏочуяздеш да кхычера меттигара шоай яздамаш/хоамаш.\n'''Яздархой бокъоца лорадеш дола хӀамаш, цара пурам доацаш, Ӏочумаязаде!'''", "templatesused": "Укх бӀаргоагӀувни оагӀув тӀа лелаяь {{PLURAL:$1|1=Куцкеп|Куцкепаш}}:", "templatesusedpreview": "Хьалхе бӀаргтассама оагӀув тӀа леладеш дола {{PLURAL:$1|1=Куцкеп|Куцкепаш}}:", - "template-protected": "(лорам лаьца)", + "template-protected": "(лорадаь да)", "template-semiprotected": "(дакъа-лорам)", "hiddencategories": "Ер оагӀув укх {{PLURAL:$1|1=къайла цатегаца|къайла цатегашца}} дакъа лоаца:", "permissionserrorstext-withaction": "$2 де бокъо яц {{PLURAL:$1|1=из бахьан долаш|из бахьанаш долаш}}:", "recreate-moveddeleted-warn": "'''Зем бе! Шо хьалххе дIайоаккхаш хинна оагӀув хьае гӀерта.'''\n\nХьажа, бокъонцахь езаш йолга.\nКӀалхагIа укх оагӀуви дӀадаккхами цӀи хувцами тептараш хьекха да.", - "moveddeleted-notice": "Ер оагӀув дӀаяьккха хиннай.\nНовкъостала, кӀалха дӀадаккхама а хувцама а тептарашкера нийсама йоазувнаш хьахьекха я.", + "moveddeleted-notice": "Ер оагӀув дӀаяккха хиннай.\nНовкъостала, кӀалха хьахьекха да дӀадаккхама а хувцама а тептарашкара яздараш.", "log-fulllog": "Деррига таптара бӀаргтасса", "edit-conflict": "Хувцамий къовсам.", "post-expand-template-inclusion-warning": "Зембаккхам: жамIан чIабалаш чулоаца дустам геттара доккха да.\nЦхьадола чIабалаш чулоацалургдац.", @@ -403,12 +402,12 @@ "post-expand-template-argument-warning": "Зем бе! Ер оагӀув цаӀ куцкепа |аьлдош мара чулоацац, юхадастара сел доккха дустам йолаш.\nЦу тайпара |аьлдешаш ӀокӀаладаькха да.", "post-expand-template-argument-category": "Куцкепий теркамза |аьлдешаш чулоаца оагӀувнаш", "viewpagelogs": "Укх оагӀува тептараш хьокха", - "currentrev-asof": "$1 тӀа эггара тӀехьара доржам", - "revisionasof": "$1 доржам", + "currentrev-asof": "тӀеххьара верси $1", + "revisionasof": "Верси $1", "revision-info": "$1; $2 хувцам", - "previousrevision": "← Xьалхйоаг|араш", + "previousrevision": "← Xьалхарча", "nextrevision": "ТIехьайоагIараш →", - "currentrevisionlink": "Дола доржам", + "currentrevisionlink": "Ð¥Iанзара верси", "cur": "хӀанз.", "next": "тӀехь.", "last": "хьалх.", @@ -423,7 +422,7 @@ "history-feed-title": "Хувцамий истори", "history-feed-description": "Укх оагӀуви вики тӀа хувцамий истори", "history-feed-item-nocomment": "$1гӀара $2гӀачу", - "rev-delundel": "хьахьокха/къайлаяьккха", + "rev-delundel": "хьахьокха/къайлаяккха", "rev-showdeleted": "хьахьокха", "revdelete-show-file-submit": "XӀаа", "revdelete-radio-set": "Къайла", @@ -439,34 +438,34 @@ "mergehistory-empty": "ВIашагIатохара хувцамаш кораяь яц.", "mergehistory-reason": "Бахьан:", "revertmerge": "Декъа", - "history-title": "\"$1\" — хувцамий истори", + "history-title": "\"$1\" — хувцамай истори", "lineno": "МугI $1:", "compareselectedversions": "Хьаржа доржамаша тарона тIа хьажа", "editundo": "юхавала/яла", - "searchresults": "Тохкама гIулакхахилар", - "searchresults-title": "\"$1\" тохка", + "searchresults": "Лахар чакхдоалаш корадаьр", + "searchresults-title": "«$1» лахар", "notextmatches": "ОагIувнаша яздамий вIашагIакхетараш дац", "prevn": "{{PLURAL:$1|хьалхйоагlар $1|хьалхйоагlараш $1|хьалхйоагlараш $1}}", - "nextn": "{{PLURAL:$1|тlехьайоагlар $1|тlехьайоагlараш $1|тlехьайоагlараш $1}}", + "nextn": "{{PLURAL:$1|1=тIехьайоагIар|тIехьайоагIараш}} $1", "prevn-title": "{{PLURAL:$1|1=$1 хьалхара йоазув|$1 хьалхара йоазувнаш}}", "nextn-title": "{{PLURAL:$1|1=$1 тIехьара йоазув|$1 тIехьара йоазувнаш}}", - "shown-title": "Укх оагIувни $1 {{PLURAL:$1|1=йоазув|йоазувнаш}} хьахьокха", + "shown-title": "Хьóкха $1 {{PLURAL:$1|даь йоазо|даь йоазонаш}} укх оáгIувна тIа", "viewprevnext": "($1 {{int:pipe-separator}} $2) ($3) хьажа", "searchmenu-exists": "'''Укх масса-хьахьоадайтамач ер оаг|ув \"[[:$1]]\" я'''", - "searchmenu-new": "'''Укх \"[[:$1]]\" масса-хьахоадайтамач оагIув хьае!'''", - "searchprofile-articles": "Гомлен оагIувнаш", - "searchprofile-images": "Медифаг", - "searchprofile-everything": "Массана", - "searchprofile-advanced": "Шера я", - "searchprofile-articles-tooltip": "$1чу лахар", - "searchprofile-images-tooltip": "Паьлий лахар", - "searchprofile-everything-tooltip": "Массадола оагIувний лахар (дувцама оагIувнаш чулоацаш)", + "searchmenu-new": "Кхолла оагIув «[[:$1]]» укх вики-проекте!\n{{PLURAL:$2|0=|Иштта хьажа хьай лийха оагIувнага.|Иштта хьажа хьай лахара хьахиннарашка.}}", + "searchprofile-articles": "Кертера оагIонаш", + "searchprofile-images": "Мультимедиа", + "searchprofile-everything": "Массанахьа", + "searchprofile-advanced": "Шердаь", + "searchprofile-articles-tooltip": "$1 чу лахар", + "searchprofile-images-tooltip": "Файлаш лахар", + "searchprofile-everything-tooltip": "Массайола оагIонаш тIа лахар (дувцар оттадара оагIонаш чулоацаш)", "searchprofile-advanced-tooltip": "Iочуязаяь цIераренашках лаха", "search-result-size": "$1 ({{PLURAL:$2|$2 дош|$2 дешаш}})", "search-result-category-size": "{{PLURAL:$1|1=$1 дакъа|$1 дакъаш}} ({{PLURAL:$2|1=$2 кIалцатег|$2 кIалцатегаш}}, {{PLURAL:$3|1=$3 паьла|$3 паьлий}})", "search-redirect": "($1 дехьачуяьккхар)", "search-section": " (дакъа $1)", - "search-suggest": "Iа лохар из хила мега: $1", + "search-suggest": "Хьона эшар ер хила мега: $1", "search-interwiki-caption": "Гаргалон хьахьоадайтамаш", "search-interwiki-default": "$1 хьахиннараш:", "search-interwiki-more": "(кха)", @@ -538,34 +537,44 @@ "right-createtalk": "дувцама оагIувний хьакхоллам", "right-move": "ОагIувний цIи хувца", "right-movefile": "Паьлий цIи хувца", - "newuserlogpage": "Дакъалаьцархоший дIаязбeнна таптар", + "newuserlogpage": "Доакъашхой дIаязбаь таптар", "rightslog": "Дакъалаьцархочунна бокъона тептар", "action-read": "Укх оагIуви дешам", "action-edit": "Ер оагIув хувца", "nchanges": "$1 {{PLURAL:$1|1=хувцам|хувцамаш}}", + "enhancedrc-history": "истори", "recentchanges": "Керда хувцамаш", "recentchanges-legend": "Керда хувцамий оттамаш", "recentchanges-summary": "КIалхагIа лоарамий доаламе тIехьара оагIувний хувцамаш дIаязадаь да {{grammar:genitive|{{SITENAME}}}}.", "recentchanges-feed-description": "Укх ларамца тIехьара массахувцамашт теркам бе.", - "recentchanges-label-newpage": "Укх хувцамаца керда оагIув даь хиннад", - "recentchanges-label-minor": "ЗIамига хувцам я", - "recentchanges-label-bot": "Ер хувцам бIатаца яь е", + "recentchanges-label-newpage": "Укх хувцамаца керда оагIув кхелла хиннай", + "recentchanges-label-minor": "Ер зIамига хувцам ба", + "recentchanges-label-bot": "Ер хувцам ботаца баь ба", "recentchanges-label-unpatrolled": "Ер хувцам ший моттиге кхы дIадехьаяьккхаяц.", + "recentchanges-label-plusminus": "байташкахь боарам хувцар", + "recentchanges-legend-heading": "Легенда: ", + "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (хьажа иштта [[Special:NewPages|керда оагIувнашка]])", "rcnotefrom": "КIалхагIа хувцамаш хьахьекха я $2 денза ($1 кхачалца).", "rclistfrom": "$3 $2 тIара хувцамаш хьахьокха", "rcshowhideminor": "$1 зIамига хувцамаш", + "rcshowhideminor-hide": "Къайлдаккха", "rcshowhidebots": "$1 боташ", - "rcshowhideliu": "Чубаьнначара дакъалаьцархочий $1", + "rcshowhidebots-show": "Хьахьокха", + "rcshowhideliu": "$1 бовзийтарчара доакъашхой", + "rcshowhideliu-hide": "Къайлдаккха", "rcshowhideanons": "$1 цIияьккханза дакъалаьцархой", + "rcshowhideanons-show": "Хьахьокха", + "rcshowhideanons-hide": "Къайлдаккха", "rcshowhidepatr": "$1 теркам даь хувцамаш", "rcshowhidemine": "$1 сай хувцамаш", + "rcshowhidemine-hide": "Къайлдаккха", "rclinks": "$2 динах
$3 $1 хинна тIехьара хувцамаш хьахьокха", - "diff": "кхы.", + "diff": "башхало", "hist": "истори", "hide": "Къайлдаккха", "show": "Хьахьокха", - "minoreditletter": "м", - "newpageletter": "Н", + "minoreditletter": "зI", + "newpageletter": "К", "boteditletter": "б", "rc_categories_any": "МоллагIа а", "rc-change-size-new": "Хувцам баьнначул тӀехьагIа бола боарам: $1 {{PLURAL:$1|байт}}", @@ -573,19 +582,19 @@ "rc-enhanced-hide": "Ма дарра чулоацамаш къайладаккха", "recentchangeslinked": "Гаргалон хувцамаш", "recentchangeslinked-feed": "Гаргалон хувцамаш", - "recentchangeslinked-toolbox": "Гаргалон хувцамаш", + "recentchangeslinked-toolbox": "Укханца вIашагIдувзаденна хувцамаш", "recentchangeslinked-title": "$1ца хьалаьца хувцамаш", "recentchangeslinked-summary": "Ер, Iинк яь йола оагIув (е укх цатегачу чуйоагIараш), дукха ха йоацаш хьийца оагIувнашкий дагарле я.\n[[Special:Watchlist|Шун теркама дагарленашках]] чуйоагIа оагIувнаш '''белгалаяь я'''.", "recentchangeslinked-page": "ОагIува цIи", "recentchangeslinked-to": "ОагIувнаш тIа хувцамаш хьахьокха, хьахьекха йола оагIув тIа Iинкаш еш йола.", - "upload": "Паьл чуяьккха", + "upload": "Файл чуяккха", "uploadbtn": "Паьл чуяьккха", "uploadlogpage": "Чуяьккхамий тептар", "filedesc": "Лоаца лоацам", "fileuploadsummary": "Лоаца лоацам:", "license": "ЦIийяздар", "license-header": "ЦIийяздар", - "imgfile": "паьл", + "imgfile": "файл", "listfiles": "Паьлий дагарче", "listfiles_date": "Денха", "listfiles_name": "Паьла цIи", @@ -593,23 +602,23 @@ "listfiles_size": "Дустам", "listfiles_description": "Лоацам", "listfiles_count": "Доржамаш", - "file-anchor-link": "Паьл", - "filehist": "Паьла истори", - "filehist-help": "Хьалхе паьла мишта хиннай хьожаpгволаш/йолаш, дентаьрах/сахьата тIа пIелга тIообе.", + "file-anchor-link": "Файл", + "filehist": "Файлан истори", + "filehist-help": "Кнопка таьрахь/ха тоIае цу хан файл мишта хиннай хьожаpгволаш/йолаш", "filehist-revert": "юхаяьккха", "filehist-current": "xIанзара", - "filehist-datetime": "Дентаьрах/Ха", - "filehist-thumb": "ЗIамигасуртанче", - "filehist-thumbtext": "$1 доржаме зIамигсуртанчoa", - "filehist-user": "Дакъалаьцархо", - "filehist-dimensions": "ХIамана дустам", + "filehist-datetime": "Таьрахь/Ха", + "filehist-thumb": "ЗIамигасурт", + "filehist-thumbtext": "ЗIамига сурт укх версин $1", + "filehist-user": "Доакъашхо", + "filehist-dimensions": "Файлан боарам", "filehist-filesize": "Паьла юстарал", - "filehist-comment": "ХIамоалар", - "imagelinks": "Паьлий пайда эца", - "linkstoimage": "{{PLURAL:$1|1=ТIехьайоагIа $1 оагIув Iинк ду|ТIехьайоагIа $1 оагIувнаш Iинкаш ду}} укх паьла тIа:", + "filehist-comment": "Белгалдаккхар", + "imagelinks": "Файла пайда эцар", + "linkstoimage": "{{PLURAL:$1|1=ТIехьайоагIача $1 оагIуво тIахьожаву|ТIехьайоагIача $1 оагIувнаша тIахьожаву}} укх файла тIа:", "nolinkstoimage": "Йола паьла тIа Iинк ю оагIувнаш дац", "sharedupload": "Ер паьла $1чера я, кхыча хьахьоадайтамча хьахайраде йийшайолаш я.", - "sharedupload-desc-here": "Ер паьл $1чара я, кхыдола хьахьоадайтамача хайрамбе йийш йолаш да.\nЦун [$2 лоацама оагIувца] лоаца маIандар кIалхагIа латта.", + "sharedupload-desc-here": "Ер файл $1 чура я, иштта кхыйола проекташ чу пайда эца аьттув болаш я.\nЦун [$2 йоазонца сурт оттадара оагIон] информаци кIалхахь хьайоалаяй.", "uploadnewversion-linktext": "Укх паьлий керда бIаса чуяьккха", "filerevert-comment": "Бахьан:", "filedelete-comment": "Бахьан:", @@ -617,25 +626,26 @@ "filedelete-reason-otherlist": "Кхыдола бахьан", "download": "хьачуяьккха", "unwatchedpages": "Теркамза оагIувнаш", - "randompage": "Дагадоаца йоазув", + "randompage": "Ца ховш нийсъенна йоазув", "statistics": "Дагара куц", "statistics-pages": "ОагIувнаш", "brokenredirects-edit": "хувца", "brokenredirects-delete": "дIадаккха", "withoutinterwiki-submit": "Хьахьокха", - "nbytes": "$1 {{PLURAL:$1|1=бIат|бIаташ}}", + "nbytes": "$1 {{PLURAL:$1|байт}}", "nmembers": "$1 {{PLURAL:$1|1=дакъалаьцархо|дакъалаьцархой}}", "prefixindex": "ОагIувнаший хьалхера цIи хьагойтар", "shortpages": "Лоаца оагIувнаш", "longpages": "Доккхий оагIувнаш", "usercreated": "{{GENDER:$3|Чуваьннав|Чуяьннай}} $1 $2", - "newpages": "Керда оагIувнаш", + "newpages": "Керда оагIонаш", "move": "ЦIи хувца", "movethispage": "Укх оагIува цIи хувца", "pager-newer-n": "{{PLURAL:$1|кердагIа дара|кердагIа дараш|кердагIа долачаьрахь}} $1", "pager-older-n": "{{PLURAL:$1|къаьнара дара|къаьнара дараш|къаьнара долaчаьрахь}} $1", - "booksources": "Китабий гIувам", - "booksources-search-legend": "Китаба лоаца маIандара тохкам", + "booksources": "Джейнай хьасташ (источники)", + "booksources-search-legend": "Джейнах лаьца хоам лахар", + "booksources-search": "Хьалáха", "log": "Тептараш", "allpages": "Еррига оагIувнаш", "prevpage": "($1) хьалхара оагIув", @@ -643,9 +653,9 @@ "allpagesto": "Укх оагIувнаш тIа бIарга дита:", "allarticles": "Еррига оагIувнаш", "allpagessubmit": "Кхоачашде", - "categories": "Цатегаш", + "categories": "Категореш", "linksearch": "Т|ера|инкаш лахар", - "linksearch-ok": "Лаха", + "linksearch-ok": "Хьалáха", "linksearch-line": "$1 тIа Iинк $2 юкъера", "listgrouprights-members": "(тоабий дагарче)", "emailuser": "Дакъалаьцархочоа д-хоамни:", @@ -654,7 +664,7 @@ "watchlistfor2": "$1 $2 царна", "addedwatchtext": "\"[[:$1]]\" оагIув, шун [[Special:Watchlist|теркама дагаршкахь]] чуяккха я. \nТехьара мел йола укх оагIувни хувцамаш цу дагаршкахь хоам беш хургья. Вешта [[Special:RecentChanges|керда хувцама дагаршкаехь]] сома къоалмаца хьакъоастлуш хургья.", "removedwatchtext": "\"[[:$1]]\" оагIув, шун [[Special:Watchlist|теркама дарагчера]] дIаяккха хиннай.", - "watch": "Тохкам бе", + "watch": "Зе", "watchthispage": "Укх оагIува теркам бе", "unwatch": "Лора ма де", "watchlist-details": "Шун теркама дагарченгахь йола $1 {{PLURAL:$1|1=оагIув|оагIувнаш}}, дувцама оагIувнаш ца лоархIаш.", @@ -667,12 +677,12 @@ "actioncomplete": "ДулархIам баьб", "actionfailed": "Оттам даьдац", "deletedtext": "\"$1\" дIаяьккха хиннай.\nТIехьара дIадаьккха дагарчена хьожаргволаш/хьожаргьйолаш, $2 хьажа.", - "dellogpage": "ДIадаккхара тептар", + "dellogpage": "ДIадаккхарай тептар", "deletecomment": "Бахьан:", "deleteotherreason": "Кхыдола бахьан/тIатохар:", "deletereasonotherlist": "Кхыдола бахьан", - "rollbacklink": "юхаяьккха", - "protectlogpage": "Лорама тептар", + "rollbacklink": "юхаяккха", + "protectlogpage": "Лорадара тептар", "protectedarticle": "\"[[$1]]\" оагIув лорам деж я", "modifiedarticleprotection": "\"[[$1]]\" оагIувни лорама лагIа хувцаяьннай", "protectcomment": "Бахьан:", @@ -697,17 +707,19 @@ "restriction-create": "Кхоллам", "restriction-upload": "Чудаккхар", "undeletelink": "БIаргтасса/юхаметтаоттаде", - "undeleteviewlink": "бIаргтасса", - "namespace": "ЦIерий аренаш", - "invert": "Хьаржар юхадаккха", - "blanknamespace": "(Корта)", - "contributions": "{{GENDER:$1|Дакъалаьцархочунна}} къахьегам", + "undeleteviewlink": "хьажа", + "undelete-search-submit": "Хьалáха", + "namespace": "ЦIерий мотт", + "invert": "Харжар юхадаккха", + "namespace_association": "Ювзаенна мотт", + "blanknamespace": "(Кертера)", + "contributions": "{{GENDER:$1|Доакъашхочунна}} къахьегам", "contributions-title": "$1 дакъалаьцархочунна къахьегам", "mycontris": "Са къахьегам", "contribsub2": "{{GENDER:$3|$1}} ($2) баь болх", "uctop": "(xIанзара)", - "month": "Цхьа бутт хьалхагIа (кхы хьалхагIа)", - "year": "Цхьа шу хьалхагIа (кхы хьалхагIа):", + "month": "Цхьан бетт (кхы хьалхагIа)", + "year": "Цхьан шера (кхы хьалхагIа):", "sp-contributions-newbies": "Керда даязья йоазоначера мара баь бола къахьегам ма хьокха", "sp-contributions-blocklog": "чIегаш", "sp-contributions-uploads": "чуяьккхамаш", @@ -716,18 +728,18 @@ "sp-contributions-search": "Къахьегама лахар", "sp-contributions-username": "IP-моттиг е цIи:", "sp-contributions-toponly": "ТIехьара доржамаш лоархаш дола хувцамаш мара ма хьокха", - "sp-contributions-submit": "Хьалаха", - "whatlinkshere": "Iинкаш укхаза", + "sp-contributions-submit": "Хьалáха", + "whatlinkshere": "Хьожаяргаш укхаза", "whatlinkshere-title": "\"$1\" тIа Iинкаш еш йола оагIувнаш", "whatlinkshere-page": "ОагIув", - "linkshere": "ТIехьара оагIувнаш '''[[:$1]]''' тIа Iинкаш ю:", + "linkshere": "ТIехьайоагIа оагIувнаш тIахьожаву «'''[[:$1]]'''»:", "nolinkshere": "'''[[:$1]]''' оагIув тIа, кхыдола оагIувашкара Iинкаш йоацаш я", - "isredirect": "дIа-хьа оагIув", - "istemplate": "чудаккхар", - "isimage": "паьла Iинк", + "isredirect": "ТIахьожадаран оагIув", + "istemplate": "юкъейоалаяр", + "isimage": "Файлан хьожаярг", "whatlinkshere-prev": "{{PLURAL:$1|1=хьалхайоагIа|хьалхайоагIараш}} $1", "whatlinkshere-next": "{{PLURAL:$1|1=тIехьайоагIа|тIехьайоагIараш}} $1", - "whatlinkshere-links": "← Iинкаш", + "whatlinkshere-links": "← хьожаяргаш", "whatlinkshere-hideredirs": "$1 дIа-хьа чуяьккхамаш", "whatlinkshere-hidetrans": "$1 чуяьккхамаш", "whatlinkshere-hidelinks": "$1 Iинкаш", @@ -736,6 +748,7 @@ "blockip": "Укх {{GENDER:$1|доакъошхочоа}} ч|ега бола", "ipboptions": "2 сахьат:2 hours,1 ди:1 day,3 ди:3 days,1 кIира:1 week,2 кIира:2 weeks,1 бутт:1 month,3 бутт:3 months,6 бутт:6 months,1 шу:1 year,сиха ца луш:infinite", "ipblocklist": "ЧIега бела дакъалаьцархой", + "ipblocklist-submit": "Хьалáха", "blocklink": "чIегa тоха", "unblocklink": "чIега баста", "change-blocklink": "ЧIегатохар хувца", @@ -763,7 +776,7 @@ "allmessages-filter-all": "Дерригаш", "allmessages-language": "Мотт:", "allmessages-filter-submit": "Дехьа гӀо", - "thumbnail-more": "Хьадоккхаде", + "thumbnail-more": "Доккха де", "thumbnail_error": "ЗIамигасуртанчий кхеллама гIалат: $1", "import-upload-filename": "ПаьлацIи:", "tooltip-pt-userpage": "Дакъалаьцархочунна оагIув", @@ -771,81 +784,89 @@ "tooltip-pt-preferences": "Шун оттамаш", "tooltip-pt-watchlist": "ОоагIувна дагарле, шо бIаргалокхаш йола", "tooltip-pt-mycontris": "Шун хувцамаш", - "tooltip-pt-login": "Укхаза хьай цIи аьле чувала/яла йиша я, амма чуцаваьлача/ялача хIама а дац", + "tooltip-pt-login": "Укхаза хьай цIи аьле чувала/яла йиша я, амма из параз дац", "tooltip-pt-logout": "Аравала/яла", - "tooltip-pt-createaccount": "Хьа бокъо я лоархIама яздар кхелла система чу вала, амма декхар долаш дац из.", - "tooltip-ca-talk": "ОагIувна чулоацаме дувцам", - "tooltip-ca-edit": "Хувца ер оагIув", - "tooltip-ca-addsection": "Керда декъам хьаде", + "tooltip-pt-createaccount": "Хьа бокъо я учёта яздар кхелла система чу вала, амма параз долаш дац из.", + "tooltip-ca-talk": "ОагIон чулоацам дувца оттадар", + "tooltip-ca-edit": "Нийсъе ер оагIув", + "tooltip-ca-addsection": "Керда дакъа хьаде", "tooltip-ca-viewsource": "Ер оагIув хувцамах лораяь я, амма шун цунна гIувамага хьажа бокъо я.", - "tooltip-ca-history": "Укх оагIувни хувцама таптар", + "tooltip-ca-history": "Укх оагIон даь хувцамаш тIа дола тептар", "tooltip-ca-protect": "Eр оагIув лорае", "tooltip-ca-delete": "Ер оагIув дIаяькха", "tooltip-ca-move": "Укх оагIува цIи хувца", - "tooltip-ca-watch": "Ер оагIув теркам беча каьхата тIа тIаяьккха", + "tooltip-ca-watch": "Ер оагIув хьай теркам беча каьхата тIа тIаяьккха", "tooltip-ca-unwatch": "Ер оагIув теркам беча каьхата тIара дIаяькха", - "tooltip-search": "Цу тайпара дош лаха {{SITENAME}}", + "tooltip-search": "Хьалáха {{grammar:prepositional|{{SITENAME}}}} чу", "tooltip-search-go": "Изза мо цӀи йолаш оагӀув тӀa дехьавала", - "tooltip-search-fulltext": "Изза мо яздам долаш оагӀувнаш лаха", + "tooltip-search-fulltext": "Изза мо яздар долаш оагӀувнаш лаха", "tooltip-p-logo": "Кертера оагIув тIа дехьавала", "tooltip-n-mainpage": "Кертера оагIув тIа дехьавала", "tooltip-n-mainpage-description": "Кертера оагIув тIа дехьавала", - "tooltip-n-portal": "Хьахьоадайтамахь лаьца, хьа де йишдар, фу а мичча а йоала", - "tooltip-n-currentevents": "ХIанзара хоаман дагарле", - "tooltip-n-recentchanges": "ТӀехьара хувцамий дагарче", - "tooltip-n-randompage": "Бе йоаца оагӀув ела", - "tooltip-n-help": "Новкъостала моттиг", - "tooltip-t-whatlinkshere": "Массайола оагIувий дагарле, укх оагIув тIа Iинкаш луш йола", - "tooltip-t-recentchangeslinked": "ОагIувнаш тIа тIехьара хувцамаш, укх оагIувнера Iинк яь йола", + "tooltip-n-portal": "ГIалгIай Википедех лаьца дар а, укхаза де мегаш дар а, малагIа фуд а, мича да а", + "tooltip-n-currentevents": "ХIанзара хинна хIамах бола хоам", + "tooltip-n-recentchanges": "ТӀеххьара хувцамай список", + "tooltip-n-randompage": "Башхало йоаца ца ховш нийсъенна оагӀув хьаела", + "tooltip-n-help": "Новкъостал лаха мегаш йола моттиг", + "tooltip-t-whatlinkshere": "Укхаза тIахьожавеш йола оагIонай список", + "tooltip-t-recentchangeslinked": "Укх оагIуво тIахьожавеш йолча оагIонай тIеххьара хувцамаш", "tooltip-feed-rss": "Укх оагIувна RSSчу гойтар", "tooltip-feed-atom": "Укх оаг|увна Atomчу гойтар", - "tooltip-t-contributions": "Укх дакъалаьцархочу хьийца йола оагIувнаш хьахьокха", + "tooltip-t-contributions": "{{GENDER:$1|Укх доакъашхочо хийца}} йола оагIувнаш", "tooltip-t-emailuser": "Укх дакъалаьцархочоа зIы яхьийта", - "tooltip-t-upload": "Паьлаш чуяьккха", - "tooltip-t-specialpages": "ГIулакха оагIувний дагарчe", - "tooltip-t-print": "Укх оаугIувна каьхатзарбане доржам", - "tooltip-t-permalink": "Укх оагIув доржама даим латта Iинк", - "tooltip-ca-nstab-main": "Йоазува чулоацам", + "tooltip-t-upload": "Файлаш чуяккха", + "tooltip-t-specialpages": "ГIулакха оагIувнаш", + "tooltip-t-print": "Укх оагIон зарба тохара верси", + "tooltip-t-permalink": "ОагIон укх версин тIахьожавеш йола даим латташ йола хьожаярг", + "tooltip-ca-nstab-main": "ОагIон чурадар", "tooltip-ca-nstab-user": "Дакъалаьцархочунна ший оагIув", - "tooltip-ca-nstab-special": "Ер гIулакха оагIув я, из хувца хьо бокъо йолаш вац/яц.", - "tooltip-ca-nstab-project": "Хьахьоадайтама оагIув", - "tooltip-ca-nstab-image": "Паьла оагIув", - "tooltip-ca-nstab-template": "ЧIабала оагIув", - "tooltip-ca-nstab-category": "Цатега оагIув", + "tooltip-ca-nstab-special": "Ер гIулакха оагIув я, из хувца бокъо яц", + "tooltip-ca-nstab-project": "Проектан оагIув", + "tooltip-ca-nstab-image": "Файлан оагӀув", + "tooltip-ca-nstab-template": "Кепан оагIув", + "tooltip-ca-nstab-help": "ГӀон оагIув", + "tooltip-ca-nstab-category": "Категорий оагӀув", "tooltip-minoredit": "Ер хувцар башха доаца санна белгалде", "tooltip-save": "Хувцамаш кходе", "tooltip-preview": "ОагIув тIа хьалхе бIаргтассар, дехар да, оагIув дIаязъелаьх, цун теркам бе.", "tooltip-diff": "Яздам тIа яь йола хувцамаш хьахьокха", "tooltip-compareselectedversions": "Укх оагIувни шин доржамаш тIа юкъера хувцамаш зе.", "tooltip-watch": "Ер оагIув теркам беча каьхата тIа яькха", - "tooltip-rollback": "ГIалaтнийсадаро тIехьара яь йола хувцамаш, пIелг тоIобе дIаяьккха.", - "tooltip-undo": "Баь хувцам дIабаьккхe, бIаргатассам хьахьокха, кара дале, дIаяьккха бахьан Iочуязаде моттигаца.", + "tooltip-rollback": "Цкъа пIелг тоIабе дIадаккха тIехьара редакторас даь хувцамаш", + "tooltip-undo": "Даь хувцар дIадаьккха, хьалххе хьажар хьахьокха, дIадаккхара бахьан Iочуязаде аьттув болаш.", "tooltip-summary": "Лоаца чулоацам Iочуязаде", "pageinfo-toolboxlink": "ОагIонах бола хоам", - "previousdiff": "← Хьалхара хувцам", - "nextdiff": "ТIайоагIа хувцам", - "file-info-size": "$1 × $2 фихсам, паьла дустам: $3, MIME-тайп: $4", - "file-nohires": "Укхал доккхагIа доржам дац", - "svg-long-desc": "SVG-паьл, $1 × $2 фихелашца, паьла дустам: $3", - "show-big-image": "ХьалхагIара сурт", + "previousdiff": "← Хьалхара нийсдар", + "nextdiff": "ТIайоагIа нийсъар", + "file-info-size": "$1 × $2 {{PLURAL:$2|пиксель}}, файлан боарам: $3, MIME-тайпа: $4", + "file-nohires": "Укхал дуккхагIа доккхал долаш верси яц", + "svg-long-desc": "SVG-файл, номинально $1 × $2 {{PLURAL:$2|пиксель}}, файлан боарам: $3", + "show-big-image": "ДIадолалу файл", + "show-big-image-size": "$1 × $2 пиксель", "noimages": "Суртaш бIаргагуш дац.", - "ilsubmit": "Лаха", + "ilsubmit": "Хьалáха", "bad_image_list": "Бустам цу тайпара хила беза:\n\nДагарлен хьаракъаш мара лоарх|аш хургьяц (укх тамагIалгацa * дувлашду мугIараш).\nМугIарен хьалхара Iинк, сурт Iоттае пурам доаца Iинка, хила еза. \nЦу мугIара тIехьайоагIа Iинкаш, арадаккхар мо лоарх|аш хургья, вешта аьлча, йоазувашка чуIоттаде мегаш дола сурт санна ларх|а мега.", - "metadata": "МетахIамаш", + "metadata": "Метахоамаш", "metadata-help": "Паьлас чулоаца, кхыдола хIамаш, таьрахьа суртдоакхаргца е тIагIолладоакхаргца чудакхаш дола. Хьаяь паьл, гIалатахь мукъадаькха хинна дале, хьахьокхаш дола сурт, деррига хIамаш чулоацаргдац.", "metadata-expand": "Кхыдола хIамаш хьахьокха", "metadata-collapse": "Кхыдола хIамаш къайладаккха", - "metadata-fields": "Укх дагарченгахь дагaрадаь метахIамаша суртий мугIаш, сурт оагIув тIа хьахьекха хургья, чуерзaяь метахIамашийца. Вож мугIанаш ха йоалаш къайла хургья.\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": "Укх списке дагaрадаь суртай метахоамай йистош, хьахьекха хургда суртан оагIон тIа, метахоамай таблица хьоарчая йолаш. Юхедиса йистош къайла хургда.\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-imagewidth": "Шерал", "exif-imagelength": "Лакхал", + "exif-orientation": "Суртан белгало", "exif-imagedescription": "Сурта цIи", + "exif-model": "Камера модель", + "exif-software": "Программни Iалашдар", "exif-artist": "Яздархо", + "exif-exifversion": "Верси Exif", "exif-colorspace": "Басара аре", - "exif-pixelydimension": "Сурта шерал", - "exif-pixelxdimension": "Сурта лакхал", + "exif-pixelxdimension": "Сурта шерал", + "exif-pixelydimension": "Сурта лакхал", + "exif-datetimedigitized": "Оцифровк яь таьрахь а, ха а", "exif-writer": "Яздама да", "exif-languagecode": "Мотт", "exif-iimcategory": "Цатег", + "exif-orientation-1": "гIаьхьа", "exif-scenecapturetype-1": "ЛаьттабIаса", "exif-scenecapturetype-2": "Сурт", "exif-iimcategory-edu": "Дешар", @@ -873,14 +894,15 @@ "version-version": "($1)", "version-software-version": "Доржам", "fileduplicatesearch-filename": "ПаьлацIи:", - "fileduplicatesearch-submit": "Лаха", - "specialpages": "ГIулакхий оагIувнаш", + "fileduplicatesearch-submit": "Хьалáха", + "specialpages": "ЛаьрххIа йола оагIувнаш", "specialpages-group-users": "Дакъалаьцархой, цара бокъо", "specialpages-group-pages": "ОагIувний дагарченаш", "specialpages-group-pagetools": "ОагIувнаша гIирсаш", "external_image_whitelist": "#Ер мугI ший долаш тайпара дита
\n#Каст-каста оаламаш укхаза дIаязаде(юкъе дола дакъа //)\n#арара суртий URLца дIанийсалургда уш.\n#Пайдан дола, сурташ мо хьахьекха хургья, дахIодараш, сурта тIа Iинкаш мо хуpгья хьахьекха.\n#Укх # тамагIалгаца дIадувлаш дола мугIанаш, оалам мо лоархаш да.\n#МугIанаш яздaтакха каьда да\n\n#Каст-каста оаламаш укх мугIа лакхе дIаязаде. Из мугI ший долаш тайпара дита
", - "tag-filter": "[[Special:Tags|Йоазоний]] цIенаярг:", + "tag-filter": "[[Special:Tags|белгалонай]] луттарг:", "tag-filter-submit": "ЦIенъе", + "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|1=Белгало|Белгалонаш}}]]: $2)", "tags-title": "Йоазонаш", "tags-tag": "Йоазон цIи", "tags-hitcount-header": "Белгалаяь хувцамаш", @@ -893,9 +915,11 @@ "htmlform-submit": "ДIадахьийта", "htmlform-reset": "Хувцамаш юхадаккха", "htmlform-selectorother-other": "Кхыдола", + "logentry-delete-delete": "$1 {{GENDER:$2|дIаяккхай}} оагIув $3", + "logentry-newusers-create": "{{GENDER:$2|Доакъашхочо кхеллай}} учёта яздар $1", "rightsnone": "(а)", "revdelete-summary": "хувцамий лоацам", - "searchsuggest-search": "Лаха", + "searchsuggest-search": "Лахар", "special-characters-group-latin": "Лаьтмий", "special-characters-group-greek": "Джелтий", "special-characters-group-cyrillic": "Цырилиций", diff --git a/languages/i18n/is.json b/languages/i18n/is.json index bdadf3a804..8e3c46f523 100644 --- a/languages/i18n/is.json +++ b/languages/i18n/is.json @@ -23,7 +23,8 @@ "Jonbg", "Matma Rex", "Xð", - "Sveinki" + "Sveinki", + "Nemo bis" ] }, "tog-underline": "Undirstrika tengla:", @@ -344,7 +345,7 @@ "filecopyerror": "Mistókst að afrita skjal \"$1\" á \"$2\".", "filerenameerror": "Gat ekki endurnefnt skrána „$1“ í „$2“.", "filedeleteerror": "Gat ekki eytt skránni „$1“.", - "directorycreateerror": "Gat ekki búið til efnisskrána \"$1\".", + "directorycreateerror": "Gat ekki búið til möppuna \"$1\".", "directoryreadonlyerror": "Mappan \"$1\" er skrifvarin.", "directorynotreadableerror": "Mappan \"$1\" er ekki lesanleg.", "filenotfound": "Gat ekki fundið skrána „$1“.", @@ -360,6 +361,8 @@ "title-invalid-empty": "Umbeðinn síðutitill er auður eða inniheldur aðeins heiti nafnrýmis.", "title-invalid-utf8": "Umbeðinn síðutitill inniheldur ógilda UTF-8 runu.", "title-invalid-characters": "Umbeðinn síðutitill inniheldur ógilda stafi: \"$1\".", + "title-invalid-magic-tilde": "Umbeðinn síðutitill inniheldur ógilda tildurunu (~~~).", + "title-invalid-too-long": "Umbeðinn síðutitill er of langur. Hann má ekki vera lengri en $1 {{PLURAL:$1|bæti}} í UTF-8 stafatöflu.", "title-invalid-leading-colon": "Umbeðinn síðutitill inniheldur ógildan tvípunkt í byrjun.", "perfcached": "Eftirfarandi er afrit af umbeðinni síðu og gæti því ekki verið nýjasta útgáfa hennar. Allt að $1 {{PLURAL:$1|niðurstaða er aðgengileg|niðurstöður eru aðgengilegar}} í skyndiminninu.", "perfcachedts": "Eftirfarandi gögn eru í skyndiminninu, og voru síðast uppfærð $1. Allt að $4 {{PLURAL:$4|niðurstaða er aðgengileg|niðurstöður eru aðgengilegar}} í skyndiminninu.", @@ -395,6 +398,7 @@ "virus-unknownscanner": "óþekktur veiruskanni:", "logouttext": "'''Þú hefur verið skráð(ur) út.'''\n\nAthugaðu að sumar síður kunna að birtast líkt og þú sért ennþá skráð(ur) inn, þangað til að þú hreinsar skyndiminnið í vafranum þínum.", "cannotlogoutnow-title": "Get ekki skráð út núna", + "cannotlogoutnow-text": "Útskráning er ekki möguleg þegar verið er að nota $1.", "welcomeuser": "Velkomin(n), $1!", "welcomecreation-msg": "Aðgangurinn þinn hefur verið búinn til.\nEkki gleyma að breyta [[Special:Preferences|{{SITENAME}} stillingunum]] þínum.", "yourname": "Notandanafn:", @@ -412,6 +416,7 @@ "userlogin-remembermypassword": "Muna innskráningu mína", "userlogin-signwithsecure": "Nota örugga tengingu", "cannotloginnow-title": "Get ekki skráð inn núna", + "cannotloginnow-text": "Innskráning er ekki möguleg þegar verið er að nota $1.", "yourdomainname": "Þitt lén:", "password-change-forbidden": "Þú getur ekki breytt lykilorðum á þessum wiki.", "externaldberror": "Uppfærsla mistókst. Annaðhvort varð villa í gagnasafninu eða að þér sé óheimilt að uppfæra aðra aðganga.", @@ -450,15 +455,16 @@ "createacct-benefit-body2": "{{PLURAL:$1|síða|síður}}", "createacct-benefit-body3": "{{PLURAL:$1|nýlegur stuðningsaðili|nýlegir stuðningsaðilar}}", "badretype": "Lykilorðin sem þú skrifaðir eru ekki eins.", + "usernameinprogress": "Nú þegar er í vinnslu gerð aðgangs fyrir þennan notanda.\nHinkraðu aðeins.", "userexists": "Þetta notandanafn er þegar í notkun.\nVeldu þér eitthvað annað.", "loginerror": "Innskráningarvilla", "createacct-error": "Stofnun aðgangs mistókst", "createaccounterror": "Gat ekki búið til notanda: $1", - "nocookiesnew": "Innskráningin var búin til, en þú ert ekki skráð(ur) inn.\n{{SITENAME}} notar vefkökur til að skrá inn notendur.\nÞú hefur lokað fyrir vefkökur.\nGjörðu svo vel og opnaðu fyrir þær, skráðu þig svo inn með notandanafni og lykilorði.", + "nocookiesnew": "Notandaaðgangur var búin til, en þú ert ekki skráð(ur) inn.\n{{SITENAME}} notar vefkökur til að skrá inn notendur.\nÞú hefur lokað fyrir vefkökur.\nEndilega opnaðu fyrir þær, skráðu þig svo inn með notandanafni og lykilorði.", "nocookieslogin": "{{SITENAME}} notar vefkökur til innskráningar. Vafrinn þinn er ekki að taka á móti þeim. Virkjaðu móttöku á vefkökum í vafranum þínum til að geta skráð þig inn.", - "nocookiesfornew": "Notenda aðgangurinn var ekki stofnaður, því ekki fannst uppruni beiðnarinnar.\nGakktu úr skugga um að vefkökur séu virkar, endurhladdu þessari síðu og reyndu aftur.", + "nocookiesfornew": "Notandaaðgangurinn var ekki stofnaður, því ekki var hægt að staðfesta uppruna beiðnarinnar.\nGakktu úr skugga um að vefkökur séu virkar, endurlestu þessa síðu og reyndu aftur.", "noname": "Þú hefur ekki tilgreint gilt notandanafn.", - "loginsuccesstitle": "Skráð/ur inn", + "loginsuccesstitle": "Innskráning tókst", "loginsuccess": "'''Þú ert nú innskráð(ur) á {{SITENAME}} sem „$1“.'''", "nosuchuser": "Það er enginn notandi með þetta nafn: \"$1\".\nGerður er greinarmunur á há- og lágstöfum.\nAthugaðu hvort um innsláttavillu er að ræða eða [[Special:UserLogin/signup|búðu til nýtt notandanafn]].", "nosuchusershort": "Það er enginn notandi með nafnið „$1“. Athugaðu hvort nafnið sé ritað rétt.", @@ -494,7 +500,7 @@ "createaccount-title": "Innskráningagerð á {{SITENAME}}", "createaccount-text": "Einhver bjó til aðgang fyrir netfangið þitt á {{SITENAME}} ($4) undir nafninu „$2“, með lykilorðið „$3“.\nÞú ættir að skrá þig inn og breyta lykilorðinu núna.\n\nÞú getur hunsað þessi skilaboð, ef villa hefur átt sér stað.", "login-throttled": "Þér hefur of oft mistekist að skrá þig inn með þessu notandanafni.\nBíddu $1 áður en þú reynir aftur.", - "login-abort-generic": "Innskráningin misheppnaðist - hætt var við hana", + "login-abort-generic": "Innskráningin misheppnaðist - hætt var við hana.", "login-migrated-generic": "Aðgangurinn þinn hefur verið sameinaður og notandanafnið þitt finnst ekki lengur á þessum wiki.", "loginlanguagelabel": "Tungumál: $1", "suspicious-userlogout": "Beiðni um útskráningu hafnað því hún var líklegast send frá biluðum vafra eða vefseli sem hefur vistað vefsíðuna í flýtiminni.", @@ -515,7 +521,7 @@ "retypenew": "Endurtaktu nýja lykilorðið:", "resetpass_submit": "Skrifaðu aðgangsorðið og skráðu þig inn", "changepassword-success": "Það tókst að breyta lykilorðinu þínu!", - "changepassword-throttled": "Þú hefur gert of margar tilraunir til innskráningar.\nBíddu í $1 áður en þú reynir aftur.", + "changepassword-throttled": "Þú hefur gert of margar tilraunir til innskráningar að undanförnu.\nBíddu í $1 áður en þú reynir aftur.", "botpasswords-label-create": "Búa til", "botpasswords-label-update": "Uppfæra", "botpasswords-label-cancel": "Hætta við", @@ -526,8 +532,10 @@ "resetpass-submit-loggedin": "Breyta lykilorði", "resetpass-submit-cancel": "Hætta við", "resetpass-wrong-oldpass": "Vitlaust bráðabirgða- eða núverandi lykilorð.\nÞú gætir þegar verið búin/n að breyta lykilorðinu eða sótt um nýtt bráðabirgðalykilorð", + "resetpass-temp-emailed": "Þú skráðir þig inn með bráðabirgðakóða úr tölvupósti.\nTil að klára að skrá þig inn, verður þú að velja nýtt lykilorð hér:", "resetpass-temp-password": "Bráðabirgðalykilorð:", "resetpass-abort-generic": "Breytingum á lykilorðum hefur verið hætt með viðbót.", + "resetpass-expired": "Lykilorðið þitt er útrunnið. Skráðu nýtt lykilorð til að skrá þig inn.", "passwordreset": "Endurstilla lykilorð", "passwordreset-text-one": "Útfylltu þetta eyðublað til þess að endursetja lykilorðið.", "passwordreset-disabled": "Lokað hefur verið fyrir að endurstilla lykilorð á þessum wiki.", @@ -542,6 +550,7 @@ "passwordreset-emailtext-user": "Notandinn $1 á {{SITENAME}} hefur beðið um endursetningu lykilorðsins þíns fyrir {{SITENAME}} ($4). Aðgangur eftirfarandi {{PLURAL:$3|notanda er|notendum eru}} tengd þessu netfangi:\n\n$2\n\nEf þetta er það sem þú vildir, þarftu að skrá þig inn og velja nýtt lykilorð. {{PLURAL:$3|Bráðabirgðalykilorðið rennur|Bráðabirgðalykilorðin renna}} út eftir $5 {{PLURAL:$5|dag|daga}}.\n\nEf það varst ekki þú sem fórst fram á þetta, eða ef þú manst aftur lykilorðið þitt, og vilt ekki lengur breyta því, skaltu hunsa þessi skilaboð og halda áfram að nota gamla lykilorðið.", "passwordreset-emailelement": "Notandanafn: \n$1\n\nBráðabirgðalykilorð: \n$2", "passwordreset-emailsentemail": "Ef þetta netfang er skráð fyrir aðganginum þínum þá hefur töluvpóstur verið sendur til að endursetja lykilorðið.", + "passwordreset-emailsentusername": "Ef eitthvað netfang er skráð fyrir aðganginum þínum, þá mun verða sendur töluvpóstur til að endursetja lykilorðið.", "passwordreset-emailsent-capture": "Tölvupóstur til að endursetja lykilorðið hefur verið sendur í tölvupósti, sem er sýndur hér fyrir neðan.", "passwordreset-emailerror-capture": "Tölvupóstur til að endursetja lykilorðið var búinn til, sem er sýndur hér fyrir neðan, en ekki tókst að senda hana til {{GENDER:$2|notandans}}: $1", "changeemail": "Breyta eða fjarlægja netfang", @@ -553,6 +562,7 @@ "changeemail-none": "(ekkert)", "changeemail-password": "{{SITENAME}} lykilorðið þitt:", "changeemail-submit": "Breyta netfangi", + "changeemail-throttled": "Þú hefur gert of margar tilraunir til innskráningar.\nBíddu í $1 áður en þú reynir aftur.", "changeemail-nochange": "Settu inn annað nýtt tölvupóstfang", "resettokens": "Endurstilla lykla", "resettokens-text": "Hér getur þú endurstillt lykla sem veita þér aðgang að ákveðnum persónuupplýsingum um aðganginn þinn.\n\nÞú átt að gera það ef þú ert búin(n) að deila þeim með einhverjum öðrum óviljandi eða ef búið er að brjóta inn í aðganginn þinn.", @@ -629,8 +639,8 @@ "previewnote": "'''Það sem sést hér er aðeins forskoðun og hefur ekki enn verið vistað!'''", "continue-editing": "Fara á breytingasvæði", "previewconflict": "Þessi forskoðun endurspeglar textann í efra breytingarsvæði eins og hann myndi líta út ef þú vistar.", - "session_fail_preview": "Því miður! Við gátum ekki unnið úr breytingu þinni vegna týndra setugagna.\n\nÞú hefur kannski verið skráð/ur út. Sannreyndu hvort þú sért ennþá skráð/ur inn og reyndu aftur.\nEf það virkar ekki, reyndu að [[Special:UserLogout|skrá þig út]], skrá þig aftur inn og athugaðu hvort vafrinn þinn leyfir kökur frá þessu vefsvæði.", - "session_fail_preview_html": "Afsakaðu! Við gátum ekki unnið úr breytingunni þinni vegna týndra lotugagna.\n\nÞar sem {{SITENAME}} styður hráan HTML kóða, þá hefur forskoðunin verið falin sem vörn gegn JavaScript árásum.\n\nEf þetta er vingjarnleg breyting, reyndu þá aftur.\nEf það virkar ekki, reyndu að [[Special:UserLogout|skrá þig út]], skrá þig aftur inn og athugaðu hvort vafrinn þinn leyfir kökur frá þessu vefsvæði.", + "session_fail_preview": "Því miður! Við gátum ekki unnið úr breytingu þinni vegna týndra setugagna.\n\nÞú hefur kannski verið skráð/ur út. Sannreyndu hvort þú sért ennþá skráð/ur inn og reyndu aftur.\nEf það virkar ekki, reyndu að [[Special:UserLogout|skrá þig út]], skrá þig aftur inn og athugaðu hvort vafrinn þinn leyfi vefkökur frá þessu vefsvæði.", + "session_fail_preview_html": "Afsakaðu! Við gátum ekki unnið úr breytingunni þinni vegna týndra setugagna.\n\nÞar sem {{SITENAME}} styður hráan HTML kóða, þá hefur forskoðunin verið falin sem vörn gegn JavaScript árásum.\n\nEf þetta er lögleg breyting, reyndu þá aftur.\nEf það virkar ekki, reyndu að [[Special:UserLogout|skrá þig út]], skrá þig aftur inn og athugaðu hvort vafrinn þinn leyfi vefkökur frá þessu vefsvæði.", "token_suffix_mismatch": "'''Breytingu þinni hefur verið hafnað því að biðlarinn þinn ruglaði greinarmerkingum í breytingar tókanum.\"\nÞetta er gert til að hindra spillingu texta síðunnar.\nÞetta getur gerst þegar þú notar bilaðan vafra eða ónafngreinda vefsels þjónustu.", "edit_form_incomplete": "'''Sumir hlutar breytingarinnar bárust ekki til vefþjónsins; athugaðu hvort breytingin þín er óbreytt og reyndu aftur.'''", "editing": "Breyti $1", @@ -658,7 +668,7 @@ "template-protected": "(vernduð)", "template-semiprotected": "(hálfvernduð)", "hiddencategories": "Þessi síða er meðlimur í $1 {{PLURAL:$1|földum flokki|földum flokkum}}:", - "edittools": "", + "edittools": "", "edittools-upload": "-", "nocreatetext": "{{SITENAME}} hefur takmarkað eiginleikann að gera nýjar síður.\nÞú getur farið til baka og breytt núverandi síðum, eða [[Special:UserLogin|skráð þið inn eða búið til aðgang]].", "nocreate-loggedin": "Þú hefur ekki leyfi til að búa til nýjar síður.", @@ -779,9 +789,9 @@ "revdelete-unsuppress": "Fjarlægja takmarkanir á endurvöktum breytingum", "revdelete-log": "Ástæða:", "revdelete-submit": "Setja á {{PLURAL:$1|valda breytingu|valdar breytingar}}", - "revdelete-success": "Sýnileiki útgáfu uppfærður.", + "revdelete-success": "'''Sýnileiki útgáfu er uppfærð.'''", "revdelete-failure": "'''Mistókst að uppfæra sýnileika útgáfu:'''\n$1", - "logdelete-success": "Stillti sýnleika aðgerðaskrár.", + "logdelete-success": "Sýnleiki aðgerðaskrár uppfærður.", "logdelete-failure": "Mistókst að uppfæra sýnileika aðgerðaskrár:\n$1", "revdel-restore": "Breyta sýn", "pagehist": "Breytingaskrá", @@ -806,7 +816,7 @@ "mergehistory-from": "Upprunaleg síða:", "mergehistory-into": "Áætlunarsíða:", "mergehistory-list": "Breytingaskrár sem hægt er að sameina", - "mergehistory-merge": "Eftirtaldar útgáfur [[:$1]] má sameina [[:$2]].\nNotaðu valtakkadálkinn til þess að sameina aðeins þær útgáfur sem stofnaðar voru fyrir uppgefið tímamark.\nAthugaðu að með því að nota flakktenglana er þessi dálkur endurstilltur.", + "mergehistory-merge": "Eftirtaldar útgáfur [[:$1]] má sameina [[:$2]].\nNotaðu valreitadálkinn til þess að sameina aðeins þær útgáfur sem stofnaðar voru fyrir uppgefið tímamark.\nAthugaðu að með því að nota flakktenglana er þessi dálkur endurstilltur.", "mergehistory-go": "Sýna breytingar sem hægt er að sameina", "mergehistory-submit": "Sameina útgáfur", "mergehistory-empty": "Engar útgáfur sem hægt er að sameina.", @@ -1017,7 +1027,7 @@ "userrights-unchangeable-col": "Hópar sem þú getur ekki breytt", "userrights-irreversible-marker": "$1*", "userrights-conflict": "Árekstur í að breyta notandaréttindum! Skoðaðu þetta aftur og staðfestu breytingar þínar.", - "userrights-removed-self": "Þú fjarlægðir þín eigin réttindi. Vegna þess mátt þú ekki lengur skoða þessa síðu.", + "userrights-removed-self": "Þér hefur tekist að fjarlægja þín eigin réttindi. Vegna þess mátt þú ekki lengur skoða þessa síðu.", "group": "Hópur:", "group-user": "Notendur", "group-autoconfirmed": "Sjálfvirkt staðfestir notendur", @@ -1053,9 +1063,9 @@ "right-suppressredirect": "Ekki búa til tilvísun frá gamla nafninu þegar síða er færð", "right-upload": "Hlaða inn skrám", "right-reupload": "Yfirrita núverandi skrá", - "right-reupload-own": "Yfirrita núverandi skrá sem að ég hlóð inn sjálf(ur)", + "right-reupload-own": "Yfirrita fyrirliggjandi skrár sem að ég hlóð inn sjálf(ur)", "right-reupload-shared": "Hunsa skrár á sameiginlegu myndasafni staðbundið", - "right-upload_by_url": "Hlaða inn skrám frá vefslóð", + "right-upload_by_url": "Hlaða inn skrám af vefslóð", "right-purge": "Hreinsa skyndiminni síðu án staðfestingar", "right-autoconfirmed": "Sneiða hjá takmörkunum vistfanga", "right-bot": "Eru meðhöndlaðir eins og sjálfvirk aðgerð", @@ -1153,7 +1163,7 @@ "action-upload": "hlaða inn þessari skrá", "action-reupload": "yfirrita þessa skrá", "action-reupload-shared": "Hunsa þessa skrá á sameiginlega myndasafninu", - "action-upload_by_url": "hlaða inn þessari skrá frá vefslóð", + "action-upload_by_url": "hlaða inn þessari skrá af vefslóð", "action-writeapi": "Nota API skrifun", "action-delete": "eyða þessari síðu", "action-deleterevision": "eyða þessari breytingu", @@ -1166,7 +1176,7 @@ "action-protect": "breyta verndunarstigum fyrir þessa síðu", "action-rollback": "Taka snögglega aftur breytingar síðasta notanda sem breytti ákveðinni síðu", "action-import": "flytja inn síður frá öðrum wiki", - "action-importupload": "flytja inn síður frá skráarupphali", + "action-importupload": "flytja inn síður úr innsendri skrá", "action-patrol": "Merkja breytingar annara sem yfirfarnar", "action-autopatrol": "Merkja eigin breytingu sem yfirfarna", "action-unwatchedpages": "Skoða lista yfir óvaktaðar síður", @@ -1247,25 +1257,25 @@ "recentchangeslinked-page": "Síðutitill:", "recentchangeslinked-to": "Sýna breytingar á síðum sem tengjast uppgefinni síðu í staðinn", "recentchanges-page-added-to-category": "[[:$1]] bætt við flokk", - "recentchanges-page-added-to-category-bundled": "[[:$1]] og $2 {{PLURAL:$2|síðu|síðum}} bætt við flokk", + "recentchanges-page-added-to-category-bundled": "[[:$1]] og $2 [[Special:WhatLinksHere/$1|{{PLURAL:$2|síðu|síðum}}]] bætt við flokk", "recentchanges-page-removed-from-category": "[[:$1]] fjarlægð úr flokki", "recentchanges-page-removed-from-category-bundled": "[[:$1]] og $2 {{PLURAL:$2|síðu|síðum}} fjarlægð úr flokki", "autochange-username": "Sjálfvirk MediaWiki-breyting", "upload": "Hlaða inn skrá", "uploadbtn": "Hlaða inn skrá", - "reuploaddesc": "Aftur á innhlaðningarformið.", + "reuploaddesc": "Hætta við og fara aftur á innhleðsluformið.", "upload-tryagain": "Sendu breytta myndlýsingu", "uploadnologin": "Óinnskráð(ur)", - "uploadnologintext": "Þú verður $1 til að hala upp skrár.", - "upload_directory_missing": "Mappa upphlaða ($1) er týnd og vefþjónninn gat ekki búið hana til.", - "upload_directory_read_only": "Mistókst að skrifa í möppu upphlaða ($1) á vefþjóni.", - "uploaderror": "Villa í innhlaðningu", + "uploadnologintext": "Þú verður $1 til að hlaða inn skrám.", + "upload_directory_missing": "Innhleðslumappan ($1) er týnd og vefþjónninn gat ekki búið hana til.", + "upload_directory_read_only": "Mistókst að skrifa í innhleðslumöppu ($1) á vefþjóninum.", + "uploaderror": "Villa í innhleðslu", "upload-recreate-warning": "Viðvörun: Skrá með þessu nafni hefur verið eytt eða færð.\n\nAnnáll varðandi eyðingu og færslu þessarar síðu er birtur hér fyrir neðan til skýringar: \\", - "uploadtext": "Notaðu eyðublaðið hér fyrir neðan til að hlaða inn skrám.\nTil að skoða eða leita í áður innhlöðnum skrám ferðu á [[Special:FileList|skráarlistann]], (endur)innhlaðnar skrár eru skráðar í [[Special:Log/upload|innhlaðningarskránni]], eyðingar í [[Special:Log/delete|eyðingaskránni]].\n\n* '''[[{{ns:file}}:Skrá.jpg]]''' til að sýna skrána í fullri upplausn.\n* '''[[{{ns:file}}:Skrá.png|200px|thumb|left|alt-texti]]''' til að nota 200 mynddíla upplausn, í ramma á vinstri spássíu með 'alt text' sem myndlýsingu.\n* '''[[{{ns:media}}:Skrá.ogg]]''' til að tengja í myndina án þess að sýna hana.", + "uploadtext": "Notaðu eyðublaðið hér fyrir neðan til að hlaða inn skrám.\nTil að skoða eða leita í áður innhlöðnum skrám ferðu á [[Special:FileList|skráarlistann]], (endur)innhlaðnar skrár eru skráðar í [[Special:Log/upload|innhleðsluskránni]], eyðingar í [[Special:Log/delete|eyðingaskránni]].\n\n* '''[[{{ns:file}}:Skrá.jpg]]''' til að sýna skrána í fullri upplausn.\n* '''[[{{ns:file}}:Skrá.png|200px|thumb|left|alt-texti]]''' til að nota 200 mynddíla upplausn, í ramma á vinstri spássíu með 'alt text' sem myndlýsingu.\n* '''[[{{ns:media}}:Skrá.ogg]]''' til að tengja í myndina án þess að sýna hana.", "upload-permitted": "{{PLURAL:$2|Heimiluð skráargerð|Heimilaðar skráargerðir}}: $1.", "upload-preferred": "{{PLURAL:$2|Ákjósanleg skrárgerð|Ákjósanlegar skrárgerðir}}: $1.", "upload-prohibited": "{{PLURAL:$2|Óheimiluð skrárgerð|Óheimilaðar skrárgerðir}}: $1.", - "uploadlogpage": "Innhlaðningarskrá", + "uploadlogpage": "Innhleðsluskráning", "uploadlogpagetext": "Fyrir neðan er listi yfir nýlegast innsendu skrárnar.\nSjá [[Special:NewFiles|myndasafn nýrra mynda]] til að sjá myndrænna yfirlit.", "filename": "Skráarheiti", "filedesc": "Lýsing", @@ -1308,38 +1318,39 @@ "fileexists-forbidden": "Skrá með þessu nafni er þegar til og ekki er hægt að skrifa yfir hana.\nEf þú vilt hlaða skránni þinni inn engu að síður, farðu þá til baka og veldu annað skráarheiti.\n[[File:$1|thumb|center|$1]]", "fileexists-shared-forbidden": "Skrá með þessu nafni er þegar til í sameiginlega myndasafninu.\nEf þú vilt hlaða skránni þinni inn engu að síður, farðu þá til baka og veldu annað skráarheiti.\n[[File:$1|thumb|center|$1]]", "file-exists-duplicate": "Þessi skrá er afrit eftirfarandi {{PLURAL:$1|skráar|skráa}}:", - "file-deleted-duplicate": "Afriti þessarar skráar ([[:$1]]) hefur verið eytt.\nÞú ættir að fara yfir eyðingarsögu skráarinnar áður en þú velur að hlaða skránni aftur inn.", + "file-deleted-duplicate": "Afriti þessarar skrár ([[:$1]]) hefur verið eytt.\nÞú ættir að fara yfir eyðingarsögu skrárinnar áður en þú velur að hlaða skránni aftur inn.", "file-deleted-duplicate-notitle": "Skrá sem er eins og þessi skrá hefur verið hlaðið inn áður og titill hennar hefur verið falinn.\nÞú ættir að spyrja einhvern með réttindi til að skoða falin skráagögn til að fara yfir málið áður en þú hleður skránni inn.", - "uploadwarning": "Aðvörun", + "uploadwarning": "Aðvörun vegna innsendingar", "uploadwarning-text": "Breyttu myndalýsingunni hér fyrir neðan og reyndu aftur.", "savefile": "Vista", "uploaddisabled": "Lokað er fyrir að hlaða inn myndum.", "copyuploaddisabled": "Lokað er fyrir að hlaða inn myndum frá vefslóð.", "uploaddisabledtext": "Lokað er fyrir að hlaða inn skrám.", - "php-uploaddisabledtext": "Upphleðsla skráa er óvirk í PHP.\nAthugaðu file_uploads stillinguna.", + "php-uploaddisabledtext": "Innhleðsla skráa er óvirk í PHP.\nAthugaðu file_uploads stillinguna.", "uploadscripted": "Þetta skjal inniheldur (X)HTML eða forskriftu sem gæti valdið villum í vöfrum.", "uploadscriptednamespace": "Þessi SVG-skrá inniheldur ógilt nafnrými \"$1\".", "uploadvirus": "Skráin inniheldur veiru! Nánari upplýsingar: $1", - "uploadjava": "Þessi skrá er ZIP skrá sem inniheldur Java .class skráasnið.\nUpphleðsla Java skráa er óheimil, því þær geta farið framhjá öryggiskröfum.", + "uploadjava": "Þessi skrá er ZIP skrá sem inniheldur Java .class skráasnið.\nInnhleðsla Java skráa er óheimil, því þær geta farið framhjá öryggiskröfum.", "upload-source": "Upprunaleg skrá", "sourcefilename": "Upprunalegt skráarheiti:", "sourceurl": "Uppruni:", "destfilename": "Móttökuskráarheiti:", "upload-maxfilesize": "Hámarks skráarstærð: $1", "upload-description": "Myndlýsing", - "upload-options": "Valmöguleikar fyrir upphöl", + "upload-options": "Valmöguleikar fyrir innsendingar", "watchthisupload": "Vakta þessa skrá", "filewasdeleted": "Skrá af sama nafni hefur áður verið hlaðið inn og síðan eytt. Þú ættir að athuga $1 áður en þú hleður skránni inn.", + "filename-thumb-name": "Titillinn bendir til þess að myndin sé smámynd. Vinsamlegast ekki hlaða inn smámyndum aftur á sama wiki og þær komu frá. Annars, ef það er ekki tilfellið, lagaðu skráarnafnið svo það hafi merkingu og hafi ekki forskeyti smámynda.", "filename-bad-prefix": "Skráarheitið byrjar á \"$1\" og er ekki lýsandi fyrir skrána, sem bendir til þess að það hafi verið það búið til af stafrænni myndavél.\nVeldu lýsandi nafn fyrir skrána og reyndu aftur.", "upload-proto-error": "Vitlaus samskiptaregla", - "upload-proto-error-text": "Upphleðsla frá öðrum vefþjóni þarfnast vefslóðar sem byrjar á http:// eða ftp://.", + "upload-proto-error-text": "Innhleðsla frá öðrum vefþjóni þarfnast vefslóðar sem byrjar á http:// eða ftp://.", "upload-file-error": "Innri villa", "upload-file-error-text": "Innri villa: Gat ekki búið til bráðabirgðaskrá á vefþjóni.\nEndilega hafðu samband við [[Special:ListUsers/sysop|stjórnanda]].", "upload-misc-error": "Óþekkt innhleðsluvilla", - "upload-misc-error-text": "Upphal þitt mistókst vegna óþekktrar villu.\nAthugaðu hvort vefslóðin sé rétt og aðgengileg og að því loknu reyndu aftur.\nEf vandamálið lagast ekki, hafðu samband við [[Special:ListUsers/sysop|stjórnanda]].", + "upload-misc-error-text": "Innsending þín mistókst vegna óþekktrar villu.\nAthugaðu hvort vefslóðin sé rétt og aðgengileg og að því loknu reyndu aftur.\nEf vandamálið lagast ekki, hafðu samband við [[Special:ListUsers/sysop|stjórnanda]].", "upload-too-many-redirects": "Vefslóðin inniheldur of margar tilvísanir.", "upload-http-error": "HTTP villa kom upp: $1", - "upload-copy-upload-invalid-domain": "Lokað er fyrir afritun skráa frá öðrum vefþjón á þessu vefsvæði.", + "upload-copy-upload-invalid-domain": "Lokað er fyrir afritun skráa frá öðrum vefþjónum á þessu vefsvæði.", "upload-dialog-title": "Hlaða inn skrá", "upload-dialog-button-cancel": "Hætta við", "upload-dialog-button-done": "Lokið", @@ -1357,13 +1368,13 @@ "foreign-structured-upload-form-label-infoform-date": "Dagsetning", "foreign-structured-upload-form-label-own-work-message-local": "Ég skil að ég sé að hlaða inn skrá samkvæmt notkunarskilmálum og leyfisskilmálum {{SITENAME}}.", "foreign-structured-upload-form-label-not-own-work-message-local": "Ef þú getur ekki hlaðið inn þessari skrá samkvæmt reglum {{SITENAME}}, lokaðu þá þessum glugga og reyndu aðra aðferð.", - "foreign-structured-upload-form-label-not-own-work-local-local": "Þú gætir einnig prófað að nota [[Special:Upload|sjálfgefnu upphleðslusíðuna]].", + "foreign-structured-upload-form-label-not-own-work-local-local": "Þú gætir einnig prófað að nota [[Special:Upload|sjálfgefnu innhleðslusíðuna]].", "foreign-structured-upload-form-label-own-work-message-default": "Ég skil að ég sé að hlaða inn skrá á sameiginlegt vefsvæði. Ég staðfesti að ég sé að gera það samkvæmt notkunarskilmálum og leyfisskilmálum þess.", "foreign-structured-upload-form-label-not-own-work-message-default": "Ef þú getur ekki hlaðið inn þessari skrá samkvæmt reglum sameiginlega vefsvæðisins, lokaðu þá þessum glugga og reyndu aðra aðferð.", - "foreign-structured-upload-form-label-not-own-work-local-default": "Þú gætir einnig prófað að nota [[Special:Upload|upphleðslusíðuna á {{SITENAME}}]], ef það má hlaða þessari skrá inn samkvæmt reglum þeirra.", + "foreign-structured-upload-form-label-not-own-work-local-default": "Þú gætir einnig prófað að nota [[Special:Upload|innhleðslusíðuna á {{SITENAME}}]], ef það má hlaða þessari skrá inn samkvæmt reglum þeirra.", "foreign-structured-upload-form-label-own-work-message-shared": "Ég staðfesti að ég eigi höfundarréttinn að þessari skrá og samþykki óafturkræft að gefa þessa skrá til Wikimedia Commons undir [https://creativecommons.org/licenses/by-sa/4.0/ Creative Commons Attribution-ShareAlike 4.0] leyfi. Ég samþykki [https://wikimediafoundation.org/wiki/Terms_of_Use notendaskilmálana].", - "foreign-structured-upload-form-label-not-own-work-message-shared": "Ef þú átt ekki höfundarréttinn að þessari skrá, eða þú vilt gefa það út undir öðru leyfi, prófaðu [https://commons.wikimedia.org/wiki/Special:UploadWizard Upphleðsluálfinn á Commons].", - "foreign-structured-upload-form-label-not-own-work-local-shared": "Þú gætir einnig prófað að nota [[Special:Upload|upphleðslusíðuna á {{SITENAME}}]], ef það má hlaða þessari skrá inn samkvæmt reglum þeirra.", + "foreign-structured-upload-form-label-not-own-work-message-shared": "Ef þú átt ekki höfundarréttinn að þessari skrá, eða þú vilt gefa það út undir öðru leyfi, prófaðu [https://commons.wikimedia.org/wiki/Special:UploadWizard Innsendingaálfinn á Commons].", + "foreign-structured-upload-form-label-not-own-work-local-shared": "Þú gætir einnig prófað að nota [[Special:Upload|innhleðslusíðuna á {{SITENAME}}]], ef það má hlaða þessari skrá inn samkvæmt reglum þeirra.", "backend-fail-stream": "Gat ekki streymt skránni „$1“.", "backend-fail-backup": "Öryggisafritun skrárinnar $1 mistókst.", "backend-fail-notexists": "Skráin $1 er ekki til.", @@ -1410,12 +1421,12 @@ "uploadstash-clear": "Tæma listann", "uploadstash-nofiles": "Þú hefur engar skrár sem eru í bið eftir því að verða útgefnar.", "uploadstash-badtoken": "Þessi aðgerð misheppnaðist, kannski hafa réttindi þín til breytinga runnið út.\nReyndu aftur.", - "uploadstash-errclear": "Hreinsun skráa mistókst.", + "uploadstash-errclear": "Tæming listans mistókst.", "uploadstash-refresh": "Endurhlaða listann", "invalid-chunk-offset": "Ógild raðbreyting bunka", "img-auth-accessdenied": "Aðgangur óheimill", "img-auth-nopathinfo": "PATH_INFO vantar.\nBiðlarinn þínn er ekki stilltur til að gefa upp þessar upplýsingar.\nÞær mega vera CGI-byggðar og mega ekki styðja img_auth.\nhttps://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Image_Authorization", - "img-auth-notindir": "Umbeðin slóð var ekki í stilltri upphlaðsmöppu.", + "img-auth-notindir": "Umbeðin slóð var ekki í stilltri innhleðslumöppu.", "img-auth-badtitle": "Mistókst að búa til gildan titil útfrá „$1”.", "img-auth-nologinnWL": "Þú ert ekki skráð(ur) inn og „$1“ er ekki á hvítlista.", "img-auth-nofile": "Skráin \"$1\" er ekki til.", @@ -1442,7 +1453,7 @@ "upload_source_url": "(skrá sem þú velur frá gildri og aðgengilegri vefslóð)", "upload_source_file": "(skrá sem þú velur á tölvunni þinni)", "listfiles-delete": "eyða", - "listfiles-summary": "Þessi kerfissíða sýnir allar upphlaðnar skrár.", + "listfiles-summary": "Þessi kerfissíða sýnir allar innsendar skrár.", "listfiles_search_for": "Leita að heiti gagnamiðils:", "listfiles-userdoesnotexist": "Notandinn \"$1\" er ekki skráður.", "imgfile": "skrá", @@ -1491,6 +1502,7 @@ "shared-repo-from": "frá $1", "shared-repo": "sameiginlegu myndasafni", "shared-repo-name-wikimediacommons": "Wikimedia Commons", + "filepage.css": "/* Allt CSS sem sett er hér er haft með á lýsingarsíðunni, en einnig á utanaðkomandi tilvísandi wiki-um (foreign client wikis). */", "upload-disallowed-here": "Þú getur ekki yfirskrifað þessa skrá.", "filerevert": "Taka aftur $1", "filerevert-legend": "Taka aftur skrá", @@ -1519,7 +1531,7 @@ "mimesearch": "MIME-leit", "mimesearch-summary": "Þessi síða gerir þér kleift að leita eftir skrám eftir MIME-gerð þeirra.\n\nLeitarstrengurinn á að vera á þessu formi: efnistag/myndasnið eða efnismerki/*, t.d. image/jpeg.", "mimetype": "MIME-tegund:", - "download": "Hlaða niður", + "download": "sækja", "unwatchedpages": "Óvaktaðar síður", "listredirects": "Endurbeiningar", "listduplicatedfiles": "Listi yfir afritaðar skrár", @@ -1546,7 +1558,7 @@ "statistics-articles": "Greinar alls", "statistics-pages": "Síður", "statistics-pages-desc": "Allar síður wiki-verkefnisins, þar á meðal spjallsíður, tilvísanir o.fl.", - "statistics-files": "Skráafjöldi", + "statistics-files": "Innsendar skrár", "statistics-edits": "Síðubreytingar frá því {{SITENAME}} byrjaði", "statistics-edits-average": "Meðal breytingafjöldi á síðu", "statistics-users": "Skráðir [[Special:ListUsers|notendur]]", @@ -1667,6 +1679,8 @@ "apisandbox-submit": "Gera fyrirspurn", "apisandbox-reset": "Hreinsa", "apisandbox-retry": "Reyna aftur", + "apisandbox-loading": "Hleð inn upplýsingum fyrir API-eininguna \"$1\"...", + "apisandbox-no-parameters": "Þessi API-eining hefur engin viðföng.", "apisandbox-helpurls": "Hjálpartenglar", "apisandbox-examples": "Dæmi", "apisandbox-dynamic-parameters": "Auka viðföng", @@ -1715,8 +1729,6 @@ "categories-submit": "Birta", "categoriespagetext": "Eftirfarandi {{PLURAL:$1|flokkur inniheldur|flokkar innihalda}} síður eða skrár.\n[[Special:UnusedCategories|Ónotaðir flokkar]] birtast ekki hér.\nSjá einnig [[Special:WantedCategories|eftirsótta flokka]].", "categoriesfrom": "Sýna flokka frá:", - "special-categories-sort-count": "raða eftir fjölda", - "special-categories-sort-abc": "raða í stafrófsröð", "deletedcontributions": "Eyddar breytingar notanda", "deletedcontributions-title": "Eyddar breytingar notanda", "sp-deletedcontributions-contribs": "Framlög", @@ -2008,7 +2020,7 @@ "sp-contributions-blocklog": "fyrri bönn", "sp-contributions-suppresslog": "bæld framlög notanda", "sp-contributions-deleted": "eyddar breytingar notanda", - "sp-contributions-uploads": "upphlaðið", + "sp-contributions-uploads": "innsendingar", "sp-contributions-logs": "aðgerðaskrá", "sp-contributions-talk": "spjall", "sp-contributions-userrights": "Breyta notandaréttindum", @@ -2284,15 +2296,15 @@ "importsuccess": "Innflutningi lokið!", "importnosources": "Engin wiki sem á að flytja inn frá hafa verið skilgreind og beinar innsendingar breytingaskráa eru óvirkar.", "importnofile": "Engri skrá var hlaðið inn.", - "importuploaderrorsize": "Upphleðsla skrárinnar mistókst.\nSkráin er stærri en leyfð hámarksstærð.", - "importuploaderrorpartial": "Upphleðsla skráarinnar mistókst.\nSkráinni var eingöngu hlaðið inn að hluta.", - "importuploaderrortemp": "Upphleðsla skrárinnar mistókst.\nBráðabirgðamappa fannst ekki.", + "importuploaderrorsize": "Innsending skrárinnar mistókst.\nSkráin er stærri en leyfð hámarksstærð.", + "importuploaderrorpartial": "Innsending skráarinnar mistókst.\nSkráinni var eingöngu hlaðið inn að hluta.", + "importuploaderrortemp": "Innsending skrárinnar mistókst.\nBráðabirgðamappa fannst ekki.", "import-parse-failure": "Þáttunarvilla við innflutning XML skjals", "import-noarticle": "Engin síða til innflutnings!", "import-nonewrevisions": "Engar breytingar voru fluttar inn (þær voru allar annaðhvort þegar til eða sleppt vegna villna).", "xml-error-string": "$1 í línu $2, dálki $3 ($4 bæt): $5", "import-upload": "Hlaða inn XML-gögnum", - "import-token-mismatch": "Týnd setugögn.\n\nÞú hefur kannski verið skráð/ur út. Athugaðu hvort þú sért ennþá skráð/ur inn og reyndu aftur.\nEf það virkar ekki, reyndu að [[Special:UserLogout|skrá þig út]], skrá þig aftur inn og gakktu úr skugga um að vafrinn þinn leyfi smákökur frá þessu vefsvæði.", + "import-token-mismatch": "Týnd setugögn.\n\nÞú hefur kannski verið skráð/ur út. Athugaðu hvort þú sért ennþá skráð/ur inn og reyndu aftur.\nEf það virkar ekki, reyndu að [[Special:UserLogout|skrá þig út]], skrá þig aftur inn og gakktu úr skugga um að vafrinn þinn leyfi vefkökur frá þessu vefsvæði.", "import-invalid-interwiki": "Get ekki flutt inn frá þessum wiki.", "import-error-edit": "Síðan \"$1\" var ekki flutt inn því þú hefur ekki réttindi til að breyta henni.", "import-error-create": "Síðan \"$1\" var ekki flutt inn því þú hefur ekki réttindi til að stofna hana.", @@ -2308,11 +2320,7 @@ "import-logentry-upload-detail": "$1 {{PLURAL:$1|breyting flutt|breytingar fluttar}} inn", "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|breyting flutt|breytingar fluttar}} inn frá $2", "javascripttest": "JavaScript prófun", - "javascripttest-pagetext-noframework": "Þessi síða er frátekin fyrir JavaScript prófanir.", - "javascripttest-pagetext-unknownframework": "Óþekktur prófunarrammi „$1“.", "javascripttest-pagetext-unknownaction": "Óþekkt aðgerð \"$1\".", - "javascripttest-pagetext-frameworks": "Veldu einn eftirtalinna prófunarramma: $1", - "javascripttest-pagetext-skins": "Veldu skinn til að keyra prófanirnar á:", "javascripttest-qunit-intro": "Sjá [$1 tilraunaskjölun] á mediawiki.org.", "tooltip-pt-userpage": "Notandasíðan þín", "tooltip-pt-anonuserpage": "Notandasíðan fyrir vistfangið þitt", @@ -2589,8 +2597,8 @@ "exif-colorspace": "Litrýmd", "exif-componentsconfiguration": "Merking hverrar einingar", "exif-compressedbitsperpixel": "Aðferð við myndþjöppun", - "exif-pixelydimension": "Breidd myndar", - "exif-pixelxdimension": "Hæð myndar", + "exif-pixelxdimension": "Breidd myndar", + "exif-pixelydimension": "Hæð myndar", "exif-usercomment": "Athugunarsemdir notanda", "exif-relatedsoundfile": "Tengd hljóðskrá", "exif-datetimeoriginal": "Upprunaleg dagsetning", @@ -3148,7 +3156,6 @@ "version-libraries-license": "Notkunarleyfi", "version-libraries-description": "Lýsing", "version-libraries-authors": "Höfundar", - "redirect-legend": "Endurbeina á skrá eða síðu", "redirect-submit": "Áfram", "redirect-lookup": "Fletta upp:", "redirect-value": "Gildi:", @@ -3160,7 +3167,6 @@ "redirect-not-exists": "Gildi fannst ekki", "fileduplicatesearch": "Leita að afriti", "fileduplicatesearch-summary": "Leita að afritum sem hafa sama hakk gildi.", - "fileduplicatesearch-legend": "Leita að afriti", "fileduplicatesearch-filename": "Skráarheiti:", "fileduplicatesearch-submit": "Leita", "fileduplicatesearch-info": "$1 × $2 mynddílar
Skráarstærð: $3
MIME-gerð: $4", @@ -3248,6 +3254,7 @@ "tags-edit-chosen-placeholder": "Veldu einhver merki", "tags-edit-chosen-no-results": "Engin merki fundust sem samsvara", "tags-edit-reason": "Ástæða:", + "tags-edit-nooldid-title": "Ógild markútgáfa", "tags-edit-none-selected": "Vinsamlega veldu a.m.k. eitt merki til að bæta við eða fjarlægja.", "comparepages": "Bera saman síður", "compare-page1": "Síða 1", @@ -3280,7 +3287,9 @@ "htmlform-chosen-placeholder": "Veldu valmöguleika", "htmlform-cloner-create": "Bæta við meiru", "htmlform-cloner-delete": "Fjarlægja", + "htmlform-cloner-required": "Það þarf allavega eitt gildi.", "htmlform-title-badnamespace": "[[:$1]] er ekki í \"{{ns:$2}}\" nafnrýminu.", + "htmlform-title-not-creatable": "\"$1\" er ekki hægt að nota við að búa til titil á síðu", "htmlform-title-not-exists": "$1 er ekki til", "htmlform-user-not-exists": "$1 er ekki til.", "htmlform-user-not-valid": "$1 er ekki gilt notandanafn.", @@ -3309,7 +3318,11 @@ "logentry-block-unblock": "$1 {{GENDER:$2|afbannaði}} {{GENDER:$4|$3}}", "logentry-block-reblock": "$1 {{GENDER:$2|breytti}} bann stillingum fyrir {{GENDER:$4|$3}}, rennur út $5 $6", "logentry-suppress-block": "$1 {{GENDER:$2|bannaði}} {{GENDER:$4|$3}}, rennur út eftir $5 $6", - "logentry-merge-merge": "$1 {{GENDER:$2|sameinaði}} $3 inn í $4 (útgáfur til $5)", + "logentry-import-upload": "$1 {{GENDER:$2|flutti inn}} $3 úr innsendri skrá", + "logentry-import-upload-details": "$1 {{GENDER:$2|flutti}} $3 inn úr innsendri skrá ($4 {{PLURAL:$4|útgáfa|útgáfur}})", + "logentry-import-interwiki": "$1 {{GENDER:$2|flutti inn}} $3 frá öðru wiki", + "logentry-import-interwiki-details": "$1 {{GENDER:$2|flutti}} $3 inn frá $5 ($4 {{PLURAL:$4|útgáfa|útgáfur}})", + "logentry-merge-merge": "$1 {{GENDER:$2|sameinaði}} $3 inn í $4 (útgáfur upp að $5)", "logentry-move-move": "$1 {{GENDER:$2|færði}} $3 á $4", "logentry-move-move-noredirect": "$1 {{GENDER:$2|færði}} $3 á $4 án þess að skilja eftir tilvísun", "logentry-move-move_redir": "$1 {{GENDER:$2|færði}} $3 á $4 yfir tilvísun", @@ -3321,12 +3334,16 @@ "logentry-newusers-create2": "$1 {{GENDER:$2|stofnaði}} notandaaðganginn $3", "logentry-newusers-byemail": "Notandaaðgangurinn $3 var {{GENDER:$2|búinn til}} af $1 og lykilorðið var sent með tölvupósti", "logentry-newusers-autocreate": "Aðgangurinn $1 var {{GENDER:$2|stofnaður}} sjálfvirkt", + "logentry-protect-move_prot": "$1 {{GENDER:$2|flutti}} verndunarstillingu úr $4 í $3", + "logentry-protect-unprotect": "$1 {{GENDER:$2|fjarlægði}} verndun af $3", "logentry-protect-protect": "$1 {{GENDER:$2|verndaði}} $3 $4", + "logentry-protect-modify": "$1 {{GENDER:$2|breytti}} verndunarstigi fyrir $3 $4", "logentry-rights-rights": "$1 {{GENDER:$2|breytti}} réttindum $3 frá $4 í $5", "logentry-rights-rights-legacy": "$1 {{GENDER:$2|breytti}} réttindum $3", "logentry-rights-autopromote": "$1 fékk sjálfvirkt {{GENDER:$2|aukin}} réttindi frá $4 til $5", "logentry-upload-upload": "$1 {{GENDER:$2|hlóð inn}} $3", "logentry-upload-overwrite": "$1 {{GENDER:$2|hlóð inn}} nýrri útgáfu af $3", + "logentry-upload-revert": "$1 {{GENDER:$2|hlóð inn}} $3", "log-name-managetags": "Breytingaskrá yfir sýsl með merki", "logentry-managetags-create": "$1 {{GENDER:$2|bjó til}} merkið \"$4\"", "rightsnone": "(engum)", @@ -3357,7 +3374,7 @@ "searchsuggest-containing": "sem innihalda ...", "api-error-badaccess-groups": "Þú hefur ekki leyfi til að hlaða inn skrám.", "api-error-badtoken": "Innri villa: Skemmdur tóki.", - "api-error-copyuploaddisabled": "Ekki er hægt að hlaða upp með vefslóð á þessum vefþjón.", + "api-error-copyuploaddisabled": "Ekki er hægt að hlaða inn með vefslóð á þessum vefþjóni.", "api-error-duplicate": "Það {{PLURAL:$1|er önnur skrá|eru aðrar skrár}} þegar til á vefsvæðinu sem hafa sama innihald.", "api-error-duplicate-archive": "Það {{PLURAL:$1|var önnur skrá|voru aðrar skrár}} þegar á síðunni með sama innihald, en {{PLURAL:$1|henni|þeim}} var eytt.", "api-error-empty-file": "Skráin sem þú valdir er tóm.", @@ -3373,14 +3390,14 @@ "api-error-hookaborted": "Hætt var við breytinguna sem þú reyndir að gera með viðbót.", "api-error-http": "Innri villa: Get ekki tengst vefþjón.", "api-error-illegal-filename": "Þetta skráarheiti er ekki leyft.", - "api-error-internal-error": "Innri villa: Mistókst að vinna úr upphali þínu.", + "api-error-internal-error": "Innri villa: Mistókst að vinna úr innsendingunni þinni.", "api-error-invalid-file-key": "Innri villa: Skrá fannst ekki í bráðabirgðageymslu.", "api-error-missingparam": "Innri villa: Breytur vantar í beiðni.", "api-error-missingresult": "Innri villa: Gat ekki ákvarðað hvort tókst að afrita.", "api-error-mustbeloggedin": "Þú verður að vera skráður inn til að hlaða inn skrám.", "api-error-mustbeposted": "Innri villa: Beiðnin þarfnast HTTP POST.", - "api-error-noimageinfo": "Upphleðsla skrárinnar tókst, en vefþjónninn gaf okkur engar upplýsingar um skrána.", - "api-error-nomodule": "Innri villa: Engin upphlaðs eining valin.", + "api-error-noimageinfo": "Innsending skrárinnar tókst, en vefþjónninn gaf okkur engar upplýsingar um skrána.", + "api-error-nomodule": "Innri villa: Engin innsendingareining valin.", "api-error-ok-but-empty": "Innri villa: ekkert svar frá vefþjón.", "api-error-overwrite": "Óheimilt er að skrifa yfir skrá sem er þegar til.", "api-error-stashfailed": "Innri villa: Vefþjónninn gat ekki geymt bráðabirgðaskrá.", @@ -3424,6 +3441,8 @@ "expand_templates_generate_xml": "Birta XML-þáttunargreinar", "expand_templates_generate_rawhtml": "Birta hrátt HTML", "expand_templates_preview": "Forskoðun", + "expand_templates_preview_fail_html": "Þar sem {{SITENAME}} styður hráan HTML kóða, þá hefur forskoðunin verið falin sem vörn gegn JavaScript árásum.\n\nEf þetta er lögleg breyting, reyndu þá aftur.\nEf það virkar ekki, reyndu að [[Special:UserLogout|skrá þig út]], skrá þig aftur inn og athugaðu hvort vafrinn þinn leyfi vefkökur frá þessu vefsvæði.", + "expand_templates_preview_fail_html_anon": "Þar sem {{SITENAME}} styður hráan HTML kóða og þú ert ekki skráð/ur inn, þá hefur forskoðunin verið falin sem vörn gegn JavaScript árásum.\n\nEf þetta er lögleg breyting, reyndu að [[Special:UserLogin|skrá þig inn]], og prófa aftur.", "expand_templates_input_missing": "Þú verður að skrifa inn einhvern inntakstexta.", "pagelanguage": "Breyta tungumáli síðu", "pagelang-name": "Síða", @@ -3434,6 +3453,7 @@ "right-pagelang": "Breyta tungumáli síðu", "action-pagelang": "breyta tungumáli síðunnar", "log-name-pagelang": "Annáll yfir breytingar á tungumáli", + "log-description-pagelang": "Þetta er skráning yfir breytingar á tungumáli síðna.", "logentry-pagelang-pagelang": "$1 {{GENDER:$2|breytti}} tungumáli $3 úr $4 yfir í $5", "default-skin-not-found-row-enabled": "* $1 / $2 (virkt)", "default-skin-not-found-row-disabled": "* $1 / $2 (óvirkt)", @@ -3496,7 +3516,7 @@ "api-error-blacklisted": "Veldu annan lýsandi titil", "sessionmanager-tie": "Get ekki sameinað margar gerðir auðkenningarbeiðna: $1.", "sessionprovider-generic": "$1 setur", - "sessionprovider-mediawiki-session-cookiesessionprovider": "setur með smákökum", - "sessionprovider-nocookies": "Smákökur gætu verið óvirkar. Gakktu úr skugga um að smákökur séu virkar og byrjaðu svo aftur.", + "sessionprovider-mediawiki-session-cookiesessionprovider": "setur með vefkökum", + "sessionprovider-nocookies": "Vefkökur gætu verið óvirkar. Gakktu úr skugga um að smákökur séu virkar og byrjaðu svo aftur.", "randomrootpage": "Handahófsvalin rótarsíða" } diff --git a/languages/i18n/it.json b/languages/i18n/it.json index 9c61c24a95..3ba7cc6cd4 100644 --- a/languages/i18n/it.json +++ b/languages/i18n/it.json @@ -109,10 +109,11 @@ "tog-showtoolbar": "Mostra la barra degli strumenti di modifica", "tog-editondblclick": "Modifica delle pagine tramite doppio clic", "tog-editsectiononrightclick": "Modifica delle sezioni tramite clic destro sul titolo", - "tog-watchcreations": "Aggiungi le pagine create e i file caricati agli osservati speciali", - "tog-watchdefault": "Aggiungi le pagine e i file modificati agli osservati speciali", - "tog-watchmoves": "Aggiungi le pagine e i file spostati agli osservati speciali", - "tog-watchdeletion": "Aggiungi le pagine e i file cancellati agli osservati speciali", + "tog-watchcreations": "Aggiungi le pagine che creo e i file che carico agli osservati speciali", + "tog-watchdefault": "Aggiungi le pagine e i file che modifico agli osservati speciali", + "tog-watchmoves": "Aggiungi le pagine e i file che sposto agli osservati speciali", + "tog-watchdeletion": "Aggiungi le pagine e i file che cancello agli osservati speciali", + "tog-watchuploads": "Aggiungi i nuovi file che carico agli osservati speciali", "tog-watchrollback": "Aggiungi agli osservati speciali le pagine su cui ho effettuato un rollback", "tog-minordefault": "Indica ogni modifica come minore (solo come predefinito)", "tog-previewontop": "Mostra l'anteprima sopra la casella di modifica e non sotto", @@ -236,7 +237,6 @@ "moredotdotdot": "Altro...", "morenotlisted": "Questo elenco non è completo.", "mypage": "Pagina", - "anonuserpage": "Utente sconosciuto", "mytalk": "discussioni", "anontalk": "discussioni", "navigation": "Navigazione", @@ -430,7 +430,7 @@ "title-invalid-utf8": "Il titolo della pagina richiesta contiene una sequenza UTF-8 non valida.", "title-invalid-interwiki": "Il titolo della pagina richiesta contiene un collegamento interwiki che non può essere usato nei titoli.", "title-invalid-talk-namespace": "Il titolo della pagina richiesta fa riferimento a una pagina di discussione non presente.", - "title-invalid-characters": "Il titolo della pagina richiesta contiene caratteri invalidi: \"$1\".", + "title-invalid-characters": "Il titolo della pagina richiesta contiene caratteri non validi: \"$1\".", "title-invalid-relative": "Il titolo indicato contiene un percorso relativo (./, ../). Tali titoli non sono validi, perché risulteranno spesso irraggiungibili quando gestiti dal browser dell'utente.", "title-invalid-magic-tilde": "Il titolo della pagina richiesta non è valido in quanto contiene la successione speciale di tilde (~~~).", "title-invalid-too-long": "Il titolo della pagina richiesta è troppo lungo. Non può essere più lungo di {{PLURAL:$1|byte}} in codifica UTF-8.", @@ -554,7 +554,7 @@ "noemail": "Nessun indirizzo e-mail registrato per l'utente \"$1\".", "noemailcreate": "È necessario fornire un indirizzo e-mail valido", "passwordsent": "Una nuova password è stata inviata all'indirizzo e-mail registrato per l'utente \"$1\".\nPer favore, effettua un accesso non appena la ricevi.", - "blocked-mailpassword": "Per prevenire abusi, non è consentito usare la funzione \"Invia nuova password\" da un indirizzo IP bloccato.", + "blocked-mailpassword": "Il tuo indirizzo IP è bloccato alla modifica. Per prevenire abusi, non è consentito usare la funzione di recupero password da questo indirizzo IP.", "eauthentsent": "Un messaggio email di conferma è stato spedito all'indirizzo indicato.\nPer abilitare l'invio di messaggi email per questo utente è necessario seguire le istruzioni che vi sono indicate, in modo da confermare che si è i legittimi proprietari dell'indirizzo.", "throttled-mailpassword": "Una email di reimpostazione della password è già stata inviata da meno di {{PLURAL:$1|1 ora|$1 ore}}.\nPer prevenire abusi, la funzione di reimpostazione della password può essere usata solo una volta ogni {{PLURAL:$1|ora|$1 ore}}.", "mailerror": "Errore nell'invio del messaggio: $1", @@ -654,7 +654,7 @@ "passwordreset-emailsentusername": "Se c'è un indirizzo di posta elettronica associato con questo nome utente, allora verrà inviata una email per reimpostare la password.", "passwordreset-emailsent-capture": "È stata inviata una email di reimpostazione della password, il contenuto è riportato di seguito.", "passwordreset-emailerror-capture": "È stata generata una email di reimpostazione della password, riportata di seguito. L'invio {{GENDER:$2|all'utente}} non è riuscito: $1", - "changeemail": "Modifica o rimuovi indirizzo email", + "changeemail": "Modifica o rimuovi indirizzo di posta elettronica", "changeemail-header": "Completa questo modulo per cambiare il tuo indirizzo email. Se vuoi rimuovere l'associazione di qualsiasi indirizzo email dalla tua utenza, lascia il nuovo indirizzo email vuoto quando invii il modulo.", "changeemail-passwordrequired": "Sarà necessario inserire la password per confermare la modifica.", "changeemail-no-info": "Devi aver effettuato l'accesso per accedere a questa pagina direttamente.", @@ -709,7 +709,7 @@ "missingcommentheader": "Attenzione: non è stato specificato l'oggetto di questo commento. Premendo di nuovo \"{{int:savearticle}}\" la modifica verrà salvata senza.", "summary-preview": "Anteprima dell'oggetto:", "subject-preview": "Anteprima oggetto:", - "previewerrortext": "C'è stato un errore mentre si è cercato di mostrare l'anteprima.", + "previewerrortext": "Si è verificato un errore durante il tentativo di mostrare l'anteprima delle tue modifiche.", "blockedtitle": "Utente bloccato.", "blockedtext": "'''Il tuo nome utente o indirizzo IP è stato bloccato.'''\n\nIl blocco è stato imposto da $1. La motivazione del blocco è la seguente: ''$2''\n\n* Inizio del blocco: $8\n* Scadenza del blocco: $6\n* Intervallo di blocco: $7\n\nSe lo si desidera, è possibile contattare $1 o un altro [[{{MediaWiki:Grouppage-sysop}}|amministratore]] per discutere del blocco.\n\nSi noti che la funzione 'Scrivi all'utente' non è attiva se non è stato registrato un indirizzo e-mail valido nelle proprie [[Special:Preferences|preferenze]] o se l'utilizzo di tale funzione è stato bloccato.\n\nL'indirizzo IP attuale è $3, il numero ID del blocco è #$5.\nSi prega di specificare tutti i dettagli precedenti in qualsiasi richiesta di chiarimenti.", "autoblockedtext": "Questo indirizzo IP è stato bloccato automaticamente perché condiviso con un altro utente, a sua volta bloccato da $1.\nLa motivazione del blocco è la seguente:\n\n:''$2''\n\n* Inizio del blocco: $8\n* Scadenza del blocco: $6\n* Intervallo di blocco: $7\n\nÈ possibile contattare $1 o un altro [[{{MediaWiki:Grouppage-sysop}}|amministratore]] per richiedere eventuali chiarimenti circa il blocco.\n\nSi noti che la funzione 'Scrivi all'utente' non è attiva se non è stato registrato un indirizzo e-mail valido nelle proprie [[Special:Preferences|preferenze]] e, comunque, se nell'applicare il blocco, tale funzione è stata disabilitata (per la durata del blocco).\n\nL'indirizzo IP attuale è $3, il numero ID del blocco è #$5\nSi prega di specificare tutti i dettagli qui inclusi nel compilare qualsiasi richiesta di chiarimenti.", @@ -964,9 +964,9 @@ "mergelog": "Unioni", "revertmerge": "Annulla unioni", "mergelogpagetext": "Di seguito sono elencate le ultime operazioni di unione della cronologia di due pagine.", - "history-title": "$1: cronologia delle modifiche", - "difference-title": "$1: differenze tra le versioni", - "difference-title-multipage": "$1 e $2: differenze tra le pagine", + "history-title": "Cronologia delle modifiche di \"$1\"", + "difference-title": "Differenze tra le versioni di \"$1\"", + "difference-title-multipage": "Differenze tra le pagine \"$1\" e \"$2\"", "difference-multipage": "(Differenze fra le pagine)", "lineno": "Riga $1:", "compareselectedversions": "Confronta le versioni selezionate", @@ -1052,8 +1052,8 @@ "prefs-watchlist-token": "Token osservati speciali:", "prefs-misc": "Varie", "prefs-resetpass": "Cambia password", - "prefs-changeemail": "Modifica o rimuovi indirizzo email", - "prefs-setemail": "Imposta un indirizzo email", + "prefs-changeemail": "Modifica o rimuovi indirizzo di posta elettronica", + "prefs-setemail": "Imposta un indirizzo di posta elettronica", "prefs-email": "Opzioni email", "prefs-rendering": "Aspetto", "saveprefs": "Salva", @@ -1097,7 +1097,7 @@ "prefs-custom-js": "JavaScript personalizzato", "prefs-common-css-js": "CSS/JavaScript condiviso per tutti i temi:", "prefs-reset-intro": "È possibile usare questa pagina per reimpostare le proprie preferenze a quelle predefinite del sito.\nL'operazione non può essere annullata.", - "prefs-emailconfirm-label": "Conferma dell'e-mail:", + "prefs-emailconfirm-label": "Conferma dell'email:", "youremail": "Indirizzo email:", "username": "{{GENDER:$1|Nome utente}}:", "prefs-memberingroups": "{{GENDER:$2|Membro}} {{PLURAL:$1|del gruppo|dei gruppi}}:", @@ -1392,13 +1392,13 @@ "recentchangeslinked-feed": "Modifiche correlate", "recentchangeslinked-toolbox": "Modifiche correlate", "recentchangeslinked-title": "Modifiche correlate a \"$1\"", - "recentchangeslinked-summary": "Questa pagina speciale mostra le modifiche più recenti alle pagine collegate da quella specificata (o contenute nella categoria specificata).\nLe pagine contenute nella propria lista degli [[Special:Watchlist|Osservati speciali]] sono evidenziate in grassetto.", + "recentchangeslinked-summary": "Questa pagina speciale mostra le modifiche più recenti alle pagine collegate da quella specificata (o contenute nella categoria specificata).\nLe pagine contenute nella propria lista degli [[Special:Watchlist|osservati speciali]] sono evidenziate in grassetto.", "recentchangeslinked-page": "Nome della pagina:", "recentchangeslinked-to": "Mostra solo le modifiche alle pagine collegate a quella specificata", "recentchanges-page-added-to-category": "[[:$1]] aggiunta alla categoria", - "recentchanges-page-added-to-category-bundled": "[[:$1]] e {{PLURAL:$2|una pagina è aggiunta|$2 pagine sono aggiunte}} alla categoria", + "recentchanges-page-added-to-category-bundled": "[[:$1]] aggiunta alla categoria, [[Special:WhatLinksHere/$1|questa pagina è inclusa all'interno di altre pagine]]", "recentchanges-page-removed-from-category": "[[:$1]] rimossa dalla categoria", - "recentchanges-page-removed-from-category-bundled": "[[:$1]] e {{PLURAL:$2|un'altra pagina|altre $2 pagine}} rimosse dalla categoria", + "recentchanges-page-removed-from-category-bundled": "[[:$1]] rimossa dalla categoria, [[Special:WhatLinksHere/$1|questa pagina è inclusa all'interno di altre pagine]]", "autochange-username": "Modifica automatica MediaWiki", "upload": "Carica un file", "uploadbtn": "Carica", @@ -1578,6 +1578,7 @@ "uploadstash-badtoken": "Esecuzione dell'azione non riuscita, forse perché le tue credenziali di modifica sono scadute. Prova ancora.", "uploadstash-errclear": "La pulizia dei file non è riuscita.", "uploadstash-refresh": "Aggiorna l'elenco dei file", + "uploadstash-thumbnail": "vedi miniatura", "invalid-chunk-offset": "Offset della parte non valido.", "img-auth-accessdenied": "Accesso negato", "img-auth-nopathinfo": "PATH_INFO mancante.\nIl server non è impostato per passare questa informazione.\nPotrebbe essere basato su CGI e non può supportare img_auth.\nVedi https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Image_Authorization", @@ -1595,7 +1596,7 @@ "http-read-error": "Errore di lettura HTTP.", "http-timed-out": "Richiesta HTTP scaduta.", "http-curl-error": "Errore durante il recupero dell'URL: $1", - "http-bad-status": "C'è stato un problema durante la richiesta HTTP: $1 $2", + "http-bad-status": "Si è verificato un problema durante la richiesta HTTP: $1 $2", "upload-curl-error6": "URL non raggiungibile", "upload-curl-error6-text": "Impossibile raggiungere la URL specificata. Verificare che la URL sia scritta correttamente e che il sito in questione sia attivo.", "upload-curl-error28": "Tempo scaduto per l'upload", @@ -1898,8 +1899,6 @@ "categories-submit": "Mostra", "categoriespagetext": "{{PLURAL:$1|La categoria indicata di seguito contiene|Le categorie indicate di seguito contengono}} pagine o file multimediali.\nLe [[Special:UnusedCategories|categorie vuote]] non sono mostrate qui.\nVedi anche le [[Special:WantedCategories|categorie richieste]].", "categoriesfrom": "Mostra le categorie a partire da:", - "special-categories-sort-count": "ordina per numero", - "special-categories-sort-abc": "ordina alfabeticamente", "deletedcontributions": "Contributi utente cancellati", "deletedcontributions-title": "Contributi utente cancellati", "sp-deletedcontributions-contribs": "contributi", @@ -2277,6 +2276,7 @@ "ipb-unblock": "Sblocca un utente o un indirizzo IP", "ipb-blocklist": "Elenca i blocchi attivi", "ipb-blocklist-contribs": "Contributi di {{GENDER:$1|$1}}", + "ipb-blocklist-duration-left": "$1 rimasti", "unblockip": "Sblocca l'utente", "unblockiptext": "Usare il modulo sottostante per restituire l'accesso in scrittura ad un utente o indirizzo IP bloccato.", "ipusubmit": "Rimuovi questo blocco", @@ -2518,11 +2518,7 @@ "import-logentry-upload-detail": "{{PLURAL:$1|una versione importata|$1 versioni importate}}", "import-logentry-interwiki-detail": "{{PLURAL:$1|una versione importata|$1 versioni importate}} da $2", "javascripttest": "Sperimentazione JavaScript", - "javascripttest-pagetext-noframework": "Questa pagina è riservata all'esecuzione di test di JavaScript.", - "javascripttest-pagetext-unknownframework": "Framework di test sconosciuto \"$1\".", "javascripttest-pagetext-unknownaction": "Azione sconosciuta \"$1\".", - "javascripttest-pagetext-frameworks": "Per cortesia, scegli uno dei seguenti framework per i test: $1", - "javascripttest-pagetext-skins": "Scegli un tema con cui eseguire i test:", "javascripttest-qunit-intro": "Vedi su mediawiki.org la [$1 documentazione riguardante i test].", "tooltip-pt-userpage": "La {{GENDER:|tua}} pagina utente", "tooltip-pt-anonuserpage": "La pagina utente di questo indirizzo IP", @@ -2795,8 +2791,8 @@ "exif-colorspace": "Spazio dei colori", "exif-componentsconfiguration": "Significato di ciascuna componente", "exif-compressedbitsperpixel": "Modalità di compressione immagine", - "exif-pixelydimension": "Larghezza immagine", - "exif-pixelxdimension": "Altezza immagine", + "exif-pixelxdimension": "Larghezza immagine", + "exif-pixelydimension": "Altezza immagine", "exif-usercomment": "Note dell'utente", "exif-relatedsoundfile": "File audio collegato", "exif-datetimeoriginal": "Data e ora di creazione dei dati", @@ -3128,6 +3124,10 @@ "confirmemail_body_set": "Qualcuno, probabilmente tu stesso dall'indirizzo IP $1,\nha impostato l'indirizzo email dell'account \"$2\" su {{SITENAME}} indicando questo indirizzo email.\n\nPer confermare che l'account ti appartiene veramente e attivare le funzioni relative all'invio\ndi email su {{SITENAME}}, apri il collegamento seguente con il tuo browser:\n\n$3\n\nSe l'account *non* ti appartiene, segui questo collegamento\nper annullare la conferma dell'indirizzo email:\n\n$5\n\nQuesto codice di conferma scadrà automaticamente alle $4.", "confirmemail_invalidated": "Richiesta di conferma indirizzo e-mail annullata", "invalidateemail": "Annulla richiesta di conferma e-mail", + "notificationemail_subject_changed": "L'indirizzo di posta elettronica registrato su {{SITENAME}} è stato modificato", + "notificationemail_subject_removed": "L'indirizzo di posta elettronica registrato su {{SITENAME}} è stato rimosso", + "notificationemail_body_changed": "Qualcuno, probabilmente tu, dall'indirizzo IP $1,\nha modificato l'indirizzo di posta elettronica dell'utenza \"$2\" in \"$3\" su {{SITENAME}}.\n\nSe non sei stato tu, contatta immediatamente un amministratore del sito.", + "notificationemail_body_removed": "Qualcuno, probabilmente tu, dall'indirizzo IP $1,\nha rimosso l'indirizzo di posta elettronica dell'utenza \"$2\" su {{SITENAME}}.\n\nSe non sei stato tu, contatta immediatamente un amministratore del sito.", "scarytranscludedisabled": "[L'inclusione di pagine tra siti wiki non è attiva]", "scarytranscludefailed": "[Errore: Impossibile ottenere il template $1]", "scarytranscludefailed-httpstatus": "[Errore: impossibile ottenere il template $1: HTTP $2]", @@ -3183,7 +3183,7 @@ "watchlistedit-raw-done": "La lista degli osservati speciali è stata aggiornata.", "watchlistedit-raw-added": "{{PLURAL:$1|È stata aggiunta una pagina|Sono state aggiunte $1 pagine}}:", "watchlistedit-raw-removed": "{{PLURAL:$1|È stata eliminata una pagina|Sono state eliminate $1 pagine}}:", - "watchlistedit-clear-title": "Lista degli osservati speciali svuotata", + "watchlistedit-clear-title": "Svuota osservati speciali", "watchlistedit-clear-legend": "Svuota osservati speciali", "watchlistedit-clear-explain": "Tutti i titoli saranno rimossi dai tuoi osservati speciali", "watchlistedit-clear-titles": "Titoli:", @@ -3250,7 +3250,6 @@ "version-libraries-description": "Descrizione", "version-libraries-authors": "Autori", "redirect": "Reindirizzamento da file, utente, pagina, versione o ID registro", - "redirect-legend": "Reindirizza a un file o una pagina", "redirect-summary": "Questa pagina speciale reindirizza a un file (specificando il nome del file), a una pagina (specificando un ID di versione o un ID pagina), a un utente (specificando un ID utente numerico) o ad un elemento del registro (specificando l'ID registro).\nEsempi: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/page/64308]], [[{{#Special:Redirect}}/revision/328429]], [[{{#Special:Redirect}}/user/101]], [[{{#Special:Redirect}}/logid/186]].", "redirect-submit": "Vai", "redirect-lookup": "Ricerca:", @@ -3263,7 +3262,6 @@ "redirect-not-exists": "Valore non trovato", "fileduplicatesearch": "Ricerca dei file duplicati", "fileduplicatesearch-summary": "Ricerca di eventuali duplicati del file in base al valore di ''hash''.", - "fileduplicatesearch-legend": "Ricerca di un duplicato", "fileduplicatesearch-filename": "Nome del file:", "fileduplicatesearch-submit": "Ricerca", "fileduplicatesearch-info": "$1 × $2 pixel
Dimensione del file: $3
Tipo MIME: $4", @@ -3464,7 +3462,7 @@ "logentry-protect-protect-cascade": "$1 {{GENDER:$2|ha protetto}} $3 $4 [ricorsiva]", "logentry-protect-modify": "$1 {{GENDER:$2|ha modificato}} il livello di protezione per $3 $4", "logentry-protect-modify-cascade": "$1 {{GENDER:$2|ha modificato}} il livello di protezione per $3 $4 [ricorsiva]", - "logentry-rights-rights": "$1 {{GENDER:$2|ha modificato}} l'appartenenza di $3 dal gruppo $4 al gruppo $5", + "logentry-rights-rights": "$1 {{GENDER:$2|ha modificato}} l'appartenenza di {{GENDER:$3|$3}} dal gruppo $4 al gruppo $5", "logentry-rights-rights-legacy": "$1 {{GENDER:$2|ha modificato}} l'appartenenza a gruppi di $3", "logentry-rights-autopromote": "$1 è {{GENDER:$2|stato promosso|stata promossa|stato/a promosso/a}} automaticamente da $4 a $5", "logentry-upload-upload": "$1 {{GENDER:$2|ha caricato}} $3", @@ -3518,7 +3516,7 @@ "api-error-duplicate-archive": "{{PLURAL:$1|C'era un altro file|C'erano altri file}} già nel sito con lo stesso contenuto, ma {{PLURAL:$1|è stato cancellato|sono stati cancellati}}.", "api-error-empty-file": "Il file selezionato era vuoto.", "api-error-emptypage": "La creazione di nuove pagine vuote non è consentita.", - "api-error-fetchfileerror": "Errore interno: c'è stato un problema durante il recupero del documento.", + "api-error-fetchfileerror": "Errore interno: si è verificato un problema durante il recupero del file.", "api-error-fileexists-forbidden": "Un file di nome \"$1\" già esiste e non può essere sovrascritto.", "api-error-fileexists-shared-forbidden": "Un file di nome \"$1\" già esiste nel repository condiviso e non può essere sovrascritto.", "api-error-file-too-large": "Il file selezionato era troppo grande.", @@ -3647,6 +3645,7 @@ "special-characters-group-ipa": "IPA", "special-characters-group-symbols": "Simboli", "special-characters-group-greek": "Greco", + "special-characters-group-greekextended": "Greco esteso", "special-characters-group-cyrillic": "Cirillico", "special-characters-group-arabic": "Arabo", "special-characters-group-arabicextended": "Arabo esteso", @@ -3674,5 +3673,54 @@ "sessionprovider-generic": "sessioni $1", "sessionprovider-mediawiki-session-cookiesessionprovider": "sessioni basate su cookie", "sessionprovider-nocookies": "I cookie possono essere disattivati. Assicurati di avere i cookie abilitati e ha inizia nuovamente.", - "randomrootpage": "Pagina radice casuale" + "randomrootpage": "Pagina radice casuale", + "log-action-filter-block": "Tipo di blocco:", + "log-action-filter-contentmodel": "Tipo di modifica del modello di contenuto:", + "log-action-filter-delete": "Tipo di cancellazione:", + "log-action-filter-import": "Tipo di importazione:", + "log-action-filter-managetags": "Tipo di azione di gestione etichetta:", + "log-action-filter-move": "Tipo di spostamento:", + "log-action-filter-newusers": "Tipo di creazione utenza:", + "log-action-filter-patrol": "Tipo di verifica:", + "log-action-filter-protect": "Tipo di protezione:", + "log-action-filter-rights": "Tipo di modifica diritti", + "log-action-filter-suppress": "Tipo di soppressione", + "log-action-filter-upload": "Tipo di caricamento:", + "log-action-filter-all": "Tutto", + "log-action-filter-block-block": "Blocco", + "log-action-filter-block-reblock": "Modifica blocco", + "log-action-filter-block-unblock": "Sblocco", + "log-action-filter-contentmodel-change": "Modifica del modello di contenuto", + "log-action-filter-contentmodel-new": "Creazione di pagina con modello di contenuto non standard", + "log-action-filter-delete-delete": "Cancellazione pagina", + "log-action-filter-delete-restore": "Ripristino pagina", + "log-action-filter-delete-event": "Cancellazione registro", + "log-action-filter-delete-revision": "Cancellazione versione", + "log-action-filter-import-interwiki": "Importazione transwiki", + "log-action-filter-import-upload": "Importazione da XML caricato", + "log-action-filter-managetags-create": "Creazione etichetta", + "log-action-filter-managetags-delete": "Cancellazione etichetta", + "log-action-filter-managetags-activate": "Attivazione etichetta", + "log-action-filter-managetags-deactivate": "Disattivazione etichetta", + "log-action-filter-move-move": "Spostamento senza sovrascrivere reindirizzamenti", + "log-action-filter-move-move_redir": "Spostamento con sovrascrittura reindirizzamenti", + "log-action-filter-newusers-create": "Creazione da utente anonimo", + "log-action-filter-newusers-create2": "Creazione da utente registrato", + "log-action-filter-newusers-autocreate": "Creazione automatica", + "log-action-filter-newusers-byemail": "Creazione con password inviata via email", + "log-action-filter-patrol-patrol": "Verifica manuale", + "log-action-filter-patrol-autopatrol": "Verifica automatica", + "log-action-filter-protect-protect": "Protezione", + "log-action-filter-protect-modify": "Modifica protezione", + "log-action-filter-protect-unprotect": "Sprotezione", + "log-action-filter-protect-move_prot": "Protezione spostata", + "log-action-filter-rights-rights": "Modifica manuale", + "log-action-filter-rights-autopromote": "Modifica automatica", + "log-action-filter-suppress-event": "Soppressione registro", + "log-action-filter-suppress-revision": "Soppressione versione", + "log-action-filter-suppress-delete": "Soppressione pagina", + "log-action-filter-suppress-block": "Soppressione utente da blocco", + "log-action-filter-suppress-reblock": "Soppressione utente da ri-blocco", + "log-action-filter-upload-upload": "Nuovo caricamento", + "log-action-filter-upload-overwrite": "Ricaricamento" } diff --git a/languages/i18n/ja.json b/languages/i18n/ja.json index af4af2cebf..20682ca57d 100644 --- a/languages/i18n/ja.json +++ b/languages/i18n/ja.json @@ -509,7 +509,7 @@ "nocookiesfornew": "発信元を確認できなかったため、アカウントは作成されませんでした。\nCookieを有効にしていることを確認して、このページを再読込してもう一度試してください。", "nocookiesforlogin": "{{int:nocookieslogin}}", "noname": "有効な利用者名が指定されていません。", - "loginsuccesstitle": "ログイン成功", + "loginsuccesstitle": "ログイン済み", "loginsuccess": "{{SITENAME}}に「$1」としてログインしました。", "nosuchuser": "「$1」という名前の利用者は見当たりません。\n利用者名では大文字と小文字を区別します。\n綴りが正しいことを確認するか、[[Special:UserLogin/signup|新たにアカウントを作成]]してください。", "nosuchusershort": "「$1」という名前の利用者は存在しません。\n綴りを確認してください。", @@ -528,7 +528,7 @@ "noemail": "利用者「$1」のメールアドレスは登録されていません。", "noemailcreate": "有効なメールアドレスを入力する必要があります。", "passwordsent": "新しいパスワードを「$1」に登録されたメールアドレスにお送りしました。\nメールが届いたら、再度ログインしてください。", - "blocked-mailpassword": "ご使用中のIPアドレスからの編集はブロックされており、不正利用防止のため、パスワードの再発行機能は使用できません。", + "blocked-mailpassword": "ご使用中のIPアドレスからの編集はブロックされております。不正利用防止のため、このIPアドレスからはパスワードの再発行機能が使用できません。", "eauthentsent": "指定したメールアドレスに、アドレス確認のためのメールをお送りしました。\nメールに記載された手順に従って、このアカウントの所有者であることの確認が取れると、このアカウント宛のメールを受け取れるようになります。", "throttled-mailpassword": "パスワード再設定メールを過去 {{PLURAL:$1|$1 時間}}に送信済みです。\n悪用防止のため、パスワードの再設定は {{PLURAL:$1|$1 時間}}に 1 回のみです。", "mailerror": "メールを送信する際にエラーが発生しました: $1", @@ -588,11 +588,11 @@ "botpasswords-insert-failed": "ボット「$1」の追加に失敗しました。既に追加されていないか確認してください。", "botpasswords-update-failed": "ボット「$1」の更新に失敗しました。削除されていないか確認してください。", "botpasswords-created-title": "ボット用パスワードが作成されました", - "botpasswords-created-body": "ボット「$1」のパスワードが作成されました。", + "botpasswords-created-body": "利用者「$2」のボット名「$1」のためのパスワードが作成されました。", "botpasswords-updated-title": "ボット用パスワードが更新されました", - "botpasswords-updated-body": "ボット「$1」のパスワードを更新しました。", + "botpasswords-updated-body": "利用者「$2」のボット名「$1」のためのパスワードが更新されました。", "botpasswords-deleted-title": "ボット用パスワードが削除されました", - "botpasswords-deleted-body": "ボット「$1」のパスワードを削除しました。", + "botpasswords-deleted-body": "利用者「$2」のボット名「$1」のためのパスワードが削除されました。", "botpasswords-newpassword": "$1 用の新しいパスワードは $2 です。 後で参照するために、この情報を控えておいてください", "botpasswords-no-provider": "BotPasswordsSessionProvider が有効ではありません。", "botpasswords-invalid-name": "指定された利用者名には、ボット用パスワードの区切りである「$1」 が含まれていません。", @@ -887,7 +887,7 @@ "revdelete-submit": "選択された{{PLURAL:$1|版}}に適用", "revdelete-success": "版の閲覧レベルを更新しました。", "revdelete-failure": "版の閲覧レベルを更新できませんでした:\n$1", - "logdelete-success": "記録の閲覧レベルを変更しました。", + "logdelete-success": "記録の閲覧レベルを設定しました。", "logdelete-failure": "記録の閲覧レベルを設定できませんでした。\n$1", "revdel-restore": "閲覧レベルを変更", "pagehist": "ページの履歴", @@ -1369,9 +1369,9 @@ "recentchangeslinked-page": "ページ名:", "recentchangeslinked-to": "このページへのリンク元での変更の表示に切り替え", "recentchanges-page-added-to-category": "[[:$1]]をカテゴリに追加", - "recentchanges-page-added-to-category-bundled": "[[:$1]]と他{{PLURAL:$2|1ページ|$2ページ}}をカテゴリに追加", + "recentchanges-page-added-to-category-bundled": "[[:$1]]と他[[Special:WhatLinksHere/$1|{{PLURAL:$2|1ページ|$2ページ}}]]をカテゴリに追加", "recentchanges-page-removed-from-category": "[[:$1]]をカテゴリから除外", - "recentchanges-page-removed-from-category-bundled": "[[:$1]]と他{{PLURAL:$2|1ページ|$2ページ}}をカテゴリから除外", + "recentchanges-page-removed-from-category-bundled": "[[:$1]]と他 [[Special:WhatLinksHere/$1|{{PLURAL:$2|1ページ|$2ページ}}]]をカテゴリから除外", "autochange-username": "メディアウィキ自動変更", "upload": "ファイルをアップロード", "uploadbtn": "ファイルをアップロード", @@ -1870,8 +1870,6 @@ "categories-submit": "表示", "categoriespagetext": "以下の{{PLURAL:$1|カテゴリ}}にはページまたはメディアがあります。\n[[Special:UnusedCategories|使われていないカテゴリ]]はここには表示していません。\n[[Special:WantedCategories|カテゴリページが存在しないカテゴリ]]も参照してください。", "categoriesfrom": "最初に表示するカテゴリ:", - "special-categories-sort-count": "項目数順に並べ替え", - "special-categories-sort-abc": "辞書順に並べ替え", "deletedcontributions": "利用者の削除された投稿", "deletedcontributions-title": "利用者の削除された投稿", "sp-deletedcontributions-contribs": "投稿記録", @@ -2054,18 +2052,19 @@ "rollback-success": "$1による編集を差し戻しました。\n$2による直前の版へ変更されました。", "sessionfailure-title": "セッションの失敗", "sessionfailure": "ログインのセッションに問題が発生しました。\nセッション乗っ取りを防ぐため、操作を取り消しました。\n前のページへ戻って再度読み込んだ後に、もう一度試してください。", - "changecontentmodel": "ページのコンテント・モデルの変更", + "changecontentmodel": "ページのコンテンツ・モデルの変更", "changecontentmodel-legend": "コンテンツモデルを変更", "changecontentmodel-title-label": "ページ名", "changecontentmodel-model-label": "新しい コンテンツ モデル", "changecontentmodel-reason-label": "理由:", - "changecontentmodel-success-title": "コンテント・モデルは変更されました", - "changecontentmodel-success-text": "[[:$1]]のコンテント・タイプは変更されています。", + "changecontentmodel-submit": "変更", + "changecontentmodel-success-title": "コンテンツ・モデルは変更されました", + "changecontentmodel-success-text": "[[:$1]]のコンテンツ・タイプは変更されました。", "changecontentmodel-cannot-convert": "[[:$1]]上のコンテントは$2の型には変換できません。", "changecontentmodel-nodirectediting": "$1 コンテント・モデルは、ダイレクト編集をサポートしていません。", "log-name-contentmodel": "コンテント・モデル変更記録", - "log-description-contentmodel": "ページのコンテント・モデルに関連するイベント", - "logentry-contentmodel-change": "$1 がページ $3 のコンテント・モデルを \"$4\" から \"$5\" に{{GENDER:$2|変更しました}}", + "log-description-contentmodel": "ページのコンテンツ・モデルに関連する出来事", + "logentry-contentmodel-change": "$1 がページ $3 のコンテンツ・モデルを \"$4\" から \"$5\" に{{GENDER:$2|変更しました}}", "logentry-contentmodel-change-revertlink": "差し戻し", "logentry-contentmodel-change-revert": "差し戻し", "protectlogpage": "保護記録", @@ -2490,11 +2489,7 @@ "import-logentry-upload-detail": "$1{{PLURAL:$1|版}} をインポートしました", "import-logentry-interwiki-detail": "$2からインポート済みの$1{{PLURAL:$1|版}}", "javascripttest": "JavaScript をテスト中", - "javascripttest-pagetext-noframework": "このページは JavaScript のテストを実行するために予約されています。", - "javascripttest-pagetext-unknownframework": "テストフレームワーク「$1」は不明です。", "javascripttest-pagetext-unknownaction": "不明な操作「$1」。", - "javascripttest-pagetext-frameworks": "以下のテストフレームワークから1つ選択してください: $1", - "javascripttest-pagetext-skins": "テストを実行する外装を選択してください:", "javascripttest-qunit-intro": "mediawiki.org上の[$1 テストのドキュメント]を参照してください。", "tooltip-pt-userpage": "{{GENDER:|自分の利用者}}ページ", "tooltip-pt-anonuserpage": "自分が編集しているIPアドレスの利用者ページ", @@ -2804,8 +2799,8 @@ "exif-colorspace": "色空間情報", "exif-componentsconfiguration": "各コンポーネントの意味", "exif-compressedbitsperpixel": "画像圧縮モード", - "exif-pixelydimension": "実効画像の幅", - "exif-pixelxdimension": "実効画像の高さ", + "exif-pixelxdimension": "実効画像の幅", + "exif-pixelydimension": "実効画像の高さ", "exif-usercomment": "ユーザー コメント", "exif-relatedsoundfile": "関連音声ファイル", "exif-datetimeoriginal": "原画像データの生成日時", @@ -3316,7 +3311,6 @@ "version-libraries-description": "説明", "version-libraries-authors": "作者", "redirect": "ファイル名、利用者ID、ページID、版ID、記録IDでの転送", - "redirect-legend": "ファイルまたはページヘの転送", "redirect-summary": "この特別ページは、ファイル (ファイル名を指定)、ページ (版 ID またはページ ID を指定)、利用者ページ (利用者 ID を整数で指定) 、記録項目 (記録 ID を指定) に転送されます。使用例: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/page/64308]], [[{{#Special:Redirect}}/revision/328429]], [[{{#Special:Redirect}}/user/101]], [[{{#Special:Redirect}}/logid/186]]", "redirect-submit": "実行", "redirect-lookup": "検索の種類:", @@ -3329,7 +3323,6 @@ "redirect-not-exists": "値が見つかりません", "fileduplicatesearch": "重複ファイルの検索", "fileduplicatesearch-summary": "重複ファイルをハッシュ値に基づいて検索します。", - "fileduplicatesearch-legend": "重複の検索", "fileduplicatesearch-filename": "ファイル名:", "fileduplicatesearch-submit": "検索", "fileduplicatesearch-info": "$1 × $2 ピクセル
ファイルサイズ: $3
MIME タイプ: $4", @@ -3401,7 +3394,7 @@ "tags-delete-not-allowed": "拡張機能によって定義されているタグは削除できません(ただし拡張機能が明示的に削除を許可している場合を除く)。", "tags-delete-not-found": "タグ「$1」は存在しません。", "tags-delete-too-many-uses": "タグ「$1」は少なくとも$2版に付与されており、削除できません。", - "tags-delete-warnings-after-delete": "タグ「$1」の削除に成功しましたが、以下の{{PLURAL:$2|警告}}が発生しました:", + "tags-delete-warnings-after-delete": "タグ「$1」の削除しましたが、以下の{{PLURAL:$2|警告}}が発生しました:", "tags-activate-title": "タグの有効化", "tags-activate-question": "タグ「$1」を有効化しようとしています。", "tags-activate-reason": "理由:", @@ -3438,7 +3431,7 @@ "tags-edit-reason": "理由:", "tags-edit-revision-submit": "変更を {{PLURAL:$1|this revision|$1 revisions}} に適用", "tags-edit-logentry-submit": "変更を {{PLURAL:$1|this log entry|$1 log entries}} に適用", - "tags-edit-success": "変更が正常に適用されました。", + "tags-edit-success": "変更が適用されました。", "tags-edit-failure": "変更は適用できませんでした: $1", "tags-edit-nooldid-title": "無効な対象版", "tags-edit-nooldid-text": "この関数を実行しましたが、対象の版が指定されていない、あるいは指定された版が存在しません。", @@ -3528,7 +3521,7 @@ "logentry-protect-protect-cascade": "$1 が $3 を {{GENDER:$2|保護}}しました $4 [カスケード]", "logentry-protect-modify": "$1 が $3 の保護レベルを{{GENDER:$2|変更}}しました $4", "logentry-protect-modify-cascade": "$1 が $3 の保護レベルを{{GENDER:$2|変更}}しました $4 [カスケード]", - "logentry-rights-rights": "$1 が $3 の所属グループを $4 から $5 に{{GENDER:$2|変更しました}}", + "logentry-rights-rights": "$1 が {{GENDER:$3|$3}} の所属グループを $4 から $5 に{{GENDER:$2|変更しました}}", "logentry-rights-rights-legacy": "$1 が $3 の所属グループを{{GENDER:$2|変更しました}}", "logentry-rights-autopromote": "$1 が $4 から $5 に自動的に{{GENDER:$2|昇格しました}}", "logentry-upload-upload": "$1 が $3 を {{GENDER:$2|アップロードしました}}", @@ -3711,6 +3704,7 @@ "special-characters-group-ipa": "国際音声記号", "special-characters-group-symbols": "記号", "special-characters-group-greek": "ギリシア文字", + "special-characters-group-greekextended": "ギリシア文字拡張", "special-characters-group-cyrillic": "キリル文字", "special-characters-group-arabic": "アラビア文字", "special-characters-group-arabicextended": "アラビア文字拡張", @@ -3733,5 +3727,19 @@ "mw-widgets-titleinput-description-redirect": "$1 へのリダイレクト", "api-error-blacklisted": "他の、説明的なタイトルをお選びください。", "sessionprovider-generic": "$1 セッション", - "randomrootpage": "おまかせルートページ" + "randomrootpage": "おまかせルートページ", + "log-action-filter-block": "ブロックの種類", + "log-action-filter-protect": "保護の種類:", + "log-action-filter-upload": "アップロードの種類", + "log-action-filter-all": "すべて", + "log-action-filter-block-block": "ブロック", + "log-action-filter-block-reblock": "ブロック変更", + "log-action-filter-block-unblock": "ブロック解除", + "log-action-filter-delete-delete": "ページの削除", + "log-action-filter-delete-restore": "ページの復帰", + "log-action-filter-protect-protect": "保護", + "log-action-filter-protect-modify": "保護の設定変更", + "log-action-filter-protect-unprotect": "保護解除", + "log-action-filter-upload-upload": "新規アップロード", + "log-action-filter-upload-overwrite": "再アップロード" } diff --git a/languages/i18n/jut.json b/languages/i18n/jut.json index 264a219df3..a8fd1228b7 100644 --- a/languages/i18n/jut.json +++ b/languages/i18n/jut.json @@ -8,7 +8,8 @@ "Ælsån", "Midnight Gambler", "아라", - "Jyllanj" + "Jyllanj", + "Ghiutun" ] }, "tog-underline": "Unjestreg henwisnenge:", @@ -827,11 +828,11 @@ "thumbnail-more": "Forstör", "thumbnail_error": "Fejl we oprettels å thumbnail: $1", "importlogpage": "Importlogg", - "tooltip-pt-userpage": "Din brugesiid", - "tooltip-pt-mytalk": "Din diskusjonssiid", - "tooltip-pt-preferences": "Din instellenge", + "tooltip-pt-userpage": "{{GENDER:|Din brugesiid}}", + "tooltip-pt-mytalk": "{{GENDER:|Din}} diskusjonssiid", + "tooltip-pt-preferences": "{{GENDER:|Din}} instellenge", "tooltip-pt-watchlist": "Listen öwe side som du öwewåge for øndrenge", - "tooltip-pt-mycontris": "List öwe din bidraw", + "tooltip-pt-mycontris": "List öwe {{GENDER:|din}} bidraw", "tooltip-pt-login": "Du opfordas te å logg på, men dä ä ett obligatorisk.", "tooltip-pt-logout": "Logg å", "tooltip-pt-createaccount": "Du opfordas te å oprett e konto å logg på, men dä ä ett obligatorisk", @@ -859,7 +860,7 @@ "tooltip-t-whatlinkshere": "En list mä åll side som henwise hertil", "tooltip-t-recentchangeslinked": "Siensti øndrenge i side som denn siid henwise til", "tooltip-feed-atom": "Atom-feed for siden", - "tooltip-t-contributions": "Sie bidrawen te brugari", + "tooltip-t-contributions": "List öwe bidrawen te {{GENDER:$1|brugari}}", "tooltip-t-emailuser": "Senj i e-mail te brugari", "tooltip-t-upload": "Lägg e bilj elle i ånj mediafil op", "tooltip-t-specialpages": "List öwe åll specialside", diff --git a/languages/i18n/jv.json b/languages/i18n/jv.json index 8a4924e8f9..0659075e7a 100644 --- a/languages/i18n/jv.json +++ b/languages/i18n/jv.json @@ -20,19 +20,22 @@ ] }, "tog-underline": "Garisen ngisoré pranala:", - "tog-hideminor": "Dhelikaké suntingan cilik ing owah-owahan pungkasan", - "tog-hidepatrolled": "Dhelikaké suntingan kapanto ing owah-owahan pungkasan", + "tog-hideminor": "Dhelikaké besutan cilik ing owah-owahan pungkasan", + "tog-hidepatrolled": "Dhelikaké besutan awasan ing owah-owahan pungkasan", "tog-newpageshidepatrolled": "Dhelikaké kaca kapanto saka daptar kaca anyar", + "tog-hidecategorization": "Dhelikaké kategorisasi kaca", "tog-extendwatchlist": "Jembaraké daptar pangawasan kanggo nuduhaké kabèh owahan, ora mung sing paling anyar", "tog-usenewrc": "Owah-owahané paguyuban miturut kaca nèng owah-owahan anyar lan daptar panto", "tog-numberheadings": "Wènèhana nomer judul secara otomatis", - "tog-showtoolbar": "Tuduhna toolbar (batang piranti) panyuntingan (mbutuhaké JavaScript)", - "tog-editondblclick": "Sunting kaca nganggo klik ping loro (mbutuhaké JavaScript)", + "tog-showtoolbar": "Tuduhaké wilah piranti sarana besut", + "tog-editondblclick": "Besut kaca sarana ngeklik pindho", "tog-editsectiononrightclick": "Fungsèkna panyuntingan sub-bagian mawa klik-tengen ing judul bagian (mbutuhaké JavaScript)", "tog-watchcreations": "Tambahaké kaca sing tak gawé lan berkas sing tak unggah nèng daptar pangawasan", "tog-watchdefault": "Tambahaké kaca lan berkas sing tak sunting nèng daptar pangawasan", "tog-watchmoves": "Tambahaké kaca lan berkas sing tak pindhahaké nèng daptar pangawasan", "tog-watchdeletion": "Tambahaké kaca lan berkas sing tak busak nèng daptar pangawasan", + "tog-watchuploads": "Tambahaké barkas anyar sing tak unggah nyang pawawanganku", + "tog-watchrollback": "Tambahaké kaca sing tak wurungaké nyang pawawanganku", "tog-minordefault": "Tandhanana kabèh suntingan dadi suntingan cilik secara baku", "tog-previewontop": "Tuduhna pratayang sadurungé kothak sunting lan ora sawisé", "tog-previewonfirst": "Tuduhna pratayang ing suntingan kapisan", @@ -43,80 +46,82 @@ "tog-shownumberswatching": "Tuduhna cacahé pangawas", "tog-oldsig": "Tapak asma sing ana:", "tog-fancysig": "Anggepen tapak asta minangka teks wiki (tanpa pranala otomatis)", - "tog-uselivepreview": "Nganggoa pratayang langsung (mbutuhaké JavaScript) (eksperimental)", + "tog-uselivepreview": "Trapaké prawuryan langsung", "tog-forceeditsummary": "Élingna aku menawa kothak ringkesan suntingan isih kosong", "tog-watchlisthideown": "Delikna suntinganku ing daftar pangawasan", - "tog-watchlisthidebots": "Delikna suntingan ing daftar pangawasan", + "tog-watchlisthidebots": "Dhelikaké besutan bot saka pangawasan", "tog-watchlisthideminor": "Delikna suntingan kecil di daftar pangawasan", "tog-watchlisthideliu": "Ngumpetaké suntingan panganggo sing mlebu log seka daftar pangawasan", + "tog-watchlistreloadautomatically": "Mot manèh pawawangan kanthi otomanis samangsa panyaring diowah (butuh JavaScript)", "tog-watchlisthideanons": "Ngumpetaké suntingan panganggo anonim seka daftar pangawasan", "tog-watchlisthidepatrolled": "Delikna suntingan sing wis dipatroli saka daftar pangawasan", + "tog-watchlisthidecategorization": "Dhelikaké kategorisasi kaca", "tog-ccmeonemails": "Kirimana aku salinan layang e-mail sing tak-kirimaké menyang wong liya", "tog-diffonly": "Aja dituduhaké isi kaca ing ngisor bédané suntingan", "tog-showhiddencats": "Tuduhna kategori sing didelikaké", "tog-norollbackdiff": "Lirwaaké prabédan sawusé nglakokaké sawijining pambalikan.", "tog-useeditwarning": "Èlingaké kula yèn kula ninggalaké suntingan sing durung kasimpen", - "tog-prefershttps": "Nganggo sambungan sing aman rikala mlebet log", - "underline-always": "Tansah", - "underline-never": "Ora", + "tog-prefershttps": "Panggah sarana sambungan aman nalika mlebu", + "underline-always": "Mesthi", + "underline-never": "Ora tau", "underline-default": "Kulit atau penjelajah bawaan", "editfont-style": "Modhèl aksara (font) ing kotak suntingan:", "editfont-default": "Standar panjelajah wèb", - "editfont-monospace": "Aksara (font) Monospace", - "editfont-sansserif": "Aksara (font) Sans-serif", - "editfont-serif": "Aksara (font) Serif", + "editfont-monospace": "Fon monospasi", + "editfont-sansserif": "Fon tansèrif", + "editfont-serif": "Fon sèrif", "sunday": "Minggu", "monday": "Senèn", - "tuesday": "Slasa", + "tuesday": "Selasa", "wednesday": "Rebo", "thursday": "Kemis", - "friday": "Jemuwah", + "friday": "Jumuwah", "saturday": "Setu", "sun": "Min", "mon": "Sen", "tue": "Sel", - "wed": "Rab", - "thu": "Kam", - "fri": "Jem", + "wed": "Reb", + "thu": "Kem", + "fri": "Jum", "sat": "Set", "january": "Januari", - "february": "Fébruari", + "february": "Pébruari", "march": "Maret", "april": "April", - "may_long": "Méi", + "may_long": "Mèi", "june": "Juni", "july": "Juli", "august": "Agustus", - "september": "September", + "september": "Sèptèmber", "october": "Oktober", - "november": "November", + "november": "Nopèmber", "december": "Désèmber", "january-gen": "Januari", - "february-gen": "Fébruari", + "february-gen": "Fèbruari", "march-gen": "Maret", "april-gen": "April", - "may-gen": "Méi", + "may-gen": "Mèi", "june-gen": "Juni", "july-gen": "Juli", "august-gen": "Agustus", - "september-gen": "September", + "september-gen": "Sèptèmber", "october-gen": "Oktober", - "november-gen": "November", + "november-gen": "Nopèmber", "december-gen": "Désèmber", "jan": "Jan", - "feb": "Feb", + "feb": "Pèb", "mar": "Mar", "apr": "Apr", - "may": "Méi", + "may": "Mèi", "jun": "Jun", "jul": "Jul", "aug": "Agu", - "sep": "Sep", + "sep": "Sèp", "oct": "Okt", - "nov": "Nov", - "dec": "Des", + "nov": "Nop", + "dec": "Dès", "january-date": "Januari $1", - "february-date": "Februari $1", + "february-date": "Pèbruari $1", "march-date": "Maret $1", "april-date": "April $1", "may-date": "$1 Mèi", @@ -127,190 +132,201 @@ "october-date": "Oktober $1", "november-date": "$1 Novèmber", "december-date": "$1 Dèsèmber", + "period-am": "Isuk-Awan", + "period-pm": "Soré-Wengi", "pagecategories": "{{PLURAL:$1|Kategori|Kategori}}", - "category_header": "Artikel ing kategori \"$1\"", + "category_header": "Kaca sajeroning kategori \"$1\"", "subcategories": "Subkategori", - "category-media-header": "Média ing kategori \"$1\"", + "category-media-header": "Médhia sajeroning kategori \"$1\"", "category-empty": "''Kategori iki saiki ora ngandhut artikel utawa média.''", - "hidden-categories": "{{PLURAL:$1|Kategori sing didelikaké|Kategori sing didelikaké}}", - "hidden-category-category": "Kategori sing didelikaké", + "hidden-categories": "{{PLURAL:$1|Kategori kadhelikaké|Kategori kadhelikaké}}", + "hidden-category-category": "Kategori kadhelikan", "category-subcat-count": "{{PLURAL:$2|Kategori iki namung nduwé subkategori ing ngisor ikit.|Dituduhaké {{PLURAL:$1|subkategori|$1 subkategori}} sing kalebu ing kategori iki saka total $2.}}", "category-subcat-count-limited": "Kategori iki ora duwé {{PLURAL:$1|subkategori|$1 subkategori}} ''berikut''.", "category-article-count": "{{PLURAL:$2|Kategori iki namung ndarbèni kaca iki.|Dituduhaké {{PLURAL:$1|kaca|$1 kaca-kaca}} sing kalebu ing kategori iki saka gunggungé $2.}}", "category-article-count-limited": "Kategori iki ngandhut {{PLURAL:$1|kaca|$1 kaca-kaca}} sing kapacak ing ngisor iki.", - "category-file-count": "{{PLURAL:$2|Kategori iki namung nduwé berkas iki.|Dituduhaké {{PLURAL:$1|berkas|$1 berkas-berkas}} sing kalebu ing kategori iki saka gunggungé $2.}}", + "category-file-count": "{{PLURAL:$2|Kategori iki mung isi barkas iki.|{{PLURAL:$1|Barkas|$1 barkas}} iki ana sajeroning kategori iki saka $2 gunggungé.}}", "category-file-count-limited": "Kategori iki ndarbèni {{PLURAL:$1|berkas|$1 berkas-berkas}} sing kapacak ing ngisor iki.", "listingcontinuesabbrev": "samb.", - "index-category": "Kaca sing diindhèks", - "noindex-category": "Kaca sing ora diindhèks", - "broken-file-category": "Kaca kanthi pranala gambar rusak", - "about": "Prakara", - "article": "Artikel", - "newwindow": "(buka ing jendhéla anyar)", - "cancel": "Batalna", + "index-category": "Kaca kaindhèksan", + "noindex-category": "Kaca ora kaindhèksan", + "broken-file-category": "Kaca mawa pranala berkas rusak", + "about": "Bab", + "article": "Kaca isi", + "newwindow": "(buka mawa jendhéla anyar)", + "cancel": "Wurungaké", "moredotdotdot": "Liyané...", - "morenotlisted": "Isih ana sing ora didaptarne...", + "morenotlisted": "Pratélan iki ora jangkep.", "mypage": "Kaca", "mytalk": "Wicara", - "anontalk": "Dhiskusi IP puniki", - "navigation": "Pandhu Arah", - "and": " Lan", + "anontalk": "Rembug", + "navigation": "Napigasi", + "and": " lan", "qbfind": "Golèk", - "qbbrowse": "Navigasi", - "qbedit": "Sunting", + "qbbrowse": "Luru", + "qbedit": "Besut", "qbpageoptions": "Kaca iki", - "qbmyoptions": "Opsiku", - "faq": "FAQ (Pitakonan sing kerep diajokaké)", - "faqpage": "Project:FAQ", - "actions": "Tindakan", - "namespaces": "Ruang jeneng", - "variants": "Varian", - "navigation-heading": "Menu navigasi", - "errorpagetitle": "Kasalahan", - "returnto": "Bali menyang $1.", + "qbmyoptions": "Kaca-kacaku", + "faq": "Pitakon Kerep", + "faqpage": "Project:Pitakon Kerep", + "actions": "Tumindak", + "namespaces": "Lowah aran", + "variants": "Parian", + "navigation-heading": "Menu napigasi", + "errorpagetitle": "Cacad", + "returnto": "Bali nyang $1.", "tagline": "Saka {{SITENAME}}", "help": "Pitulung", - "search": "Panggolèkan", + "search": "Golèk", "searchbutton": "Golèk", - "go": "Nuju menyang", - "searcharticle": "Nuju menyang", - "history": "Vèrsi sadurungé", - "history_short": "Vèrsi lawas", - "updatedmarker": "diowahi wiwit kunjungan pungkasanku", - "printableversion": "Versi cithak", + "go": "Menyang", + "searcharticle": "Menyang", + "history": "Sajarah kaca", + "history_short": "Babad", + "updatedmarker": "wis inganyaran kawit tekaku sing pungkasan", + "printableversion": "Cara cithakan", "permalink": "Pranala permanèn", "print": "Cithak", - "view": "Pirsani", - "view-foreign": "Pirsani ing $1", - "edit": "Sunting", - "create": "Nggawé", - "create-local": "Tambah pawedharan lokal", - "editthispage": "Sunting kaca iki", - "create-this-page": "Nggawé kaca iki", + "view": "Deleng", + "view-foreign": "Deleng nyang $1", + "edit": "Besut", + "edit-local": "Besut panyandra enggon-enggonan", + "create": "Gawé", + "create-local": "Tambah panyadra enggon-enggonan", + "editthispage": "Besut kaca iki", + "create-this-page": "Gawé kaca iki", "delete": "Busak", "deletethispage": "Busak kaca iki", - "undeletethispage": "Wurung busak kaca iki", - "undelete_short": "Batal busak $1 {{PLURAL:$1|suntingan|suntingan}}", + "undeletethispage": "Wurungaké pambusaking kaca iki", + "undelete_short": "Batal busak {{PLURAL:$1|sabesutan|$1 besutan}}", "viewdeleted_short": "Pirsani {{PLURAL:$1|suntingan|suntingan}} ingkang sampun kabusak", - "protect": "Reksanen", - "protect_change": "ngowahi reksanan", - "protectthispage": "Reksanen kaca iki", - "unprotect": "Owahi pangreksan", - "unprotectthispage": "Owahi pangreksan kaca iki", + "protect": "Reksa", + "protect_change": "owah", + "protectthispage": "Reksa kaca iki", + "unprotect": "Owah rereksan", + "unprotectthispage": "Owah rereksan kaca iki", "newpage": "Kaca anyar", - "talkpage": "Dhiskusèkna kaca iki", - "talkpagelinktext": "Wicara", - "specialpage": "Kaca astaméwa", - "personaltools": "Piranti pribadi", - "articlepage": "nDeleng artikel", - "talk": "Dhiskusi", - "views": "Tampilan", + "talkpage": "Rembug kaca iki", + "talkpagelinktext": "gunem", + "specialpage": "Kaca mirunggan", + "personaltools": "Piranti pribadhi", + "articlepage": "Deleng kaca isi", + "talk": "Rembug", + "views": "Praèn", "toolbox": "Piranti", - "userpage": "Ndeleng kaca panganggo", - "projectpage": "Ndeleng kaca proyèk", - "imagepage": "Deleng kaca berkas", - "mediawikipage": "Ndeleng kaca pesen sistem", - "templatepage": "Ndeleng kaca cithakan", - "viewhelppage": "Ndeleng kaca pitulung", - "categorypage": "Ndeleng kaca kategori", - "viewtalkpage": "Ndeleng kaca dhiskusi", - "otherlanguages": "Basa liya", - "redirectedfrom": "(Dialihkan dari $1)", - "redirectpagesub": "Kaca pangalihan", - "lastmodifiedat": "Kaca iki diowahi pungkasané nalika $2, $1.", + "userpage": "Deleng kaca panganggo", + "projectpage": "Deleng kaca proyèk", + "imagepage": "Deleng kaca barkas", + "mediawikipage": "Deleng kaca nawala", + "templatepage": "Deleng kaca cithakan", + "viewhelppage": "Deleng kaca pitulung", + "categorypage": "Deleng kaca kategori", + "viewtalkpage": "Deleng parembugan", + "otherlanguages": "Ing basa liya", + "redirectedfrom": "(Dilih saka $1)", + "redirectpagesub": "Alih kaca", + "redirectto": "Malih nyang:", + "lastmodifiedat": "Kaca iki pungkasan diowah kala $1, tabuh $2.", "viewcount": "Kaca iki wis tau diaksès cacahé ping {{PLURAL:$1|siji|$1}}.", - "protectedpage": "Kaca sing direksa", - "jumpto": "Langsung menyang:", - "jumptonavigation": "navigasi", + "protectedpage": "Kaca kareksa", + "jumpto": "Jujug:", + "jumptonavigation": "napigasi", "jumptosearch": "golèk", "view-pool-error": "Nyuwun ngapuro, peladèn lagi sibuk wektu iki.\nKakèhan panganggo sing nyoba mbukak kaca iki.\nEntèni sedhéla sadurungé nyoba ngaksès kaca iki manèh .\n\n$1", + "generic-pool-error": "Nyuwun pangapura, paladèn saiki nembé arungan.\nKakèhan panganggo sing péngin ndeleng sumber iki.\nEntèna sadhéla sadurungé sampéyan nekani sumber iki manèh.", "pool-timeout": "Kelangkung wekdal nengga kunci", "pool-queuefull": "Kempalan antrian kebak", "pool-errorunknown": "Kalepata ingkang mboten dipun mangertosi", - "aboutsite": "Prakara {{SITENAME}}", - "aboutpage": "Project:Prakara", + "poolcounter-usage-error": "Cacad panganggo: $1", + "aboutsite": "Bab {{SITENAME}}", + "aboutpage": "Project:Bab", "copyright": "Kabèh isi kasedyakaké miturut $1.", "copyrightpage": "{{ns:project}}:Hak cipta", - "currentevents": "Prastawa saiki", - "currentevents-url": "Project:Prastawa saiki", - "disclaimers": "Pamaidonan", - "disclaimerpage": "Project:Panyangkalan umum", - "edithelp": "Pitulung panyuntingan", - "mainpage": "Kaca Utama", - "mainpage-description": "Kaca Utama", + "currentevents": "Kadadéan saiki", + "currentevents-url": "Project:Kadadéan saiki", + "disclaimers": "Sélakan", + "disclaimerpage": "Project:Sélakan umum", + "edithelp": "Pitulung besut", + "helppage-top-gethelp": "Pitulung", + "mainpage": "Kaca Pokok", + "mainpage-description": "Kaca pokok", "policy-url": "Project:Kabijakan", - "portal": "Gapura komunitas", - "portal-url": "Project:Portal komunitas", - "privacy": "Kebijakan privasi", - "privacypage": "Project:Kabijakan privasi", + "portal": "Gapura paguyuban", + "portal-url": "Project:Garupa paguyuban", + "privacy": "Niti pripasi", + "privacypage": "Project:Niti pripasi", "badaccess": "Aksès ora olèh", "badaccess-group0": "Panjenengan ora pareng nglakokaké tindhakan sing panjenengan gayuh.", "badaccess-groups": "Pratingkah panjenengan diwatesi tumrap panganggo ing {{PLURAL:$2|klompoké|klompoké}}: $1.", "versionrequired": "Dibutuhaké MediaWiki vèrsi $1", "versionrequiredtext": "MediaWiki vèrsi $1 dibutuhaké kanggo nggunakaké kaca iki. Mangga mirsani [[Special:Version|kaca iki]]", - "ok": "OK", - "retrievedfrom": "Sumber artikel iki saka kaca situs web: \"$1\"", + "ok": "Oké", + "retrievedfrom": "Dijupuk saka: \"$1\"", "youhavenewmessages": "Panjenengan kagungan $1 ($2).", "youhavenewmessagesfromusers": "Sampéyan nduwé $1 saka {{PLURAL:$3|panganggo liya|$3 panganggo}} ($2).", "youhavenewmessagesmanyusers": "Sampéyang nduwé $1 saka akèh panganggo ($2).", "newmessageslinkplural": "{{PLURAL:$1|layang anyar|999=layang anyar}}", "newmessagesdifflinkplural": "{{PLURAL:$1|owahan|999=owahan}} pungkasan", "youhavenewmessagesmulti": "Panjenengan olèh pesen-pesen anyar $1", - "editsection": "sunting", - "editold": "sunting", + "editsection": "besut", + "editold": "besut", "viewsourceold": "deleng sumber", - "editlink": "sunting", + "editlink": "besut", "viewsourcelink": "deleng sumber", - "editsectionhint": "Sunting bagian: $1", - "toc": "Bab lan paragraf", - "showtoc": "tuduhna", - "hidetoc": "delikna", - "collapsible-collapse": "Singidaken", - "collapsible-expand": "Tuduhna", + "editsectionhint": "Besut pérangan: $1", + "toc": "Isi", + "showtoc": "tuduhaké", + "hidetoc": "dhelikaké", + "collapsible-collapse": "Neb", + "collapsible-expand": "Wenga", + "confirmable-confirm": "{{GENDER:$1|Sampéyan}} yakin?", + "confirmable-yes": "Iya", + "confirmable-no": "Ora", "thisisdeleted": "Mirsani utawa mbalèkaké $1?", - "viewdeleted": "Mirsani $1?", + "viewdeleted": "Deleng $1?", "restorelink": "$1 {{PLURAL:$1|suntingan|suntingan}} sing wis kabusak", "feedlinks": "Asupan:", "feed-invalid": "Tipe permintaan asupan ora bener.", "feed-unavailable": "Umpan sindikasi (''syndication feeds'') ora kasedyakaké", "site-rss-feed": "$1 ''RSS Feed''", - "site-atom-feed": "$1 ''Atom Feed''", + "site-atom-feed": "Umpan atom $1", "page-rss-feed": "\"$1\" ''RSS Feed''", "page-atom-feed": "\"$1\" ''Atom Feed''", "red-link-title": "$1 (kaca durung ana)", "sort-descending": "Urutaké medhun", "sort-ascending": "Urutaké munggah", - "nstab-main": "Artikel", - "nstab-user": "Panganggo", - "nstab-media": "Media", - "nstab-special": "Astamiwa", - "nstab-project": "Proyek", - "nstab-image": "Gambar", - "nstab-mediawiki": "Pariwara", - "nstab-template": "Cithak", - "nstab-help": "Pitulung", + "nstab-main": "Kaca", + "nstab-user": "Kaca panganggo", + "nstab-media": "Kaca médhia", + "nstab-special": "Kaca mirunggan", + "nstab-project": "Kaca proyèk", + "nstab-image": "Barkas", + "nstab-mediawiki": "Nawala", + "nstab-template": "Cithakan", + "nstab-help": "Kaca pitulung", "nstab-category": "Kategori", - "nosuchaction": "Ora ana pratingkah kaya ngono", + "mainpage-nstab": "Kaca pokok", + "nosuchaction": "Ora ana lelakon mangkono", "nosuchactiontext": "Pratingkah sing dirinci déning URL ora sah.\nPanjenengan manawa salah ketik nalika ngisi URL, utawa salah ngisi pranala.\nIki manawa uga nuduhaké anané kesalahan ing piranti alus sing dipigunakaké déning {{SITENAME}}.", - "nosuchspecialpage": "Ora ana kaca astaméwa kaya ngono", + "nosuchspecialpage": "Ora ana kaca mirunggan mangkono", "nospecialpagetext": "Panjenengan nyuwun kaca astaméwa sing ora sah. Daftar kaca astaméwa sing sah bisa dipirsani ing [[Special:SpecialPages|daftar kaca astaméwa]].", - "error": "Kasalahan", - "databaseerror": "Kasalahan database", + "error": "Cacad", + "databaseerror": "Cacad umpak data", "databaseerror-text": "Ana kerusakan ing basis data (query error).\n\nMungkin ana masalah ing software-e.", "databaseerror-textcl": "Ana kerusakan ing basis data (query error).", "databaseerror-query": "Query: $1", "databaseerror-function": "Function: $1", - "databaseerror-error": "Error: $1", + "databaseerror-error": "Cacad: $1", "laggedslavemode": "Pènget: Kaca iki mbokmenawa isiné dudu pangowahan pungkasan.", - "readonly": "Database dikunci", + "readonly": "Umpak data kagembok", "enterlockreason": "Lebokna alesan panguncèn, kalebu uga prakiran kapan kunci bakal dibuka", "readonlytext": "Database lagi dikunci marang panampan anyar. Pangurus sing ngunci mènèhi katrangan kaya mangkéné:

$1", "missing-article": "Basis data ora bisa nemokaké tèks kaca sing kuduné ana, yaiku \"$1\" $2.\nBab iki bisasané disebabaké déning pranala daluwarsa menyang revisi sadurungé kaca sing wis dibusak.\nYèn dudu iki panyebabé, panjenengan manawa bisa nemokaké kasalahan (''bug'') jroning piranti alus (''software''). Mangga dilapuraké bab iki menyang [[Special:ListUsers/sysop|administrator]], kanthi nyebutaké alamat URL sing dituju", - "missingarticle-rev": "(révisi#: $1)", + "missingarticle-rev": "(owahan#: $1)", "missingarticle-diff": "(Béda: $1, $2)", "readonly_lag": "Database wis dikunci mawa otomatis sawetara database sékundhèr lagi nglakoni sinkronisasi mawa database utama", - "internalerror": "Kasalahan internal", - "internalerror_info": "Kaluputan internal: $1", + "internalerror": "Cacad njero", + "internalerror_info": "Cacad njero: $1", "filecopyerror": "Ora bisa nulad berkas \"$1\" menyang \"$2\".", "filerenameerror": "Ora bisa ngowahi saka \"$1\" dadi \"$2\".", "filedeleteerror": "Ora bisa mbusak berkas \"$1\".", @@ -323,12 +339,12 @@ "cannotdelete-title": "Ora bisa mbusak kaca \"$1\"", "delete-hook-aborted": "Pambusakan dibatalaké déning ''hook''.\nOra ana alesané.", "no-null-revision": "Ora isa nggawe revisi 'null' anyar kanggo kaca \"$1\"", - "badtitle": "Judhulé ora sah", + "badtitle": "Sésirah ala", "badtitletext": "Judhul kaca sing panjenengan ora bisa dituduhaké, kosong, utawa dadi judhul antar-basa utawa judhul antar-wiki. Iku bisa uga ana sawijining utawa luwih aksara sing ora bisa didadèkaké judhul.", "perfcached": "Data iki mung dijupuk saka papan singgahan lan mungkin ora kaanyaran. Maksimum {{PLURAL:$1|sak asil|$1 asil}} sumadhiya nèng papan singgahan.", "perfcachedts": "Data iki mung dijupuk saka papan singgahan lan mungkin dianyari pungkasan $1. Maksimum {{PLURAL:$4|sak asil|$4 asil}} sumadhiya nèng papan singgahan.", "querypage-no-updates": "Update saka kaca iki lagi dipatèni. Data sing ana ing kéné saiki ora bisa bakal dibalèni unggah manèh.", - "viewsource": "Tuduhna sumber", + "viewsource": "Deleng sumber", "viewsource-title": "Delok sumberé $1", "actionthrottled": "Tindakan diwatesi", "actionthrottledtext": "Minangka sawijining pepesthèn anti-spam, panjenengan diwatesi nglakoni tindhakan iki sing cacahé kakèhan ing wektu cendhak.\nMangga dicoba manèh ing sawetara menit.", @@ -355,81 +371,89 @@ "exception-nologin-text-manual": "Tulung $1 kanggo ngakses kaca utawa kelakon iki.", "virus-badscanner": "Kasalahan konfigurasi: pamindai virus ora dikenal: ''$1''", "virus-scanfailed": "''Pemindaian'' utawa ''scan'' gagal (kode $1)", - "virus-unknownscanner": "Antivirus ora ditepungi:", + "virus-unknownscanner": "antivirus buhbuhan:", "logouttext": "'''Sampéyan wis metu log'''\n\nCathet yèn sapérangan kaca mungkin isih nampilaké kayata sampéyan isih mlebu log, kuwi bisa ilang yèn sampéyan ngresiki ''cache'' pramban sampéyan.", + "cannotlogoutnow-title": "Ora bisa metu saiki", + "cannotlogoutnow-text": "Metu ora mungkin menawa nganggo $1.", "welcomeuser": "Sugeng Rawuh, $1!", "welcomecreation-msg": "Akun panjenengan wis kacipta. Aja lali nata konfigurasi [[Special:Preferences|preferensi {{SITENAME}}]] panjenengan.", - "yourname": "Asma pangangeman", + "yourname": "Jeneng panganggo:", "userlogin-yourname": "Jeneng panganggo", - "userlogin-yourname-ph": "Lebokaké jenengné panganggo", - "createacct-another-username-ph": "Lebokna jeneng panganggo:", - "yourpassword": "Tembung sandhi:", - "userlogin-yourpassword": "Tembung sandhi", - "userlogin-yourpassword-ph": "Lebokna tembung sandhi", - "createacct-yourpassword-ph": "Lebokna tembung sandhi", - "yourpasswordagain": "Balènana tembung sandhi", - "createacct-yourpasswordagain": "Konfirmasi tembung sandhi", - "createacct-yourpasswordagain-ph": "Lebokna tembung sandhi maneh", + "userlogin-yourname-ph": "Isi jeneng panganggo Sampéyan", + "createacct-another-username-ph": "Isi jeneng panganggo", + "yourpassword": "Tembung wadi:", + "userlogin-yourpassword": "Tembung wadi", + "userlogin-yourpassword-ph": "Lebokaké tembung wadining sampéyan", + "createacct-yourpassword-ph": "Lebokaké tembung wadi", + "yourpasswordagain": "Tik manèh tembung wadiné:", + "createacct-yourpasswordagain": "Netepaké tembung wadi", + "createacct-yourpasswordagain-ph": "Lebokaké manèh tembung wadiné", "remembermypassword": "Émut tembung sandi kula (salebeting $1 {{PLURAL:$1|dinten|dinten}})", - "userlogin-remembermypassword": "Gawe supaya aku tetep mlebet log terus", + "userlogin-remembermypassword": "Gawé amrih aku panggah kalebu", "userlogin-signwithsecure": "Nganggo koneksi aman", + "cannotloginnow-title": "Ora bisa mlebu saiki", + "cannotloginnow-text": "Mlebu ora mungkin menawa nganggo $1.", "yourdomainname": "Dhomain panjenengan", "password-change-forbidden": "Sampéyan ora bisa ngganti tembung sandhi nèng wiki iki.", "externaldberror": "Ana kasalahan otèntikasi basis dhata èksternal utawa panjenengan ora pareng nglakoni pemutakhiran marang akun èksternal panjenengan.", - "login": "Mlebu log", + "login": "Mlebu", "nav-login-createaccount": "Log mlebu / nggawé rékening (akun)", "userlogin": "Mlebu log / gawé rékening (akun)", - "userloginnocreate": "Mlebu log", - "logout": "Oncat", - "userlogout": "Metu log", - "notloggedin": "Durung mlebu log", - "userlogin-noaccount": "Durung kagungan akun?", - "userlogin-joinproject": "Gabung {{SITENAME}}", + "userloginnocreate": "Mlebu", + "logout": "Metu", + "userlogout": "Metu", + "notloggedin": "Durung kalebu", + "userlogin-noaccount": "Durung duwé akun?", + "userlogin-joinproject": "Mèlua {{SITENAME}}", "nologin": "Durung kagungan asma panganggo? '''$1'''.", - "nologinlink": "Ndaftaraké akun anyar", - "createaccount": "Nggawé akun anyar", - "gotaccount": "Wis kagungan akun? '''$1'''.", + "nologinlink": "Gawé akun", + "createaccount": "Gawé akun", + "gotaccount": "Wis duwé akun? $1.", "gotaccountlink": "Mlebu", "userlogin-resetlink": "Lali rincian mlebu log Sampéyan?", - "userlogin-resetpassword-link": "Sampéyan kélangan tembung sandhi?", + "userlogin-resetpassword-link": "Lali tembung wadining sampéyan?", + "userlogin-helplink2": "Tulungi mlebu", "userlogin-loggedin": "Sampeyan sampun mlebet log dadi {{GENDER:$1|$1}}.\nGunakna formulir ing ngisor iki kanggo mlebet log dadi panganggo liyane.", - "userlogin-createanother": "Gawé akun anyar", + "userlogin-createanother": "Gawé akun liya", "createacct-emailrequired": "Alamat layang èlèktronik", - "createacct-emailoptional": "Alamat layang èlèktronik (ora kudu)", - "createacct-email-ph": "Lebokna alamat layang èlèktronik sampeyan", - "createacct-another-email-ph": "Lebokna alamat layang èlèktronik", + "createacct-emailoptional": "Alamat layang èlèktronik (manasuka)", + "createacct-email-ph": "Lebokaké layang èlèktronik sampéyan", + "createacct-another-email-ph": "Isi alamat layang èlèktronik", "createaccountmail": "Nganggoa sandi sauntara sembarang lan kirimna liwat layang e-mail ing ngisor iki", - "createacct-realname": "Jeneng asli (ora kudu)", + "createacct-realname": "Jeneng asli (manasuka)", "createaccountreason": "Alesan:", "createacct-reason": "Alesan", "createacct-reason-ph": "Kenapa sampeyan nggawe akun liyane", - "createacct-submit": "Gawé akun", - "createacct-another-submit": "Gawé akun anyar", - "createacct-benefit-heading": "{{SITENAME}} digawe karo wong-wong kaya sampeyan.", - "createacct-benefit-body1": "{{PLURAL:$1|owahan|owahan}}", + "createacct-submit": "Gawé akun sampéyan", + "createacct-another-submit": "Gawé akun", + "createacct-benefit-heading": "{{SITENAME}} digawé déning wong-wong kaya déné sampéyan.", + "createacct-benefit-body1": "{{PLURAL:$1|besutan|besutan}}", "createacct-benefit-body2": "{{PLURAL:$1|kaca|kaca}}", - "createacct-benefit-body3": "{{PLURAL:$1|kontributor|kontributor}} keri dhewe", + "createacct-benefit-body3": "{{PLURAL:$1|panyumbang|panyumbang}} pungkasan", "badretype": "Sandhi panjenengan ora gathuk", + "usernameinprogress": "Panggawéning akun tumrap jeneng panganggo iki tembé lumaku.\nEntèni sadhéla.", "userexists": "Jeneng panganggo sing dilebokaké lagi dianggo.\nMangga pilih jeneng liya.", - "loginerror": "Kasalahan mlebu log", - "createacct-error": "Ora isa nggawe akun", - "createaccounterror": "Ora bisa nyipta akun: $1", + "loginerror": "Cacad nalika mlebu", + "createacct-error": "Cacad nalika nggawé akun", + "createaccounterror": "Ora bisa gawé akun: $1", "nocookiesnew": "Rékening utawa akun panganggo panjenengan wis digawé, nanging panjenengan durung mlebu log. {{SITENAME}} nggunakaké ''cookies'' kanggo log panganggo. ''Cookies'' ing panjlajah wèb panjengengan dipatèni. Mangga diaktifaké lan mlebu log manèh mawa jeneng panganggo lan tembung sandhi panjenengan.", "nocookieslogin": "{{SITENAME}} nggunakaké ''cookies'' kanggo log panganggoné. ''Cookies'' ing panjlajah wèb panjenengan dipatèni. Mangga ngaktifaké manèh lan coba manèh.", - "nocookiesfornew": "Akun panganggé boten kadamel, amargi kita boten saged mesthèkaken sumberipun.\nPesthèkaken panjenengan sampun ngaktifaken kuki, lajeng amot malih kaca punika lan cobi malih.", + "nocookiesfornew": "Akun panganggo ora digawé amarga sumberé ora bisa dipesthèkaké.\nPesthèkaké sampéyan wis ngurubaké kuki, banjur balèni ngamot kaca iki lan njajal manèh.", "noname": "Asma panganggo sing panjenengan pilih ora sah.", - "loginsuccesstitle": "Bisa suksès mlebu log", + "loginsuccesstitle": "Kasil mlebu", "loginsuccess": "'''Panjenengan saiki mlebu ing {{SITENAME}} kanthi asma \"$1\".'''", "nosuchuser": "Ora ana panganggo mawa asma \"$1\".\nJeneng panganggo iku mbédakaké kapitalisasi.\nCoba dipriksa manèh pasang aksarané, utawa [[Special:UserLogin/signup|gawé akun anyar]].", "nosuchusershort": "Ora ana panganggo mawa asma \"$1\". Coba dipriksa manèh pasang aksarané (éjaané).", "nouserspecified": "Panjenengan kudu milih asma panganggo.", - "login-userblocked": "Panganggé punika dipunblok. Login boten dipunidinaken", + "login-userblocked": "Panganggo iki pinalangan. Ora kena mbelu.", "wrongpassword": "Tembung sandhi sing dipilih salah. Mangga coba manèh.", "wrongpasswordempty": "Panjenengan ora milih tembung sandhi. Mangga dicoba manèh.", "passwordtooshort": "Tembung sesinglon paling sethithik cacahé {{PLURAL:$1|1 aksara|$1 aksara}}.", + "passwordtoolong": "Tembung wadi ora kena munjuli {{PLURAL:$1|1 pralambang|$1 pralambang}}.", + "passwordtoopopular": "Tembung wadi sing wis kaprah ora kena dianggo. Mangga pilih tembung wadi liya sing mbédani.", "password-name-match": "Tembung sandi panjenengan kudu béda karo jeneng panganggo panjenengan.", - "password-login-forbidden": "Pangginaan nami panganggé lan sandi puniki sampun kapenggak.", - "mailmypassword": "Kirim tembung sandhi anyar", + "password-login-forbidden": "Panganggoning jeneng panganggo lan tembung wadi iki dilarang.", + "mailmypassword": "Balèni gawé tembung wadi", "passwordremindertitle": "Pèngetan tembung sandhi saka {{SITENAME}}", "passwordremindertext": "Ana wong (mbokmanawa panjenengan dhéwé, saka alamat IP $1) nyuwun supaya dikirimi tembung sandhi anyar kanggo {{SITENAME}} ($4). Tembung sandi sawetara kanggo panganggo \"$2\" wis digawé lan saiki \"$3\". Yèn panjenengan pancèn nggayuh iki, mangga énggal mlebu log lan ngganti tembung sandi saiki.\nTembung sandi sawetara mau bakal kadaluwarsa ing {{PLURAL:$5|sadina|$5 dina}}.\nYèn wong liya sing nglakoni panyuwunan iki, utawa panjenengan éling tembung sandi panjenengan, lan ora kepéngin ngowahi, panjenengan ora usah nggubris pesen iki lan bisa tetep nganggo tembung sandi lawas.", "noemail": "Ora ana alamat layang e-mail sing kacathet kanggo panganggo \"$1\".", @@ -438,7 +462,7 @@ "blocked-mailpassword": "Alamat IP panjenengan diblokir saka panyuntingan, mulané panjenengan ora olèh nganggo fungsi pèngetan tembung sandhi kanggo ''mencegah penyalahgunaan''.", "eauthentsent": "Sawijining layang élèktronik (e-mail) kanggo ndhedhes (konfirmasi) wis dikirim menyang alamat layang élèktronik sampeyan. \n\nSadhurunge layang élèktronik liyane dikirim menyang akun kuwi, sampeyan kudu melu parentah ing layang kuwi, kanggo mastikne yen alamat layang kuwi bener-bener dhuweke sampeyan.", "throttled-mailpassword": "Layang kanggo mbalèkaké tembung sandhi wis dikirim sasuwené ing {{PLURAL:$1|jam|$1 jam}}.\nKanggo nyegah ananing tumindhak culika, namung sak layang kanggo mbalèkaké tembung sandhi sing bakal dikirim sasuwéné ing {{PLURAL:$1|jam|$1 jam}}.", - "mailerror": "Kasalahan ing ngirimaké layang e-mail: $1", + "mailerror": "Cacad nalika ngirim layang: $1", "acct_creation_throttle_hit": "Tamu ing wiki iki kanthi alamat IP sing padha karo panjenengan wis gawé {{PLURAL:$1|1 akun|$1 akun}} ing sadina pungkasan, nganti cacah maksimum sing diidinaké.\nAmarga saka kuwi., tamu kanthi alamat IP iki ora bisa gawé akun manèh kanggo sauntara iki.", "emailauthenticated": "Alamat layang élèktronik (e-mail) panjenengan wis didhedhes (dikonfirmasi) ing tanggal $2, jam $3.", "emailnotauthenticated": "Alamat layang élèktronik panjenengan durung didhedhes (dikonfirmasi). \n\nSadurungé didhedhes, panjenengan ora bisa nganggo fitur layang élèktronik (e-mail) ing ngisor iki.", @@ -447,7 +471,7 @@ "invalidemailaddress": "Alamat e-mail iki ora bisa ditampa amarga formaté ora bener. Tulung lebokna alamat mawa format sing bener utawa kosongaké waé isèn kasebut.", "cannotchangeemail": "Alamat layang èlèktronik akun ora bisa diganti nèng wiki iki.", "emaildisabled": "Situs iki ora bisa ngirim layang èlèktronik.", - "accountcreated": "Akun wis kacipta.", + "accountcreated": "Akun wis kagawé", "accountcreatedtext": "Akun panganggo kanggo [[{{ns:User}}:$1|$1]] ([[{{ns:User talk}}:$1|wicara]]) wis digawé.", "createaccount-title": "Gawé rékening kanggo {{SITENAME}}", "createaccount-text": "Ana wong sing nggawé sawijining akun utawa rékening kanggo alamat e-mail panjenengan ing {{SITENAME}} ($4) mawa jeneng \"$2\" lan tembung sandi \"$3\". Panjenengan disaranaké kanggo mlebu log lan ngganti tembung sandi panjenengan saiki.\n\nPanjenengan bisa nglirwakaké pesen iki yèn akun utawa rékening iki digawé déné sawijining kaluputan.", @@ -456,26 +480,35 @@ "loginlanguagelabel": "Basa: $1", "suspicious-userlogout": "Panjaluk panjenengan supaya metu ditolak amarga katoné panjlajah internt utawa proksi panyinggah.", "createacct-another-realname-tip": "Jeneng asli ora kudu dilebokake.\n\nYen sampeyan milih nglebokake jeneng asli, jeneng kuwi bakal dinggo ngwenehi atribusi kanggo karya-karyane.", - "pt-login": "Mlebet log", - "pt-createaccount": "Damel akun enggal", + "pt-login": "Mlebu", + "pt-login-button": "Mlebu", + "pt-createaccount": "Gawé akun", + "pt-userlogout": "Metu", "php-mail-error-unknown": "Kasalahan ora dingertèni nèng piguna mail() PHP.", "user-mail-no-addy": "Njajal ngirim layang èlèktronik tanpa alamat layang èlèktronik.", "user-mail-no-body": "Nyoba ngirim layang e-mail, tapi isine kosong.", - "changepassword": "Ganti tembung sandi", + "changepassword": "Ganti tembung wadi", "resetpass_announce": "Panjenengan wis mlebu log mawa kodhe sementara sing dikirim mawa e-mail. Menawa kersa nglanjutaké, panjenengan kudu milih tembung sandhi anyar ing kéné:", "resetpass_text": "", - "resetpass_header": "Ganti tembung sandi akun", - "oldpassword": "Tembung sandi lawas:", - "newpassword": "Tembung sandi anyar:", - "retypenew": "Ketik ulang tembung sandi anyar:", + "resetpass_header": "Ganti tembung wadining akun", + "oldpassword": "Tembung wadi lawas:", + "newpassword": "Tembung wadi anyar:", + "retypenew": "Tik manèh tembung wadi anyaré:", "resetpass_submit": "Nata tembung sandhi lan mlebu log", "changepassword-success": "Tembung sandhi panjenengan wis suksès diowahi!", - "resetpass_forbidden": "Tembung sandhi ora bisa diganti", + "botpasswords": "Tembung wadi bot", + "botpasswords-label-appid": "Jeneng bot:", + "botpasswords-label-create": "Gawé", + "botpasswords-label-update": "Anyari", + "botpasswords-label-cancel": "Batal", + "botpasswords-label-delete": "Busak", + "botpasswords-label-resetpassword": "Balèni gawé tembung wadi", + "resetpass_forbidden": "Tembung wadi ora bisa diganti", "resetpass-no-info": "Panjenengan kudu mlebu log kanggo ngaksès kaca iki sacara langsung.", - "resetpass-submit-loggedin": "Ganti tembung sandi", + "resetpass-submit-loggedin": "Ganti tembung wadi", "resetpass-submit-cancel": "Batal", "resetpass-wrong-oldpass": "Tembung sandi ora sah.\nPanjengen manawa wis kasil ganti tembung sandi utawa nyuwun tembung sandi sauntara sing anyar.", - "resetpass-temp-password": "Tembung sandi sauntara:", + "resetpass-temp-password": "Tembung wadi sauntara:", "resetpass-abort-generic": "Ngowah tembung sandhi diwurungaké déning èkstènsi.", "passwordreset": "Balèni setèl tembung sandhi", "passwordreset-text-one": "Lengkapana formulir iki kanggo nampa tembung sandhi sementara lewat layang elektronik.", @@ -490,7 +523,7 @@ "passwordreset-emailtitle": "Rincian akun nèng {{SITENAME}}", "passwordreset-emailtext-ip": "Ana uwong (mbok menawa Sampéyan, mawa angka IP $1) njaluk ganti tembung sandhiné Sampéyan ana ing {{SITENAME}} ($4). {{PLURAL:$3|Rèkèning|Rèkèning-rèkèning}} ngisor iki magepokan karo padunungané layang èlèktronik iki:\n\n$2\n\n{{PLURAL:$3|Tembung sandhi sawetara iki}} bakal kedaluwarsa ing {{PLURAL:$5|sak dina|$5 dina}}.\nSampéyan kudu mlebu log lan milih siji tembung sandhi anyar saiki. Yèn wong liya sing njaluk iki, utawa yèn Sampéyan jebul wis kèlingan tembung sandhiné sing lawas saéngga ora ana niyat kanggo ngganti, Sampéyan bisa ngejaraké wara-wara iki lan bacutaké nganggo tembung sandhiné lawas Sampéyan.", "passwordreset-emailtext-user": "Panganggo $1 seka {{SITENAME}} njaluk ganti tembung sandhiné Sampéyan ana ing {{SITENAME}} ($4). {{PLURAL:$3|Rèkèning|Rèkèning-rèkèning}} ngisor iki magepokan karo padunungané layang èlèktronik iki:\n\n$2\n\n{{PLURAL:$3|Tembung sandhi sawetara iki}} bakal kedaluwarsa ing {{PLURAL:$5|sak dina|$5 dina}}.\nSampéyan kudu mlebu log lan milih siji tembung sandhi anyar saiki. Yèn wong liya sing njaluk iki, utawa yèn Sampéyan jebul wis kèlingan tembung sandhiné sing lawas saéngga ora ana niyat kanggo ngganti, Sampéyan bisa ngejaraké wara-wara iki lan bacutaké nganggo tembung sandhiné lawas Sampéyan.", - "passwordreset-emailelement": "Jeneng panganggo: \n$1\n\nTembung sandhi sawetara: \n$2", + "passwordreset-emailelement": "Jeneng panganggo: \n$1\n\nTembung wadi sauntara: \n$2", "passwordreset-emailsentemail": "Layang èlèktronik kanggo mbalèkaké tembung sandhi wis dikirim.", "passwordreset-emailsent-capture": "Layang èlèktronik kanggo mbalèkaké tembung sandhi wis dikirim, bisa didelok ngisor iki.", "passwordreset-emailerror-capture": "Layang èlèktronik pangèling tembung sandhi wis digawe, yaiku sing ditampilaké nèng ngisor iki, nanging ora kasil dikirim ing {{GENDER:$2|panganggo}}: $1", @@ -506,18 +539,18 @@ "resettokens-text": "Anda dapat me-reset Token yang memungkinkan akses ke data pribadi tertentu yang terkait dengan akun Anda di sini.\n\nAnda harus melakukannya jika Anda secara tidak sengaja berbagi dengan seseorang atau jika akun Anda telah disusupi.", "resettokens-no-tokens": "Ora ana token sing bisa direset.", "resettokens-tokens": "Token:", - "resettokens-token-label": "$1 (nilai saiki: $2)", + "resettokens-token-label": "$1 (biji saiki: $2)", "resettokens-watchlist-token": "Token kangge sindikasi web (Atom/RSS) saking [[Special:Watchlist|pangowahan ing daptar pangawasan sampeyan]]", "resettokens-done": "Reset token.", "resettokens-resetbutton": "Reset token sing dipilih", - "bold_sample": "Tèks iki bakal dicithak kandel", - "bold_tip": "Cithak kandel", - "italic_sample": "Tèks iki bakal dicithak miring", - "italic_tip": "Cithak miring", - "link_sample": "Judhul pranala", + "bold_sample": "Tulisan kandel", + "bold_tip": "Tulisann kandel", + "italic_sample": "Tulisan miring", + "italic_tip": "Tulisan dhoyong", + "link_sample": "Sesirah pranala", "link_tip": "Pranala njero", - "extlink_sample": "http://www.example.com judhul pranala", - "extlink_tip": "Pranala njaba (aja lali wiwitan http:// )", + "extlink_sample": "http://www.example.com sesirahing pranala", + "extlink_tip": "Pranala jaba (élinga ater-ater http://)", "headline_sample": "Tèks judhul", "headline_tip": "Subbagian tingkat 1", "nowiki_sample": "Tèks iki ora bakal diformat", @@ -525,41 +558,41 @@ "image_sample": "Conto.jpg", "image_tip": "Mènèhi gambar/berkas", "media_sample": "Conto.ogg", - "media_tip": "Pranala berkas media", + "media_tip": "Pranala barkas", "sig_tip": "Tapak asta panjenengan mawa tandha wektu", "hr_tip": "Garis horisontal", - "summary": "Ringkesan:", + "summary": "Tingkesan:", "subject": "Subyek/judhul:", - "minoredit": "Iki suntingan cilik.", - "watchthis": "Awasana kaca iki", + "minoredit": "Iki besutan cilik", + "watchthis": "Awasi kaca iki", "savearticle": "Simpen kaca", - "preview": "Pratayang", - "showpreview": "Mirsani pratayang", - "showdiff": "Tuduhna pangowahan", + "preview": "Prawuryan", + "showpreview": "Tuduhaké prawuryan", + "showdiff": "Tuduhaké owahan", "anoneditwarning": "Penget: Panjenengan boten mlebet log. Alamat IP Panjenengan badhe katingal dening publik manawi Panjenengan ngayahi ewah-ewahan. Manawi Panjenengan [$1 mlebet log] utawai [$2 damel akun], suntingan Panjenengan badhe kaatribusekaken dhumateng nama pangangge Panjenengan, lan rupi-rupi kauntungan sanesipun.", "anonpreviewwarning": "''Sampéyan durung mlebu log. Nyimpen bakal nyathet alamat IP Sampéyan nèng riwayat sunting kaca iki.''", "missingsummary": "'''Pènget:''' Panjenengan ora nglebokaké ringkesan panyuntingan. Menawa panjenengan mencèt tombol Simpen manèh, suntingan panjenengan bakal kasimpen tanpa ringkesan panyuntingan.", "missingcommenttext": "Tulung lebokna komentar ing ngisor iki.", "missingcommentheader": "'''Pangéling:''' Sampéyan durung nyadhiyakaké judhul/jejer kanggo tanggepan iki.\nYèn Sampéyan klik \"{{int:savearticle}}\" manèh, suntingan Sampéyan bakal kasimpen tanpa kuwi.", - "summary-preview": "Pratayang ringkesan:", + "summary-preview": "Prawuryan tingkesan:", "subject-preview": "Pratayang subyèk/judhul:", - "blockedtitle": "Panganggo diblokir", + "blockedtitle": "Panganggo kapalangan", "blockedtext": "'''Asma panganggo utawa alamat IP panjenengan diblokir.'''\n\nBlokir iki sing nglakoni $1.\nAlesané ''$2''.\n\n* Diblokir wiwit: $8\n* Kadaluwarsa pemblokiran ing: $6\n* Sing arep diblokir: $7\n\nPanjenengan bisa ngubungi $1 utawa [[{{MediaWiki:Grouppage-sysop}}|pangurus liyané]] kanggo ngomongaké prakara iki.\n\nPanjenengan ora bisa nggunakaké fitur 'Kirim layang e-mail panganggo iki' kejaba panjenengan wis nglebokaké alamat e-mail sing sah ing [[Special:Preferences|préferènsi]] panjenengan.\n\nAlamat IP panjenengan iku $3, lan ID pamblokiran iku #$5.\nTulung kabèh informasi ing ndhuwur iki disertakaké ing saben pitakon panjenengan.", "autoblockedtext": "Alamat IP panjenangan wis diblokir minangka otomatis amerga dienggo déning panganggo liyané. Pamblokiran dilakoni déning $1 mawa alesan:\n\n:''$2''\n\n* Diblokir wiwit: $8\n* Blokir kadaluwarsa ing: $6\n* Sing dikarepaké diblokir: $7\n\nPanjenengan bisa ngubungi $1 utawa [[{{MediaWiki:Grouppage-sysop}}|pangurus liyané]] kanggo ngomongaké perkara iki.\n\nPanjenengan ora bisa nganggo fitur \"kirim e-mail panganggo iki\" kejaba panjenengan wis nglebokaké alamat e-mail sing sah ing [[Special:Preferences|préferènsi]] panjenengan lan panjenengan wis diblokir kanggo nggunakaké.\n\nID pamblokiran panjenengan iku #$5 lan alamat IP panjenengan iku $3. Tulung sertakna informasi ing dhuwur kabèh iki saben ngajokaké pitakonan panjenengan. Matur nuwun.", "blockednoreason": "ora ana alesan sing diwènèhaké", "whitelistedittext": "Panjenengan kudu $1 supaya bisa nyunting artikel.", "confirmedittext": "Panjenengan kudu ndhedhes alamat e-mail dhisik sadurungé pareng nyunting sawijining kaca. Mangga nglebokaké lan validasi alamat e-mail panjenengan sadurungé nglakoni panyuntingan. Alamat e-mail sawisé bisa diowahi liwat [[Special:Preferences|kaca préférènsi]]", - "nosuchsectiontitle": "Bagéan ora ditemokaké", + "nosuchsectiontitle": "Pérangan ora katemu", "nosuchsectiontext": "Panjenengan nyoba nyunting sawijining bagéan sing ora ana.\nBagéan iki manawa wis dipindhah utawa dibusak nalika panjenengan buka.", - "loginreqtitle": "Mangga mlebu log", - "loginreqlink": "mlebu log", + "loginreqtitle": "Kudu mlebu", + "loginreqlink": "mlebu", "loginreqpagetext": "Panjenengan kudu $1 kanggo bisa mirsani kaca liyané.", - "accmailtitle": "Tembung sandhi wis dikirim.", + "accmailtitle": "Tembung wadi wis kinirim", "accmailtext": "Sawijining tembung sandi sembarang kanggo [[User talk:$1|$1]] wis dikirim menyang $2.\n\nTembung sandi kanggo panganggo anyar iki isa diganti ing kaca ''[[Special:ChangePassword|ganti tembung sandi]]'' sawisé mlebu log.", "newarticle": "(Anyar)", "newarticletext": "Katonané panjenengan ngetutaké pranala artikel sing durung ana.\nManawa kersa manulis artikel iki, manggaa. (Mangga mirsani [$1 Pitulung] kanggo informasi sabanjuré).\nYèn ora sengaja tekan kéné, bisa ngeklik pencètan '''back''' waé ing panjlajah wèb panjenengan.", "anontalkpagetext": "---- ''Iki yaiku kaca dhiskusi sawijining panganggo anonim sing durung kagungan akun utawa ora nganggo akuné, dadi kita keeksa kudu nganggo alamat IP-né kanggo nepangi. Alamat IP kaya mengkéné iki bisa dienggo déning panganggo sing séjé-séjé. Yèn panjenengan pancèn panganggo anonim lan olèh komentar-komentar miring, mangga [[Special:UserLogin/signup|nggawé akun]] utawa [[Special:UserLogin|log mlebu]] supaya ora rancu karo panganggo anonim liyané ing mangsa ngarep.''", - "noarticletext": "Saiki ora ana tèks ing kaca iki. Panjenengan bisa [[Special:Search/{{PAGENAME}}|nglakoni panggolèkan kanggo judhul iki kaca iki]] ing kaca-kaca liyané, [{{fullurl:{{#Special:Log}}|kaca={{urlencode:{{FULLPAGENAME}}}}}} nggolèki log kagandhèng],\nutawa [{{fullurl:{{FULLPAGENAME}}|action=edit}} nyunting kaca iki].", + "noarticletext": "Kala saiki kaca iki durung ana tulisané.\nSampéyan bisa [[Special:Search/{{PAGENAME}}|nggolèki sesirahing kaca iki]] sajeroning kaca liya,\n[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} nggolèki log sing magepokan],\nutawa [{{fullurl:{{FULLPAGENAME}}|action=edit}} nggawé kaca iki].", "noarticletext-nopermission": "Saiki ora ana tèks ing kaca iki. \nSampéyan bisa [[Special:Search/{{PAGENAME}}|nggolèki judhul kaca iki]] nèng kaca liya, \nutawa [{{fullurl:{{#Special:Log}}|kaca={{urlencode:{{FULLPAGENAME}}}}}} nggolèki log sing kaitan], nanging Sampéyan ora nduwèni idin nggawé kaca iki.", "missing-revision": "Benahan #$1 saka kaca ajeneng \"{{FULLPAGENAME}}\" ora ana.\n\nIki biasané kasebabaké pranala riwayat sing kedaluwarsa saka kaca kuwi wis dibusak.\nRinciané bisa ditemokaké nèng [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} log pambusakan].", "userpage-userdoesnotexist": "Akun utawa rékening panganggo \"$1\" ora kadaftar.", @@ -573,23 +606,23 @@ "sitecsspreview": "'''Èling yèn Sampéyan mung ndelok pratayang CSS iki.'''\n'''Iki durung disimpen!'''", "sitejspreview": "'''Èling yèn Sampéyan mung ndelok pratayang kodhé JavaScript iki.'''\n'''Iki durung disimpen!'''", "userinvalidcssjstitle": "'''Pènget:''' Kulit \"$1\" ora ditemokaké. Muga dipèngeti yèn kaca .css lan .js nggunakaké huruf cilik, conto {{ns:user}}:Foo/vector.css lan dudu {{ns:user}}:Foo/Vector.css.", - "updated": "(Dianyari)", - "note": "'''Cathetan:'''", + "updated": "(Kaanyaran)", + "note": "Cathetan:", "previewnote": "'''Èling yèn Sampéyan mung ndelok pratayang.'''\nOwahan Sampéyan durung kasimpen!", - "continue-editing": "Lunga menyang area nyunting", + "continue-editing": "Menyang pambesutan", "previewconflict": "Pratilik iki nuduhaké tèks ing bagian dhuwur kothak suntingan tèks kayadéné bakal katon yèn panjenengan bakal simpen.", "session_fail_preview": "'''Nuwun sèwu, suntingan panjenengan ora bisa diolah amarga dhata sèsi kabusak.\nCoba kirim dhata manèh. Yèn tetep ora bisa, coba log metua lan mlebu log manèh.''''''Amerga wiki iki marengaké panggunan kodhe HTML mentah, mula pratilik didhelikaké minangka pancegahan marang serangan JavaScript.'''\n'''Menawa iki sawijining usaha panyuntingan sing sah, mangga dicoba manèh.\nYèn isih tetep ora kasil, cobanen metu log lan mlebu manèh.'''", "session_fail_preview_html": "'''Nuwun sèwu! Kita ora bisa prosès suntingan panjenengan amerga data sési ilang.'''\n\n''Amerga wiki iki ngidinaké panrapan HTML mentah, pratayang didelikaké minangka penggakan marang serangan Javascript.''\n\n'''Yèn iki sawijining upaya suntingan sing absah, mangga dicoba manèh. Yèn isih tetep ora kasil, cobanen metu log utawa oncat lan mlebua manèh.'''", "token_suffix_mismatch": "'''Suntingan panjenengan ditulak amerga aplikasi klièn panjenengan ngowahi karakter tandha wewacan ing suntingan. Suntingan iku ditulak kanggo untuk menggak kaluputan ing tèks artikel. Prekara iki kadhangkala dumadi yèn panjenengan ngangem dines layanan proxy anonim adhedhasar situs wèb sing duwé masalah.'''", "edit_form_incomplete": "'''Sebagéyan pormulir suntingan ora tekan nèng sasana; cèk pindho yèn suntingan Sampéyan isih wutuh lan jajal manèh.'''", - "editing": "Nyunting $1", + "editing": "Mbesut $1", "creating": "Nggawé $1", - "editingsection": "Nyunting $1 (bagian)", - "editingcomment": "Nyunting $1 (bagéyan anyar)", - "editconflict": "Konflik panyuntingan: $1", + "editingsection": "Mbesut $1 (pérangan)", + "editingcomment": "Mbesut $1 (pérangan anyar)", + "editconflict": "Cengkah besutan: $1", "explainconflict": "Wong liya wis nyunting kaca iki wiwit panjenengan mau nyunting.\nBagian dhuwur tèks iki ngamot tèks kaca vèrsi saiki.\nPangowahan sing panjenengan lakoni dituduhaké ing bagian ngisor tèks.\nPanjenengan namung prelu nggabungaké pangowahan panjenengan karo tèks sing wis ana.\n'''Namung''' tèks ing bagian dhuwur kaca sing bakal kasimpen menawa panjenengan mencèt \"{{int:savearticle}}\".", - "yourtext": "Tèks panjenengan", - "storedversion": "Versi sing kasimpen", + "yourtext": "Tulisan sampéyan", + "storedversion": "Owahan kasimpen", "nonunicodebrowser": "'''PÈNGET: Panjlajah wèb panjenengan ora ndhukung Unicode, mangga gantènana panjlajah wèb panjenengan sadurungé nyunting artikel.'''", "editingold": "'''PÈNGET:''' Panjenengan nyunting revisi lawas sawijining kaca. Yèn versi iki panjenengan simpen, mengko pangowahan-pangowahan sing wis digawé wiwit revisi iki bakal ilang.", "yourdiff": "Prabédan", @@ -604,33 +637,33 @@ "templatesused": "{{PLURAL:$1|Cithakan|Cithakan}} sing dienggo ing kaca iki:", "templatesusedpreview": "{{PLURAL:$1|Cithakan|Cithakan-cithakan}} sing dienggo ing pratilik iki:", "templatesusedsection": "{{PLURAL:$1|Cithakan}} sing dienggo ding bagian iki:", - "template-protected": "(direksa)", - "template-semiprotected": "(semi-pangreksan)", + "template-protected": "(kareksa)", + "template-semiprotected": "(semu kareksa)", "hiddencategories": "Kaca iki sawijining anggota saka {{PLURAL:$1|1 kategori ndelik|$1 kategori-kategori ndelik}}:", "edittools": "", "nocreatetext": "Situs iki ngwatesi kemampuan kanggo nggawé kaca anyar. Panjenengan bisa bali lan nyunting kaca sing wis ana, utawa mangga [[Special:UserLogin|mlebua log utawa ndaftar]]", "nocreate-loggedin": "Panjenengan ora kagungan idin kanggo nggawé kaca anyar.", "sectioneditnotsupported-title": "Panyuntingan bagéyan ora kasengkuyungan", - "sectioneditnotsupported-text": "Panyuntingan sapérangan ora disengkuyung ing kaca suntingan iki.", + "sectioneditnotsupported-text": "Ora bisa mbesut sapérangan ana ing kaca iki.", "permissionserrors": "Palilan ora diolèhaké", "permissionserrorstext": "Panjengan ora kagungan idin kanggo nglakoni sing panjenengan gayuh amerga {{PLURAL:$1|alesan|alesan-alesan}} iki:", "permissionserrorstext-withaction": "Panjenengan ora duwé hak aksès kanggo $2, amarga {{PLURAL:$1|alasan|alasan}} ing ngisor iki:", "recreate-moveddeleted-warn": "'''Pènget: Panjenengan gawé manèh sawijining kaca sing wis tau dibusak.'''\n\nMangga digagas manèh apa pantes nerusaké nyunting kaca iki.\nIng ngisor iki kapacak log pambusakan lan pamindhahan saka kaca iki:", - "moveddeleted-notice": "Kaca iki wis dibusak.\nLog pambusakan lan pamindhahan kaca iki disadiyakaké ing ngisor iki minangka réferènsi.", - "log-fulllog": "Pirsani kabèh log", + "moveddeleted-notice": "Kaca iki wis dibusak.\nCathetan busakan lan lihlihan kaca ana ing ngisor minangka rujukan.", + "log-fulllog": "Deleng cathetan wutuh", "edit-hook-aborted": "Suntingan dibatalaké déning kait parser\nTanpa ana katrangan.", "edit-gone-missing": "Ora bisa nganyari kaca.\nKatoné kaca iki wis dibusak.", - "edit-conflict": "Konflik panyuntingan.", + "edit-conflict": "Cengkah besutan", "edit-no-change": "Suntingan panjenengan dilirwakaké amerga panjenengan ora nglakoni pangowahan apa-apa ing tèks.", - "postedit-confirmation-saved": "Pangowahan sampéyan wis disimpen!", + "postedit-confirmation-saved": "Besutan sampeyan wis kasimpen.", "edit-already-exists": "Ora bisa nggawé kaca anyar.\nAmerga wis ana.", "defaultmessagetext": "Tèks layang gawan", "content-failed-to-parse": "Gagal menjabarkan konten $2 untuk model $1: $3", - "invalid-content-data": "Data konten ora sah", + "invalid-content-data": "Data isi ora trap", "content-not-allowed-here": "Konten \"$1\" ora oleh ing kaca [[$2]]", "editwarning-warning": "Yen sampeyan ninggalake kaca niki, pangowahan sampeyan bakal ilang.\nYen sampeyan wis mlebet log, sampeyan saged mateni peringatan niki lewat preferensi \"Panyuntingan\" sampeyan.", - "content-model-wikitext": "teks wiki", - "content-model-text": "teks polos", + "content-model-wikitext": "tulisan wiki", + "content-model-text": "tulisan barès", "content-model-javascript": "JavaScript", "content-model-css": "CSS", "expensive-parserfunction-warning": "Pènget: Kaca iki ngandhut kakèhan panggunan fungsi ''parser'' sing larang.\n\nSajatiné kuduné duwé kurang saka {{PLURAL:$2|panggilan|panggilan}}, saiki ana {{PLURAL:$1|$1 panggilan|$1 panggilan}}.", @@ -657,32 +690,32 @@ "cantcreateaccounttitle": "Akun ora bisa digawé", "cantcreateaccount-text": "Saka alamat IP iki ('''$1''') ora diparengaké nggawé akun utawa rékening. Sing mblokir utawa ora marengaké iku [[User:$3|$3]].\n\nAlesané miturut $3 yaiku ''$2''", "cantcreateaccount-range-text": "Nggawe akun saking alamat IP \"$1\", sing termasuk IP sampeyan ($4), sampun diblokir kaliyan [[User:$3|$3]].\n\nAlesan pamblokiran yaiku \"$2\"", - "viewpagelogs": "Mirsani log kaca iki", - "nohistory": "Ora ana sajarah panyuntingan kanggo kaca iki", - "currentrev": "Revisi saiki", - "currentrev-asof": "Révisi anyar dhéwé ing tanggal $1", - "revisionasof": "Revisi per $1", - "revision-info": "Revisi per $1; $2", - "previousrevision": "←Revisi sadurungé", - "nextrevision": "Revisi sabanjuré→", - "currentrevisionlink": "Revisi saiki", - "cur": "saiki", + "viewpagelogs": "Deleng cathetaning kaca iki", + "nohistory": "Babading besutan kaca iki ora ana.", + "currentrev": "Owahan anyaran", + "currentrev-asof": "Owahan wekasan kala $1", + "revisionasof": "Owahan kala $1", + "revision-info": "Owahan $1 déning {{GENDER:$6|$2}}$7", + "previousrevision": "← Owahan sadurungé", + "nextrevision": "Owahan sabanjuré →", + "currentrevisionlink": "Owahan wekasan", + "cur": "sai", "next": "sabanjuré", - "last": "akir", + "last": "sadurung", "page_first": "kapisan", "page_last": "pungkasan", "histlegend": "Pilihen rong tombol radhio banjur pencèten tombol ''bandhingna'' kanggo mbandhingaké versi. Klik sawijining tanggal kanggo ndeleng versi kaca ing tanggal iku.
(skr) = prabédan karo vèrsi saiki, (akir) = prabédan karo vèrsi sadurungé, '''s''' = suntingan sithik, '''b''' = suntingan bot, → = suntingan bagian, ← = ringkesan otomatis", - "history-fieldset-title": "Njlajah sajarah vèrsi sadhurungé", + "history-fieldset-title": "Luru babad", "history-show-deleted": "Namung sing dibusak", "histfirst": "suwé dhéwé", "histlast": "anyar dhéwé", - "historysize": "($1 {{PLURAL:$1|bita|bita}})", - "historyempty": "(kosong)", - "history-feed-title": "Riwayat revisi", - "history-feed-description": "Riwayat revisi kaca iki ing wiki", + "historysize": "($1 {{PLURAL:$1|bét|bét}})", + "historyempty": "(suwung)", + "history-feed-title": "Babad owahan", + "history-feed-description": "Babad owahaning kaca iki ing wiki", "history-feed-item-nocomment": "$1 ing $2", "history-feed-empty": "Kaca sing disuwun ora ditemokaké. Mbokmenawa wis dibusak saka wiki, utawa diwènèhi jeneng anyar. Coba [[Special:Search|golèka ing wiki]] kanggo kaca anyar sing rélevan.", - "rev-deleted-comment": "(ringkesan suntingan dibusak)", + "rev-deleted-comment": "(tingkesaning besutan dibusak)", "rev-deleted-user": "(jeneng panganggo dibusak)", "rev-deleted-event": "(isi dibusak)", "rev-deleted-user-contribs": "(jeneng panganggo utawa alamat IP dibusak - suntingan didhelikaké saka kontribusi)", @@ -697,27 +730,27 @@ "rev-suppressed-unhide-diff": "Sawiji benahan saka prabédan iki wis '''dibrèdèl'''.\nRincian bisa ditemokaké nèng [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} log pambrèdèlan].\nSampéyan uga isih bisa [$1 ndelok prabédan iki] yèn Sampéyan gelem.", "rev-deleted-diff-view": "Sawiji benahan saka prabédan iki wis '''dibusak'''.\nSampéyan isih bisa ndelok prabédan iki; rincian bisa ditemokaké nèng [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} log pambusakan].", "rev-suppressed-diff-view": "Sawiji benahan saka prabédan iki wis '''dibrèdèl'''.\nSampéyan isih bisa ndelok prabédan iki; rincian bisa ditemokaké nèng [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} log pambrèdèlan].", - "rev-delundel": "tuduhna/delikna", - "rev-showdeleted": "tuduhna", + "rev-delundel": "Owah kasatmatan", + "rev-showdeleted": "tuduhaké", "revisiondelete": "Busak/batal busak revisi", "revdelete-nooldid-title": "Target revisi ora ditemokaké", "revdelete-nooldid-text": "Panjenengan durung mènèhi target revisi kanggo nglakoni fungsi iki.", "revdelete-no-file": "Berkas sing dituju ora ana.", "revdelete-show-file-confirm": "Apa panjenengan yakin arep mirsani révisi sing wis kabusak saka berkas \"$1\" ing $2, jam $3?", - "revdelete-show-file-submit": "Ya", + "revdelete-show-file-submit": "Iya", "logdelete-selected": "{{PLURAL:$1|Log kapilih|Log kapilih}} kanggo:", "revdelete-confirm": "Mangga pesthèkaké yèn Sampéyan pancèn kudu nglakoni iki, yèn Sampéyan ngerti akibaté, lan yèn Sampéyan ngakoni iki cocok karo [[{{MediaWiki:Policy-url}}|kawicakan]].", "revdelete-suppress-text": "Pandhelikan révisi '''mung''' bisa dipigunakaké kanggo kasus ing ngisor:\n* Informasi sing kagolong pitnah\n* Informasi pribadi sing kurang pantes\n*: ''alamat omah lan nomer telepon, nomer kartu idhèntitas, lsp..''", "revdelete-legend": "Atur watesan:", - "revdelete-hide-text": "Tèks revisi", - "revdelete-hide-image": "Dhelikna isi berkas", + "revdelete-hide-text": "Tulisan owahan", + "revdelete-hide-image": "Dhelikaké isi barkas", "revdelete-hide-name": "Dhelikna tindhakan lan targèt", - "revdelete-hide-comment": "Ringkesan suntingan", - "revdelete-hide-user": "Jeneng panganggo/alamat IP", + "revdelete-hide-comment": "Tingkesan besutan", + "revdelete-hide-user": "Alamat IPné/jeneng panganggoné sing mbesut", "revdelete-hide-restricted": "Uga dhelikna data saka pangurus lan panganggo liyané", - "revdelete-radio-same": "(Aja diowahi)", - "revdelete-radio-set": "Kadhelikake", - "revdelete-radio-unset": "Kethok", + "revdelete-radio-same": "(aja diowah)", + "revdelete-radio-set": "Kadhelikan", + "revdelete-radio-unset": "Katon", "revdelete-suppress": "Uga dhelikan saka pangurus", "revdelete-unsuppress": "Busak watesan ing revisi sing dibalèkaké", "revdelete-log": "Alesan:", @@ -727,8 +760,8 @@ "logdelete-success": "Aturan pandhelikan tindhakan bisa kasil ditrapaké.", "logdelete-failure": "'''Aturan pandhelikan ora bisa disèt:'''\n$1", "revdel-restore": "Ngowahi visiblitas (pangatonan)", - "pagehist": "Sajarah kaca", - "deletedhist": "Sajarah sing dibusak", + "pagehist": "Babading kaca", + "deletedhist": "Babad kabusakan", "revdelete-hide-current": "Gagal ndhelikaké révisi tanggal $2, $1: iki arupa révisi paling anyar.\nRévisi iki ora bisa didhelikaké.", "revdelete-show-no-access": "Gagal nampilaké révisi tanggal $1, jam $2: révisi iki wis ditandhani \"kawates\".\nPanjenengan ora nduwèni aksès menyang révisi iki.", "revdelete-modify-no-access": "Gagal ngowahi révisi tanggal $1, jam $2: révisi iki wis ditandhani \"kawates\".\nPanjenengan ora nduwèni aksès menyang révisi iki.", @@ -740,23 +773,23 @@ "revdelete-otherreason": "Alesan liya/tambahan:", "revdelete-reasonotherlist": "Alesan liya", "revdelete-edit-reasonlist": "Sunting alesan pambusakan", - "revdelete-offender": "Revisi penulis:", + "revdelete-offender": "Juru pangriptaning owahan:", "suppressionlog": "Log barang-barang sing didelikaké (''oversight'')", "suppressionlogtext": "Ngisor iki daptar apa-apa waé sing wis dibusak lan diblokir kalebu kontèn sing didhelikaké saka para pangurus.\nDelok [[Special:BlockList|daptar blokiran]] sing isiné daptar apa-apa waé sing lagi dilarang lan diblokir.", - "mergehistory": "Gabung sejarah kaca", + "mergehistory": "Gabung babad kaca", "mergehistory-header": "Ing kaca iki panjenengan bisa nggabung révisi-révisi sajarah saka sawijining kaca sumber menyang kaca anyar.\nPastèkna yèn owah-owahan iki bakal netepaké kasinambungan sajarah kaca.", "mergehistory-box": "Gabungna revisi-revisi saka rong kaca:", "mergehistory-from": "Kaca sumber:", - "mergehistory-into": "Kaca tujuan:", - "mergehistory-list": "Sejarah suntingan bisa digabung", + "mergehistory-into": "Kaca paran:", + "mergehistory-list": "Babad besutan sing bisa digabung", "mergehistory-merge": "Révisi-révisi sing kapacak ing ngisor iki saka [[:$1]] bisa digabungaké menyang [[:$2]].\nGunakna tombol radio kanggo nggabungaké révisi-révisi sing digawé sadurungé wektu tartamtu. Gatèkna, menawa nganggo pranala navigasi bakal ngesèt ulang kolom iki.", - "mergehistory-go": "Tuduhna suntingan-suntingan sing bisa digabung", - "mergehistory-submit": "Gabung revisi", + "mergehistory-go": "Tuduhaké besutan sing bisa digabung", + "mergehistory-submit": "Gabung owahan", "mergehistory-empty": "Ora ana revisi sing bisa digabung.", "mergehistory-done": "$3 {{PLURAL:$1|révisi|révisi}} saka $1 bisa suksès digabung menyang [[:$2]].", "mergehistory-fail": "Ora bisa nggabung sajarah, coba dipriksa manèh kacané lan paramèter wektuné.", "mergehistory-no-source": "Kaca sumber $1 ora ana.", - "mergehistory-no-destination": "Kaca tujuan $1 ora ana.", + "mergehistory-no-destination": "Kaca paran $1 ora ana.", "mergehistory-invalid-source": "Irah-irahan kaca sumber kudu irah-irahan utawa judhul sing bener.", "mergehistory-invalid-destination": "Irah-irahan kaca tujuan kudu irah-irahan utawa judhul sing bener.", "mergehistory-autocomment": "Nggabung [[:$1]] menyang [[:$2]]", @@ -767,18 +800,19 @@ "revertmerge": "Batalna panggabungan", "mergelogpagetext": "Ing ngisor iki kapacak daftar panggabungan sajarah kaca ing kaca liyané.", "history-title": "Riwayat rèvisi saka \"$1\"", - "difference-title": "$1: Bèntenipun revisi", + "difference-title": "Prabéda antara owahan \"$1\"", "difference-title-multipage": "Prabédhan antara kaca \"$1\" lan \"$2\"", "difference-multipage": "(Prabédhan antar kaca)", - "lineno": "Larikan $1:", + "lineno": "Larik $1:", "compareselectedversions": "Bandhingna vèrsi kapilih", "showhideselectedversions": "Tampilaké/dhelikaké révisi kapilih", - "editundo": "batalna", + "editundo": "wurungaké", "diff-empty": "(Ora ana bedane)", + "diff-multi-sameuser": "({{PLURAL:$1|Saowahan madya|$1 owahan madya}} déning panganggo sing padha ora dituduhaké)", "diff-multi-manyusers": "({{PLURAL:$1Siji rèvisi sedhengan|$1 rèvisi sedhengan}} déning luwih saka $2 {{PLURAL:$2|panganggo|panganggo}} ora dituduhaké)", "difference-missing-revision": "{{PLURAL:$2|Sak pambenahan|$2 pambenahan}} saka prabédan iki ($1) {{PLURAL:$2|ora ditemokaké|ora ditemokaké}}.\n\nIki biasané kasebab pranala prabedan sing wis ora kanggo saka kaca isi wis dibusak.\nRinciané bisa ditemokaké nèng [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} log busak].", - "searchresults": "Kasil panggolèkan", - "searchresults-title": "Kasil panggolèkan saka \"$1\"", + "searchresults": "Kasiling golèk", + "searchresults-title": "Kasiling golèk \"$1\"", "titlematches": "Irah-irahan artikel sing cocog", "textmatches": "Tèks artikel sing cocog", "notextmatches": "Ora ana tèks kaca sing cocog", @@ -789,25 +823,25 @@ "shown-title": "Tampilaké $1 {{PLURAL:$1|asil|asil}} saben kaca", "viewprevnext": "Deleng ($1 {{int:pipe-separator}} $2) ($3)", "searchmenu-exists": "'''Ana kaca kanthi jeneng \"[[$1]]\" ing wiki iki'''", - "searchmenu-new": "'''Damel kaca \"[[:$1]]\" ing wiki punika!'''", + "searchmenu-new": "Gawéa kaca \"[[:$1]]\" nyang wiki iki! {{PLURAL:$2|0=|Uga delenga kaca sing katemu sarana panggolèking sampéyan.|Uga delenga kasiling panggolèk.}}", "searchprofile-articles": "Kaca isi", "searchprofile-images": "Multimedia", - "searchprofile-everything": "Kabèh", + "searchprofile-everything": "Samubarang", "searchprofile-advanced": "Tataran luwih dhuwur/maju", - "searchprofile-articles-tooltip": "Panggolèkan ing $1", - "searchprofile-images-tooltip": "Panggolèkan berkas", + "searchprofile-articles-tooltip": "Golèkan ing $1", + "searchprofile-images-tooltip": "Golèk barkas", "searchprofile-everything-tooltip": "Panggolèkan kabèh isi (klebu kaca-kaca wicara)", "searchprofile-advanced-tooltip": "Panggolèkan ing bilik jeneng biasa (''custom'')", "search-result-size": "$1 ({{PLURAL:$2|1 tembung|$2 tembung}})", "search-result-category-size": "{{PLURAL:$1|1 anggota|$1 anggota}} ({{PLURAL:$2|1 subkatégori|$2 subkatégori}}, {{PLURAL:$3|1 berkas|$3 berkas}})", "search-redirect": "(pangalihan $1)", - "search-section": "(sèksi $1)", - "search-suggest": "Apa panjenengan kersané: $1", - "search-interwiki-caption": "Proyèk-proyèk kagandhèng", + "search-section": "(pérangan $1)", + "search-suggest": "Apa karepé sampéyan: $1", + "search-interwiki-caption": "Proyèk-proyèk sababon", "search-interwiki-default": "Pituwas $1:", "search-interwiki-more": "(luwih akèh)", - "search-relatedarticle": "Kagandhèng", - "searchrelated": "kagandhèng", + "search-relatedarticle": "Magepokan", + "searchrelated": "magepokan", "searchall": "kabèh", "showingresults": "Ing ngisor iki dituduhaké {{PLURAL:$1|'''1''' kasil|'''$1''' kasil}}, wiwitané saking #$2.", "search-showingresults": "{{PLURAL:$4|Asil $1 dari $3|Asil $1 - $2 saking $3}}", @@ -822,7 +856,7 @@ "search-error": "Ana kasalahan wektu nggoleki: $1", "preferences": "Preferensi (pilihan)", "mypreferences": "Préferènsi", - "prefs-edits": "Gunggungé suntingan:", + "prefs-edits": "Gunggung besutan:", "prefsnologintext2": "Tulung $1 kanggo ngganti preferensi sampeyan.", "prefs-skin": "Kulit", "skin-preview": "Pratilik", @@ -845,7 +879,7 @@ "prefs-rendering": "Tampilan", "saveprefs": "Simpen", "restoreprefs": "Balèkna kabèh setèlan baku", - "prefs-editing": "Panyuntingan", + "prefs-editing": "Pambesut", "rows": "Larikan:", "columns": "Kolom:", "searchresultshead": "Panggolèkan", @@ -853,7 +887,7 @@ "stub-threshold-disabled": "Dipatèni", "recentchangesdays": "Cacahé dina sing dituduhaké ing owah-owahan pungkasan:", "recentchangesdays-max": "(maksimum $1 {{PLURAL:$1|dina|dina}})", - "recentchangescount": "Cacahé suntingan sing ditampilaké:", + "recentchangescount": "Cacahing besutan sing dituduhaké kanthi baku:", "prefs-help-recentchangescount": "Iki klebu owah-owahan pungkasan, kaca sajarah, lan log.", "prefs-help-watchlist-token2": "Ini adalah kunci rahasia (token) ke web feed dari daftar pantauan Anda.\nSiapa saja yang tahu akan dapat melihat daftar pantauan Anda, jadi jangan dibagikan.\n[[Special:ResetTokens|Klik di sini jika Anda perlu menyetel ulang]].", "savedprefs": "Préferènsi Panjenengan wis disimpen", @@ -911,7 +945,7 @@ "prefs-dateformat": "Format tanggal", "prefs-timeoffset": "Format wektu", "prefs-advancedediting": "Pilihan sabanjuré", - "prefs-editor": "Panyunting", + "prefs-editor": "Wong besut", "prefs-preview": "Pratayang", "prefs-advancedrc": "Opsi lanjutan", "prefs-advancedrendering": "Opsi lanjutan", @@ -921,7 +955,7 @@ "prefs-displaywatchlist": "Opsi tampilan", "prefs-tokenwatchlist": "Token", "prefs-diffs": "Prabédan", - "prefs-help-prefershttps": "Preferensi niki bakal diaktifne yen sampeyan mlebet log sabanjure.", + "prefs-help-prefershttps": "Pamiji iki bakal lumaku mentas sampeyan mbalèni mlebu.", "prefs-tabs-navigation-hint": "Tip: Sampeyan isa nganggo dapat menggunakan tombol panah kiwa lan tengen kanggo navigasi tab-tab ing daftar tab.", "userrights": "Manajemen hak panganggo", "userrights-lookup-user": "Ngatur kelompok panganggo", @@ -963,14 +997,14 @@ "grouppage-bureaucrat": "{{ns:project}}:Birokrat", "grouppage-suppress": "{{ns:project}}:Oversight", "right-read": "Maca kaca-kaca", - "right-edit": "Nyunting kaca-kaca", + "right-edit": "Besut kaca", "right-createpage": "Nggawé kaca (sing dudu kaca dhiskusi)", "right-createtalk": "Nggawé kaca dhiskusi", "right-createaccount": "Nggawé rékening (akun) panganggo anyar", - "right-minoredit": "Tandhanan suntingan minangka minor", + "right-minoredit": "Tandhani minangka besutan cilik", "right-move": "Pindhahna kaca", "right-move-subpages": "Pindhahaké kaca lan kabèh anak-kacané", - "right-move-rootuserpages": "Pindhahaké kaca utama panganggo", + "right-move-rootuserpages": "Ngalih kaca panganggo oyod", "right-movefile": "Mindhah berkas", "right-suppressredirect": "Aja nggawé pangalihan saka kaca sing lawas yèn mindhah sawijining kaca", "right-upload": "Ngunggahaké berkas-berkas", @@ -1014,7 +1048,7 @@ "right-editmyprivateinfo": "Owahi data pribadi sampeyan (kayata alamat layang elektronik, jeneng asli)", "right-editmyoptions": "Owahi preferensi sampeyan", "right-rollback": "Sacara gelis mbalèkaké panganggo pungkasan sing nyunting kaca tartamtu", - "right-markbotedits": "Tandhanana suntingan pambalèkan minangka suntingan bot", + "right-markbotedits": "Tandhani besutan kawurungan minangka besutan bot", "right-noratelimit": "Ora dipengaruhi déning wates cacahing suntingan.", "right-import": "Impor kaca-kaca saka wiki liya", "right-importupload": "Impor kaca-kaca saka sawijining pangunggahan berkas", @@ -1023,25 +1057,25 @@ "right-patrolmarks": "Ndeleng tandha-tandha patroli owah-owahan anyar", "right-unwatchedpages": "Tuduhna daftar kaca-kaca sing ora diawasi", "right-mergehistory": "Gabungna sajarah kaca-kaca", - "right-userrights": "Sunting kabèh hak-hak panganggo", + "right-userrights": "Besut kabèh hak panganggo", "right-userrights-interwiki": "Sunting hak-hak para panganggo ing situs-situs wiki liya", "right-siteadmin": "Kunci lan buka kunci basis data", "right-override-export-depth": "Èkspor kaca klebu kaca kagandhèng nganti tataran/''depth'' 5", "right-sendemail": "Ngirim layang listrik (e-mail) menyang panganggo liya", "right-passwordreset": "Delok layang èlèktronik panyetèlulangan tembung sandhi", - "newuserlogpage": "Log panganggo anyar", + "newuserlogpage": "Cathetan panganggo anyar", "newuserlogpagetext": "Ing ngisor iki kapacak log pandaftaran panganggo anyar.", "rightslog": "Log pangowahan hak aksès", "rightslogtext": "Ing ngisor iki kapacak log pangowahan marang hak-hak panganggo.", "action-read": "maca kaca iki", - "action-edit": "sunting kaca iki", + "action-edit": "besut kaca iki", "action-createpage": "nggawé kaca-kaca", "action-createtalk": "gawé kaca wicara anyar", "action-createaccount": "gawé akun panganggo iki", - "action-minoredit": "nandhani minangka suntingan sithik", + "action-minoredit": "tandhani iki minangka besutan cilik", "action-move": "alihna kaca iki", "action-move-subpages": "mindahaké kaca iki, lan kabèh anak-kacané", - "action-move-rootuserpages": "mindhahaké kaca utama panganggo", + "action-move-rootuserpages": "ngalih kaca panganggo oyod", "action-movefile": "pindhahna berkas iki", "action-upload": "ngunggahaké berkas iki", "action-reupload": "nindhih berkas sing wis ana", @@ -1055,7 +1089,7 @@ "action-undelete": "mbatalaké pambusakan kaca iki", "action-suppressrevision": "ninjo lan mbalèkaké revisi sing didhelikaké iki", "action-suppressionlog": "mirsani log pribadi iki", - "action-block": "blok panganggo iki saka panyuntingan", + "action-block": "malang panganggo iki mbesut", "action-protect": "owahi tataran pangreksan kaca iki", "action-rollback": "gelis mbalèkaké suntingané panganggo pungkasan nèng sawijining saca", "action-import": "impor kaca iki saka wiki liya", @@ -1074,57 +1108,61 @@ "action-editmyprivateinfo": "owahi informasi pribadi sampeyan", "nchanges": "$1 {{PLURAL:$1|pangowahan|owah-owahan}}", "enhancedrc-since-last-visit": "$1 {{PLURAL:$1|saka keri dhewe mrene}}", - "enhancedrc-history": "sajarah", - "recentchanges": "Owah-owahan", + "enhancedrc-history": "babad", + "recentchanges": "Owahan pungkasan", "recentchanges-legend": "Pilihan owah-owahan pungkasan", "recentchanges-summary": "Runutna owah-owahan pungkasan ing wiki iki ing kaca iki.", "recentchanges-noresult": "Ora ana pangowahan ing periode sing diwiwiti kriteria iki.", "recentchanges-feed-description": "Urutna owah-owahan anyar ing wiki ing ''feed'' iki.", - "recentchanges-label-newpage": "Suntingan iki gawé kaca anyar", - "recentchanges-label-minor": "Iki suntingan sithik", - "recentchanges-label-bot": "Suntingan iki diayahi déning bot", - "recentchanges-label-unpatrolled": "Suntingan iki durung dipatroli", + "recentchanges-label-newpage": "Besutan iki nggawé kaca anyar", + "recentchanges-label-minor": "Iki besutan cilik", + "recentchanges-label-bot": "Besutan iki diayahi bot", + "recentchanges-label-unpatrolled": "Besutan iki durung kapatroli", "recentchanges-label-plusminus": "Agengipun kaca sampun dipunowahi samekaten.", "recentchanges-legend-heading": "Katrangan:", "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (dhelengen uga: [[Special:NewPages|daftar kaca anyar]])", "recentchanges-legend-plusminus": "(''±123'')", "rcnotefrom": "Ing ngisor iki owah-owahan wiwit $2 (kapacak nganti $1 owah-owahan).", - "rclistfrom": "Saiki nuduhaké owah-owahan wiwit tanggal $3 $2", - "rcshowhideminor": "$1 suntingan sithik", - "rcshowhideminor-hide": "Singidaken", + "rclistfrom": "Tuduhaké owah-owahan anyar kawit $2, $3", + "rcshowhideminor": "$1 besutan cilik", + "rcshowhideminor-show": "Tuduhaké", + "rcshowhideminor-hide": "Dhelikaké", "rcshowhidebots": "$1 bot", - "rcshowhidebots-show": "Tedahaken", - "rcshowhideliu": "$1 panganggo sing wis ndaptar", - "rcshowhideliu-hide": "Singidaken", + "rcshowhidebots-show": "Tuduhaké", + "rcshowhidebots-hide": "Dhelikaké", + "rcshowhideliu": "$1 panganggo karégister", + "rcshowhideliu-hide": "Dhelikaké", "rcshowhideanons": "$1 panganggo anonim", - "rcshowhideanons-hide": "Singidaken", - "rcshowhidepatr": "$1 suntingan sing dipatroli", - "rcshowhidemine": "$1 suntinganku", - "rcshowhidemine-hide": "Singidaken", + "rcshowhideanons-show": "Tuduhaké", + "rcshowhideanons-hide": "Dhelikaké", + "rcshowhidepatr": "$1 besutan awasan", + "rcshowhidemine": "$1 besutanku", + "rcshowhidemine-show": "Tuduhaké", + "rcshowhidemine-hide": "Dhelikaké", "rclinks": "Tuduhna owah-owahan pungkasan $1 ing $2 dina pungkasan iki.
$3", - "diff": "béda", - "hist": "sajarah", - "hide": "Delikna", - "show": "Tuduhna", - "minoreditletter": "s", + "diff": "béd", + "hist": "saj", + "hide": "Dhelikaké", + "show": "Tuduhaké", + "minoreditletter": "c", "newpageletter": "A", "boteditletter": "b", "number_of_watching_users_pageview": "[$1 {{PLURAL:$1|cacahé sing ngawasi|cacahé sing ngawasi}}]", "rc_categories": "Watesana nganti kategori (dipisah karo \"|\")", "rc_categories_any": "Apa waé", - "rc-change-size-new": "$1 {{PLURAL:$1|bita|bita}} sakwisé diowah", + "rc-change-size-new": "$1 {{PLURAL:$1|bét|bét}} sabubaré diowah", "newsectionsummary": "/* $1 */ bagéyan anyar", "rc-enhanced-expand": "Tuduhaké princèn", "rc-enhanced-hide": "Dhelikaké princèn", - "rc-old-title": "wigatiné digawé minangka \"$1\"", - "recentchangeslinked": "Pangowahan sing terkait", + "rc-old-title": "kawitané digawé minangka \"$1\"", + "recentchangeslinked": "Owahan magepokan", "recentchangeslinked-feed": "Pangowahan sing terkait", - "recentchangeslinked-toolbox": "Pangowahan sing terkait", + "recentchangeslinked-toolbox": "Owahan magepokan", "recentchangeslinked-title": "Owah-owahan sing ana gandhèngané karo \"$1\"", "recentchangeslinked-summary": "Kaca astaméwa (kaca kusus) iki mènèhi daftar owah-owahan pungkasan ing kaca-kaca sing kagandhèng (utawa anggota sawijining kateogri). Kaca sing [[Special:Watchlist|panjenengan awasi]] ditandhani '''kandel'''.", "recentchangeslinked-page": "Jeneng kaca:", "recentchangeslinked-to": "Nuduhaké owah-owahan menyang kaca sing disambung menyang kaca-kaca iki", - "upload": "Unggah", + "upload": "Unggah barkas", "uploadbtn": "Unggahna berkas", "reuploaddesc": "Bali ing formulir pamotan", "upload-tryagain": "Kirim déskripsi berkas sing wis diowah", @@ -1141,7 +1179,7 @@ "uploadlogpage": "Log pangunggahan", "uploadlogpagetext": "Ing ngisor iki kapacak log pangunggahan berkas sing anyar dhéwé.\nMangga mirsani [[Special:NewFiles|galeri berkas-berkas anyar]] kanggo pratélan visual.", "filename": "Jeneng berkas", - "filedesc": "Ringkesan", + "filedesc": "Tingkesan", "fileuploadsummary": "Ringkesan:", "filereuploadsummary": "Owah-owahan berkas:", "filestatus": "Status hak cipta", @@ -1282,14 +1320,14 @@ "upload-curl-error28": "Pangunggahan ngliwati wektu", "upload-curl-error28-text": "Situsé kesuwèn sadurungé réaksi.\nMangga dipriksa menawa situsé aktif, nunggu sedélok lan coba manèh.\nMbok-menawa panjenengan bisa nyoba manèh ing wektu sing luwih longgar.", "license": "Jenis lisènsi:", - "license-header": "Jinis lisènsi", + "license-header": "Pamalilah", "nolicense": "Durung ana sing dipilih", "license-nopreview": "(Pratayang ora sumedya)", "upload_source_url": " (sawijining URL absah sing bisa diaksès publik)", "upload_source_file": " (sawijining berkas ing komputeré panjenengan)", - "listfiles-summary": "Kaca astamiwa nudhuhaké kabèh berkas kaunggah.\nYèn disaring déning panganggo, namung berkas mawa vèrsi paling anyar waé sing bakal katon.", + "listfiles-summary": "Kaca mirunggan iki nuduhaké kabèh barkas sing kaunggah.", "listfiles_search_for": "Golèk jeneng gambar:", - "imgfile": "gambar", + "imgfile": "barkas", "listfiles": "Daftar gambar", "listfiles_thumb": "Gambar mini", "listfiles_date": "Tanggal", @@ -1302,21 +1340,21 @@ "listfiles-latestversion": "Versi saiki", "listfiles-latestversion-yes": "Iya", "listfiles-latestversion-no": "Ora", - "file-anchor-link": "Gambar", - "filehist": "Sajarah berkas", + "file-anchor-link": "Barkas", + "filehist": "Babading barkas", "filehist-help": "Klik ing tanggal/wektu kanggo deleng berkas iki ing wektu iku.", "filehist-deleteall": "busaken kabèh", "filehist-deleteone": "busaken iki", "filehist-revert": "balèkna", - "filehist-current": "saiki iki", - "filehist-datetime": "Tanggal/Wektu", + "filehist-current": "saiki", + "filehist-datetime": "Surya/Tabuh", "filehist-thumb": "Miniatur (''thumbnail'')", "filehist-thumbtext": "Miniatur kanggo versi ing $1", "filehist-nothumb": "Ora ana miniatur", "filehist-user": "Panganggo", "filehist-dimensions": "Ukuran", "filehist-filesize": "Gedhené berkas", - "filehist-comment": "Komentar", + "filehist-comment": "Tanggapan", "imagelinks": "Panganggoan berkas", "linkstoimage": "Kaca-kaca sing kapacak iki duwé {{PLURAL:$1|pranala|$1 pranala}} menyang berkas iki:", "linkstoimage-more": "Luwih saka $1 {{PLURAL:$1|kaca|kaca-kaca}} nduwèni pranala menyang berkas iki.\nDhaftar ing ngisor nuduhaké {{PLURAL:$1|kaca pisanan kanthi pranala langsung|$1 kaca kanthi pranala langsung}} menyang berkas iki.\n[[Special:WhatLinksHere/$2|dhaftar pepak]] uga ana.", @@ -1368,7 +1406,7 @@ "unusedtemplates": "Cithakan sing ora dienggo", "unusedtemplatestext": "Kaca iki ngamot kabèh kaca ing bilik jeneng {{ns:template}} sing ora dianggo ing kaca ngendi waé.\nPriksanen dhisik pranala-pranala menyang cithakan iki sadurungé mbusak.", "unusedtemplateswlh": "pranala liya-liyané", - "randompage": "Sembarang kaca", + "randompage": "Waton kaca", "randompage-nopages": "Ora ana kaca ing {{PLURAL:$2||}}bilik jeneng iki:$1.", "randomincategory": "Sembarang kaca ing kategori", "randomincategory-invalidcategory": "\"$1\" dudu jeneng kategori sing apik.", @@ -1378,7 +1416,7 @@ "randomredirect-nopages": "Ora ana pangalihan ing bilik jeneng \"$1\".", "statistics": "Statistik", "statistics-header-pages": "Statistik kaca", - "statistics-header-edits": "Statistik panyuntingan", + "statistics-header-edits": "Pétungan besutan", "statistics-header-users": "Statistik panganggo", "statistics-header-hooks": "Statistik liya", "statistics-articles": "Kaca-kaca isi", @@ -1392,7 +1430,7 @@ "statistics-users-active-desc": "Panganggo sing ngayahi aktivitas jroning {{PLURAL:$1|dia|$1 dina}} pungkasan", "pageswithprop": "Kaca-kaca mawa ubarampé", "pageswithprop-legend": "Kaca-kaca mawa ubarampé", - "pageswithprop-text": "Kaca iki njlèntèhaké kaca-kaca sing nganggo ubarampé astamiwa.", + "pageswithprop-text": "Kaca iki mratélakaké kaca-kaca sing nganggo deduwèkaning kaca tinamtu.", "pageswithprop-prop": "Arané ubarampé:", "pageswithprop-submit": "Nuju", "pageswithprop-prophidden-long": "nilai properti teks dawa didhelikake ($1 kilobita)", @@ -1404,18 +1442,18 @@ "double-redirect-fixer": "Révisi pangalihan", "brokenredirects": "Pangalihan rusak", "brokenredirectstext": "Pengalihan ing ngisor iki tumuju menyang kaca sing ora ana:", - "brokenredirects-edit": "sunting", + "brokenredirects-edit": "besut", "brokenredirects-delete": "busak", "withoutinterwiki": "Kaca tanpa pranala antarbasa", "withoutinterwiki-summary": "Kaca-kaca iki ora nduwé pranala menyang vèrsi ing basa liyané:", "withoutinterwiki-legend": "Préfiks", "withoutinterwiki-submit": "Tuduhna", "fewestrevisions": "Artikel mawa owah-owahan sithik dhéwé", - "nbytes": "$1 {{PLURAL:$1|bita|bita}}", + "nbytes": "$1 {{PLURAL:$1|bét|bét}}", "ncategories": "$1 {{PLURAL:$1|kategori|kategori}}", "ninterwikis": "$1 {{PLURAL:$1|interwiki|interwiki}}", "nlinks": "$1 {{PLURAL:$1|pranala|pranala}}", - "nmembers": "$1 {{PLURAL:$1|anggota|anggota}}", + "nmembers": "$1 {{PLURAL:$1|isi}}", "nmemberschanged": "$1 → $2 {{PLURAL:$2|anggota|anggota}}", "nrevisions": "$1 {{PLURAL:$1|revisi|revisi}}", "nimagelinks": "Kanggo nèng {{PLURAL:$1|kaca|kaca}}", @@ -1445,7 +1483,7 @@ "mostrevisions": "Kaca mawa pangowahan sing akèh dhéwé", "prefixindex": "Kabèh kaca mawa ater-ater", "prefixindex-namespace": "Kabèh kaca mawa ater-ater (bilik jeneng $1)", - "prefixindex-strip": "Hapus awalan saking daftar", + "prefixindex-strip": "Busak ater-ater saka pratélan", "shortpages": "Kaca cendhak", "longpages": "Kaca dawa", "deadendpages": "Kaca-kaca buntu (tanpa pranala)", @@ -1461,7 +1499,7 @@ "listusers-editsonly": "Tampilaké mung panganggo sing nduwèni kontribusi", "listusers-creationsort": "Urut miturut tanggal digawé", "listusers-desc": "Urutna mudhun", - "usereditcount": "$1 {{PLURAL:$1|suntingan|suntingan}}", + "usereditcount": "$1 {{PLURAL:$1|besutan|besutan}}", "usercreated": "{{GENDER:$3|Digawé}} $1 wanci $2", "newpages": "Kaca anyar", "newpages-username": "Asma panganggo:", @@ -1475,7 +1513,7 @@ "nopagetitle": "Kaca tujuan ora ditemokaké", "nopagetext": "Kaca sing panjenengan tuju ora ditemokaké.", "pager-newer-n": "{{PLURAL:$1|1 luwih anyar|$1 luwih anyar}}", - "pager-older-n": "{{PLURAL:$1|1 luwih lawas|$1 luwih lawas}}", + "pager-older-n": "{{PLURAL:$1|1 sing luwih lawas|$1 sing luwih lawas}}", "suppress": "Pangawas (''oversight'')", "querypage-disabled": "Kaca kusus iki dipatèni kanggo alesan kinerja.", "apisandbox": "Kothak wedhi API", @@ -1488,12 +1526,13 @@ "apisandbox-request-url-label": "URL dikarepaké:", "apisandbox-request-time": "Suwéné panjalukan: $1", "booksources": "Sumber buku", - "booksources-search-legend": "Golèk ing sumber buku", + "booksources-search-legend": "Golèk sumber buku", + "booksources-search": "Golèk", "booksources-text": "Ing ngisor iki kapacak daftar pranala menyang situs liyané sing ngadol buku anyar lan bekas, lan mbok-menawa uga ndarbèni informasi sabanjuré ngenani buku-buku sing lagi panjenengan golèki:", "booksources-invalid-isbn": "ISBN sing diwènèhaké katonané ora valid; priksa kasalahan penyalinan saka sumber asli.", "specialloguserlabel": "Panampil:", "speciallogtitlelabel": "Patujon (judhul utawa panganggo) :", - "log": "Log", + "log": "Cathetan", "all-logs-page": "Kabèh log publik", "alllogstext": "Gabungan tampilam kabèh log sing ana ing {{SITENAME}}.\nPanjenengan bisa mbatesi tampilan kanthi milih jinis log, jeneng panganggo (sènsitif aksara gedhé/cilik), utawa kaca sing magepokan (uga sènsitif aksara gedhé/cilik).", "logempty": "Ora ditemokaké èntri log sing pas.", @@ -1504,9 +1543,9 @@ "prevpage": "Kaca sadurungé ($1)", "allpagesfrom": "Kaca-kaca kawiwitan kanthi:", "allpagesto": "Tampilaké kaca dipungkasi ing:", - "allarticles": "Kabèh artikel", + "allarticles": "Kabèh kaca", "allinnamespace": "Kabeh kaca ($1 namespace)", - "allpagessubmit": "Madosi", + "allpagessubmit": "Menyang", "allpagesprefix": "Kapacak kaca-kaca ingkang mawi ater-ater:", "allpagesbadtitle": "Irah-irahan (judhul) ingkang dipun-gunaaken boten sah utawi nganggé ater-ater (awalan) antar-basa utawi antar-wiki. Irah-irahan punika saged ugi nganggé setunggal aksara utawi luwih ingkang boten saged kagunaaken dados irah-irahan.", "allpages-bad-ns": "{{SITENAME}} ora duwé bilik nama \"$1\".", @@ -1514,14 +1553,12 @@ "cachedspecial-viewing-cached-ttl": "Sampéyan lagi ndelok vèrsi cadhangan saka kaca iki, sing bisa dadi lawasé wis $1.", "cachedspecial-viewing-cached-ts": "Sampéyan lagi ndelok vèrsi cadhangan saka kaca iki, sing bisa dadi ora padha karo kasunyatan.", "cachedspecial-refresh-now": "Delok sing paling anyar.", - "categories": "Daftar kategori", + "categories": "Kategori", "categoriespagetext": "{{PLURAL:$1|kategori ing ngisor iki ngandhut|kategori ing ngisor iki ngandhut}} kaca utawa media.\n[[Special:UnusedCategories|Kategori sing ora dianggo]] ora ditampilaké ing kéné.\nDeleng uga [[Special:WantedCategories|kategori sing diperlokaké]].", "categoriesfrom": "Tampilaké kategori-kategori diwiwiti saka:", - "special-categories-sort-count": "urutna miturut angka", - "special-categories-sort-abc": "urutna miturut abjad", - "deletedcontributions": "Kontribusi panganggo sing dibusak", - "deletedcontributions-title": "Kontribusi panganggo sing dibusak", - "sp-deletedcontributions-contribs": "kontribusi", + "deletedcontributions": "Sumbanganing panganggo sing dibusak", + "deletedcontributions-title": "Sumbanganing panganggo sing dibusak", + "sp-deletedcontributions-contribs": "sumbangan", "linksearch": "Golèkan pranala njaba", "linksearch-pat": "Pola panggolèkan:", "linksearch-ns": "Bilik nama:", @@ -1594,7 +1631,7 @@ "addedwatchtext": "Kaca \"[[:$1]]\" wis ditambahaké menyang [[Special:Watchlist|daftar pangawasan]].\nOwah-owahan sing dumadi ing tembé ing kaca iku lan kaca dhiskusi sing kagandhèng, bakal dipacak ing kéné.", "removewatch": "Singkiraké saka daptar pangawasan", "removedwatchtext": "Kaca \"[[:$1]]\" wis dibusak saka [[Special:Watchlist|daftar pangawasan]].", - "watch": "tutana", + "watch": "Awati", "watchthispage": "Periksa kaca iki", "unwatch": "Ora usah ngawasaké manèh", "unwatchthispage": "Batalna olèhé ngawasi kaca iki", @@ -1639,7 +1676,7 @@ "actioncomplete": "Proses tuntas", "actionfailed": "Tindakan gagal", "deletedtext": "\"$1\" sampun kabusak. Coba pirsani $2 kanggé log paling énggal kaca ingkang kabusak.", - "dellogpage": "Cathetan pambusakan", + "dellogpage": "Cathetan busakan", "dellogpagetext": "Ing ngisor iki kapacak log pambusakan kaca sing anyar dhéwé.", "deletionlog": "Cathetan sing dibusak", "reverted": "Dibalèkaké ing revisi sadurungé", @@ -1651,9 +1688,9 @@ "delete-toobig": "Kaca iki ndarbèni sajarah panyuntingan sing dawa, yaiku ngluwihi $1 {{PLURAL:$1|revision|révisi}}.\nPambusakan kaca sing kaya mangkono mau wis ora diparengaké kanggo menggak anané karusakan ing {{SITENAME}}.", "delete-warning-toobig": "Kaca iki duwé sajarah panyuntingan sing dawa, luwih saka $1 {{PLURAL:$1|révisi|révisi}}.\nMbusak kaca iki bisa ngrusak operasi basis data ing {{SITENAME}};\nkudu ngati-ati.", "deleting-backlinks-warning": "'''Awas:''' Kaca liyane mungkin ana sing nautake ing kaca sing arep sampeyan busak.", - "rollback": "Mbalèkaké suntingan", - "rollbacklink": "balèaké", - "rollbacklinkcount": "balèkaké $1 {{PLURAL:$1|suntingan|suntingan}}", + "rollback": "Wurungaké besutan", + "rollbacklink": "balèkaké", + "rollbacklinkcount": "balèkaké $1 {{PLURAL:$1|besutan|besutan}}", "rollbacklinkcount-morethan": "balèkaké luwih saka $1 {{PLURAL:$1|suntingan|suntingan}}", "rollbackfailed": "Pambalèkan gagal dilakoni", "cantrollback": "Ora bisa mbalèkaké suntingan; panganggo pungkasan iku siji-sijiné penulis artikel iki.", @@ -1664,7 +1701,7 @@ "rollback-success": "Suntingan dibalèkaké déning $1;\ndiowahi bali menyang vèrsi pungkasan déning $2.", "sessionfailure-title": "Sèsi gagal", "sessionfailure": "Katoné ana masalah karo sèsi log panjenengan; log panjenengan wis dibatalaké kanggo nyegah pambajakan. Mangga mencèt tombol \"back\" lan unggahaké manèh kaca sadurungé mlebu log, lan coba manèh.", - "protectlogpage": "Log pangreksan", + "protectlogpage": "Cathetan pangreksan", "protectlogtext": "Ngisor iki daptar owahan saka panjagan kaca.\nDelok [[Special:ProtectedPages|daptar kaca sing dijaga]] kanggo daptar panjagan kaca paling anyar.", "protectedarticle": "ngreksa \"[[$1]]\"", "modifiedarticleprotection": "ngowahi tingkat pangreksan \"[[$1]]\"", @@ -1711,7 +1748,7 @@ "minimum-size": "Ukuran minimum", "maximum-size": "Ukuran maksimum:", "pagesize": "(bita)", - "restriction-edit": "Panyuntingan", + "restriction-edit": "Besut", "restriction-move": "Pamindhahan", "restriction-create": "Gawé", "restriction-upload": "Unggah", @@ -1757,42 +1794,43 @@ "undelete-error-long": "Ana kaluputan nalika mbatalaké pambusakan berkas:\n\n$1", "undelete-show-file-confirm": "Apa panjenengan yakin arep mirsani révisi berkas \"$1\" sing wis kabusak ing $2 jam $3?", "undelete-show-file-submit": "Ya", - "namespace": "Bilik nama (bilik jeneng):", + "namespace": "Lowah aran:", "invert": "Balèkna pilihan", "tooltip-invert": "Centhang kothak iki kanggo ndhelikaké owahan saka kaca-kaca nèng njero bilik jeneng kapilih (lan bilik jeneng kakait yèn dicenthang)", "namespace_association": "Bilik jeneng kakait", "tooltip-namespace_association": "Centhang kothak iki kanggo nglebokaké uga bilik jeneng gumenan utawa subyèk sing kakait karo bilik jeneng kapilih", - "blanknamespace": "(Utama)", + "blanknamespace": "(Pokok)", "contributions": "Sumbangan {{GENDER:$1|panganggo}}", - "contributions-title": "Kontribusi panganggo kanggo $1", - "mycontris": "Kontribusi", + "contributions-title": "Sumbanganing panganggo $1", + "mycontris": "Sumbangan", + "anoncontribs": "Sumbangan", "contribsub2": "Kanggo {{GENDER:$3|$1}} ($2)", "nocontribs": "Ora ditemokaké owah-owahan sing cocog karo kritéria kasebut iku.", "uctop": "(saiki)", - "month": "Wiwit sasi (lan sadurungé):", + "month": "Wiwit wulan (lan sadurungé):", "year": "Wiwit taun (lan sadurungé):", "sp-contributions-newbies": "Namung panganggo-panganggo anyar", "sp-contributions-newbies-sub": "Kanggo panganggo anyar", - "sp-contributions-newbies-title": "Kontribusi panganggo anyar", + "sp-contributions-newbies-title": "Sumbanganing para panganggo anyar", "sp-contributions-blocklog": "Log pemblokiran", - "sp-contributions-deleted": "kontribusi panganggo sing dibusak", + "sp-contributions-deleted": "sumbanganing panganggo sing dibusak", "sp-contributions-uploads": "unggahan", "sp-contributions-logs": "log", "sp-contributions-talk": "wicara", "sp-contributions-userrights": "pengaturan hak panganggo", "sp-contributions-blocked-notice": "Panganggo iki lagi diblokir.\nÈntri log blokiran pungkasan sumadhiya nèng ngisor kanggo rujukan:", "sp-contributions-blocked-notice-anon": "Alamat IP iki lagi diblokir.\nÈntri log blokiran pungkasan sumadhiya nèng ngisor kanggo rujukan:", - "sp-contributions-search": "Golèk kontribusi", + "sp-contributions-search": "Golèk sumbangan", "sp-contributions-username": "Alamat IP utawa jeneng panganggo:", "sp-contributions-toponly": "Tuduhaké was suntingan saka benahan pungkasan", "sp-contributions-submit": "Golèk", - "whatlinkshere": "Pranala balik", - "whatlinkshere-title": "Kaca-kaca sing duwé pranala menyang \"$1\"", + "whatlinkshere": "Sing nggayut mréné", + "whatlinkshere-title": "Kaca mawa pranala nggayut \"$1\"", "whatlinkshere-page": "Kaca:", "linkshere": "Kaca-kaca iki nduwé pranala menyang '''[[:$1]]''':", "nolinkshere": "Ora ana kaca sing nduwé pranala menyang '''[[:$1]]'''.", "nolinkshere-ns": " Ora ana kaca sing nduwé pranala menyang '''[[:$1]]''' ing bilik jeneng sing kapilih.", - "isredirect": "kaca pangalihan", + "isredirect": "kaca lihlihan", "istemplate": "karo cithakan", "isimage": "pranala berkas", "whatlinkshere-prev": "{{PLURAL:$1|sadurungé|$1 sadurungé}}", @@ -1802,7 +1840,7 @@ "whatlinkshere-hidetrans": "$1 transklusi", "whatlinkshere-hidelinks": "pranala-pranala $1", "whatlinkshere-hideimages": "$1 pranala berkas", - "whatlinkshere-filters": "Filter-filter", + "whatlinkshere-filters": "Panyaringan", "autoblockid": "Blokir otomatis #$1", "block": "Blokir panganggo", "unblock": "Uculaké blokirané panganggo", @@ -1866,7 +1904,7 @@ "blocklist-nousertalk": "ora éntuk nyunting kaca gunemané dhéwé", "ipblocklist-empty": "Daftar pamblokiran kosong.", "ipblocklist-no-results": "alamat IP utawa panganggo sing disuwun ora diblokir.", - "blocklink": "blokir", + "blocklink": "palang", "unblocklink": "jabel blokir", "change-blocklink": "owahi blokir", "contribslink": "sumbangan", @@ -1949,7 +1987,7 @@ "movepage-page-moved": "Kaca $1 wis dipindhah menyang $2.", "movepage-page-unmoved": "Kaca $1 ora bisa dialihaké menyang $2.", "movepage-max-pages": "Paling akèh $1 {{PLURAL:$1|kaca|kaca}} wis dialihaké lan ora ana manèh sing bakal dialihaké sacara otomatis.", - "movelogpage": "Log pamindhahan", + "movelogpage": "Cathetan lihlihan", "movelogpagetext": "Ing ngisor iki kapacak log pangalihan kaca.", "movesubpage": "{{PLURAL:$1|Anak-kaca|Anak-kaca}}", "movesubpagetext": "Kaca iki nduwèni $1 {{PLURAL:$1|anak-kaca|anak-kaca}} kaya kapacak ing ngisor.", @@ -1989,7 +2027,7 @@ "export-addns": "Tambah", "export-download": "Simpen minangka berkas", "export-templates": "Kalebu cithakan-cithakan", - "export-pagelinks": "Katutna kaca kagandhèng nganti jeroné:", + "export-pagelinks": "Lebokaké kaca sing kagayut nyang jeroning:", "allmessages": "Kabèh laporan sistém", "allmessagesname": "Asma (jeneng)", "allmessagesdefault": "Tèks baku", @@ -2004,7 +2042,7 @@ "allmessages-prefix": "Saring nganggo ater-ater:", "allmessages-language": "Basa:", "allmessages-filter-submit": "Tumuju menyang", - "thumbnail-more": "Gedhèkna", + "thumbnail-more": "Gedhèkaké", "filemissing": "Berkas ora ditemokaké", "thumbnail_error": "Kaluputan nalika nggawé gambar cilik (''thumbnail''): $1", "thumbnail_error_remote": "Peringatan kasalahan saka $1:\n$2", @@ -2061,68 +2099,64 @@ "import-logentry-upload-detail": "$1 {{PLURAL:$1|révisi|révisi}}", "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|révisi}} saka $2", "javascripttest": "Panjajalan JavaScript", - "javascripttest-pagetext-noframework": "Kaca iki disadhiyakaké kanggo nglakokaké panjajalan JavaScript.", - "javascripttest-pagetext-unknownframework": "Rangka kerja panjajalan ora dingertèni \"$1\".", - "javascripttest-pagetext-frameworks": "Mangga pilih sawiji saka rangka kerja panjajalan iki: $1", - "javascripttest-pagetext-skins": "Pilih kulit kanggo nglakokaké panjajalan mawa:", "javascripttest-qunit-intro": "Delok [dhokumèntasi panjajalan $1] nèng mediawiki.org.", - "tooltip-pt-userpage": "Kaca panganggo panjenengan", + "tooltip-pt-userpage": "Kaca {{GENDER:|panganggo sampéyan}}", "tooltip-pt-anonuserpage": "Kaca panganggo IP panjenengan", - "tooltip-pt-mytalk": "Kaca wicara panjenengan", + "tooltip-pt-mytalk": "Kaca paguneman {{GENDER:|sampéyan}}", "tooltip-pt-anontalk": "Dhiskusi perkara suntingan saka alamat IP iki", - "tooltip-pt-preferences": "Préferènsiku", + "tooltip-pt-preferences": "Pamiji {{GENDER:|sampéyan}}", "tooltip-pt-watchlist": "Daftar kaca sing tak-awasi.", - "tooltip-pt-mycontris": "Daftar kontribusi panjenengan", - "tooltip-pt-login": "Panjenengan diaturi mlebu log, nanging ora dikudokaké.", - "tooltip-pt-logout": "Log metu (oncat)", - "tooltip-pt-createaccount": "Panjenengan kasuwun damel akun lan mlebet log; ananging bab punika boten wajib", - "tooltip-ca-talk": "Dhiskusi perkara isi", - "tooltip-ca-edit": "Sunting kaca iki. Nganggoa tombol pratayang sadurungé nyimpen.", - "tooltip-ca-addsection": "Miwiti bagèyan anyar", - "tooltip-ca-viewsource": "Kaca iki direksa. Panjenengan namung bisa mirsani sumberé.", - "tooltip-ca-history": "Vèrsi-vèrsi sadurungé saka kaca iki.", + "tooltip-pt-mycontris": "Pratélaning sumbanganing {{GENDER:|sampéyan}}", + "tooltip-pt-login": "Sampéyan prayogané mlebu masiya ora kudu", + "tooltip-pt-logout": "Metu", + "tooltip-pt-createaccount": "Sampéyan prayogané gawé akun lan mlebu masiya ora kudu", + "tooltip-ca-talk": "Parembuganing kaca isi", + "tooltip-ca-edit": "Besut kaca iki", + "tooltip-ca-addsection": "Miwiti pérangan anyar", + "tooltip-ca-viewsource": "Kaca iki direksa. \nSampéyan bisa ndeleng sumberé", + "tooltip-ca-history": "Owahaning kaca iki sadurungé", "tooltip-ca-protect": "Reksa kaca iki", "tooltip-ca-unprotect": "Ganti panjagan kaca iki", "tooltip-ca-delete": "Busak kaca iki", "tooltip-ca-undelete": "Balèkna suntingan ing kaca iki sadurungé kaca iki dibusak", - "tooltip-ca-move": "Pindhahen kaca iki", - "tooltip-ca-watch": "Tambahna kaca iki ing daftar pangawasan panjenengan", + "tooltip-ca-move": "Aliha kaca iki", + "tooltip-ca-watch": "Tambahaké kaca iki nyang pawawangan sapéyan", "tooltip-ca-unwatch": "Busak kaca iki saka daftar pangawasan panjenengan", - "tooltip-search": "Golek ing situs {{SITENAME}} iki", - "tooltip-search-go": "Lungaa ing kaca mawa jeneng persis iki, yèn anaa", - "tooltip-search-fulltext": "Golèk kaca sing duwé tèks kaya mangkéné", - "tooltip-p-logo": "Kaca Utama", - "tooltip-n-mainpage": "Nuwèni Kaca Utama", - "tooltip-n-mainpage-description": "Pirsani Kaca Utama", - "tooltip-n-portal": "Perkara proyèk, apa sing bisa panjenengan gayuh, lan ing ngendi golèk apa-apa", - "tooltip-n-currentevents": "Temokna informasi perkara prastawa anyar", - "tooltip-n-recentchanges": "Daftar owah-owahan anyar ing wiki.", - "tooltip-n-randompage": "Tuduhna sembarang kaca", - "tooltip-n-help": "Papan kanggo golèk pitulung.", - "tooltip-t-whatlinkshere": "Daftar kabèh kaca wiki sing nyambung menyang kaca iki", - "tooltip-t-recentchangeslinked": "Owah-owahan pungkasan kaca-kaca sing duwé pranala menyang kaca iki", + "tooltip-search": "Golèk nyang {{SITENAME}}", + "tooltip-search-go": "Jujug kaca asesirah persis mangkéné yèn ana", + "tooltip-search-fulltext": "Golèk kaca isi tulisan kaya mangkéné", + "tooltip-p-logo": "Menyang kaca pokok", + "tooltip-n-mainpage": "Menyang kaca pokok", + "tooltip-n-mainpage-description": "Menyang kaca pokok", + "tooltip-n-portal": "Bab proyèk, apa sing bisa sampéyan garap, ana ing endi saprelu golèk apa-apa", + "tooltip-n-currentevents": "Temokaké katerangan latar wuri saka kadadéan saiki", + "tooltip-n-recentchanges": "Pratélaning owah-owahan pungkasan sajeroning wiki.", + "tooltip-n-randompage": "Mot waton kaca", + "tooltip-n-help": "Papan kanggo golèk weruh", + "tooltip-t-whatlinkshere": "Pratélaning kabèh kaca wiki sing nggayut mréné", + "tooltip-t-recentchangeslinked": "Owah-owahan anyar saka kaca-kaca sing nggayut kaca iki", "tooltip-feed-rss": "''RSS feed'' kanggo kaca iki", "tooltip-feed-atom": "''Atom feed'' kanggo kaca iki", - "tooltip-t-contributions": "Deleng daftar kontribusi panganggo iki", + "tooltip-t-contributions": "Pratélaning sumbangan {{GENDER:$1|panganggo iki}}", "tooltip-t-emailuser": "Kirimna e-mail menyang panganggo iki", - "tooltip-t-upload": "Ngunggah gambar utawa berkas média", - "tooltip-t-specialpages": "Daftar kabèh kaca astaméwa (kaca kusus)", - "tooltip-t-print": "Vèrsi cithak kaca iki", - "tooltip-t-permalink": "Pranala permanèn kanggo révisi kaca iki", - "tooltip-ca-nstab-main": "Ndeleng kaca artikel", + "tooltip-t-upload": "Unggah barkas", + "tooltip-t-specialpages": "Pratélaning kabèh kaca mirunggan", + "tooltip-t-print": "Cara cithakan kaca iki", + "tooltip-t-permalink": "Pranala permanèn saka owahan iki", + "tooltip-ca-nstab-main": "Deleng kaca isi", "tooltip-ca-nstab-user": "Deleng kaca panganggo", "tooltip-ca-nstab-media": "Ndeleng kaca média", - "tooltip-ca-nstab-special": "Iki kaca astaméwa utawa kaca kusus sing ora bisa disunting", + "tooltip-ca-nstab-special": "Iki kaca mirunggan lan ora bisa dibesut", "tooltip-ca-nstab-project": "Deleng kaca proyèk", - "tooltip-ca-nstab-image": "Deleng kaca berkas", + "tooltip-ca-nstab-image": "Deleng kaca barkas", "tooltip-ca-nstab-mediawiki": "Ndeleng pesenan sistém", "tooltip-ca-nstab-template": "Deleng cithakan", "tooltip-ca-nstab-help": "Mirsani kaca pitulung", "tooltip-ca-nstab-category": "Deleng kaca kategori", - "tooltip-minoredit": "Tandhanana minangka suntingan cilik", - "tooltip-save": "Simpen owah-owahan panjenengan", - "tooltip-preview": "Pratayang owah-owahan panjenengan, tulung nganggo fungsi iki sadurungé nyimpen!", - "tooltip-diff": "Tuduhna owah-owahan panjenengan ing tèks iki.", + "tooltip-minoredit": "Tandhani iki minangka besutan cilik", + "tooltip-save": "Simpen owah-owahaning sampéyan", + "tooltip-preview": "Prawuryan owah-owahaning sampéyan. Anggoa cara iki sadurungé nyimpen.", + "tooltip-diff": "Tuduhaké owah-owahan endi sing sampéyan gawé tumrap tulisan iki", "tooltip-compareselectedversions": "Delengen prabédan antara rong vèrsi kaca iki sing dipilih.", "tooltip-watch": "Tambahna kaca iki ing daftar pangawasan panjenengan", "tooltip-watchlistedit-normal-submit": "Singkiraké judhul", @@ -2132,7 +2166,7 @@ "tooltip-rollback": "Mbalèkaké suntingan-suntingan ing kaca iki menyang kontributor pungkasan nganggo sak klik.", "tooltip-undo": "Mbalèkaké révisi iki lan mbukak kothak panyuntingan jroning mode pratayang. Wènèhi kasempatan kanggo ngisi alesan ing kothak ringkesan.", "tooltip-preferences-save": "Simpen préperensi", - "tooltip-summary": "Lebokna ringkesan cendhèk", + "tooltip-summary": "Isi tingkesan cendhak", "anonymous": "{{PLURAL:$1|Panganggo|panganggo}} anon ing {{SITENAME}}.", "siteuser": "Panganggo {{SITENAME}} $1", "anonuser": "Panganggo anonim {{SITENAME}} $1", @@ -2150,18 +2184,18 @@ "spam_reverting": "Mbalèkaké menyang vèrsi pungkasan sing ora ana pranalané menyang $1", "spam_blanking": "Kabèh révisi sing duwé pranala menyang $1, pangosongan", "spam_deleting": "Kabèh benahan sing nduwé pranala nèng $1, dibusaki", - "simpleantispam-label": "Pamariksan anti-spam.\n'''AJA''' diisèkaké!", + "simpleantispam-label": "Pamariksa anti-spam.\nIki aja diisi!", "pageinfo-title": "Inpormasi kanggo \"$1\"", "pageinfo-not-current": "Maaf, tidak mungkin memberikan informasi ini ke revisi lama.", "pageinfo-header-basic": "Informasi dhasar", - "pageinfo-header-edits": "Riwayat suntingan", + "pageinfo-header-edits": "Babad besutan", "pageinfo-header-restrictions": "Perlindungan halaman", "pageinfo-header-properties": "Properti kaca", "pageinfo-display-title": "Judul tampilan", "pageinfo-default-sort": "Kunci urut baku", "pageinfo-length": "Panjang halaman (dalam bita)", "pageinfo-article-id": "ID kaca", - "pageinfo-language": "Bahasa isi halaman", + "pageinfo-language": "Basaning isining kaca", "pageinfo-content-model": "Model isi kaca", "pageinfo-robot-policy": "Diindeks karo robot", "pageinfo-robot-index": "Entuk", @@ -2173,9 +2207,9 @@ "pageinfo-subpages-value": "$1 ($2 {{PLURAL:$2|pengalihan|pengalihan}}; $3 {{PLURAL:$3|non-pengalihan|non-pengalihan}})", "pageinfo-firstuser": "Pembuat halaman", "pageinfo-firsttime": "Tanggal pembuatan halaman", - "pageinfo-lastuser": "Penyunting terakhir", - "pageinfo-lasttime": "Tanggal suntingan pungkasan", - "pageinfo-edits": "Cacahé kabèh suntingan", + "pageinfo-lastuser": "Sing mbesut pungkasan", + "pageinfo-lasttime": "Tanggal besutan pungkasan", + "pageinfo-edits": "Gunggung cacahing besutan", "pageinfo-authors": "Cacahé kabèh panganggit sing bédha-bédha.", "pageinfo-recent-edits": "Cacahé suntingan saiki (ing $1 kapungkur)", "pageinfo-recent-authors": "Cacahé panganggit sing bédha-bédha saiki", @@ -2183,7 +2217,7 @@ "pageinfo-hidden-categories": "{{PLURAL:$1|Katégori|Katégori}} kadhelikaké ($1)", "pageinfo-templates": "{{PLURAL:$1|Templat|Templat}} yang ditransklusi ($1)", "pageinfo-transclusions": "{{PLURAL:$1|Kaca|Kaca}} sing ditransklusi ing ($1)", - "pageinfo-toolboxlink": "Informasi kaca", + "pageinfo-toolboxlink": "Katerangan kaca", "pageinfo-redirectsto": "Dialihaké dhateng", "pageinfo-redirectsto-info": "info", "pageinfo-contentpage": "Diétung minangka satunggaling kaca isi", @@ -2216,8 +2250,8 @@ "filedelete-old-unregistered": "Révisi berkas \"$1\" sing diwènèhaké ora ana sajroning basis data.", "filedelete-current-unregistered": "Berkas sing dispésifikasi \"$1\" ora ana sajroning basis data.", "filedelete-archive-read-only": "Dirèktori arsip \"$1\" ora bisa ditulis déning server wèb.", - "previousdiff": "← Panyuntingan sadurungé", - "nextdiff": "Panyuntingan sing luwih anyar →", + "previousdiff": "← Besutan sadurungé", + "nextdiff": "Besutan luwih anyar →", "mediawarning": "'''Pèngetan''': Jinis berkas iki mungkin isiné kodhé mbebayani.\nYèn dilakokaké, sistem Sampéyan bisa kaserang.", "imagemaxsize": "Wates ukuran gambar:
''(kanggo kaca dhèskripsi berkas)''", "thumbsize": "Ukuran gambar cilik (thumbnail):", @@ -2229,7 +2263,7 @@ "svg-long-desc": "Berkas SVG, nominal $1 × $2 piksel, gedhené berkas: $3", "svg-long-desc-animated": "Berkas SVG, nominal $1 × $2 piksel, gedhené berkas: $3", "svg-long-error": "Berkas SVG ora sah: $1", - "show-big-image": "Berkas asli", + "show-big-image": "Barkas asli", "show-big-image-preview": "Gedhéné pratayang iki: $1", "show-big-image-other": "{{PLURAL:$2|Résolusi|Résolusi}} liya: $1.", "show-big-image-size": "$1 × $2 piksel", @@ -2270,7 +2304,7 @@ "sunday-at": "Minggu jam $1", "yesterday-at": "Dhek wingi jam $1", "bad_image_list": "Formaté kaya mengkéné:\n\nNamung butir daftar (baris sing diawali mawa tandha *) sing mèlu diitung. Pranala kapisan ing sawijining baris kudu pranala ing berkas sing ala.\nPranala-pranala sabanjuré ing baris sing padha dianggep minangka ''pengecualian'', yaiku artikel sing bisa nuduhaké berkas iku.", - "metadata": "Metadata", + "metadata": "Métadata", "metadata-help": "Berkas iki ngandhut informasi tambahan sing mbokmenawa ditambahaké déning kamera digital utawa ''scanner'' sing dipigunakaké kanggo nggawé utawa olèhé digitalisasi berkas. Yèn berkas iki wis dimodifikasi, detail sing ana mbokmenawa ora sacara kebak nuduhaké informasi saka gambar sing wis dimodifikasi iki.", "metadata-expand": "Tuduhna detail tambahan", "metadata-collapse": "Delikna detail tambahan", @@ -2280,7 +2314,7 @@ "exif-bitspersample": "Bit per komponèn", "exif-compression": "Skéma komprèsi", "exif-photometricinterpretation": "Komposisi piksel", - "exif-orientation": "Orièntasi", + "exif-orientation": "Kéblat", "exif-samplesperpixel": "Cacah komponèn", "exif-planarconfiguration": "Pangaturan data", "exif-ycbcrsubsampling": "Rasio subsampling Y ke C", @@ -2299,21 +2333,21 @@ "exif-datetime": "Tanggal lan wektu pangowahan berkas", "exif-imagedescription": "Judhul gambar", "exif-make": "Produsèn kamera", - "exif-model": "Modhèl kamera", - "exif-software": "Perangkat lunak", + "exif-model": "Modhèl kaméra", + "exif-software": "Piranti alus sing dianggo", "exif-artist": "Prodhusèn", "exif-copyright": "Sing ndarbèni hak cipta", "exif-exifversion": "Vèrsi Exif", "exif-flashpixversion": "Dukungan versi Flashpix", - "exif-colorspace": "Papan werna", + "exif-colorspace": "Lowah warna", "exif-componentsconfiguration": "Teges saben komponèn", "exif-compressedbitsperpixel": "Modhe komprèsi gambar", - "exif-pixelydimension": "Jembaré gambar", - "exif-pixelxdimension": "Dhuwuré gambar", + "exif-pixelxdimension": "Jembaring gambar", + "exif-pixelydimension": "Dhuwuring gambar", "exif-usercomment": "Komentar panganggo", - "exif-relatedsoundfile": "Berkas audio sing kagandhèng", - "exif-datetimeoriginal": "Tanggal lan wektu nggawé data", - "exif-datetimedigitized": "Tanggal lan wektu dhigitalisasi", + "exif-relatedsoundfile": "Barkas swara magepokan", + "exif-datetimeoriginal": "Surya lan tabuh panggawéning data", + "exif-datetimedigitized": "Tanggal lan tabuh dhigitalisasi", "exif-subsectime": "Subdetik DateTime", "exif-subsectimeoriginal": "Subdetik DateTimeOriginal", "exif-subsectimedigitized": "Subdetik DateTimeDigitized", @@ -2458,7 +2492,7 @@ "exif-copyrighted-true": "Mawa hak cipta", "exif-copyrighted-false": "Status hak cipta durung ditemtokake", "exif-unknowndate": "Tanggal ora dingertèni", - "exif-orientation-1": "Normal", + "exif-orientation-1": "Sedhengan", "exif-orientation-2": "Baliken sacara horisontal", "exif-orientation-3": "Diputer 180°", "exif-orientation-4": "Baliken sacara vèrtikal", @@ -2728,7 +2762,6 @@ "version-entrypoints-header-entrypoint": "Tithik lebon", "version-entrypoints-header-url": "URL", "redirect": "Dialihake dening gambar, panganggo, kaca, utawa ID revisi", - "redirect-legend": "Dialihake menyang gambar utawa kaca", "redirect-summary": "Kaca astamiwa iki dialihake menyang gambar (jeneng gambar diwenehi), kaca (ID revisi utama ID kaca diwenehi), utawa kaca panganggo (ID panganggo diwenehi). Cara nganggo: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/page/64308]], [[{{#Special:Redirect}}/revision/328429]], or [[{{#Special:Redirect}}/user/101]].", "redirect-submit": "Nuju", "redirect-lookup": "Golek:", @@ -2740,16 +2773,15 @@ "redirect-not-exists": "Nilai ora ditemokaké", "fileduplicatesearch": "Golèk berkas duplikat", "fileduplicatesearch-summary": "Golèk duplikat berkas adhedhasar biji hash-é.", - "fileduplicatesearch-legend": "Golèk duplikat", "fileduplicatesearch-filename": "Jeneng berkas:", "fileduplicatesearch-submit": "Golèk", "fileduplicatesearch-info": "$1 × $2 piksel
Ukuran berkas: $3
Tipe MIME: $4", "fileduplicatesearch-result-1": "Berkas \"$1\" ora duwé duplikat idèntik.", "fileduplicatesearch-result-n": "Berkas \"$1\" ora ndarbèni {{PLURAL:$2|1 duplikat idèntik|$2 duplikat idèntik}}.", "fileduplicatesearch-noresults": "Ora ana berkas mawa jeneng \"$1\" ditemokaké.", - "specialpages": "Kaca astamiwa", + "specialpages": "Kaca mirunggan", "specialpages-note-top": "Katrangan", - "specialpages-note": "* Kaca astamiwa biasa.\n* Kaca astamiwa kawatesan.", + "specialpages-note": "* Kaca mirunggan sedhengan.\n* Kaca mirunggan winatesan.", "specialpages-group-maintenance": "Lapuran pangopènan", "specialpages-group-other": "Kaca-kaca astaméwa liyané", "specialpages-group-login": "Mlebu log / nggawé akun", @@ -2779,7 +2811,7 @@ "tags-hitcount-header": "Owah-owahan mawa tag", "tags-active-yes": "Iya", "tags-active-no": "Ora", - "tags-edit": "sunting", + "tags-edit": "besut", "tags-hitcount": "$1 {{PLURAL:$1|pangowahan|pangowahan}}", "comparepages": "Bandhingna kaca", "compare-page1": "Kaca 1", @@ -2824,10 +2856,10 @@ "logentry-suppress-event-legacy": "$1 ndhelik-ndhelik {{GENDER:$2|ngganti}} patampilan saka kadadéan log nèng $3", "logentry-suppress-revision-legacy": "$1 ndhelik-ndhelik {{GENDER:$2|ngganti}} patampilan saka pambenahan nèng kaca $3", "revdelete-content-hid": "kontèn didhelikaké", - "revdelete-summary-hid": "ringkesan suntingan didhelikaké", + "revdelete-summary-hid": "tingkesaning besutan kadhelikaké", "revdelete-uname-hid": "jeneng panganggo didhelikaké", "revdelete-content-unhid": "kontèn dituduhaké", - "revdelete-summary-unhid": "ringkesan suntingan dituduhaké", + "revdelete-summary-unhid": "tingkesaning besutan ora kadhelikaké", "revdelete-uname-unhid": "jeneng panganggo dituduhaké", "revdelete-restricted": "rèstriksi ditrapaké marang para opsis", "revdelete-unrestricted": "rèstriksi marang para opsis dijabel", @@ -2845,8 +2877,9 @@ "logentry-rights-rights": "$1 {{GENDER:$2|ngganti}} kaanggotan kelompok kanggo $3 saka $4 dadi $5", "logentry-rights-rights-legacy": "$1 {{GENDER:$2|ngganti}} kanggotaan grup kanggo $3", "logentry-rights-autopromote": "$1 otomatis {{GENDER:$2|dipromosikne}} saka $4 nèng $5", + "logentry-upload-upload": "$1 {{GENDER:$2|ngunggah}} $3", "rightsnone": "(ora ana)", - "revdelete-summary": "ringkesan suntingan", + "revdelete-summary": "tingkesan besutan", "feedback-adding": "Nambahaké lebon saran nèng kaca...", "feedback-bugcheck": "Apik! Pesthèké kuwi dudu sawijining [$1 bug sing dingertèni].", "feedback-bugnew": "Aku wis mriksa. Kandakaké bug anyar", diff --git a/languages/i18n/ka.json b/languages/i18n/ka.json index 482b11e14c..6685cc6c2f 100644 --- a/languages/i18n/ka.json +++ b/languages/i18n/ka.json @@ -551,11 +551,11 @@ "botpasswords-insert-failed": "ბოტის სახელის $1\" დამატება შეუძლებელია. უკვე დამატებულია?", "botpasswords-update-failed": "ბოტის სახელის \"$1\" განახლება შეუძლებელია. წაშლილია?", "botpasswords-created-title": "ბოტის პაროლი შექმნილია", - "botpasswords-created-body": "ბოტის პაროლი \"$1\" შეიქმნა.", + "botpasswords-created-body": "ბოტის პაროლი მომხმარებელ \"$2\"-ის \"$1\" სახელისთვის შეიქმნა.", "botpasswords-updated-title": "ბოტის პაროლი განახლდა", - "botpasswords-updated-body": "ბოტის პაროლი \"$1\" განახლდა.", + "botpasswords-updated-body": "ბოტის პაროლი \"$2\" მომხმარებლის \"$1\"-ის სახელისთვის განახლდა.", "botpasswords-deleted-title": "ბოტის პაროლი წაშლილია", - "botpasswords-deleted-body": "ბოტის პაროლი \"$1\" წაიშალა.", + "botpasswords-deleted-body": "ბოტის პაროლი \"$2\" მომხმარებლის \"$1\"-ის სახელისთვის წაიშალა.", "botpasswords-newpassword": "ახალი პაროლი $1-ით შესასვლელად არის $2. გთხოვთ დაიმახსოვრეთ ან ჩაიწერეთ.", "botpasswords-no-provider": "BotPasswordsSessionProvider არ არის ხელმისაწვდომი.", "botpasswords-restriction-failed": "ბოტის პაროლის შეზღუდვები არ უშვებს ამ ავტორიზაციას.", @@ -1341,9 +1341,9 @@ "recentchangeslinked-page": "გვერდის დასახელება:", "recentchangeslinked-to": "საპირისპიროდ აჩვენეთ ამ გვერდზე ბმულის მქონე გვერდების ცვლილებები", "recentchanges-page-added-to-category": "[[:$1]] დამატებულია კატეგორიაში", - "recentchanges-page-added-to-category-bundled": "[[:$1]] და {{PLURAL:$2|ერთი გვერდი|$2 გვერდი}} დამატებულია კატეგორიაში", + "recentchanges-page-added-to-category-bundled": "[[:$1]] და [[Special:WhatLinksHere/$1|{{PLURAL:$2|ერთი გვერდი|$2 გვერდი}}]] დამატებულია კატეგორიაში", "recentchanges-page-removed-from-category": "[[:$1]] წაიშალა კატეგორიიდან", - "recentchanges-page-removed-from-category-bundled": "[[:$1]] და {{PLURAL:$2|ერთი გვერდი|$2 გვერდი}} წაიშალა კატეგორიიდან", + "recentchanges-page-removed-from-category-bundled": "[[:$1]] და [[Special:WhatLinksHere/$1|{{PLURAL:$2|ერთი გვერდი|$2 გვერდი}}]] წაიშალა კატეგორიიდან", "autochange-username": "მედიავიკის ავტომატური ცვლილება", "upload": "ფაილის დამატება", "uploadbtn": "ფაილის დამატება", @@ -1842,8 +1842,6 @@ "categories-submit": "ჩვენება", "categoriespagetext": "შემდეგი {{PLURAL:$1|კატეგორია შეიცავს|კატეგორია შეიცავს}} გვერდს ან მედიას.\n[[Special:UnusedCategories|გამოუყენებელი კატეგორიები]] აქ ნაჩვენები არ არის.\nიხ. ასევე [[Special:WantedCategories|მოთხოვნილი კატეგორიები]].", "categoriesfrom": "აჩვენეთ კატეგორიები, რომლებიც იწყება:", - "special-categories-sort-count": "დაალაგეთ რაოდენობის მიხედვით", - "special-categories-sort-abc": "ანბანზე დალაგება", "deletedcontributions": "მომხმარებლის წაშლილი წვლილი", "deletedcontributions-title": "წაშლილი წვლილი", "sp-deletedcontributions-contribs": "წვლილი", @@ -2033,6 +2031,7 @@ "changecontentmodel-title-label": "გვერდის სათაური", "changecontentmodel-model-label": "შინაარსის ახალი მოდელი", "changecontentmodel-reason-label": "მიზეზი:", + "changecontentmodel-submit": "შეცვლა", "changecontentmodel-success-title": "შინაარსის მოდელი შეიცვალა", "changecontentmodel-success-text": "[[:$1]]-ის კონტენტის ტიპი შეიცვალა.", "changecontentmodel-cannot-convert": "[[:$1]]-ის შინაარსის $2-ის ტიპზე კონვერტაცია შეუძლებელია.", @@ -2465,11 +2464,7 @@ "import-logentry-upload-detail": "$1 {{PLURAL:$1|ვერსია|ვერსია}} იმპორტირებულია", "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|ვერსია|ვერსია}} იმპორტირებულია $2-დან", "javascripttest": "JavaScript-ის ტესტირება", - "javascripttest-pagetext-noframework": "ეს გვერდი დარეგისტრირებულია JavaScript-ის ტესტების გასაშვებად.", - "javascripttest-pagetext-unknownframework": "„$1-ის“ ტესტირების უცნობი გარემო.", "javascripttest-pagetext-unknownaction": "უცნობი ქმედება „$1“.", - "javascripttest-pagetext-frameworks": "გთხოვთ, აირჩიეთ ტესტირების ერთ-ერთი შემდეგი გარემო: $1", - "javascripttest-pagetext-skins": "ტესტების გასაშვებად აირჩიეთ გაფორმების თემა:", "javascripttest-qunit-intro": "იხილეთ [$1 ტესტირების დოკუმენტები] mediawiki.org-ზე.", "tooltip-pt-userpage": "{{GENDER:|თქვენი მომხმარებლის}} გვერდი", "tooltip-pt-anonuserpage": "ჩემი IP-ის მქონე მომხმარებლის გვერდი", @@ -2757,8 +2752,8 @@ "exif-colorspace": "ფერთა სივრცე", "exif-componentsconfiguration": "ცალკეულ კომპონენტთა კონფიგურაცია", "exif-compressedbitsperpixel": "სურათის შეკუმშვის რეჟიმი", - "exif-pixelydimension": "სურათის სიგანე", - "exif-pixelxdimension": "სურათის სიმაღლე", + "exif-pixelxdimension": "სურათის სიგანე", + "exif-pixelydimension": "სურათის სიმაღლე", "exif-usercomment": "მომხმარებლის კომენტარი", "exif-relatedsoundfile": "შესაბამისი აუდიო ფაილი", "exif-datetimeoriginal": "გენერირების თარიღი და დრო", @@ -3113,9 +3108,9 @@ "confirm_purge_button": "კარგი", "confirm-purge-top": "გსურთ ამ გვერდის ქეშის წაშლა?", "confirm-purge-bottom": "ქეშის გაწმენდის შემდეგ იქნება ნაჩვენები ბოლო ვერსია.", - "confirm-watch-button": "კარგი", + "confirm-watch-button": "დიახ", "confirm-watch-top": "დავამატო ეს გვერდი თქვენი კონტროლის სიას?", - "confirm-unwatch-button": "კარგი", + "confirm-unwatch-button": "დიახ", "confirm-unwatch-top": "მოვხსნა ეს გვერდი თქვენი კონტროლის სიიდან?", "semicolon-separator": "; ", "comma-separator": ", ", @@ -3249,7 +3244,6 @@ "version-libraries-description": "აღწერა", "version-libraries-authors": "ავტორები", "redirect": "გადამისამართება ფაილიდან, მომხმარებლიდან, გვერდიდან, ვერსიის ან ავტორიზაციის იდენტიფიკატორიდან", - "redirect-legend": "გადამისამართება ფაილზე ან გვერდზე", "redirect-summary": "ეს დამხმარე გვერდი ამისამართებს ფაილზე (ფაილის სახელიდან) გვერდზე, (გვერდის ან ვერსიის იდენტიფიკატორიდან), მომხმარებლის გვერდზე (მომხმარებლის რაოდენობრივი იდენტიფიკატორიდან) ან ჟურნალის მონაცემზე. გამოყენება:\n[[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/page/64308]], [[{{#Special:Redirect}}/revision/328429]], [[{{#Special:Redirect}}/user/101]], or [[{{#Special:Redirect}}/logid/186]].", "redirect-submit": "მიდი", "redirect-lookup": "ძიება:", @@ -3262,7 +3256,6 @@ "redirect-not-exists": "მნიშვნელობა ვერ მოიძებნა", "fileduplicatesearch": "ერთნაირი ფაილების ძიება", "fileduplicatesearch-summary": "ერთნაირი ფაილების ძიება ჰეშ-კოდის მიხედვით.", - "fileduplicatesearch-legend": "დუბლიკატების ძიება", "fileduplicatesearch-filename": "ფაილის სახელი:", "fileduplicatesearch-submit": "ძიება", "fileduplicatesearch-info": "$1 × $2 პიქსელზე
ფაილის ზომაა: $3
MIME-ტიპი: $4", diff --git a/languages/i18n/kab.json b/languages/i18n/kab.json index c9039a174a..1be505741c 100644 --- a/languages/i18n/kab.json +++ b/languages/i18n/kab.json @@ -1502,8 +1502,6 @@ "categories": "Taggayin", "categoriespagetext": "{{PLURAL:$1|Taggayt agi teseqdec|Taggayin agi teseqdecet}} sɣur isebtar naɣ ifuyla.\n[[Special:UnusedCategories|Taggayin ur sɛan ara aqeddic]]\nẒeṛ daɣen [[Special:WantedCategories|taggayin yetwesuteren]].", "categoriesfrom": "Ssken taggayin seg :", - "special-categories-sort-count": "Afran s amḍan n iferdisen", - "special-categories-sort-abc": "afran s ugemmay", "deletedcontributions": "Isekcam yemḥan", "deletedcontributions-title": "Isekcam yemḥan", "sp-deletedcontributions-contribs": "Isekcam", @@ -2049,10 +2047,6 @@ "import-logentry-upload-detail": "$1 {{PLURAL:$1|lqem|ileqman}}", "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|lqem|ileqman}} seg $2", "javascripttest": "Tarmit n JavaScript", - "javascripttest-pagetext-noframework": "Asebtar agi yeḥeṛṛ i usselkem n tirmitin JavaScript.", - "javascripttest-pagetext-unknownframework": "Tamṣuka « $1 » warisem.", - "javascripttest-pagetext-frameworks": "Ilaq ad xetreḍ yiwet n timṣukyin n tarmit agi : $1", - "javascripttest-pagetext-skins": "Xter agwlim s anwa ad xeddemeḍ tarmit :", "javascripttest-qunit-intro": "Zeṛ [$1 tumlin n tarmit] ɣef mediawiki.org.", "tooltip-pt-userpage": "Asebter n umseqdac inu", "tooltip-pt-anonuserpage": "Asebter n wemseqdac n IP wukud tekkiḍ", @@ -2296,8 +2290,8 @@ "exif-colorspace": "Tallunt n tiniskit", "exif-componentsconfiguration": "Anamek n yal isger", "exif-compressedbitsperpixel": "Askar n usekkusem n tugna", - "exif-pixelydimension": "Tehri n tugna", - "exif-pixelxdimension": "Taɣwzi n tugna", + "exif-pixelxdimension": "Tehri n tugna", + "exif-pixelydimension": "Taɣwzi n tugna", "exif-usercomment": "Iwenniten n useqdac", "exif-relatedsoundfile": "Afaylu n eslu yeqqnen", "exif-datetimeoriginal": "Azmez n tuddma tamezwarut", @@ -2719,7 +2713,6 @@ "version-entrypoints-header-entrypoint": "Ired n wekcam", "version-entrypoints-header-url": "Tansa URL", "redirect": "Alssniled s ufaylu, amseqdac, asebtar neɣ ID n tacaggart", - "redirect-legend": "Alsnil ɣer asebtar neɣ afaylu", "redirect-summary": "Asebtar agi uslig yetalssnil ɣeṛ ufaylu (isem n ufaylu yetwefked), asebtar (ID n tacaggart neɣ n usebtar id yetwafken) neɣ asebtar n umseqdac (ID umḍin n umseqdac yetwefked). Asseqdec : [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/page/64308]], [[{{#Special:Redirect}}/revision/328429]], neɣ [[{{#Special:Redirect}}/user/101]].", "redirect-submit": "Ruḥ", "redirect-lookup": "Anadi :", @@ -2731,7 +2724,6 @@ "redirect-not-exists": "Azal ulac-it", "fileduplicatesearch": "Anadi n allusen", "fileduplicatesearch-summary": "Anadi n ineɣlan n ifuyla kifkif ɣef leḥsab n udsil nsen n udway.", - "fileduplicatesearch-legend": "Nadi allus", "fileduplicatesearch-filename": "Isem n ufaylu :", "fileduplicatesearch-submit": "Nadi", "fileduplicatesearch-info": "$1 × $2 pixel
Tiddi n ufaylu : $3
Anaw MIME : $4", diff --git a/languages/i18n/kk-arab.json b/languages/i18n/kk-arab.json index 65c014cd1d..bd17e300c3 100644 --- a/languages/i18n/kk-arab.json +++ b/languages/i18n/kk-arab.json @@ -909,8 +909,6 @@ "categories": "ساناتتار", "categoriespagetext": "كەلەسى ساناتتار ىشىندە بەتتەر نە تاسپالار بار.\n[[Special:UnusedCategories|Unused categories]] are not shown here.\nAlso see [[Special:WantedCategories|wanted categories]].", "categoriesfrom": "ساناتتاردى مىنادان باستاپ كورسەتۋ:", - "special-categories-sort-count": "سانىمەن سۇرىپتاۋ", - "special-categories-sort-abc": "الىپبىيمەن سۇرىپتاۋ", "deletedcontributions": "قاتىسۋشىنىڭ جويىلعان ۇلەسى", "deletedcontributions-title": "قاتىسۋشىنىڭ جويىلعان ۇلەسى", "linksearch": "سىرتقى سٸلتەمەلەردٸ ٸزدەۋ", @@ -1419,8 +1417,8 @@ "exif-colorspace": "ٴتۇس اياسى", "exif-componentsconfiguration": "ارقايسى قۇراش ٴمانى", "exif-compressedbitsperpixel": "سۋرەت قىسىمداۋ ٴتارتىبى", - "exif-pixelydimension": "سۋرەتتىڭ جارامدى ەنى", - "exif-pixelxdimension": "سۋرەتتىڭ جارامدى بىيىكتىگى", + "exif-pixelxdimension": "سۋرەتتىڭ جارامدى ەنى", + "exif-pixelydimension": "سۋرەتتىڭ جارامدى بىيىكتىگى", "exif-usercomment": "قاتىسۋشىنىڭ ماندەمەلەرى", "exif-relatedsoundfile": "قاتىستى دىبىس فايلى", "exif-datetimeoriginal": "جاسالعان كەزى", @@ -1721,7 +1719,6 @@ "version-software-version": "نۇسقاسى", "fileduplicatesearch": "فايل تەلنۇسقالارىن ىزدەۋ", "fileduplicatesearch-summary": "فايل حەشى ماعىناسى نەگىزىندە تەلنۇسقالارىن ىزدەۋ.", - "fileduplicatesearch-legend": "تەلنۇسقانى ىزدەۋ", "fileduplicatesearch-filename": "فايل اتاۋى:", "fileduplicatesearch-submit": "ىزدە", "fileduplicatesearch-info": "$1 × $2 پىيكسەل
فايل مولشەرى: $3
MIME ٴتۇرى: $4", diff --git a/languages/i18n/kk-cyrl.json b/languages/i18n/kk-cyrl.json index a4a679f82f..f839f944ef 100644 --- a/languages/i18n/kk-cyrl.json +++ b/languages/i18n/kk-cyrl.json @@ -13,7 +13,8 @@ "아라", "Macofe", "Batyrbek.kz", - "Matma Rex" + "Matma Rex", + "Nemo bis" ] }, "tog-underline": "Сілтеменің астын сызу:", @@ -127,6 +128,8 @@ "october-date": "Қазан $1", "november-date": "Қараша $1", "december-date": "Желтоқсан $1", + "period-am": "Түстен бұрыңғы", + "period-pm": "Түстен кейінгі", "pagecategories": "{{PLURAL:$1|Санат|Санат}}", "category_header": "«$1» санатындағы беттер", "subcategories": "Санатшалар", @@ -315,7 +318,7 @@ "laggedslavemode": "Ескерту: Бетте жуықтағы жаңартулар болмауы мүмкін.", "readonly": "Дерекқоры құлыпталған", "enterlockreason": "Құлыптау себебін, қай уақытқа дейін құлыпталғанын кірістіріп, енгізіңіз.", - "readonlytext": "Бұл дерекқор жаңадан жазу және басқа өзгерістер жасаудан ағымда құлыпталынған, мүмкін күнде-күн дерекқорды баптау үшін, бұны бітіргеннен соң қалыпты іске қайтарылады.\n\nҚұлыптаған әкімші бұны былай түсіндіреді: $1", + "readonlytext": "Мүмкін жоспарлы дерекқор текникалық қызмет көрсетуі үшін бұл дерекқор жаңа енгізілімдер және басқа өзгерістер жасаудан қазіргі уақытта құлыпталынған, бұны бітіргеннен соң қалыпты іске қайтарылады.\n\nҚұлыптаған жүйе әкімшісі мына түсіндірмені қалдырды: $1", "missing-article": "Бар болуы жөн былай аталған бет мәтіні дерекқорда табылмады: «$1» $2.\n\nБұл ескірген айырма сілтемесіне немесе жойылған бет тарихы сілтемесіне ергеннен бола береді.\n\nЕгер бұл орынды болмаса, бағдарламалық жасақтамадағы қатеге тап болуыңыз мүмкін.\nБұл туралы нақты URL жайына аңғартпа жасап, [[Special:ListUsers/sysop|әкімшіге]] баяндаңыз.", "missingarticle-rev": "(түзету нұсқасы#: $1)", "missingarticle-diff": "(Айырым: $1, $2)", @@ -371,7 +374,7 @@ "mypreferencesprotected": "Сізде баптауларыңызды өңдеуге рұқсатыңыз жоқ.", "ns-specialprotected": "Арнайы беттер өңдеуге келмейді.", "titleprotected": "Бұл атауды бастаудан [[User:$1|$1]] қорғаған.\nКелтірілген себебі: $2.", - "filereadonlyerror": "«$2» файл қоры тек қана оқу тәртіптемесінде тұрғасын «$1» файлын өзгерту мүмкін емес.\nБұл тәртіптемені қондырған әкімші келесі түсіндірмені қалдырды: «$3»", + "filereadonlyerror": "«$2» файл қоры тек қана оқу тәртіптемесінде тұрғасын «$1» файлын өзгерту мүмкін емес.\n\nЖүйе әкімшісі оны кім құлыптағанын бұл түсіндірмені ұсынды: «$3»", "invalidtitle-knownnamespace": "«$2» есім кеңістік түрі және «$3» мәтіні жарамсыз", "invalidtitle-unknownnamespace": "Нөмері $1 белгісіз есім кеңістік атауы және «$2» мәтіні жарамсыз", "exception-nologin": "Кірмегенсіз", @@ -381,6 +384,8 @@ "virus-scanfailed": "скайнерлеу орындалмады (коды: $1)", "virus-unknownscanner": "белгісіз антивирус:", "logouttext": "Жүйеден шықтыңыз.\n\nКейбір беттер браузеріңіздің кэшін тазартқанша әлі де жүйеге кіріп отырғаныңыздай көрінуі мүмкіндігін ескеріңіз.", + "cannotlogoutnow-title": "Қазір шығу мүмкін емес", + "cannotlogoutnow-text": "$1 қолданған кезде шығу мүмкін емес.", "welcomeuser": "Қош келдіңіз, $1!", "welcomecreation-msg": "Сіз тіркелдіңіз.\n{{SITENAME}} [[Special:Preferences|баптауларыңызды]] өзіңіз қалауыңыз бойынша өзгерте аласыз.", "yourname": "Қатысушы аты:", @@ -397,6 +402,8 @@ "remembermypassword": "Тіркелгімді осы браузерде ұмытпа (ең көбі $1 {{PLURAL:$1|күн|күн}})", "userlogin-remembermypassword": "Мені жүйеде сақтап қою", "userlogin-signwithsecure": "Қауіпсіз байланысуды қолдану", + "cannotloginnow-title": "Қазір шығу мүмкін емес", + "cannotloginnow-text": "$1 қолданған кезде шығу мүмкін емес.", "yourdomainname": "Үйшігіңіз:", "password-change-forbidden": "Сіз бұл уикиде құпия сөзіңізді өзгерте алмайсыз.", "externaldberror": "Осы арада не шеттік растау дерекқорында қате болды, немесе шеттік тіркелгіңізді жаңалау рұқсаты жоқ.", @@ -454,6 +461,7 @@ "wrongpasswordempty": "Құпия сөз бос болған.\nҚайта байқап көріңіз.", "passwordtooshort": "Құпиясөзде кем дегенде {{PLURAL:$1|1таңба|таңба}} болуы керек.", "passwordtoolong": "Құпиясөз {{PLURAL:$1|1таңбадан|таңбадан}} көп болмау керек.", + "passwordtoopopular": "Көп жағдайда таңдалатын құпиясөзді қолдана алмайсыз. Басқа бірегей құпиясөз таңдаңыз.", "password-name-match": "Құпия сөзіңіз қатысушы атынан өзгеше болуы қажет.", "password-login-forbidden": "Бұл қатысушы аты мен құпия сөзін пайдалануға тыйым салынған.", "mailmypassword": "Құпия сөзді қалпына кеттіру", @@ -479,7 +487,7 @@ "createaccount-title": "{{SITENAME}} жобасына тіркелу", "createaccount-text": "Әлдебіреу е-пошта мекенжайыңызды пайдаланып {{SITENAME}} жобасында ($4) «$2» деген атау, «$3» деген құпия сөзбен тіркелгі жасаған.\nҚазір жүйеге кіріуіңіз және құпия сөзіңізді өзгертуіңіз керек.\n\nЕгер бұл тіркелгі қателікпен жасалса осы хабарламаны елемеуіңізге болады.", "login-throttled": "Сіз жүйеге кіру үшін тым көп талпыныс жасадыңыз.\nҚайта байқап көрмес бұрын $1 күте тұрыңыз.", - "login-abort-generic": "Жүйеге кіру сәтсіз болды - Доғарылды.", + "login-abort-generic": "Сіздің кіруіңіз орындалмады - Доғарылды.", "login-migrated-generic": "Тіркелгіңіздің тасымалданған болатын және сіздің қатысуыш есіміңіз бұдан былай осы уикиде болмайды.", "loginlanguagelabel": "Тіл: $1", "suspicious-userlogout": "Сіздің жүйеден шығу сұранымыңыз қабылданбады, өйткені бұл бұзылған браузер немесе кэштеуші прокси арқылы жіберілгенге ұқсайды.", @@ -500,15 +508,31 @@ "resetpass_submit": "Құпия сөзді қойыңыз да кіріңіз", "changepassword-success": "Құпия сөзіңіз өзгертілді!", "changepassword-throttled": "Сіз жақында кіруге тым көп әрекет жасадыңыз.\nҚайта байқап көру үшін $1 уақыт күте тұрыңыз.", + "botpasswords": "Бот құпиясөздері", + "botpasswords-disabled": "Бот құпиясөздері өшірілген.", + "botpasswords-no-central-id": "Бот құпиясөздерін қолдану үшін, орталықтандырылған тіркелгіңізбен кіруіңіз керек.", + "botpasswords-existing": "Бар бот құпиясөздері", + "botpasswords-createnew": "Жаңа бот құпиясөзін бастау", + "botpasswords-editexisting": "Бар бот құпиясөзін өңдеу", + "botpasswords-label-appid": "Бот атауы:", + "botpasswords-label-create": "Бастау", "botpasswords-label-update": "Жаңарту", "botpasswords-label-cancel": "Болдырмау", "botpasswords-label-delete": "Жою", "botpasswords-label-resetpassword": "Құпия сөзді қалпына кеттіру", + "botpasswords-label-grants": "Қолданылатын гранттар:", + "botpasswords-label-restrictions": "Пайдалану шектеулері:", + "botpasswords-bad-appid": "\"$1\" бот атауы жарамды емес.", + "botpasswords-insert-failed": "\"$1\" бот атауын қосу орындалмады. Ол әлдеқашан қосылған ба еді?", + "botpasswords-update-failed": "\"$1\" бот атауын жаңарту орындалмады. Ол әлдеқашан жойылған ба еді?", + "botpasswords-created-title": "Бот құпиясөзі құрылды", + "botpasswords-updated-title": "Бот құпиясөзі жаңартылды", + "botpasswords-deleted-title": "Бот құпиясөзі жойылды", "resetpass_forbidden": "Құпия сөз өзгертілмейді", "resetpass-no-info": "Бұл бетке тікелей ену үшін жүйеге кіруіңіз керек.", "resetpass-submit-loggedin": "Құпия сөзді өзгерту", "resetpass-submit-cancel": "Болдырмау", - "resetpass-wrong-oldpass": "Уақытша немесе қазіргі құпия сөзіңіз жарамсыз.\nМүмкін сіз құпия сөзді сәтті өзгерткенсіз немесе жаңа уақытша құпия сөзге сұраным жасағансыз.", + "resetpass-wrong-oldpass": "Уақытша немесе қазіргі құпия сөзіңіз жарамсыз.\nМүмкін сіз құпия сөзді өзгерткенсіз немесе жаңа уақытша құпия сөзге сұраным жасағансыз.", "resetpass-recycled": "Құпия сөзіңізді қазіргі құпия сөзіңізден өзгеше етіп өзгертіңіз.", "resetpass-temp-emailed": "Сіз уақытша email-ды кодпен кірдіңіз.\nКіруді аяқтау үшін жаңа құпия сөзді мында орнатуыңыз керек:", "resetpass-temp-password": "Уақытша құпия сөз:", @@ -530,7 +554,7 @@ "passwordreset-emailtext-ip": "Әлде кім (мүмкін сіз болуыңыз, $1 IP адресінен) {{SITENAME}} сайтында ($4) құпия сөзді өзгертуге өтініш білдірді. Мына қатысушы {{PLURAL:$3|аккаунты|аккаунттары}} осы электронды почта қатысты:\n\n$2\n\n{{PLURAL:$3|Бұл уақытша құпия сөз|Бұл уақытша құпия сөздер}} {{PLURAL:$5|бір күнде|$5 күнде}}уақыты аяқталады.\nСіз кіруіңіз және жаңа құпия сөзді таңдауыңыз керек. Егер бұл өтінішті басқа біреу жасаса, немесе сіз бұрынғы құпия сөзіңізді еске түсірсеңіз және құпия сөзді ауыстыруды қаламасаңыз, сіз бұл хабарламаны ескермей және бұрынғы құпия сөзді қолдана беруіңізге болады.", "passwordreset-emailtext-user": "$1 есімді қатысушы {{SITENAME}} сайтында ($4) құпия сөзді өзгертуге өтініш білдірді. Мына қатысушы {{PLURAL:$3|аккаунт|аккаунттар}} осы електронды почта қатысты:\n\n$2\n\n{{PLURAL:$3|Бұл уақытша құпия сөз|Бұл уақытша құпия сөздер}} {{PLURAL:$5|бір күнде|$5 күнде}}уақыты аяқталады.\nСіз кіруіңіз және жаңа құпия сөзді таңдауыңыз керек. Егер бұл өтінішті басқа біреу жасаса, немесе сіз бұрынғы құпия сөзіңізді еске түсірсеңіз, және құпия сөзді ауыстыруды қаламасаңыз, сіз бұл хабарламаны ескермей және бұрыңғы құпия сөзді қолдана беруіңізге болады.", "passwordreset-emailelement": "Қатысушы есімі: \n$1\n\nУақытша құпия сөз: \n$2", - "passwordreset-emailsentemail": "Құпия сөзді өзгерту электронды пошта арқылы жөнелтілді.", + "passwordreset-emailsentemail": "Бұл email мекенжайы тіркелгіңізге байланысқан, сол себепті құпия сөзді өзгерту электронды пошта арқылы жөнелтіледі.", "passwordreset-emailsent-capture": "Құпия сөзді өзгерту электронды пошта арқылы жөнелтілді, ол төменде көрсетілген.", "passwordreset-emailerror-capture": "Құпиясөзді өзгерту электрон хаты жасалды, ол төменде көрсетілген, бірақ ол {{GENDER:$2|қатысушыға}} жөнелтілмеді: $1", "changeemail": "Е-пошта мекенжайын өзгерту немесе аластау", @@ -639,7 +663,7 @@ "copyrightwarning": "{{SITENAME}} жобасына қосқан барлық үлестеріңіз $2 (көбірек ақпарат үшін: $1) аясында жарияланатынын ескеріңіз.\nЕгер еңбегіңіздің еркін өңделуін және ақысыз көпшілікке таралуын қаламасаңыз мұнда жарияламаңыз
\nТағы да бұл мәліметті өзіңіз жазғаныңызға не қоғам қазынасынан немесе сондай ашық қорлардан көшірілгеніне бізге уәде бересіз.\nАвторлық құқықпен қорғалған мәліметті рұқсатсыз жарияламаңыз!", "copyrightwarning2": "{{SITENAME}} жобасына қосқан барлық үлестеріңізді басқа үлескерлер өңдеуге, өзгертуге немесе аластауы мүмкін екенін ескеріңіз.\nЕгер еңбегіңіздің еркін өңделуін қаламасаңыз осында жарияламаңыз.
\nТағы да бұл мәліметті өзіңіз жазғаныңызға не қоғам қазынасынан немесе сондай ашық қорлардан көшірілгеніне бізге уәде бересіз. (көбірек ақпарат үшін $1 құжатын қараңыз).\nАвторлық құқықпен қорғалған мәліметті рұқсатсыз жарияламаңыз!", "longpageerror": "ҚАТЕЛІК: Сақтамақшы болған мәтініңіздің көлемі {{PLURAL:$1|бір килобайт|$1 килобайт}} ең көбі {{PLURAL:$2|килобайт|$2 килобайт}} рұқсат етілген көлемінен асқан.\nБұл сақталмайды.", - "readonlywarning": "ЕСКЕРТУ: Дерекқор техникалық жұмыстар жасау үшін құлыпталған сондықтан дәл қазір өңдемеңізді сақтай алмайсыз.\nКейін сақтау үшін мәтініңізді мәтін файлына көшіріп алуңызға болады. \n\nАдминстратор оны құлыптау себебін келесідей түсіндіреді: $1", + "readonlywarning": "ЕСКЕРТУ: Дерекқор техникалық жұмыстар жасау үшін құлыпталған сондықтан дәл қазір өңдемеңізді сақтай алмайсыз.\nКейін сақтау үшін мәтініңізді мәтін файлына көшіріп алуңызға болады. \n\nЖүйе админстраторы оны құлыптау себебін келесідей түсіндіреді: $1", "protectedpagewarning": "Ескерту: Бұл бет өңдеуден қорғалған сондықтан тек әкімші құқықтары бар қатысушылар ғана өңдей алады.\nТөменде соңғы журнал жазбасы көрсетілген:", "semiprotectedpagewarning": "Ескерту: Бет жартылай қорғалған, сондықтан осыны тек тіркелген қатысушылар өңдей алады.\nТөменде бет журналының соңғы жазбасы көрсетілген:", "cascadeprotectedwarning": "Ескерту: Бұл бет қорғалған, сондықтан тек әкімші құқықтары бар қатысушылар ғана өңдей алады, себебі бұл келесі «баулы қорғауы» бар {{PLURAL:$1|бетіне|беттеріне}} кірістілген бет:", @@ -1005,10 +1029,10 @@ "userrights": "Қатысушы құқықтарын реттеу", "userrights-lookup-user": "Қатысушы топтарын реттеу", "userrights-user-editname": "Қатысушы атын енгізіңіз:", - "editusergroup": "Қатысушы топтарын өңдеу", + "editusergroup": "{{GENDER:$1|Қатысушы}} топтарын өңдеу", "editinguser": "[[User:$1|$1]] $2 {{GENDER:$1|есімді қатысушының}} қатысушы құқықтарын өзгерту", "userrights-editusergroup": "Қатысушы топтарын өңдеу", - "saveusergroups": "Қатысушы топтарын сақтау", + "saveusergroups": "{{GENDER:$1|Қатысушы}} топтарын сақтау", "userrights-groupsmember": "Мүшелігі:", "userrights-groupsmember-auto": "Бұлтарасыз мүше:", "userrights-groups-help": "Бұл қатысушы кіретін топтарды реттей аласыз.\n* Құсбелгі қойылған көзі қатысушы бұл топқа кіргенін көрсетеді;\n* Құсбелгі алып тасталған көз қатысушы бұл топқа кірмегенін көрсетеді;\n* Келтірілген * топты бір үстегенінен кейін аластай алмайтындығын, не қарама-қарсысын көрсетеді.", @@ -1020,7 +1044,7 @@ "userrights-changeable-col": "Өзгерте алатын топтар", "userrights-unchangeable-col": "Өзгерте алмайтын топтар", "userrights-conflict": "Қатысушы құқықтарының қақтығысы! Өзгертулеріңізді қайта қарап шығыңыз және құптаңыз.", - "userrights-removed-self": "Өзіңіздің құқықтарыңызды сәтті алып тастадыңыз. As such, you are no longer able to access this page.", + "userrights-removed-self": "Өзіңіздің құқықтарыңызды алып тастадыңыз. Осылайша бұл бетке бұдан былай қатынай алмайсыз.", "group": "Топ:", "group-user": "Қатысушылар", "group-autoconfirmed": "Өздіктіқұпталған қатысушылар", @@ -1100,7 +1124,7 @@ "right-noratelimit": "Еселік шектелімдері ықпал етпейді", "right-import": "Басқа уикилерден беттерді сырттан алу", "right-importupload": "Файлдарды жүктеу арқылы беттерді сырттан алу", - "right-patrol": "Басқарардың өңдемелерін зерттелді деп белгілеу", + "right-patrol": "Басқарардың өңдемелерін тексерілді деп белгілеу", "right-autopatrol": "Өз өңдемелерін тексерілді деп өздіктік белгілеу", "right-patrolmarks": "Жуықтағы өзгерістердегі зерттеу белгілерін көру", "right-unwatchedpages": "Бақыланылмаған бет тізімін көру", @@ -1147,8 +1171,8 @@ "action-rollback": "жекелік беттегі соңғы өңдеген қатысушының соңғы өңдемелерін жылдам шегіндіру", "action-import": "беттерді басқа уикиден импортау", "action-importupload": "беттерді файл жүктеуінен импорттау", - "action-patrol": "басқалардың өңдеулерін зерттелді деп белгілеу", - "action-autopatrol": "өзіңіздің өңдемеңізді зерттелді деп белгілеу", + "action-patrol": "басқалардың өңдемелерін тексерілді деп белгілеу", + "action-autopatrol": "өзіңіздің өңдемеңізді тексерілді деп белгілеу", "action-unwatchedpages": "бақыланылмаған беттер тізімін қарау", "action-mergehistory": "Бұл беттің өзгеріс тарихын қосу", "action-userrights": "Қатысушылардың барлық құқықтарын өзгерту", @@ -1227,9 +1251,9 @@ "recentchangeslinked-page": "Бет атауы:", "recentchangeslinked-to": "Керісінше, келтірілген бетке сілтейтін беттердегі өзгерістерді көрсет", "recentchanges-page-added-to-category": "[[:$1]] бетіне санат қосты", - "recentchanges-page-added-to-category-bundled": "[[:$1]] және {{PLURAL:$2|бір бет|$2 бет}} санатқа қосылды", + "recentchanges-page-added-to-category-bundled": "[[:$1]] және [[Special:WhatLinksHere/$1|{{PLURAL:$2|бір бет|$2 бет}}]] санатқа қосылды", "recentchanges-page-removed-from-category": "[[:$1]] санаттан алынды", - "recentchanges-page-removed-from-category-bundled": "[[:$1]] және {{PLURAL:$2|бір бет|$2 бет}} санаттан алынды", + "recentchanges-page-removed-from-category-bundled": "[[:$1]] және [[Special:WhatLinksHere/$1|{{PLURAL:$2|бір бет|$2 бет}}]] санаттан алынды", "autochange-username": "МедиаУики өздікті өзгерісі", "upload": "Файл жүктеу", "uploadbtn": "Файлды жүктеу", @@ -1355,7 +1379,7 @@ "backend-fail-read": "«$1» файлы оқылмайды.", "backend-fail-create": "«$1» файлы жазылмайды.", "backend-fail-maxsize": "\"$1\" файлы жазылмайды, себебі {{PLURAL:$2|1 байттан|$2 байттан}} үлкенірек.", - "backend-fail-readonly": "«$1» сақтау сервері қазіргі уақытта «тек оқу» режимінде орналасқан. Себебі: «$2»", + "backend-fail-readonly": "«$1» сақтау сервері қазіргі уақытта тек оқу режимінде орналасқан. Себебі: $2", "backend-fail-synced": "«$1» файлы ішкі сақтау серверінде келісімсіз жағдайда орналасқан", "backend-fail-connect": "«$1» сақтау серверіне байланыспады.", "backend-fail-internal": "«$1» сақтау серверінде белгісіз қате кездесті.", @@ -1675,8 +1699,6 @@ "categories-submit": "Көрсету", "categoriespagetext": "Келесі {{PLURAL:$1|санат ішінде|санаттар ішінде}} беттер немесе медиа бар.\n[[Special:UnusedCategories|Пайдаланылмаған санаттарды]] мынадан қарай аласыз.\nТағы қараңыз [[Special:WantedCategories|басталмаған санаттар]].", "categoriesfrom": "Санаттарды мынадан бастап көрсету:", - "special-categories-sort-count": "санымен сұрыптау", - "special-categories-sort-abc": "әліпбимен сұрыптау", "deletedcontributions": "Қатысушының жойылған үлесі", "deletedcontributions-title": "Қатысушының жойылған үлесі", "sp-deletedcontributions-contribs": "үлестер", @@ -1758,7 +1780,7 @@ "emailccsubject": "$1 дегенге хатыңыздың көшірмесі: $2", "emailsent": "Хат жөнелтілді", "emailsenttext": "Е-пошта хатыңыз жөнелтілді.", - "emailuserfooter": "Бұл электронды хатты {{SITENAME}} сайтындағы «{{int:emailuser}}» функцияцы арқылы $1 деген $2 дегенге жіберген.", + "emailuserfooter": "Бұл электронды хатты {{SITENAME}} сайтындағы «{{int:emailuser}}» функцияцы арқылы $1 деген {{GENDER:$2|$2}} дегенге {{GENDER:$1|жіберген}}.", "usermessage-summary": "Жүйе хабарламасы қалдырылуда.", "usermessage-editor": "Жүйе мессенжері", "watchlist": "Бақылау тізімі", @@ -1768,10 +1790,10 @@ "watchlistanontext": "Бақылау тізіміңіздегі даналарды қарау не өңдеу үшін кіріңіз.", "watchnologin": "Кірмегенсіз", "addwatch": "Бақылау тізіміңізге қосу", - "addedwatchtext": "«[[:$1]]» беті [[Special:Watchlist|бақылау тізіміңізге]] қосылды.\nБұл беттің және байланысты талқылау бетінің келешектегі өзгерістері сонда тізімделеді.", + "addedwatchtext": "«[[:$1]]» және оның талқылау беті [[Special:Watchlist|бақылау тізіміңізге]] қосылды.", "addedwatchtext-short": "«$1» беті бақылау тізіміңізге қосылды.", "removewatch": "Бақылау тізіміңізден аластату", - "removedwatchtext": "«[[:$1]]» беті [[Special:Watchlist|бақылау тізіміңізден]] аласталды.", + "removedwatchtext": "«[[:$1]]» және оның талқылау беті [[Special:Watchlist|бақылау тізіміңізден]] аласталды.", "removedwatchtext-short": "«$1» беті бақылау тізіміңізден аласталды", "watch": "Бақылау", "watchthispage": "Бұл бетті бақылау", @@ -1841,7 +1863,7 @@ "delete-toobig": "Бұл бетте үлкен түзету тарихы бар, $1 {{PLURAL:$1|түзетуден|түзетуден}} астам.\nБұндай беттердің жоюы {{SITENAME}} торабын әлдеқалай үзіп тастауына бөгет салу үшін тиымдалған.", "delete-warning-toobig": "Бұл бетте үлкен өңдеу тарихы бар, $1 {{PLURAL:$1|түзетуден|түзетуден}} астам.\nБұның жоюы {{SITENAME}} торабындағы дерекқор әрекеттерді үзіп тастауын мүмкін;\nбұны абайлап өткізіңіз.", "deleteprotected": "Сіз бұл бетті жоя алмайсыз, себебі ол қорғалған.", - "deleting-backlinks-warning": "'''Ескерту:''' Сіз жоймақшы болған бетке [[Special:WhatLinksHere/{{FULLPAGENAME}}|басқа беттерден]] сілтенген немесе [[Special:WhatLinksHere/{{FULLPAGENAME}}|басқа беттерге]] кірістірілген.", + "deleting-backlinks-warning": "
Ескерту: Сіз жоймақшы болған бетке [[Special:WhatLinksHere/{{FULLPAGENAME}}|басқа беттерден]] сілтенген немесе [[Special:WhatLinksHere/{{FULLPAGENAME}}|басқа беттерге]] кірістірілген.", "rollback": "Өңдемелерді шегіндіру", "rollbacklink": "шегіндіру", "rollbacklinkcount": "$1 {{PLURAL:$1|өңдемені|өңдемені}} шегіндіру", @@ -2008,7 +2030,7 @@ "whatlinkshere-submit": "Өту", "autoblockid": "#$1 өздікбұғаттауы", "block": "Қатысушыны бұғаттау", - "unblock": "Қатысушыны бұғаттауынан босату", + "unblock": "Қатысушыны бұғатынан босату", "blockip": "{{GENDER:$1|Қатысушыны}} бұғаттау", "blockip-legend": "Қатысушыны бұғаттау", "blockiptext": "Төмендегі форманы жазу рұқсатын белгілі IP мекенжайынан не қатысушы есімінен бұғаттау үшін қолданыңыз.\nБұны тек бұзақылықты болдырмау үшін және де [[{{MediaWiki:Policy-url}}|ережелер]] бойынша атқаруыңыз кажет.\nТөменге тиісті себебін көрсетіңіз (мысалы дәлелге бұзақылықпен өзгертілген беттерді келтіріңіз).", @@ -2035,11 +2057,11 @@ "ipb-confirmhideuser": "Сіз қатысушыны бұғаттауда «қатысушыны жасыру» параметрін қосқасыз. Бұл барлық тізімдерден және журнал жазбаларынан қатысушы есімін жасырады. Сіз шынымен бұлай жасауды қалайсыз ба?", "ipb-confirmaction": "Егер сіз шынымен оны істеуді қаласаңыз, төмендегі жолақтан «{{int:ipb-confirm}}» дегенді белгілеңіз.", "ipb-edit-dropdown": "Бұғаттау себептерін өңдеу", - "ipb-unblock-addr": "$1 дегенді бұғаттауынан босату", + "ipb-unblock-addr": "$1 дегенді бұғатынан босату", "ipb-unblock": "Қатысушы атын немесе IP мекенжайын бұғаттамау", "ipb-blocklist": "Бұғатталғандарды қарау", "ipb-blocklist-contribs": "{{GENDER:$1|$1}} есімді қатысушының үлесі", - "unblockip": "Қатысушыны бұғаттауынан босату", + "unblockip": "Қатысушыны бұғатынан босату", "unblockiptext": "Төмендегі форманы IP мекенжайымен не қатысушы есімімен алдын-ала бұғатталған қатысушыға жазу рұқсатын қалпына келтіріу үшін қолданыңыз.", "ipusubmit": "Осы бұғаттауды алып тастау", "unblocked": "[[User:$1|$1]] бұғаттауы өшірілді", @@ -2082,8 +2104,8 @@ "blocklog-showsuppresslog": "Бұл қатысушы ұдайы жасырылып және бұғатталып отырған.\nДерек үшін төменде жасыру журналы берілген:", "blocklogentry": "[[$1]] дегенді $2 мерзімге бұғаттады $3", "reblock-logentry": "[[$1]] дегеннің бұғатталу мерзімінің аяқталуын $2 $3 дегенге өзгертті.", - "blocklogtext": "Бұл қатысушыларды бұғаттау және бұғаттауынан босату әрекеттерінің журналы.\nӨздіктік бұғатталған IP мекенжайлар тізімделмеген.\nҚазіргі уақыттағы белсенді тиымдар мен бұғаттауларды [[Special:BlockList|бұғаттау тізімінен]] қараңыз.", - "unblocklogentry": "$1 есімді қатысушыны бұғаттауынан босатты", + "blocklogtext": "Бұл қатысушыларды бұғаттау және бұғатынан босату әрекеттерінің журналы.\nӨздіктік бұғатталған IP мекенжайлар тізімделмеген.\nҚазіргі уақыттағы белсенді тиымдар мен бұғаттауларды [[Special:BlockList|бұғаттау тізімінен]] қараңыз.", + "unblocklogentry": "$1 есімді қатысушыны бұғатынан босатты", "block-log-flags-anononly": "тек аноним қатысушылар", "block-log-flags-nocreate": "тіркелуін өшірді", "block-log-flags-noautoblock": "автобұғаттау өшірілген", @@ -2278,19 +2300,15 @@ "import-logentry-upload-detail": "$1 {{PLURAL:$1|нұсқа|нұсқа}} импортталды", "import-logentry-interwiki-detail": "$2 дегеннен $1 {{PLURAL:$1|нұсқа|нұсқа}} импортталды", "javascripttest": "JavaScript сынақталуда", - "javascripttest-pagetext-noframework": "Бұл бет JavaScript сынақтарын жүргізу үшін резервтелген.", - "javascripttest-pagetext-unknownframework": "«$1» белгісіз сынау ортасы.", "javascripttest-pagetext-unknownaction": "Белгісіз әрекет «$1».", - "javascripttest-pagetext-frameworks": "Келесі сынау ортасының біреуін таңдаңыз: $1", - "javascripttest-pagetext-skins": "Сынақ жүргізу үшін мәнерді таңдаңыз:", "javascripttest-qunit-intro": "[$1 сынақтау құжаттамасын] mediawiki.org-тен қара.", "tooltip-pt-userpage": "Жеке бетіңіз", "tooltip-pt-anonuserpage": "Бұл IP мекенжайдың жеке беті", "tooltip-pt-mytalk": "Талқылау бетіңіз", "tooltip-pt-anontalk": "Бұл IP мекенжай өңдемелерін талқылау", - "tooltip-pt-preferences": "Бапталымдарым", + "tooltip-pt-preferences": "{{GENDER:|Бапталымдарым}}", "tooltip-pt-watchlist": "Өзгерістерін бақылап тұрған беттер тізімім.", - "tooltip-pt-mycontris": "Өңдеулеріңіздің тізімі", + "tooltip-pt-mycontris": "{{GENDER:|Үлестеріңіздің}} тізімі", "tooltip-pt-anoncontribs": "Бұл IP мекенжаймен жасаған өңдемелер тізімі", "tooltip-pt-login": "Кіруіңізді ұсынамыз, ол міндетті емес.", "tooltip-pt-logout": "Шығу", @@ -2322,7 +2340,7 @@ "tooltip-t-recentchangeslinked": "Мыннан сілтенген беттердің жуықтағы өзгерістері", "tooltip-feed-rss": "Бұл беттің RSS арнасы", "tooltip-feed-atom": "Бұл беттің Atom арнасы", - "tooltip-t-contributions": "Осы қатысушының үлестерінің тізімі", + "tooltip-t-contributions": "{{GENDER:$1|Осы қатысушының}} үлестері тізімі", "tooltip-t-emailuser": "Осы қатысушыға хат жөнелту", "tooltip-t-info": "Бұл бет туралы көбірек мәлімет", "tooltip-t-upload": "Файлдарды жүктеу", @@ -2420,14 +2438,14 @@ "pageinfo-category-pages": "Беттер саны", "pageinfo-category-subcats": "Санатшалар саны", "pageinfo-category-files": "Файлдар саны", - "markaspatrolleddiff": "Зерттелді деп белгілеу", + "markaspatrolleddiff": "Тексерілді деп белгілеу", "markaspatrolledtext": "Бұл бетті тексерілді деп белгілеу", "markedaspatrolled": "Тексерілді деп белгіленді", "markedaspatrolledtext": "Бөлектенген нұсқа [[:$1]] тексерілді деп белгіленді.", "rcpatroldisabled": "Жуықтағы өзгерістерді зерттеуі өшірілген", "rcpatroldisabledtext": "Жуықтағы өзгерістерді зерттеу мүмкіндігі ағымда өшірілген.", "markedaspatrollederror": "Зерттелді деп белгіленбейді", - "markedaspatrollederrortext": "Зерттелді деп белгілеу үшін түзетуді келтіріңіз.", + "markedaspatrollederrortext": "Тексерілді деп белгілеу үшін түзетуді келтіріңіз.", "markedaspatrollederror-noautopatrol": "Өз жасаған өзгерістеріңізді зерттелді деп белгілей алмайсыз.", "markedaspatrollednotify": "$1 бетіндегі бұл өзгеріс тексерілді деп белгіленді.", "markedaspatrollederrornotify": "Тексерілді деп белгіленбеді.", @@ -2481,7 +2499,7 @@ "seconds-abbrev": "$1с", "minutes-abbrev": "$1мин", "hours-abbrev": "$1сағ", - "seconds": "{{PLURAL:$1|$1 секунт|$1 секунт}}", + "seconds": "{{PLURAL:$1|$1 секунд|$1 секунд}}", "minutes": "{{PLURAL:$1|$1 минут|$1 минут}}", "hours": "{{PLURAL:$1|$1 сағат|$1 сағат}}", "days": "{{PLURAL:$1|$1 күн|$1 күн}}", @@ -2540,8 +2558,8 @@ "exif-colorspace": "Түс кеңістігі", "exif-componentsconfiguration": "Әрқайсы құраш мәні", "exif-compressedbitsperpixel": "Сурет қысымдау тәртібі", - "exif-pixelydimension": "Сурет ені", - "exif-pixelxdimension": "Сурет биіктігі", + "exif-pixelxdimension": "Сурет ені", + "exif-pixelydimension": "Сурет биіктігі", "exif-usercomment": "Қатысушы пікірі", "exif-relatedsoundfile": "Қатысты дыбыс файлы", "exif-datetimeoriginal": "Жасалған кезі", @@ -2870,7 +2888,7 @@ "scarytranscludefailed-httpstatus": "[$1: HTTP $2 үшін үлгі келтіруі сәтсіз болды]", "scarytranscludetoolong": "[URL тым ұзын]", "deletedwhileediting": "Ескету: Бұл бетті өңдеуіңізді бастағанда, осы бет жойылды!", - "confirmrecreate": "Бұл бетті өңдеуіңізді бастағанда [[User:$1|$1]] ([[User talk:$1|талқылауы]]) осы бетті жойды, келтірген себебі:\n: ''$2''\nОсы бетті қайта бастауын нақты тілегеніңізді құптаңыз.", + "confirmrecreate": "Бұл бетті өңдеуіңізді бастағанда [[User:$1|$1]] ([[User talk:$1|талқылауы]]) осы бетті жойды, келтірген себебі:\n: $2\nОсы бетті қайта бастауын нақты тілегеніңізді құптаңыз.", "confirmrecreate-noreason": "Бұл бетті өңдеп бастағаныңызда [[User:$1|$1]] ([[User talk:$1|талқылауы]]) жойды. \nОсы бетті қайта бастауын нақты тілегеніңізді құптаңыз.", "recreate": "Қайта бастау", "unit-pixel": " нүкте", @@ -3024,7 +3042,6 @@ "version-libraries-description": "Сипаттамасы", "version-libraries-authors": "Автор(лары)", "redirect": "Файл, қатысушы, бет немесе нұсқа ID-і бойынша бағыттаулар", - "redirect-legend": "Файл немесе бетке айдатулар", "redirect-summary": "Бұл арнайы бет файлға (файл атауы берілген), бетке (нұсқа ID-і немесе бет ID-і берілген), не қатысушы бетіне бағыттайды (қатысушы сандық ID-і берілген). Қолданылуы: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/page/64308]], [[{{#Special:Redirect}}/revision/328429]], немесе [[{{#Special:Redirect}}/user/101]].", "redirect-submit": "Өту", "redirect-lookup": "Іздеу:", @@ -3036,7 +3053,6 @@ "redirect-not-exists": "Мән табылмады", "fileduplicatesearch": "Файл телнұсқаларын іздеу", "fileduplicatesearch-summary": "Файл хеші мағынасы негізінде телнұсқаларын іздеу.", - "fileduplicatesearch-legend": "Телнұсқаны іздеу", "fileduplicatesearch-filename": "Файл атауы:", "fileduplicatesearch-submit": "Іздеу", "fileduplicatesearch-info": "$1 × $2 пиксел (нүкте)
Файл өлшемі: $3
MIME түрі: $4", @@ -3133,7 +3149,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": "Мына тегтерді аластау:", @@ -3143,7 +3159,7 @@ "tags-edit-reason": "Себебі:", "tags-edit-revision-submit": "{{PLURAL:$1|Бұл нұсқадағы|$1 нұсқадағы}} өзгерістерді қолдану", "tags-edit-logentry-submit": "{{PLURAL:$1|Бұл журнал жазбасындағы|$1 журнал жазбасындағы}} өзгерістерді қолдану", - "tags-edit-success": "Өзгерістер сәтті қолданылды.", + "tags-edit-success": "Өзгерістер қолданылды.", "tags-edit-failure": "Өзгерістер қолданылмады: $1", "tags-edit-nooldid-title": "Нысана түзету жарамсыз", "tags-edit-nooldid-text": "Бұл функцияны орындау үшін толық нұсқасын сұрамағансыз немесе көрсетілген нұсқа жоқ.", @@ -3278,7 +3294,7 @@ "api-error-badaccess-groups": "Сізге бұл уикиге файл жүктеуге рұқсат етілмеген.", "api-error-badtoken": "Ішкі қате: Жаман байрақша", "api-error-copyuploaddisabled": "URL бойынша жүктеу бұл серверде өшірілген", - "api-error-duplicate": "{{PLURAL:$1|басқа файл|кейбір басқа файл}} әлеқашан сайтта басқа мазмұнда бар.", + "api-error-duplicate": "{{PLURAL:$1|басқа [$2 файл]|кейбір [$2 басқа файл]}} әлеқашан сайтта ,бірдей мазмұнда бар.", "api-error-empty-file": "Сіз жіберген файл бос.", "api-error-emptypage": "Бос бетті жаңадан бастау рұқсат етілмейді.", "api-error-fetchfileerror": "Ішкі қателік: Файлды алу барысында қате кетті.", @@ -3320,7 +3336,7 @@ "api-error-unknownerror": "Белгісіз қате: \"$1\".", "api-error-uploaddisabled": "Бұл уикиде жүктеп беру өшірілген.", "api-error-verification-error": "Бұл файл бүлінген болуы мүмкін немесе теріс кеңейтуі бар.", - "duration-seconds": "$1 {{PLURAL:$1|секунт|секунт}}", + "duration-seconds": "$1 {{PLURAL:$1|секунд|секунд}}", "duration-minutes": "$1 {{PLURAL:$1|минут|минут}}", "duration-hours": "$1 {{PLURAL:$1|сағат|сағат}}", "duration-days": "$1 {{PLURAL:$1|күн|күн}}", @@ -3332,9 +3348,9 @@ "rotate-comment": "Сурет сағат бағытымен $1 {{PLURAL:$1|бұрыш|бұрыш}} айналды", "limitreport-title": "Деректер анализаторы:", "limitreport-cputime": "CPU уақытында қолданылуы", - "limitreport-cputime-value": "$1 {{PLURAL:$1|секунт|секунт}}", + "limitreport-cputime-value": "$1 {{PLURAL:$1|секунд|секунд}}", "limitreport-walltime": "Нақты уақытта қолданылуы", - "limitreport-walltime-value": "$1 {{PLURAL:$1|секунт|секунт}}", + "limitreport-walltime-value": "$1 {{PLURAL:$1|секунд|секунд}}", "limitreport-ppvisitednodes": "Аралаған түйіндер саны", "limitreport-ppgeneratednodes": "Препроцессордың жинақталатын түйіндерінің саны", "limitreport-postexpandincludesize": "Кірістірілген ашық мөлшері", @@ -3358,7 +3374,7 @@ "expand_templates_preview": "Қарап шығу", "expand_templates_preview_fail_html": "Мұнда сессия деректері жоғалған, себебі {{SITENAME}} жобасында HTML іске қосылған, JavaScript шабуылдарына қарсы сақтық шарасы үшін алдын ала қарап шығу жасырылған.\n\nЕгер бұл өңдеме адал ниетті әрекет болса қайта байқап көріңіз. \nЕгер бұл әлі істемесе жүйеден [[Special:UserLogout|шығып]] қайта кіріп көріңіз.", "expand_templates_preview_fail_html_anon": "JavaScript шабуылдарына қарсы сақтық шарасы үшін алдын ала қарап шығу жасырылған, себебі {{SITENAME}} жобасында HTML іске қосылған және сіз жүйеге кірмегенсіз,.\n\nЕгер бұл өңдеме адал ниетті әрекет болса қайта байқап көріңіз. \nЕгер бұл әлі істемесе, жүйеге [[Special:UserLogin|кіріп]] қайта байқап көріңіз.", - "pagelanguage": "Тіл таңдау беті", + "pagelanguage": "Бет тілін өзгерту", "pagelang-name": "Бет", "pagelang-language": "Тіл", "pagelang-use-default": "Әдепкі тілді қолдану", @@ -3366,7 +3382,7 @@ "pagelang-submit": "Жөнелту", "right-pagelang": "Бет тілін аудару", "action-pagelang": "бет тілін аудару", - "log-name-pagelang": "Тіл журналын өзгерту", + "log-name-pagelang": "Тіл өзгерту журналы", "log-description-pagelang": "Бұл бет тілдерін өзгерту журналы.", "logentry-pagelang-pagelang": "$1 $3 беті үшін $4 дегеннен $5 дегенге бет тілін {{GENDER:$2|өзгертті}}.", "default-skin-not-found-row-enabled": "* $1 / $2 (ендірілген)", diff --git a/languages/i18n/kk-latn.json b/languages/i18n/kk-latn.json index b4a3d526f1..4357312d56 100644 --- a/languages/i18n/kk-latn.json +++ b/languages/i18n/kk-latn.json @@ -910,8 +910,6 @@ "categories": "Sanattar", "categoriespagetext": "Kelesi sanattar işinde better ne taspalar bar.\n[[Special:UnusedCategories|Unused categories]] are not shown here.\nAlso see [[Special:WantedCategories|wanted categories]].", "categoriesfrom": "Sanattardı mınadan bastap körsetw:", - "special-categories-sort-count": "sanımen surıptaw", - "special-categories-sort-abc": "älipbïmen surıptaw", "deletedcontributions": "Qatıswşınıñ joýılğan ülesi", "deletedcontributions-title": "Qatıswşınıñ joýılğan ülesi", "linksearch": "Sırtqı siltemelerdi izdew", @@ -1420,8 +1418,8 @@ "exif-colorspace": "Tüs ayası", "exif-componentsconfiguration": "Ärqaýsı quraş mäni", "exif-compressedbitsperpixel": "Swret qısımdaw tärtibi", - "exif-pixelydimension": "Swrettiñ jaramdı eni", - "exif-pixelxdimension": "Swrettiñ jaramdı bïiktigi", + "exif-pixelxdimension": "Swrettiñ jaramdı eni", + "exif-pixelydimension": "Swrettiñ jaramdı bïiktigi", "exif-usercomment": "Qatıswşınıñ mändemeleri", "exif-relatedsoundfile": "Qatıstı dıbıs faýlı", "exif-datetimeoriginal": "Jasalğan kezi", @@ -1720,7 +1718,6 @@ "version-software-version": "Nusqası", "fileduplicatesearch": "Faýl telnusqaların izdew", "fileduplicatesearch-summary": "Faýl xeşi mağınası negizinde telnusqaların izdew.", - "fileduplicatesearch-legend": "Telnusqanı izdew", "fileduplicatesearch-filename": "Faýl atawı:", "fileduplicatesearch-submit": "İzde", "fileduplicatesearch-info": "$1 × $2 pïksel
Faýl mölşeri: $3
MIME türi: $4", diff --git a/languages/i18n/km.json b/languages/i18n/km.json index e298a9834c..95a8feefa3 100644 --- a/languages/i18n/km.json +++ b/languages/i18n/km.json @@ -1510,8 +1510,6 @@ "categories": "ចំណាត់ថ្នាក់ក្រុម", "categoriespagetext": "{{PLURAL:$1|ចំណាត់ថ្នាក់ក្រុម|ចំណាត់ថ្នាក់ក្រុម}}ខាងក្រោមនេះមានអត្ថបទឬមេឌា។\n[[Special:UnusedCategories|ចំណាត់ថ្នាក់ក្រុមមិនប្រើ]]ត្រូវបានបង្ហាញទីនេះ។\nសូមមើលផងដែរ [[Special:WantedCategories|ចំណាត់ថ្នាក់ក្រុមដែលគ្រប់គ្នាចង់បាន]]។", "categoriesfrom": "បង្ហាញចំណាត់ថ្នាក់ក្រុមចាប់ផ្តើមដោយ៖", - "special-categories-sort-count": "តម្រៀបតាមចំនួន", - "special-categories-sort-abc": "តម្រៀបតាមអក្ខរក្រម", "deletedcontributions": "ការរួមចំណែកដែលត្រូវបានលុបចោល", "deletedcontributions-title": "ការរួមចំណែកដែលត្រូវបានលុបចោល", "sp-deletedcontributions-contribs": "ការរួមចំណែក​", @@ -2240,8 +2238,8 @@ "exif-flashpixversion": "បានគាំទ្រ កំណែ Flashpix", "exif-colorspace": "លំហពណ៌", "exif-compressedbitsperpixel": "កម្រិតហាប់ នៃរូបភាព (ប៊ិត/ចំណុច)", - "exif-pixelydimension": "ទទឹងរូបភាព", - "exif-pixelxdimension": "កម្ពស់រូបភាព", + "exif-pixelxdimension": "ទទឹងរូបភាព", + "exif-pixelydimension": "កម្ពស់រូបភាព", "exif-usercomment": "យោបល់របស់អ្នកប្រើប្រាស់", "exif-relatedsoundfile": "ឯកសារសំឡេងពាក់ព័ន្ធ", "exif-datetimeoriginal": "ពេលវេលានិងកាលបរិច្ឆេទបង្កើតទិន្នន័យ", @@ -2554,7 +2552,6 @@ "redirect-file": "ឈ្មោះឯកសារ", "redirect-not-exists": "តម្លៃរ​រកមិនឃើញ​", "fileduplicatesearch": "ស្វែងរកឯកសារដូចគ្នាបេះបិទ", - "fileduplicatesearch-legend": "ស្វែងរកឯកសារដូចគ្នាបេះបិទ", "fileduplicatesearch-filename": "ឈ្មោះឯកសារ៖", "fileduplicatesearch-submit": "ស្វែងរក", "fileduplicatesearch-info": "$1 × $2 ភីកសែល
ទំហំឯកសារ:$3
ប្រភេទMIME:$4", diff --git a/languages/i18n/kn.json b/languages/i18n/kn.json index a090015f07..50f3aa562e 100644 --- a/languages/i18n/kn.json +++ b/languages/i18n/kn.json @@ -26,7 +26,8 @@ "Pavanaja", "Ananth subray", "MarcoAurelio", - "Macofe" + "Macofe", + "రహ్మానుద్దీన్" ] }, "tog-underline": "ಕೊಂಡಿಗಳ ಕೆಳಗೆ ಗೆರೆ ತೋರಿಸಿ", @@ -390,7 +391,7 @@ "welcomeuser": "ಸುಸ್ವಾಗತ,$1!", "welcomecreation-msg": "ನಿಮ್ಮ ಖಾತೆ ತೆರೆಯಲಾಗಿದೆ.ನಿಮ್ಮ [[Special:Preferences|{{SITENAME}} preferences]]ಬದಲಾಯಿಸಲು ಮರೆಯಬೇಡಿ.", "yourname": "ನಿಮ್ಮ ಬಳಕೆಯ ಹೆಸರು", - "userlogin-yourname": "ಬಳಕೆದಾರ ಹೆಸರು", + "userlogin-yourname": "ಬಳಕೆದಾರರ ಹೆಸರು", "userlogin-yourname-ph": "ನಿಮ್ಮ ಸದಸ್ಯನಾಮ ಬರೆಯಿರಿ", "createacct-another-username-ph": "ಬಳಕೆದಾರರ ಹೆಸರು ಬರೆಯಿರಿ", "yourpassword": "ನಿಮ್ಮ ಪ್ರವೇಶಪದ", @@ -500,7 +501,7 @@ "resetpass-recycled": "ದಯವಿಟ್ಟು ಈಗಿನ ಪ್ರವೇಶಪದದ ಬದಲು ಹೊಸಪ್ರವೇಶಪದ ಬದಲಾಯಿಸಿ ಮರುಚಾಲನೆ ನೀಡಿ.", "resetpass-temp-password": "ತಾತ್ಕಾಲಿಕ ಪ್ರವೇಶಪದ:", "passwordreset": "ಪ್ರವೇಶಪದವನ್ನು ಪುನಃಸ್ಥಾಪಿಸಿ.", - "passwordreset-username": "ಬಳಕೆದಾರ ಹೆಸರು:", + "passwordreset-username": "ಬಳಕೆದಾರರ ಹೆಸರು:", "passwordreset-domain": "ಕ್ಷೇತ್ರ:", "passwordreset-email": "ಇ-ಮೇಲ್ ವಿಳಾಸ:", "passwordreset-emailsentemail": "ಪ್ರವೇಶಪದವನ್ನು ಪುನಃಸ್ಥಾಪಿಸಿದ ಮಿಂಚಂಚೆಯನ್ನು ಕಳುಹಿಸಲಾಗಿದೆ.", @@ -1213,7 +1214,7 @@ "usereditcount": "$1{{PLURAL:$1|ಸಂಪಾದನೆ|ಸಂಪಾದನೆಗಳು}}", "usercreated": "$1 ರಂದು $2 ಸಮಯಕ್ಕೆ {{GENDER:$3|ಸೃಷ್ಟಿಸಿದರು}}", "newpages": "ಹೊಸ ಪುಟಗಳು", - "newpages-username": "ಬಳಕೆದಾರ ಹೆಸರು:", + "newpages-username": "ಬಳಕೆದಾರರ ಹೆಸರು:", "ancientpages": "ಹಳೆಯ ಪುಟಗಳು", "move": "ಸ್ಥಳಾಂತರಿಸಿ", "movethispage": "ಈ ಪುಟವನ್ನು ಸ್ಥಳಾಂತರಿಸಿ", @@ -1247,8 +1248,6 @@ "categories": "ವರ್ಗಗಳು", "categoriespagetext": "ಈ ಕೆಳಗಿನ ವರ್ಗಗಳು ಪುಟಗಳನ್ನು ಅಥವ ಮೀಡಿಯಗಳನ್ನು ಹೊಂದಿವೆ.\n[[Special:UnusedCategories|ಅನುಪಯೋಗಿತ ವರ್ಗಗಳು]] ಇಲ್ಲಿ ತೋರಲಾಗಿಲ್ಲ.\nಇದನ್ನೂ ನೋಡಿ: [[Special:WantedCategories|ಬೇಕಾಗಿರುವ ವರ್ಗಗಳು]].", "categoriesfrom": "ಇದರಿಂದ ಪ್ರಾರಂಭವಾಗುವ ವರ್ಗಗಳನ್ನು ತೋರಿಸು:", - "special-categories-sort-count": "ಎಣಿಕೆಯ ಪ್ರಕಾರ ಜೋಡಿಸು", - "special-categories-sort-abc": "ಅಕ್ಷರಮಾಲೆಯ ಪ್ರಕಾರ ಜೋಡಿಸು", "deletedcontributions": "ಅಳಿಸಲಾಗಿದೆ ಕಾಣಿಕೆಗಳನ್ನು", "sp-deletedcontributions-contribs": "ಕಾಣಿಕೆಗಳು", "linksearch": "ಹೊರಗಿನ ಸಂಪರ್ಕಗಳು", @@ -1280,7 +1279,7 @@ "usermaildisabled": "ಬಳಕೆದಾರರ ಮಿಂಚಂಚೆಯನ್ನು ನಿಷ್ಕ್ತಿಯಗೊಳಿಸಲಾಗಿದೆ", "noemailtitle": "ಯಾವುದೇ ಇ-ಅಂಚೆ ವಿಳಾಸ ಇಲ್ಲ", "noemailtext": "ಈ ಸದಸ್ಯ ಯಾವುದೇ ಇ-ಅಂಚೆ ವಿಳಾಸ ನೀಡಿಲ್ಲ, ಅಥವ ಬೇರೆ ಸದಸ್ಯರಿಂದ ಇ-ಅಂಚೆ ಪಡೆಯಲು ಒಪ್ಪಿಕೊಂಡಿಲ್ಲ.", - "emailusername": "ಬಳಕೆದಾರ ಹೆಸರು:", + "emailusername": "ಬಳಕೆದಾರರ ಹೆಸರು:", "emailusernamesubmit": "ಒಪ್ಪಿಸು", "emailfrom": "ಇಂದ:", "emailto": "ಗೆ:", @@ -1705,8 +1704,8 @@ "exif-artist": "ಕರ್ತೃ", "exif-copyright": "ಕೃತಿಸ್ವಾಮ್ಯತೆಯನ್ನು ಹೊಂದಿರುವವರು", "exif-exifversion": "Exif ಆವೃತ್ತಿ", - "exif-pixelydimension": "ಭಾವಚಿತ್ರದ ಅಗಲ", - "exif-pixelxdimension": "ಭಾವಚಿತ್ರದ ಎತ್ತರ", + "exif-pixelxdimension": "ಭಾವಚಿತ್ರದ ಅಗಲ", + "exif-pixelydimension": "ಭಾವಚಿತ್ರದ ಎತ್ತರ", "exif-usercomment": "ಬಳಕೆದಾರನ ಟಿಪ್ಪಣಿ", "exif-relatedsoundfile": "ಸಂಬಂಧಿತ ಧ್ವನಿ ಫೈಲು", "exif-datetimeoriginal": "ಮಾಹಿತಿ ಸೃಷ್ಟಿಯಾದ ದಿನಾಂಕ ಮತ್ತು ಕಾಲ", @@ -1834,7 +1833,6 @@ "redirect-page": "ಪುಟದ ID", "redirect-file": "ಕಡತದ ಹೆಸರು", "fileduplicatesearch": "ದ್ವಿಪ್ರತಿ ಫೈಲುಗಳಿಗೆ ಹುಡುಕು", - "fileduplicatesearch-legend": "ದ್ವಿಪ್ರತಿಯನ್ನು ಹುಡುಕು", "fileduplicatesearch-filename": "ಫೈಲಿನ ಹೆಸರು:", "fileduplicatesearch-submit": "ಹುಡುಕು", "fileduplicatesearch-info": "$1 × $2 ಚಿತ್ರಬಿಂದು
ಫೈಲಿನ ಗಾತ್ರ: $3
MIME ಪ್ರಕಾರ: $4", diff --git a/languages/i18n/ko.json b/languages/i18n/ko.json index 7ab3abbe01..63d53ef4b9 100644 --- a/languages/i18n/ko.json +++ b/languages/i18n/ko.json @@ -498,9 +498,9 @@ "nocookieslogin": "{{SITENAME}}에서는 로그인을 위해 쿠키를 사용합니다.\n쿠키가 비활성되어 있습니다.\n쿠키 사용을 활성화한 다음 다시 시도하세요.", "nocookiesfornew": "요청의 출처를 확인할 수 없기 때문에 사용자 계정이 만들어지지 않았습니다.\n쿠키를 활성화한 것을 확인하고, 이 문서를 새로 고치고 나서 다시 시도하세요.", "noname": "사용자 계정 이름이 올바르지 않습니다.", - "loginsuccesstitle": "로그인 성공", + "loginsuccesstitle": "로그인함", "loginsuccess": "{{SITENAME}}에 \"$1\" 계정으로 로그인했습니다.", - "nosuchuser": "\"$1\" 사용자가 존재하지 않습니다.\n사용자 계정 이름은 대소문자를 구별합니다.\n철자가 맞는지 확인해주세요. [[Special:UserLogin/signup|새 계정을 만들 수도 있습니다]].", + "nosuchuser": "이름이 \"$1\"인 사용자는 없습니다.\n사용자 계정 이름은 대소문자를 구별합니다.\n철자가 맞는지 확인해주세요. [[Special:UserLogin/signup|새 계정을 만들 수도 있습니다]].", "nosuchusershort": "이름이 \"$1\"인 사용자는 없습니다.\n철자가 맞는지 확인하세요.", "nouserspecified": "사용자 계정 이름을 입력하지 않았습니다.", "login-userblocked": "이 사용자는 차단되었습니다. 로그인할 수 없습니다.", @@ -554,7 +554,7 @@ "newpassword": "새 비밀번호:", "retypenew": "새 비밀번호 다시 입력:", "resetpass_submit": "비밀번호를 설정하고 로그인하기", - "changepassword-success": "비밀번호가 성공적으로 바뀌었습니다!", + "changepassword-success": "비밀번호가 바뀌었습니다!", "changepassword-throttled": "최근 너무 많이 로그인을 시도했습니다.\n$1 뒤에 다시 시도하세요.", "botpasswords": "봇 비밀번호", "botpasswords-disabled": "봇 비밀번호가 비활성화되었습니다.", @@ -574,11 +574,11 @@ "botpasswords-insert-failed": "\"$1\" 봇 이름을 추가하는데 실패했습니다. 이미 등록되지 않았는지 확인하기 바랍니다.", "botpasswords-update-failed": "\"$1\" 봇 이름을 갱신하는데 실패했습니다. 이미 삭제되지 않았는지 확인하기 바랍니다.", "botpasswords-created-title": "봇 비밀번호 생성", - "botpasswords-created-body": "\"$1\"의 봇 비밀번호가 성공적으로 만들어졌습니다.", + "botpasswords-created-body": "사용자 \"$2\"의 \"$1\"라는 이름의 봇 비밀번호가 만들어졌습니다.", "botpasswords-updated-title": "봇 비밀번호 갱신", - "botpasswords-updated-body": "\"$1\"의 봇 비밀번호가 성공적으로 갱신되었습니다.", + "botpasswords-updated-body": "사용자 \"$2\"의 \"$1\"라는 이름의 봇 비밀번호가 업데이트되었습니다.", "botpasswords-deleted-title": "봇 비밀번호 제거", - "botpasswords-deleted-body": "\"$1\"의 봇 비밀번호가 제거되었습니다.", + "botpasswords-deleted-body": "사용자 \"$2\"의 \"$1\"라는 이름의 봇 비밀번호가 삭제되었습니다.", "botpasswords-newpassword": "$1 계정의 비밀번호가 $2로 변경되었습니다. 잊어버리지 않도록 기록해두시기 바랍니다.", "botpasswords-no-provider": "'BotPasswordsSessionProvider'는 이용할 수 없습니다.", "botpasswords-restriction-failed": "봇 비밀번호 제한으로 인해 로그인할 수 없습니다.", @@ -587,7 +587,7 @@ "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-password": "임시 비밀번호:", @@ -669,7 +669,7 @@ "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이고, 차단 ID는 #$5입니다.\n문의할 때에 이 정보를 같이 알려주세요.", - "autoblockedtext": "당신의 IP 주소는 $1 사용자가 차단한 사용자가 사용했던 IP이기 때문에 자동으로 차단되었습니다.\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이고, 차단 ID는 #$5입니다.\n문의할 때에 이 정보를 같이 알려주세요.", + "autoblockedtext": "당신의 IP 주소는 $1님이 차단한 사용자가 사용했던 IP이기 때문에 자동으로 차단되었습니다.\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이고, 차단 ID는 #$5입니다.\n문의할 때에 이 정보를 같이 알려주세요.", "blockednoreason": "이유를 입력하지 않음", "whitelistedittext": "문서를 편집하기 전에 $1해야 합니다.", "confirmedittext": "문서를 고치려면 이메일 인증 절차가 필요합니다.\n[[Special:Preferences|사용자 환경 설정]]에서 이메일 주소를 입력하고 이메일 주소 인증을 해주시기 바랍니다.", @@ -702,7 +702,7 @@ "previewnote": "'''이 화면은 미리 보기입니다.'''\n편집한 내용은 아직 저장하지 않았습니다!", "continue-editing": "편집 영역으로 가기", "previewconflict": "이 미리 보기는 저장할 때의 모습으로 위쪽 편집창의 문서를 반영합니다.", - "session_fail_preview": "세션 데이터가 없어져 편집을 저장하지 못했습니다.\n\n로그아웃 되었는지도 모릅니다. '''아직 로그인 상태인지 확인하고 다시 시도해주세요.'''\n다시 시도해도 되지 않으면 [[Special:UserLogout|로그아웃]]한 다음 다시 로그인하세요. 그리고 브라우저 설정에서 쿠키 사용을 허용하는지 확인하세요.", + "session_fail_preview": "세션 데이터가 없어져 편집을 저장하지 못했습니다.\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": "'''편집의 일부 내용이 서버에 전달되지 않았습니다. 편집이 손상되지 않았는지 확인하고 다시 시도해 주십시오.'''", @@ -721,7 +721,7 @@ "copyrightwarning2": "{{SITENAME}}에서의 모든 기여는 다른 사용자가 편집, 수정, 삭제할 수 있다는 점을 유의해 주세요.\n만약 여기에 동의하지 않는다면, 문서를 저장하지 말아 주세요.
\n또한, 직접 작성했거나 퍼블릭 도메인과 같은 자유 문서에서 가져왔다는 것을 보증해야 합니다 (자세한 내용에 대해서는 $1 문서를 읽어 주세요).\n'''저작권이 있는 내용을 허가 없이 저장하지 마세요!'''", "editpage-cannot-use-custom-model": "이 문서의 콘텐츠 모델은 변경될 수 없습니다.", "longpageerror": "'''오류: 문서의 크기가 {{PLURAL:$1|$1킬로바이트}}로 최대 크기인 {{PLURAL:$2|$2킬로바이트}}보다 큽니다.'''\n저장할 수 없습니다.", - "readonlywarning": "경고: 데이터베이스가 관리를 위해 잠겨 있습니다. 따라서 문서를 편집한 내용을 지금 저장할 수 없습니다.\n편집 내용을 복사하여 붙여넣기 등을 사용하여 일단 다른 곳에 저장한 후, 나중에 다시 시도해 주세요.\n\n잠근 관리자가 남긴 설명은 다음과 같습니다: $1", + "readonlywarning": "경고: 데이터베이스가 관리를 위해 잠겨 있습니다. 따라서 문서를 편집한 내용을 지금 저장할 수 없습니다.\n편집 내용을 복사하여 붙여넣기 등을 사용하여 일단 다른 곳에 저장한 후, 나중에 다시 시도해 주세요.\n\n데이터베이스를 잠근 시스템 관리자가 남긴 설명은 다음과 같습니다: $1", "protectedpagewarning": "경고: 이 문서는 관리자 권한이 있는 사용자만 편집할 수 있도록 보호되어 있습니다.\n이 문서의 최근 기록을 참조하십시오:", "semiprotectedpagewarning": "참고: 이 문서는 계정을 등록한 사용자만이 편집할 수 있도록 보호되어 있습니다.\n이 문서의 최근 기록을 참조하십시오:", "cascadeprotectedwarning": "경고: 이 문서는 보호되어 있어 관리자만 편집할 수 있습니다. 연쇄적 보호가 걸린 다음 {{PLURAL:$1|문서}}에서 이 문서를 사용하고 있습니다:", @@ -868,9 +868,9 @@ "revdelete-unsuppress": "되살린 판에 대한 제한을 해제", "revdelete-log": "이유:", "revdelete-submit": "선택한 {{PLURAL:$1|판}}에 적용", - "revdelete-success": "'''판의 보이기 설정을 성공적으로 바꾸었습니다.'''", + "revdelete-success": "판의 보이기 설정을 바꾸었습니다.", "revdelete-failure": "'''특정 판 보기 설정을 바꾸지 못했습니다:'''\n$1", - "logdelete-success": "'''기록 보이기 설정을 성공적으로 바꾸었습니다.'''", + "logdelete-success": "기록 보이기를 설정했습니다.", "logdelete-failure": "'''기록 보이기 설정을 바꾸지 못했습니다:'''\n$1", "revdel-restore": "보이기 설정 바꾸기", "pagehist": "문서 역사", @@ -1110,7 +1110,7 @@ "userrights-changeable-col": "바꿀 수 있는 권한", "userrights-unchangeable-col": "바꿀 수 없는 권한", "userrights-conflict": "사용자 권한 바꾸기가 충돌합니다! 바뀜을 검토하고 확인하세요.", - "userrights-removed-self": "자신의 권한을 제거하는 데 성공했습니다. 따라서 더 이상 이 문서에 접근할 수 없습니다.", + "userrights-removed-self": "자신의 권한을 제거했습니다. 따라서 더 이상 이 문서에 접근할 수 없습니다.", "group": "그룹:", "group-user": "사용자", "group-autoconfirmed": "자동 인증된 사용자", @@ -1458,7 +1458,8 @@ "foreign-structured-upload-form-label-own-work": "자작입니다", "foreign-structured-upload-form-label-infoform-categories": "분류", "foreign-structured-upload-form-label-infoform-date": "날짜", - "foreign-structured-upload-form-label-not-own-work-message-shared": "이 파일의 저작권을 소유하지 않거나 다른 라이선스로 배포하고 싶다면 [https://commons.wikimedia.org/wiki/Special:UploadWizard 공용 파일 올리기 마법사]를 이용해 보세요.", + "foreign-structured-upload-form-label-own-work-message-shared": "나는 이 파일에 대한 저작권을 소유하고 있음을 입증하고, 영구히 위키미디어 공용에 이 파일을 [https://creativecommons.org/licenses/by-sa/4.0/ 크리에이티브 커먼즈 저작자표시-동일조건변경허락 4.0]에 따라 배포하는 데 동의하며, [https://wikimediafoundation.org/wiki/Terms_of_Use 이용 약관]에 동의합니다.", + "foreign-structured-upload-form-label-not-own-work-message-shared": "이 파일의 저작권을 소유하지 않거나 다른 라이선스로 배포하고 싶다면 [https://commons.wikimedia.org/wiki/Special:UploadWizard 공용 파일 올리기 마법사]를 사용하는 것을 고려해보세요.", "backend-fail-stream": "\"$1\" 파일을 스트림할 수 없습니다.", "backend-fail-backup": "\"$1\" 파일을 백업할 수 없습니다.", "backend-fail-notexists": "$1 파일이 존재하지 않습니다.", @@ -1477,7 +1478,7 @@ "backend-fail-read": "\"$1\" 파일을 읽을 수 없습니다.", "backend-fail-create": "\"$1\" 파일을 저장할 수 없습니다.", "backend-fail-maxsize": "{{PLURAL:$2|1 바이트|$2 바이트}}보다 커서 \"$1\" 파일을 저장하지 못했습니다.", - "backend-fail-readonly": "\"$1\" 저장 백엔드가 읽기 전용입니다. 자세한 이유는 다음과 같습니다: \"$2\"", + "backend-fail-readonly": "\"$1\" 저장 백엔드가 읽기 전용입니다. 자세한 이유는 다음과 같습니다: $2", "backend-fail-synced": "\"$1\" 파일은 내부 저장 백엔드에 불안정한 상태로 있습니다", "backend-fail-connect": "\"$1\" 저장 백엔드에 접속하지 못했습니다.", "backend-fail-internal": "\"$1\" 저장 백엔드에 알 수 없는 오류가 발생했습니다.", @@ -1491,7 +1492,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의 잠금을 걸지 못했습니다.", @@ -1504,9 +1505,10 @@ "uploadstash-summary": "이 문서는 위키에 등록되지는 않았지만 올리는 과정 중에 있는 파일을 접근할 수 있습니다. 이 파일은 올린이 외에는 볼 수 없습니다.", "uploadstash-clear": "임시 저장한 파일 제거하기", "uploadstash-nofiles": "임시 저장한 파일이 없습니다.", - "uploadstash-badtoken": "이 동작을 수행하는 데 실패했습니다. 편집 토큰이 만료되었을 가능성이 있습니다. 다시 시도하세요.", - "uploadstash-errclear": "파일을 제거하는 데 실패했습니다.", + "uploadstash-badtoken": "이 동작을 수행하는 데 실패했습니다. 편집 토큰이 만료되었을 가능성이 있습니다. 다시 시도해주세요.", + "uploadstash-errclear": "파일을 지우는 데 실패했습니다.", "uploadstash-refresh": "파일 목록을 새로 고침", + "uploadstash-thumbnail": "섬네일 보기", "invalid-chunk-offset": "청크 오프셋이 잘못되었습니다.", "img-auth-accessdenied": "접근이 거부됨", "img-auth-nopathinfo": "PATH_INFO를 잃었습니다.\n서버가 이 정보를 받을 수 있도록 설정되어 있지 않습니다.\n이러한 경우는 서버가 CGI 기반이고 img_auth를 지원하지 않을 때 나타날 수 있습니다.\nhttps://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Image_Authorization 을 참조하십시오.", @@ -1757,7 +1759,7 @@ "apihelp-no-such-module": "\"$1\" 모듈을 찾을 수 없습니다.", "apisandbox": "API 실험실", "apisandbox-api-disabled": "이 사이트에서는 API가 꺼져 있습니다.", - "apisandbox-intro": "'''미디어위키 웹 서비스 API'''를 시험해보려면 이 페이지를 이용해보세요. API 용법에 대해서는 [//www.mediawiki.org/wiki/API:Main_page API 문서]을 참고하십시오. 예: [//www.mediawiki.org/wiki/API#A_simple_example 대문의 내용 요청하기]. 더 많은 예를 보려면 액션을 선택하세요.\n\n여기가 연습장이라도 이 페이지에서 실행하는 동작때문에 위키를 변경할 수도 있다는 점에 유의하십시오.", + "apisandbox-intro": "미디어위키 웹 서비스 API를 시험해보려면 이 페이지를 이용해보세요. API 용법에 대해서는 [[mw:API:Main page|API 문서]]을 참고하십시오. 예: [//www.mediawiki.org/wiki/API#A_simple_example 대문의 내용 요청하기]. 더 많은 예를 보려면 액션을 선택하세요.\n\n여기가 연습장이라도 이 페이지에서 실행하는 동작때문에 위키를 변경할 수도 있다는 점에 유의하십시오.", "apisandbox-fullscreen": "패널 늘리기", "apisandbox-fullscreen-tooltip": "브라우저 창에 맞도록 샌드박스 패널 늘리기", "apisandbox-unfullscreen": "페이지 보기", @@ -1822,8 +1824,6 @@ "categories-submit": "보이기", "categoriespagetext": "문서나 자료를 {{PLURAL:$1|포함하고 있는 분류}} 목록입니다.\n[[Special:UnusedCategories|사용되지 않는 분류]]는 여기에 보이지 않습니다.\n[[Special:WantedCategories|필요한 분류]]도 참조하세요.", "categoriesfrom": "다음으로 시작하는 분류를 보여주기:", - "special-categories-sort-count": "갯수 순으로 정렬", - "special-categories-sort-abc": "알파벳순으로 정렬", "deletedcontributions": "삭제된 사용자 기여", "deletedcontributions-title": "삭제된 사용자 기여", "sp-deletedcontributions-contribs": "기여", @@ -1865,7 +1865,7 @@ "listgrouprights-namespaceprotection-namespace": "이름공간", "listgrouprights-namespaceprotection-restrictedto": "사용자가 편집할 수 있는 권한", "listgrants": "부여", - "listgrants-summary": "다음은 사용자 권한에 관련된 접근 권한을 통해 부여된 OAuth 부여 목록입니다. 사용자는 자신의 계정에 대해 권한을 부여 할 수 있지만, 사용자가 응용 프로그램에 부여한 권한 설정에 따라 제한이 있습니다. 사용자를 대신하여 동작하는 응용 프로그램은 사용자가 갖고 있지 않은 권한은 사용할 수 없습니다. \n각각의 권한에 대한 [[{{MediaWiki:Listgrouprights-helppage}}|추가 정보]]가 있습니다.", + "listgrants-summary": "다음은 사용자 권한에 관련된 접근 권한을 통해 부여된 부여 목록입니다. 사용자는 자신의 계정에 대해 권한을 부여 할 수 있지만, 사용자가 애플리케이션에 부여한 권한 설정에 따라 제한이 있습니다. 사용자를 대신하여 동작하는 애플리케이션은 사용자가 갖고 있지 않은 권한은 사용할 수 없습니다. \n각각의 권한에 대한 [[{{MediaWiki:Listgrouprights-helppage}}|추가 정보]]가 있습니다.", "listgrants-grant": "부여", "listgrants-rights": "권한", "trackingcategories": "추적용 분류", @@ -1908,7 +1908,7 @@ "emailccsubject": "$1에게 보낸 메시지의 복사본: $2", "emailsent": "이메일 보냄", "emailsenttext": "이메일을 보냈습니다.", - "emailuserfooter": "이 이메일은 {{SITENAME}}의 $1 사용자가 $2 사용자에게 \"{{int:emailuser}}\" 기능을 통해 보냈습니다.", + "emailuserfooter": "이 이메일은 {{SITENAME}}의 $1님이 $2 사용자에게 \"{{int:emailuser}}\" 기능을 통해 보냈습니다.", "usermessage-summary": "시스템 메시지 남기기", "usermessage-editor": "시스템 메신저", "usermessage-template": "MediaWiki:UserMessage", @@ -1992,7 +1992,7 @@ "delete-toobig": "이 문서에는 {{PLURAL:$1|편집 역사}}가 $1개 이상 있습니다.\n{{SITENAME}}에 의도하지 않은 혼란을 줄 수 있기 때문에 이런 문서의 삭제는 제한됩니다.", "delete-warning-toobig": "이 문서에는 {{PLURAL:$1|편집 역사}}가 $1개 있습니다.\n편집 역사가 긴 문서를 삭제하면 {{SITENAME}} 데이터베이스 동작에 큰 영향을 줄 수 있습니다.\n주의해 주세요.", "deleteprotected": "이 문서가 보호되어 있기 때문에 삭제할 수 없습니다.", - "deleting-backlinks-warning": "'''경고:''' 삭제하려는 문서가 [[Special:WhatLinksHere/{{FULLPAGENAME}}|다른 문서]]에 링크되어 있거나 끼워져 있습니다.", + "deleting-backlinks-warning": "경고: 삭제하려는 문서가 [[Special:WhatLinksHere/{{FULLPAGENAME}}|다른 문서]]에 링크되어 있거나 끼워져 있습니다.", "rollback": "편집 되돌리기", "rollbacklink": "되돌리기", "rollbacklinkcount": "{{PLURAL:$1|편집}} $1회 되돌리기", @@ -2011,13 +2011,15 @@ "changecontentmodel-title-label": "문서 제목", "changecontentmodel-model-label": "새 콘텐츠 모델", "changecontentmodel-reason-label": "이유:", + "changecontentmodel-submit": "바꾸기", "changecontentmodel-success-title": "콘텐츠 모델이 변경되었습니다", "changecontentmodel-success-text": "[[:$1]]의 콘텐츠 종류가 변경되었습니다.", "changecontentmodel-cannot-convert": "[[:$1]]의 콘텐츠 모델이 $2의 모델로 전환될 수 없습니다.", "changecontentmodel-nodirectediting": "$1 콘텐츠 모델은 직접 편집을 지원하지 않습니다", "log-name-contentmodel": "콘텐츠 모델 변경 기록", "log-description-contentmodel": "페이지의 콘텐츠 모델과 관련된 행위", - "logentry-contentmodel-change": "$1 사용자가 $3 의 콘텐츠 모델을 \"$4\"에서 \"$5\"로 {{GENDER:$2|변경하였습니다}}.", + "logentry-contentmodel-new": "$1님이 비 기본값 \"$5\" 콘텐츠 모델을 사용해 $3 문서를 {{GENDER:$2|만들었습니다}}", + "logentry-contentmodel-change": "$1님이 $3 문서의 콘텐츠 모델을 \"$4\"에서 \"$5\"로 {{GENDER:$2|바꾸었습니다}}", "logentry-contentmodel-change-revertlink": "되돌리기", "logentry-contentmodel-change-revert": "되돌리기", "protectlogpage": "문서 보호 기록", @@ -2122,7 +2124,7 @@ "tooltip-namespace_association": "선택한 이름공간과 관련된 토론이나 본문 이름공간을 포함하려면 이 상자를 선택하세요", "blanknamespace": "(일반)", "contributions": "{{GENDER:$1|사용자}} 기여", - "contributions-title": "$1 사용자의 기여", + "contributions-title": "$1의 사용자 기여", "mycontris": "기여", "anoncontribs": "기여", "contribsub2": "{{GENDER:$3|$1}}($2)의 기여", @@ -2237,14 +2239,14 @@ "change-blocklink": "차단 설정 바꾸기", "contribslink": "기여", "emaillink": "이메일 보내기", - "autoblocker": "당신의 IP 주소는 최근에 \"[[User:$1|$1]]\" 사용자가 사용하였기 때문에 자동으로 차단되었습니다.\n$1 사용자가 차단된 이유는 다음과 같습니다: \"$2\"", + "autoblocker": "당신의 IP 주소는 최근에 \"[[User:$1|$1]]\" 사용자가 사용하였기 때문에 자동으로 차단되었습니다.\n$1님이 차단된 이유는 다음과 같습니다: \"$2\"", "blocklogpage": "차단 기록", "blocklog-showlog": "이 사용자는 과거에 차단된 기록이 있습니다.\n해당 사용자의 차단 기록은 다음과 같습니다:", "blocklog-showsuppresslog": "이 사용자는 과거에 차단된 적이 있으며, 그 기록이 숨겨져 있습니다.\n해당 사용자의 차단 기록은 다음과 같습니다:", - "blocklogentry": "사용자가 [[$1]] 사용자를 $2 차단했습니다 $3", - "reblock-logentry": "사용자가 [[$1]] 사용자의 차단 기간을 $2(으)로 바꾸었습니다 $3", + "blocklogentry": "님이 [[$1]]님을 $2 차단했습니다 $3", + "reblock-logentry": "님이 [[$1]]님의 차단 기간을 $2(으)로 바꾸었습니다 $3", "blocklogtext": "이 목록은 사용자 차단/차단 해제 기록입니다.\n자동으로 차단된 IP 주소는 여기에 나오지 않습니다.\n[[Special:BlockList|여기]]에서 현재 차단된 사용자 목록을 볼 수 있습니다.", - "unblocklogentry": "사용자가 $1 사용자를 차단 해제했습니다", + "unblocklogentry": "님이 $1님을 차단 해제했습니다", "block-log-flags-anononly": "IP만 막음", "block-log-flags-nocreate": "계정 만들기 금지됨", "block-log-flags-noautoblock": "자동 차단 비활성화됨", @@ -2257,8 +2259,8 @@ "ipb_expiry_old": "기한을 과거로 입력했습니다.", "ipb_expiry_temp": "사용자 이름을 숨기는 차단은 반드시 무기한이어야 합니다.", "ipb_hide_invalid": "해당 계정은 막을 수 없습니다. {{PLURAL:$1|1회|$1회}} 이상 편집했습니다.", - "ipb_already_blocked": "\"$1\" 사용자는 이미 차단되었습니다", - "ipb-needreblock": "$1 사용자는 이미 차단되었습니다. 차단 설정을 바꾸시겠습니까?", + "ipb_already_blocked": "\"$1\"님은 이미 차단되었습니다.", + "ipb-needreblock": "$1님은 이미 차단되었습니다. 차단 설정을 바꾸시겠습니까?", "ipb-otherblocks-header": "다른 {{PLURAL:$1|차단}} 기록", "unblock-hideuser": "이 사용자 이름이 숨겨져 있기 때문에 이 사용자를 차단 해제할 수 없습니다.", "ipb_cant_unblock": "오류: $1 차단 ID가 존재하지 않습니다. 이미 차단 해제되었을 수 있습니다.", @@ -2424,7 +2426,7 @@ "import-nonewrevisions": "가져온 판 없음(모든 판이 이미 존재하거나 오류로 인해 건너뛰었을 수도 있습니다.)", "xml-error-string": "$3단 $2줄 (바이트 $4)에서 $1: $5", "import-upload": "XML 데이터 올리기", - "import-token-mismatch": "세션 데이터가 손실되었습니다.\n다시 시도하세요.", + "import-token-mismatch": "세션 데이터가 손실되었습니다.\n\n로그아웃 되었는지도 모릅니다. 아직 로그인 상태인지 확인하고 다시 시도해주세요.\n다시 시도해도 되지 않으면 [[Special:UserLogout|로그아웃]]한 다음 다시 로그인하세요. 그리고 브라우저 설정에서 쿠키 사용을 허용하는지 확인하세요.", "import-invalid-interwiki": "해당 위키에서 문서를 가져올 수 없습니다.", "import-error-edit": "문서를 편집할 수 없기 때문에 \"$1\" 문서를 가져올 수 없었습니다.", "import-error-create": "문서를 만들 수 없기 때문에 \"$1\" 문서를 가져올 수 없었습니다.", @@ -2441,11 +2443,7 @@ "import-logentry-upload-detail": "{{PLURAL:$1|판}} $1개를 가져왔습니다", "import-logentry-interwiki-detail": "$2에서 {{PLURAL:$1|판}} $1개를 가져왔습니다", "javascripttest": "자바스크립트 테스트", - "javascripttest-pagetext-noframework": "이 문서는 자바스크립트 테스트를 실행하기 위한 용도로 할당되어 있습니다.", - "javascripttest-pagetext-unknownframework": "실험용 프레임워크 \"$1\"를 알 수 없습니다.", "javascripttest-pagetext-unknownaction": "알 수 없는 동작 \"$1\".", - "javascripttest-pagetext-frameworks": "다음 실험용 프레임워크 중 하나를 선택하세요: $1", - "javascripttest-pagetext-skins": "실험할 스킨을 선택하세요:", "javascripttest-qunit-intro": "mediawiki.org의 [$1 테스트 설명서]를 참고하세요.", "tooltip-pt-userpage": "{{GENDER:|내 사용자}} 문서", "tooltip-pt-anonuserpage": "현재 사용하는 IP 주소의 사용자 문서", @@ -2568,7 +2566,7 @@ "pageinfo-visiting-watchers": "이 문서를 최근에 방문한 주시하는 사용자 수", "pageinfo-few-watchers": "{{PLURAL:$1|주시하는 사용자}} $1명보다 적음", "pageinfo-redirects-name": "이 문서의 넘겨주기 수", - "pageinfo-redirects-value": "$1개", + "pageinfo-redirects-value": "$1", "pageinfo-subpages-name": "이 문서의 하위 문서 수", "pageinfo-subpages-value": "$1개 ({{PLURAL:$2|넘겨주기}} $2개, {{PLURAL:$3|넘겨주기 아님}} $3개)", "pageinfo-firstuser": "문서 작성자", @@ -2716,8 +2714,8 @@ "exif-colorspace": "색 공간", "exif-componentsconfiguration": "각 구성 요소의 의미", "exif-compressedbitsperpixel": "그림 압축 방식", - "exif-pixelydimension": "그림 너비", - "exif-pixelxdimension": "그림 높이", + "exif-pixelxdimension": "그림 너비", + "exif-pixelydimension": "그림 높이", "exif-usercomment": "사용자 주", "exif-relatedsoundfile": "관련된 오디오 파일", "exif-datetimeoriginal": "날짜와 시간", @@ -2869,7 +2867,14 @@ "exif-compression-32946": "수축 (PKZIP)", "exif-copyrighted-true": "저작권의 보호를 받음", "exif-copyrighted-false": "저작권 상태를 설정하지 않음", + "exif-photometricinterpretation-0": "흑백 (백은 0)", "exif-photometricinterpretation-1": "검은색과 흰색 (검은색이 0)", + "exif-photometricinterpretation-3": "팔레트", + "exif-photometricinterpretation-4": "투명 마스크", + "exif-photometricinterpretation-5": "분리 (아마도 CMYK)", + "exif-photometricinterpretation-9": "CIE L*a*b* (ICC 인코딩)", + "exif-photometricinterpretation-10": "CIE L*a*b* (ITU 인코딩)", + "exif-photometricinterpretation-32803": "컬러 필터 어레이", "exif-unknowndate": "날짜를 알 수 없음", "exif-orientation-1": "일반", "exif-orientation-2": "수평으로 뒤집음", @@ -3084,6 +3089,8 @@ "autoredircomment": "[[$1]] 문서로 넘겨주기", "autosumm-new": "새 문서: $1", "autosumm-newblank": "빈 문서를 만듦", + "size-bytes": "$1 {{PLURAL:$1|바이트}}", + "size-pixel": "$1 {{PLURAL:$1|픽셀}}", "lag-warn-normal": "최근 $1{{PLURAL:$1|초}} 안에 바뀐 문서는 이 목록에서 빠졌을 수 있습니다.", "lag-warn-high": "데이터베이스 서버의 과도한 부하 때문에 최근 $1{{PLURAL:$1|초}} 안에 바뀐 문서 목록은 보이지 않을 수 있습니다.", "watchlistedit-normal-title": "주시문서 목록 편집하기", @@ -3164,7 +3171,6 @@ "version-libraries-description": "설명", "version-libraries-authors": "저자", "redirect": "파일, 사용자 ID, 문서 ID, 판 ID나 로그 ID로 넘겨주기", - "redirect-legend": "파일이나 문서로 넘겨주기", "redirect-summary": "이 특수 문서는 파일(파일 이름이 주어짐), 문서(판 ID나 문서 ID가 주어짐), 사용자 문서(숫자로 표시된 사용자 ID가 주어짐)나 로그 항목(로그 ID가 주어짐)으로 넘겨줍니다. 사용법: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/page/64308]], [[{{#Special:Redirect}}/revision/328429]], [[{{#Special:Redirect}}/user/101]], 또는 [[{{#Special:Redirect}}/logid/186]].", "redirect-submit": "보기", "redirect-lookup": "찾을 종류:", @@ -3177,7 +3183,6 @@ "redirect-not-exists": "값을 찾을 수 없습니다", "fileduplicatesearch": "중복된 파일 검색", "fileduplicatesearch-summary": "파일 해시값을 이용해 중복 파일을 검색합니다.", - "fileduplicatesearch-legend": "중복 검색", "fileduplicatesearch-filename": "파일 이름:", "fileduplicatesearch-submit": "검색", "fileduplicatesearch-info": "$1 × $2 픽셀
파일 크기: $3
MIME 유형: $4", @@ -3272,7 +3277,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": "다음 태그를 제거:", @@ -3281,8 +3286,8 @@ "tags-edit-chosen-no-results": "일치하는 태그를 찾을 수 없습니다", "tags-edit-reason": "이유:", "tags-edit-revision-submit": "{{PLURAL:$1|이 판|$1개 판}}에 수정 사항을 적용", - "tags-edit-logentry-submit": "{{PLURAL:$1|이 기록|$1개 기록}}에 수정 사항을 적용", - "tags-edit-success": "수정사항이 성공적으로 적용되었습니다.", + "tags-edit-logentry-submit": "{{PLURAL:$1|이 기록 항목|$1개 기록 항목}}에 수정 사항을 적용", + "tags-edit-success": "바뀜이 적용되었습니다.", "tags-edit-failure": "수정 사항이 적용될 수 없습니다: $1", "tags-edit-nooldid-title": "대상 판이 잘못되었습니다", "tags-edit-nooldid-text": "이 기능을 수행할 특정 판을 제시하지 않았거나 해당 판이 없습니다.", @@ -3326,17 +3331,17 @@ "htmlform-user-not-valid": "$1은 올바른 사용자 이름이 아닙니다.", "sqlite-has-fts": "$1 (본문 전체 검색 지원)", "sqlite-no-fts": "$1 (본문 전체 검색 지원 제외)", - "logentry-delete-delete": "$1 사용자가 $3 문서를 {{GENDER:$2|삭제했습니다}}", - "logentry-delete-restore": "$1 사용자가 $3 문서를 {{GENDER:$2|되살렸습니다}}", - "logentry-delete-event": "$1 사용자가 $3의 {{PLURAL:$1|기록 $5개}}에 대해 보이기 설정을 {{GENDER:$2|바꾸었습니다}}: $4", - "logentry-delete-revision": "$1 사용자가 $3 문서의 {{PLURAL:$5|$5개 편집}}의 설정을 {{GENDER:$2|바꾸었습니다}}: $4", - "logentry-delete-event-legacy": "$1 사용자가 $3 문서 기록의 보이기 설정을 {{GENDER:$2|바꾸었습니다}}", - "logentry-delete-revision-legacy": "$1 사용자가 $3 문서 편집의 보이기 설정을 {{GENDER:$2|바꾸었습니다}}", - "logentry-suppress-delete": "$1 사용자가 $3 문서를 {{GENDER:$2|숨겼습니다}}", - "logentry-suppress-event": "$1 사용자가 비공개적으로 $3의 {{PLURAL:$5|기록 $5개}}에 대해 보이기 설정을 {{GENDER:$2|바꾸었습니다}}: $4", - "logentry-suppress-revision": "$1 사용자가 비공개적으로 $3 문서의 {{PLURAL:$5|판 $5개}}에 대해 보이기 설정을 {{GENDER:$2|바꾸었습니다}}: $4", - "logentry-suppress-event-legacy": "$1 사용자가 비공개적으로 $3의 항목에 대한 보이기 설정을 {{GENDER:$2|바꾸었습니다}}", - "logentry-suppress-revision-legacy": "$1 사용자가 비공개적으로 $3 문서의 특정 판에 대한 보이기 설정을 {{GENDER:$2|바꾸었습니다}}", + "logentry-delete-delete": "$1님이 $3 문서를 {{GENDER:$2|삭제했습니다}}", + "logentry-delete-restore": "$1님이 $3 문서를 {{GENDER:$2|되살렸습니다}}", + "logentry-delete-event": "$1님이 $3의 {{PLURAL:$1|기록 $5개}}에 대해 보이기 설정을 {{GENDER:$2|바꾸었습니다}}: $4", + "logentry-delete-revision": "$1님이 $3 문서의 {{PLURAL:$5|$5개 편집}}의 설정을 {{GENDER:$2|바꾸었습니다}}: $4", + "logentry-delete-event-legacy": "$1님이 $3 문서 기록의 보이기 설정을 {{GENDER:$2|바꾸었습니다}}", + "logentry-delete-revision-legacy": "$1님이 $3 문서 편집의 보이기 설정을 {{GENDER:$2|바꾸었습니다}}", + "logentry-suppress-delete": "$1님이 $3 문서를 {{GENDER:$2|숨겼습니다}}", + "logentry-suppress-event": "$1님이 비공개적으로 $3의 {{PLURAL:$5|기록 $5개}}에 대해 보이기 설정을 {{GENDER:$2|바꾸었습니다}}: $4", + "logentry-suppress-revision": "$1님이 비공개적으로 $3 문서의 {{PLURAL:$5|판 $5개}}에 대해 보이기 설정을 {{GENDER:$2|바꾸었습니다}}: $4", + "logentry-suppress-event-legacy": "$1님이 비공개적으로 $3의 항목에 대한 보이기 설정을 {{GENDER:$2|바꾸었습니다}}", + "logentry-suppress-revision-legacy": "$1님이 비공개적으로 $3 문서의 특정 판에 대한 보이기 설정을 {{GENDER:$2|바꾸었습니다}}", "revdelete-content-hid": "내용 숨겨짐", "revdelete-summary-hid": "편집 요약 숨겨짐", "revdelete-uname-hid": "사용자 이름 숨겨짐", @@ -3345,50 +3350,53 @@ "revdelete-uname-unhid": "사용자 이름 숨김 해제됨", "revdelete-restricted": "관리자에게 제한을 적용함", "revdelete-unrestricted": "관리자에 대한 제한을 해제함", - "logentry-block-block": "$1 {{GENDER:$2|사용자가}} {{GENDER:$4|$3}} 사용자를 $5 $6 설정으로 차단했습니다.", - "logentry-block-unblock": "$1 {{GENDER:$2|사용자가}} {{GENDER:$4|$3}} 사용자의 차단을 해제했습니다.", - "logentry-block-reblock": "$1 {{GENDER:$2|사용자가}} {{GENDER:$4|$3}} 사용자의 차단을 $5 $6 설정으로 변경했습니다.", - "logentry-suppress-block": "$1 {{GENDER:$2|사용자가}} {{GENDER:$4|$3}} 사용자를 $5 $6 설정으로 차단했습니다.", - "logentry-suppress-reblock": "$1 {{GENDER:$2|사용자가}} {{GENDER:$4|$3}} 사용자의 차단을 $5 $6 설정으로 변경했습니다.", - "logentry-import-upload": "$1 사용자가 $3 문서를 파일 올리기로 {{GENDER:$2|가져왔습니다}}", - "logentry-import-interwiki": "$1 사용자가 $3을 다른 위키에서 {{GENDER:$2|가져왔습니다}}", - "logentry-merge-merge": "$1 사용자가 $3 문서를 $4 안에 {{GENDER:$2|병합했습니다}} (판은 $5까지)", - "logentry-move-move": "$1 사용자가 $3 문서를 $4 문서로 {{GENDER:$2|이동했습니다}}", - "logentry-move-move-noredirect": "$1 사용자가 $3 문서를 넘겨주기를 만들지 않고 $4 문서로 {{GENDER:$2|옮겼습니다}}", - "logentry-move-move_redir": "$1 사용자가 $3 문서를 $4 문서로 {{GENDER:$2|이동하면서}} 넘겨주기를 덮어썼습니다", - "logentry-move-move_redir-noredirect": "$1 사용자가 $3 문서를 $4 문서로 넘겨주기를 남기지 않고 {{GENDER:$2|이동하면서}} 이동할 대상에 있던 넘겨주기를 덮어썼습니다", - "logentry-patrol-patrol": "$1 사용자가 $3 문서의 $4판을 점검한 것으로 {{GENDER:$2|표시했습니다}}", - "logentry-patrol-patrol-auto": "$1 사용자가 자동적으로 $3 문서의 $4판을 점검한 것으로 {{GENDER:$2|표시했습니다}}", + "logentry-block-block": "$1님이 {{GENDER:$4|$3}}님을 $5 {{GENDER:$2|차단했습니다}} $6", + "logentry-block-unblock": "$1님이 {{GENDER:$4|$3}} 사용자의 {{GENDER:$2|차단을 해제했습니다}}", + "logentry-block-reblock": "$1님이 {{GENDER:$4|$3}} 사용자의 차단 기간을 $5 설정으로 {{GENDER:$2|바꾸었습니다}} $6", + "logentry-suppress-block": "$1님이 {{GENDER:$4|$3}} 사용자를 $5 {{GENDER:$2|차단했습니다}} $6", + "logentry-suppress-reblock": "$1님이 {{GENDER:$4|$3}} 사용자의 차단 기간을 $5 설정으로 {{GENDER:$2|바꾸었습니다}} $6", + "logentry-import-upload": "$1님이 $3 문서를 파일 올리기로 {{GENDER:$2|가져왔습니다}}", + "logentry-import-upload-details": "$1님이 $3 문서 ({{PLURAL:$4|판}} $4개)를 파일 올리기로 {{GENDER:$2|가져왔습니다}}", + "logentry-import-interwiki": "$1님이 $3 문서를 다른 위키에서 {{GENDER:$2|가져왔습니다}}", + "logentry-import-interwiki-details": "$1님이 $3 문서 ({{PLURAL:$4|판}} $4개)를 다른 위키에서 {{GENDER:$2|가져왔습니다}}", + "logentry-merge-merge": "$1님이 $3 문서를 $4 안에 {{GENDER:$2|병합했습니다}} (판은 $5까지)", + "logentry-move-move": "$1님이 $3 문서를 $4 문서로 {{GENDER:$2|이동했습니다}}", + "logentry-move-move-noredirect": "$1님이 $3 문서를 넘겨주기를 만들지 않고 $4 문서로 {{GENDER:$2|이동했습니다}}", + "logentry-move-move_redir": "$1님이 $3 문서를 $4 문서로 {{GENDER:$2|이동하면서}} 넘겨주기를 덮어썼습니다", + "logentry-move-move_redir-noredirect": "$1님이 $3 문서를 $4 문서로 넘겨주기를 남기지 않고 {{GENDER:$2|이동하면서}} 이동할 대상에 있던 넘겨주기를 덮어썼습니다", + "logentry-patrol-patrol": "$1님이 $3 문서의 $4판을 점검한 것으로 {{GENDER:$2|표시했습니다}}", + "logentry-patrol-patrol-auto": "$1님이 자동적으로 $3 문서의 $4판을 점검한 것으로 {{GENDER:$2|표시했습니다}}", "logentry-newusers-newusers": "$1 사용자 계정을 {{GENDER:$2|만들었습니다}}", "logentry-newusers-create": "$1 사용자 계정을 {{GENDER:$2|만들었습니다}}", - "logentry-newusers-create2": "$1 사용자가 $3 사용자 계정을 {{GENDER:$2|만들었습니다}}", + "logentry-newusers-create2": "$3 사용자 계정을 $1님이 {{GENDER:$2|만들었습니다}}", "logentry-newusers-byemail": "$3 사용자 계정을 $1님이 {{GENDER:$2|만들었고}} 비밀번호는 이메일로 보냈습니다", "logentry-newusers-autocreate": "$1 사용자 계정을 자동으로 {{GENDER:$2|만들었습니다}}", - "logentry-protect-move_prot": "$1 사용자가 보호 설정을 $4에서 $3으로 {{GENDER:$2|이동했습니다}}", - "logentry-protect-unprotect": "$1 사용자가 $3 문서의 보호를 {{GENDER:$2|해제했습니다}}", - "logentry-protect-protect": "$1 사용자가 $3 문서를 {{GENDER:$2|보호했습니다}} $4", - "logentry-protect-protect-cascade": "$1 사용자가 $3 문서를 {{GENDER:$2|보호했습니다}} $4 [연쇄적]", - "logentry-protect-modify": "$1 사용자가 $3 문서의 보호 수준을 {{GENDER:$2|바꾸었습니다}} $4", - "logentry-protect-modify-cascade": "$1 사용자가 $3 문서의 보호 수준을 {{GENDER:$2|바꾸었습니다}} $4 [연쇄적]", - "logentry-rights-rights": "$1 사용자가 $3 사용자의 권한을 $4에서 $5(으)로 {{GENDER:$2|바꾸었습니다}}", - "logentry-rights-rights-legacy": "$1 사용자가 $3 사용자의 권한을 {{GENDER:$2|바꾸었습니다}}", - "logentry-rights-autopromote": "$1 사용자의 권한을 자동적으로 $4에서 $5으로 {{GENDER:$2|바꾸었습니다}}", - "logentry-upload-upload": "$1 사용자가 $3 파일을 {{GENDER:$2|올렸습니다}}", - "logentry-upload-overwrite": "$1 사용자가 $3의 새 판을 {{GENDER:$2|올렸습니다}}", - "logentry-upload-revert": "$1 사용자가 $3 파일을 {{GENDER:$2|올렸습니다}}", + "logentry-protect-move_prot": "$1님이 보호 설정을 $4에서 $3으로 {{GENDER:$2|이동했습니다}}", + "logentry-protect-unprotect": "$1님이 $3 문서의 보호를 {{GENDER:$2|해제했습니다}}", + "logentry-protect-protect": "$1님이 $3 문서를 {{GENDER:$2|보호했습니다}} $4", + "logentry-protect-protect-cascade": "$1님이 $3 문서를 {{GENDER:$2|보호했습니다}} $4 [연쇄적]", + "logentry-protect-modify": "$1님이 $3 문서의 보호 수준을 {{GENDER:$2|바꾸었습니다}} $4", + "logentry-protect-modify-cascade": "$1님이 $3 문서의 보호 수준을 {{GENDER:$2|바꾸었습니다}} $4 [연쇄적]", + "logentry-rights-rights": "$1님이 $3 사용자의 권한을 $4에서 $5(으)로 {{GENDER:$2|바꾸었습니다}}", + "logentry-rights-rights-legacy": "$1님이 $3 사용자의 권한을 {{GENDER:$2|바꾸었습니다}}", + "logentry-rights-autopromote": "$1님이 권한을 자동적으로 $4에서 $5으로 {{GENDER:$2|바꾸었습니다}}", + "logentry-upload-upload": "$1님이 $3 파일을 {{GENDER:$2|올렸습니다}}", + "logentry-upload-overwrite": "$1님이 $3의 새 판을 {{GENDER:$2|올렸습니다}}", + "logentry-upload-revert": "$1님이 $3 파일을 {{GENDER:$2|올렸습니다}}", "log-name-managetags": "태그 관리 기록", "log-description-managetags": "이 문서는 [[Special:Tags|태그]]에 관한 관리 작업의 목록입니다. 이 기록에는 관리자가 직접 실행한 동작만이 기록되며, 위키 소프트웨어에 의해 태그가 생성 및 삭제되는 경우는 기록되지 않습니다.", - "logentry-managetags-create": "$1 {{GENDER:$2|사용자가}} \"$4\" 태그를 만들었습니다", - "logentry-managetags-delete": "$1 {{GENDER:$2|사용자가}} \"$4\" 태그를 삭제하였습니다 ($5개 {{PLURAL:$5|판 및 기록}}에서 제거되었습니다)", - "logentry-managetags-activate": "$1 {{GENDER:$2|사용자가}} \"$4\" 태그를 사용자나 봇이 사용하도록 활성화시켰습니다", - "logentry-managetags-deactivate": "$1 {{GENDER:$2|사용자가}} \"$4\" 태그를 사용자나 봇이 사용하지 못하도록 비활성화시켰습니다", + "logentry-managetags-create": "$1님이 \"$4\" 태그를 {{GENDER:$2|만들었습니다}}", + "logentry-managetags-delete": "$1님이 \"$4\" 태그를 삭제하였습니다 ($5개 {{PLURAL:$5|판 및 기록}}에서 {{GENDER:$2|제거되었습니다}})", + "logentry-managetags-activate": "$1님이 \"$4\" 태그를 사용자나 봇이 사용하도록 {{GENDER:$2|활성화시켰습니다}}", + "logentry-managetags-deactivate": "$1님이 \"$4\" 태그를 사용자나 봇이 사용하지 못하도록 {{GENDER:$2|비활성화시켰습니다}}", "log-name-tag": "태그 기록", "log-description-tag": "이 문서는 사용자들이 특정 판이나 기록 항목에서 [[Special:Tags|태그]]를 추가하고 제거한 경우를 보여줍니다. 이 기록에는 편집이나 삭제, 이와 유사한 행위를 통해 태그가 붙는 경우는 기록되지 않습니다.", - "logentry-tag-update-add-revision": "$1 사용자가 $3 문서의 $4판에 $6 {{PLURAL:$7|태그}}를 {{GENDER:$2|추가했습니다}}", - "logentry-tag-update-add-logentry": "$1 사용자가 $3 문서의 기록 항목 $5에 $6 {{PLURAL:$7|태그}}를 {{GENDER:$2|추가했습니다}}", - "logentry-tag-update-remove-revision": "$1 사용자가 $3 문서의 $4판에서 $8 {{PLURAL:$9|태그}}를 {{GENDER:$2|제거했습니다}}", - "logentry-tag-update-remove-logentry": "$1 사용자가 $3 문서의 기록 항목 $5에서 $8 {{PLURAL:$9|태그}}를 {{GENDER:$2|제거했습니다}}", - "logentry-tag-update-revision": "$1 사용자가 $3 문서의 $4 판에서 태그를 {{GENDER:$2|수정했습니다}} ($6을(를) {{PLURAL:$7|추가함}}; $8을(를) {{PLURAL:$9|제거함}})", + "logentry-tag-update-add-revision": "$1님이 $3 문서의 $4판에 $6 {{PLURAL:$7|태그}}를 {{GENDER:$2|추가했습니다}}", + "logentry-tag-update-add-logentry": "$1님이 $3 문서의 기록 항목 $5에 $6 {{PLURAL:$7|태그}}를 {{GENDER:$2|추가했습니다}}", + "logentry-tag-update-remove-revision": "$1님이 $3 문서의 $4판에서 $8 {{PLURAL:$9|태그}}를 {{GENDER:$2|제거했습니다}}", + "logentry-tag-update-remove-logentry": "$1님이 $3 문서의 기록 항목 $5에서 $8 {{PLURAL:$9|태그}}를 {{GENDER:$2|제거했습니다}}", + "logentry-tag-update-revision": "$1님이 $3 문서의 $4 판에서 태그를 {{GENDER:$2|업데이트했습니다}} ($6 {{PLURAL:$7|추가함}}; $8 {{PLURAL:$9|제거함}})", + "logentry-tag-update-logentry": "$1님이 $3 문서의 기록 항목 $5에 있는 태그를 {{GENDER:$2|업데이트했습니다}} ($6 {{PLURAL:$7|추가함}}; $8 {{PLURAL:$9|제거함}})", "rightsnone": "(없음)", "revdelete-summary": "편집 요약", "feedback-adding": "문서에 피드백을 올리는 중...", @@ -3508,7 +3516,7 @@ "action-pagelang": "문서 언어 바꾸기", "log-name-pagelang": "언어 바꾸기 기록", "log-description-pagelang": "문서 언어를 바꾼 기록입니다.", - "logentry-pagelang-pagelang": "$1 사용자가 $3의 언어를 $4에서 $5로 {{GENDER:$2|바꾸었습니다}}.", + "logentry-pagelang-pagelang": "$1님이 $3의 언어를 $4에서 $5로 {{GENDER:$2|바꾸었습니다}}", "default-skin-not-found": "이런! 당신의 위키에 $wgDefaultSkin에 $1(으)로 지정한 기본 스킨은 사용할 수 없습니다.\n\n설치에는 다음 {{PLURAL:$4|스킨}}이 포함된 것으로 보입니다. 스킨을 활성화{{PLURAL:$4||하고 기본값으로 선택}}하는 방법에 대한 정보에 대해서는 [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual: 스킨 설정]을 보세요.\n\n$2\n\n; 미디어위키를 설치했다면:\n: 아마 git에서 설치했거나, 어떤 다른 방법을 사용하여 직접 설치했을 수 있을 것으로 봅니다. [https://www.mediawiki.org/wiki/Category:All_skins mediawiki.org의 스킨 디렉터리]에서 어떤 스킨을 설치해보세요:\n:* 여러 스킨과 확장 기능이 들어 있는 [https://www.mediawiki.org/wiki/Download tarball 설치 관리자]를 다운로드하세요. 거기서 skins/ 디렉터리를 복사하여 붙여 넣을 수 있습니다.\n:* [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org]에서 개별 스킨 tarball을 다운로드하세요.\n:* 미디어위키 설치의 skins/ 디렉터리 안에 git를 통해 mediawiki/skins/* 저장소 중 하나를 복제하세요.\n: 당신이 미디어위키 개발자이면 당신의 git 저장소를 방해하면 안됩니다.\n\n; 미디어위키를 업그레이드했다면:\n: 미디어위키 1.24와 새 버전은 더 이상 설치된 스킨을 자동으로 활성화하지 않습니다 ([https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Manual: 스킨 자동발견]을 보세요). 현재 설치된 {{PLURAL:$5|스킨|모든 스킨}}을 활성화하려면 LocalSettings.php 안에 다음 {{PLURAL:$5|줄}}을 붙여 넣을 수 있습니다:\n\n

$3
\n\n; LocalSettings.php를 수정했다면:\n: 스킨 이름에 오타가 났는지 다시 확인하세요.", "default-skin-not-found-no-skins": "이런! 당신의 위키에 $wgDefaultSkin에 $1(으)로 지정한 기본 스킨은 사용할 수 없습니다.\n\n설치된 스킨은 없습니다.\n\n; 미디어위키를 설치했거나 업그레이드했다면:\n: 아마 git에서 설치했거나, 어떤 다른 방법을 사용하여 직접 설치했을 수 있을 것으로 봅니다. 미디어위키 1.24와 새 버전은 주 저장소에 어떠한 스킨도 포함되어 있지 않습니다. [https://www.mediawiki.org/wiki/Category:All_skins mediawiki.org의 스킨 디렉터리]에서 어떤 스킨을 설치해보세요:\n:* 여러 스킨과 확장 기능이 들어 있는 [https://www.mediawiki.org/wiki/Download tarball 설치 관리자]를 다운로드하세요. 거기서 skins/ 디렉터리를 복사하여 붙여 넣을 수 있습니다.\n:* [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org]에서 개별 스킨 tarball을 다운로드하세요.\n:* 미디어위키 설치의 skins/ 디렉터리 안에 git를 통해 mediawiki/skins/* 저장소 중 하나를 복제하세요.\n: 당신이 미디어위키 개발자이면 당신의 git 저장소를 방해하면 안됩니다. 스킨을 활성화하고 기본값으로 선택하는 방법에 대한 정보에 대해서는 [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual: 스킨 설정]을 보세요.", "default-skin-not-found-row-enabled": "* $1 / $2 (활성화)", @@ -3570,8 +3578,10 @@ "mw-widgets-titleinput-description-new-page": "문서가 존재하지 않습니다", "mw-widgets-titleinput-description-redirect": "$1 문서로 넘겨주기", "api-error-blacklisted": "이 파일을 설명할 수 있는 다른 제목을 선택하세요.", + "sessionmanager-tie": "여러 요청 인증 유형 결합할 수 없습니다: $1.", "sessionprovider-generic": "$1 세션", "sessionprovider-mediawiki-session-cookiesessionprovider": "쿠키 기반 세션", "sessionprovider-nocookies": "브라우저의 쿠키 기능이 꺼져 있는지 확인하십시오. 쿠키 기능을 켠 다음 다시 시작해야 합니다.", - "randomrootpage": "임의 루트 페이지" + "randomrootpage": "임의 루트 페이지", + "log-action-filter-block": "차단의 유형:" } diff --git a/languages/i18n/krc.json b/languages/i18n/krc.json index dd0a5b2a90..432a3ab4a3 100644 --- a/languages/i18n/krc.json +++ b/languages/i18n/krc.json @@ -1466,8 +1466,6 @@ "categories": "Категорияла", "categoriespagetext": "Ызындан келген {{PLURAL:$1|1=категория|категорияла}} бет неда медия-файл тутадыла.\n[[Special:UnusedCategories|Хайырланмагъан категорияла]] былайда кёргюзюлмегендиле.\nДагъыда [[Special:WantedCategories|изленнген категорияла]] гъакъарагъыз.", "categoriesfrom": "Бу бла башланнган категорияланы кёргюз:", - "special-categories-sort-count": "санына кёре сафла", - "special-categories-sort-abc": "алфавит халда тиз", "deletedcontributions": "Кетерилген къошулуучуну къошхан юлюшю", "deletedcontributions-title": "Кетерилген къошулучуну къошхан юлюшю", "sp-deletedcontributions-contribs": "къошхан юлюш", @@ -2204,8 +2202,8 @@ "exif-colorspace": "Бояу алам", "exif-componentsconfiguration": "Хар компонентни ангыламы", "exif-compressedbitsperpixel": "Суратны къысдырыу амалы", - "exif-pixelydimension": "Суратны кенглиги", - "exif-pixelxdimension": "Суратны мийиклиги", + "exif-pixelxdimension": "Суратны кенглиги", + "exif-pixelydimension": "Суратны мийиклиги", "exif-usercomment": "Къошакъ комментарий", "exif-relatedsoundfile": "Тауушлу комментарийни файлы", "exif-datetimeoriginal": "Оригинал джаратыу заман", @@ -2663,7 +2661,6 @@ "redirect-file": "Файлны аты", "fileduplicatesearch": "Дубликат файлланы изле", "fileduplicatesearch-summary": "Хэш-кодлары бла дубликат файланны изле.", - "fileduplicatesearch-legend": "Дубликатланы изле", "fileduplicatesearch-filename": "Файлны аты:", "fileduplicatesearch-submit": "Таб", "fileduplicatesearch-info": "$1 × $2 пиксель
Файлны ёлчеми: $3
MIME-тип: $4", diff --git a/languages/i18n/ksh.json b/languages/i18n/ksh.json index bb5bf6d022..b1b6464af0 100644 --- a/languages/i18n/ksh.json +++ b/languages/i18n/ksh.json @@ -9,7 +9,8 @@ "לערי ריינהארט", "아라", "TTO", - "Macofe" + "Macofe", + "Nemo bis" ] }, "tog-underline": "Dun de Lengks ongerschtriische:", @@ -151,7 +152,6 @@ "moredotdotdot": "Mih â€¦", "morenotlisted": "Et jeiht noch wigger â€¦", "mypage": "Metmaachersigg", - "anonuserpage": "Onbikannte Metmaacher", "mytalk": "Klaafsigg", "anontalk": "Klaaf för ene nahmelohse Metmaacher", "navigation": "Jangk noh de", @@ -1046,10 +1046,10 @@ "userrights": "De Metmaacher ehr Rääschde verwallde", "userrights-lookup-user": "Metmaacherjruppe verwalde", "userrights-user-editname": "Däm Metmaacher singe Nahme:", - "editusergroup": "Metmaacher ier Jroppe un Räächde änndere", + "editusergroup": "{{GENDER:$1|Däm|Däm|Däm Metmaacher|Dä|Däm}} [[User:$1|$1]] {{GENDER:$1|sing|singe|sing|ier|sing}} Jroppe un Räächde änndere", "editinguser": "Heh deihs De däm {{GENDER:$1|däm|däm|däm Metmaacher|dä|däm}} '''[[User:$1|$1]]''' {{GENDER:$1|singe|singe|singe|iere|singe}} Rääschde änndere. $2", "userrights-editusergroup": "Metmaacher en Jroppe donn un uß Jroppe nämme", - "saveusergroups": "Metmaacherjruppe avspeichere", + "saveusergroups": "Donn {{GENDER:$1|däm|dem|däm Metmaacher|dä|däm}} [[User:$1|$1]] {{GENDER:$1|sing|singe|sing|ier|sing}} Jroppe faßhalle", "userrights-groupsmember": "Dä Metmaacher es en {{PLURAL:$1|dä Jropp:|dä Jroppe:|keine Jropp.}}", "userrights-groupsmember-auto": "Dä Metmaacher es automattesch en {{PLURAL:$1|dä Jropp:|dä Jroppe:|keine Jropp.}}", "userrights-groups-help": "Do kanns de Jroppe för dä Metmaacher heh änndere, ävver opjepaß:\n* E Käßje met Höksche bedüg, dat dä Metmaacher en dä Jropp es.\n* E Käßje ohne Höksche bedüg, dat dä Metmaacher nit en dä Jropp es.\n* E Käßje met Stähnsche donävve bedüg, dat De dat Rääsch zwa ändere, ävver de Änderong nit mih zeröck nämme kanns.", @@ -1299,9 +1299,9 @@ "recentchangeslinked-page": "Dä Sigg ier Övverschreff:", "recentchangeslinked-to": "Zeisch de Änderonge aan dä Sigge, woh Lengks op di aanjejovve Sigg drop sin", "recentchanges-page-added-to-category": "Di Sigg [[:$1]] wood en di Saachjrop jedonn", - "recentchanges-page-added-to-category-bundled": "Di Sigg [[:$1]] un {{PLURAL:$2|noch ein Sigg wood|$2 Sigge woodte|kein Sigg wood}} en di Saachjrop jedonn", + "recentchanges-page-added-to-category-bundled": "Di Sigg [[:$1]] kohm en di Saachjrobb eren, un es [[Special:WhatLinksHere/$1|en annder Sigge ennjebonge]].", "recentchanges-page-removed-from-category": "Di Sigg [[:$1]] wood uß dä Saachjrop jenumme", - "recentchanges-page-removed-from-category-bundled": "Di Sigg [[:$1]] un {{PLURAL:$2|noch ein Sigg woodte|$2 Sigge woodte|kein Sigg wood}} uß dä Saachjrop jenumme", + "recentchanges-page-removed-from-category-bundled": "Di Sigg [[:$1]] flooch uß dä Saachjrobb eruß, es ävver [[Special:WhatLinksHere/$1|en annder Sigge ennjebonge]].", "autochange-username": "Automattesche Ännderong aam MediaWiki", "upload": "Daate huhlade", "uploadbtn": "Huhlade!", @@ -1770,8 +1770,6 @@ "categories": "Saachjroppe", "categoriespagetext": "Heh {{PLURAL:$1|es nur en Saachjropp|sin nur Saachjroppe|es kein Saachjropp}} jeleß, woh jät dren {{PLURAL:$1|es|es|wöhr}}. Mer han_er eije Leßte för de\n[[Special:UnusedCategories|Saachjropp met nix dren]], un de\n[[Special:WantedCategories|jewönschte un nit aanjelaate Saachjroppe]].", "categoriesfrom": "Zeijsch Saachjroppe vun heh af:", - "special-categories-sort-count": "Zoteere noh de Aanzahl", - "special-categories-sort-abc": "Zoteere nohm Alphabett", "deletedcontributions": "Fottjeschmeße Väsjohne", "deletedcontributions-title": "Fottjeschmeße Väsjohne", "sp-deletedcontributions-contribs": "Beijdrääsch", @@ -2134,6 +2132,7 @@ "ipb-unblock": "En IP-Addräß ov ene Metmaacher widder zohlohße", "ipb-blocklist": "All de Sperre för Metmaacher un e-mail-Adräße aanzeije, di jrad beschtonn", "ipb-blocklist-contribs": "{{GENDER:$1|Däm|Däm|Däm Metmaacher|Dä|Däm}} $1 {{GENDER:$1|sing|singe|sing|iere|sing}} Bäjdrähsch", + "ipb-blocklist-duration-left": "noch $1", "unblockip": "Dä Medmacher widder maache looße", "unblockiptext": "Heh kanns De vörher jesperrte IP_Adresse oder Metmaacher widder freijevve, un dänne esu dat Rääch för ze Schrieve heh em Wiki widder jevve.", "ipusubmit": "Sperr ophevve!", @@ -2375,11 +2374,7 @@ "import-logentry-upload-detail": "{{PLURAL:$1|ein Väsjohn|$1 Väsjohne|kein Väsjohn}} woodt emportehrt.", "import-logentry-interwiki-detail": "{{PLURAL:$1|ein Väsjohn|$1 Väsjohne|kein VVäsjohnersion}} woodt empottehrt vun „$2“", "javascripttest": " JavaSkrepte ußprobeere.", - "javascripttest-pagetext-noframework": "Heh di Sigg es för JavaSkrepte ußzeprobeere.", - "javascripttest-pagetext-unknownframework": "Dä Prööfrahme „$1“ es onbikannt.", "javascripttest-pagetext-unknownaction": "„$1“ es ene onbikannte Opdracht.", - "javascripttest-pagetext-frameworks": "Bes esu jood un söök eine vun dä Prööfömjävvonge us: $1", - "javascripttest-pagetext-skins": "Sööke en Bovverfläsch udder et Ußsinn uß, öm di Prööfonge domet ze maache:", "javascripttest-qunit-intro": "Loor noh dä [$1 Dokemäntation övver et Prööfe] op mediawiki.org.", "tooltip-pt-userpage": "Don Ding eije Metmaachersigg aanzeije{{GENDER:|}}", "tooltip-pt-anonuserpage": "Metmaachersigg för di IP-Adräß, vun wo uß De jraad Ding Ännderonge un Äjännzonge aam Wiki am maache bes", @@ -2651,8 +2646,8 @@ "exif-colorspace": "Färveroum", "exif-componentsconfiguration": "Bedüggening fun all de enkele Komponente", "exif-compressedbitsperpixel": "Aat fun de Kompreßjohn fun däm Beld", - "exif-pixelydimension": "De jöltije Beld-Breede en Pixelle", - "exif-pixelxdimension": "De jöltije Beld-Hühde en Pixelle", + "exif-pixelxdimension": "De jöltije Beld-Breede en Pixelle", + "exif-pixelydimension": "De jöltije Beld-Hühde en Pixelle", "exif-usercomment": "Aanmerkong fum Aanwender", "exif-relatedsoundfile": "De Tondatei, di do bei jehööt", "exif-datetimeoriginal": "Zickpunk fun de Opzeischnong fun de Date", @@ -2997,8 +2992,8 @@ "scarytranscludefailed-httpstatus": "[De Schablohn „$1“ enzebenge hät nit jeflupp. Dä HTTP-Fähler es: $2]", "scarytranscludetoolong": "[Schad, de URL es ze lang]", "deletedwhileediting": "Opjepaß: De Sigg wood fottjeschmeße, nohdäm Do ald aanjefange häs, draan ze Ändere.\nEm [{{fullurl:Special:Log|type=delete&page=}}{{FULLPAGENAMEE}} Logbohch vum Sigge-Fottschmiiße] künnt der Jrond schtonn.\nWann De de Sigg avschpeischere deis, weed se widder aanjelaat.", - "confirmrecreate": "Dä Metmaacher [[User:$1|$1]] ([[User talk:$1|Klaaf]]) hät di Sigg fottjeschmeße, nohdäm Do do dran et Ändere aanjefange häs. Dä Jrond:\n: „$2“\nWells Do jetz met en neu Väsjohn di Sigg widder neu aanläje?", - "confirmrecreate-noreason": "Dä [[User:$1|$1]] ([[User talk:$1|Klaaf]]) hät heh di Sigg fottjeschmeße, nohdämm Do aanjefange häs, draan ze ändere. Bes esu jood un donn beshtääteje, dat De di Sigg widder neu aanjelaat han wells.", + "confirmrecreate": "{{GENDER:$1|Dä|Dat|Dä Metmaacher|De|Dat}} [[User:$1|$1]] ([[User talk:$1|Klaaf]]) hät di Sigg fottjeschmeße, nohdäm Do do dran et Ändere aanjefange häs. Dä Jrond:\n: „$2“\nWells Do jäz medd en neuje Väsjohn di Sigg widder neu aanläje?", + "confirmrecreate-noreason": "{{GENDER:$1|Dä|Dat|Dä Metmaacher|De|Dat}} [[User:$1|$1]] ([[User talk:$1|Klaaf]]) hät heh di Sigg fottjeschmeße, nohdämm Do aanjefange häs, draan ze ändere. Bes esu jood un donn beschtähteje, dat De di Sigg widder neu aanjelaat han wells.", "recreate": "Widder neu aanlääje", "unit-pixel": "px", "confirm_purge_button": "Jo — loss jonn!", @@ -3157,7 +3152,6 @@ "version-libraries-description": "Wat se deiht", "version-libraries-authors": "Schrihver", "redirect": "Ömleide op en Dattei, ene Metmaacher udder de Väsjohn vun ener Sigg", - "redirect-legend": "Ömleide ob_en Dattei udder Sigg", "redirect-summary": "Heh di {{int:specialpage}} leidt öm ob_en Dattei — doh mößd_Er ene Nahme aanjävve, för e Beischpell:[[{{#Special:Redirect}}/file/Example.jpg]] — udder en Sigg — doh mößd_Er en Kännong för, udder en Väsjuhn aanjävve, för e Beischpell esu: [[{{#Special:Redirect}}/page/64308]] udder [[{{#Special:Redirect}}/revision/328429]] — udder en Metmaachersigg — doh mößd_Er enem Metmaacher sing Kännong aanjävve, för e Beischpell: [[{{#Special:Redirect}}/user/101]].", "redirect-submit": "Lohß Jonn!", "redirect-lookup": "Söhk noh:", @@ -3169,7 +3163,6 @@ "redirect-not-exists": "Nit jefonge", "fileduplicatesearch": "Sök noh dubbelte Dateie", "fileduplicatesearch-summary": "Söhhk noh dubbelte Dateie övver dänne iere Häsh-Zahl.", - "fileduplicatesearch-legend": "Sök noh ene dubbelte Dattei", "fileduplicatesearch-filename": "Datteinahme:", "fileduplicatesearch-submit": "Söhke", "fileduplicatesearch-info": "{{PLURAL:$1|Ei Pixel|$1 Pixelle|Nit}} breed × {{PLURAL:$2|Ei Pixel|$2 Pixelle|nix}} huh
Dateiömfang: $3
de MIME-Zoot: $4", @@ -3569,5 +3562,6 @@ "mw-widgets-titleinput-description-new-page": "di Sigg jidd_et noch nit", "mw-widgets-titleinput-description-redirect": "ömleijde op „$1“", "api-error-blacklisted": "Söhk Der ene anndere Nahme uß, dä mih drövver säht.", - "randomrootpage": "Zofällige Aanfangs-Sigg" + "randomrootpage": "Zofällige Aanfangs-Sigg", + "log-action-filter-delete-delete": "En Sigg wohd fott jeschmeße" } diff --git a/languages/i18n/ku-latn.json b/languages/i18n/ku-latn.json index 9499c11a65..60e59954e7 100644 --- a/languages/i18n/ku-latn.json +++ b/languages/i18n/ku-latn.json @@ -1151,8 +1151,6 @@ "allpages-hide-redirects": "Beralîkirinan veşêre", "categories": "Kategorî", "categoriespagetext": "Di van kategoriyan de rûpel an jî medya hene.\n[[Special:UnusedCategories|Kategoriyên nayên bikaranîn]] li vir nayên nîşandan.\nLi [[Special:WantedCategories|kategoriyên xwestî]] binêre.", - "special-categories-sort-count": "hatîye rêzkirin li gorî hejmaran", - "special-categories-sort-abc": "li gorî alfabeyê rêzkirî ye", "deletedcontributions": "Beşdariyên bikarhênerekî yê jêbirî", "deletedcontributions-title": "Guherandinên bikarhêner yê jêbirî", "sp-deletedcontributions-contribs": "beşdarî", @@ -1641,8 +1639,8 @@ "exif-software": "Nivîsbarîya tê bikaranîn", "exif-artist": "Nûser", "exif-exifversion": "Versiyona exif", - "exif-pixelydimension": "Firehiya wêne", - "exif-pixelxdimension": "Dirêjiya wêne", + "exif-pixelxdimension": "Firehiya wêne", + "exif-pixelydimension": "Dirêjiya wêne", "exif-usercomment": "Şîroveyên bikarhêner", "exif-datetimedigitized": "Dema pencekîkirinê", "exif-exposuretime-format": "$1 sanî ($2)", diff --git a/languages/i18n/ky.json b/languages/i18n/ky.json index 8c5fa95418..d67a8b7eed 100644 --- a/languages/i18n/ky.json +++ b/languages/i18n/ky.json @@ -22,6 +22,7 @@ "tog-hideminor": "Соңку өзгөрүүлөрдүн тизмесинен майда өзгөрүүлөрдү жашыруу", "tog-hidepatrolled": "Соңку өзгөрүүлөрдүн тизмесинен күзөттөлгөн оңдоолорду жашыруу", "tog-newpageshidepatrolled": "Жаңы барактар тизмесинен күзөттөлгөн барактарды жашыруу", + "tog-hidecategorization": "Барактардын категорияларын жашыруу", "tog-extendwatchlist": "Бүт өзгөртүүлөрдү камтыган кеңири көзөмөл тизмеси, эң соңкуларды гана эмес", "tog-usenewrc": "Өзгөртүүлөрдү соңку өзгөрүүлөргө жана көзөмөл тизмеме топтоо (JavaScript талап кылынат)", "tog-numberheadings": "Башжазууларды автоматтык түрдө номердөө", @@ -374,8 +375,6 @@ "createaccountreason": "Себеби:", "createacct-reason": "Себеп", "createacct-reason-ph": "Эмне үчүн башка эсеп жазуу түзүп жатасыз", - "createacct-captcha": "Коопсуздук текшерүүсү", - "createacct-imgcaptcha-ph": "Жогорудагы текстти териңиз", "createacct-submit": "Катталыңыз", "createacct-benefit-heading": "{{SITENAME}} сиз сыяктуу адамдар тарабынан түзүлгөн.", "createacct-benefit-body1": "{{PLURAL:$1|оңдоо|оңдоолор}}", @@ -447,11 +446,11 @@ "passwordreset-email": "E-mail дарек:", "passwordreset-emailtitle": "{{SITENAME}} сайтындагы эсеп жазуусу жөнүндөгү маалымат", "passwordreset-emailelement": "Колдонуучу аты: \n$1\n\nУбактылуу сырсөз: \n$2", - "passwordreset-emailsent": "Сырсөздү алмаштыруу эмейлге жөнөтүлдү.", + "passwordreset-emailsentemail": "Сырсөздү алмаштыруу эмейлге жөнөтүлдү.", "passwordreset-emailsent-capture": "Төмөндө көрсөтүлгөн эмейлге сырсөздү алмаштыруучу кат жөнөтүлдү.", "passwordreset-emailerror-capture": "Төмөндө көрсөтүлгөн дарекке сырсөздү алмаштыруу кат түзүлдү,бирок аны {{GENDER:$2|катышуучуга}} жөнөтүү оңунан чыккан жок: $1", "changeemail": "E-mail даректи өзгөртүү", - "changeemail-text": "Эмейл дарегиңизди алмаштыруу үчүн ушул үлгүнү толтуруңуз. Өзгөрүүнү аныктоо үчүн сырсөздү киргизүү талап кылынат.", + "changeemail-header": "Эл. почтанын дарегин өзгөртүү", "changeemail-no-info": "Бул баракка түз кайрылыш үчүн, сиз системага киришиңиз керек.", "changeemail-oldemail": "Учурдагы e-mail дарек:", "changeemail-newemail": "Жаңы e-mail дарек:", @@ -717,8 +716,6 @@ "prefs-advancedwatchlist": "Кеңейтилген ырастоолор", "prefs-displayrc": "Көрүнүштүн ырастоолору", "prefs-displaywatchlist": "Көрүнүштүн ырастоолору", - "email-address-validity-valid": "Эл. почтанын дареги анык көрүнөт", - "email-address-validity-invalid": "Эл. почтанын анык дарегин киргизиңиз!", "userrights": "Колдонуучулардын укуктарын башкаруу", "userrights-lookup-user": "Колдонуучу топторун башкаруу", "userrights-user-editname": "Колдонуучу атыңызды териңиз:", @@ -838,8 +835,6 @@ "upload-description": "Файл баяндамасы", "upload-options": "Жүктөө варианты", "watchthisupload": "Бул файлды көзөмөлгө алуу", - "upload-success-subj": "Ийгиликтүү жүктөлдү", - "upload-failure-subj": "Жүктөө көйгөйү", "upload-proto-error": "Туура эмес протокол", "upload-file-error": "Ички ката", "backend-fail-closetemp": "Убактылуу файлды жабуу оңунан чыкпай жатат.", @@ -1063,7 +1058,6 @@ "lockbtn": "Маалымат базасын камоо", "move-page": "$1 — атын өзгөртүү", "move-page-legend": "Барактын атын өзгөртүү", - "movearticle": "Барактын атын өзгөртүү:", "newtitle": "Жаңы аталышка:", "movepagebtn": "Барактын атын өзгөртүү", "pagemovedsub": "Барактын аты өзгөртүлдү", @@ -1071,7 +1065,6 @@ "movelogpage": "Аталыштарды өзгөртүү журналы", "movereason": "Себеп:", "revertmove": "кайтаруу", - "delete_and_move": "Өчүрүү же атын өзгөртүү", "delete_and_move_confirm": "Ооба, бул баракты өчүрөм", "immobile-source-page": "Бул барактын атын өзгөртүүгө болбойт.", "imageinvalidfilename": "Максаттык файл аты туура эмес", @@ -1232,8 +1225,8 @@ "exif-imagelength": "Бийиктиги", "exif-imagedescription": "Сүрөт аты", "exif-artist": "Автор", - "exif-pixelydimension": "Сүрөттүн туурасы", - "exif-pixelxdimension": "Сүрөттүн бийиктиги", + "exif-pixelxdimension": "Сүрөттүн туурасы", + "exif-pixelydimension": "Сүрөттүн бийиктиги", "exif-usercomment": "Колдонуучунун комментарийи", "exif-relatedsoundfile": "Байланыштуу аудио-файл", "exif-fnumber": "Диафрагманын саны", diff --git a/languages/i18n/la.json b/languages/i18n/la.json index 3e2c5f11aa..f02128e842 100644 --- a/languages/i18n/la.json +++ b/languages/i18n/la.json @@ -26,7 +26,8 @@ "StevenJ81", "Macofe", "Xð", - "Laurentianus" + "Laurentianus", + "Guillermo2149" ] }, "tog-underline": "Versores linea denotandi:", @@ -52,7 +53,7 @@ "tog-enotifminoredits": "Etiam de minoribus recensionibus certior fiam", "tog-enotifrevealaddr": "Ostendatur inscriptio mea electronica in nuntiis notificantibus", "tog-shownumberswatching": "Numerum usorum observantium monstrare", - "tog-oldsig": "Subscriptio, qua nunc uteris:", + "tog-oldsig": "Subscriptio, qua adhuc uteris:", "tog-fancysig": "Subscriptio vicitext (sine nexu automatico)", "tog-uselivepreview": "Prospectum viventem perhibere", "tog-forceeditsummary": "Cavere, ut recensionem summatim describam", @@ -73,6 +74,8 @@ "underline-default": "Defalta navigatri interretialis", "editfont-style": "Stilus:", "editfont-default": "iuxta navigatrum", + "editfont-sansserif": "Fons Sans-serif", + "editfont-serif": "Fons Serif", "sunday": "dies Solis", "monday": "dies Lunae", "tuesday": "dies Martis", @@ -135,6 +138,8 @@ "october-date": "$1 Octobris", "november-date": "$1 Novembris", "december-date": "$1 Decembris", + "period-am": "AM", + "period-pm": "PM", "pagecategories": "{{PLURAL:$1|Categoria|Categoriae}}", "category_header": "Paginae in categoria \"$1\"", "subcategories": "Subcategoriae", @@ -160,7 +165,7 @@ "morenotlisted": "Hic index mancus est.", "mypage": "Pagina", "mytalk": "Disputatio", - "anontalk": "Disputatio huius IP", + "anontalk": "Disputatio", "navigation": "Navigatio", "and": " et", "qbfind": "Invenire", @@ -272,6 +277,7 @@ "hidetoc": "celare", "collapsible-collapse": "Collabi", "collapsible-expand": "Dilatare", + "confirmable-yes": "Sic", "thisisdeleted": "Videre aut restituere $1?", "viewdeleted": "Visne conspicere $1?", "restorelink": "{{PLURAL:$1|unam redactionem deletam|$1 redactiones deletas}}", @@ -363,6 +369,7 @@ "gotaccountlink": "Nomen da", "userlogin-resetlink": "Num tesserae tuae oblitus es?", "userlogin-resetpassword-link": "Num tesserae oblitus es?", + "userlogin-helplink2": "auxilium dandi nominis", "createacct-emailrequired": "Inscriptio electronica", "createacct-emailoptional": "Inscriptio electronica (non necesse)", "createacct-email-ph": "Inscriptionem electronicam tuam inscribe", @@ -422,6 +429,7 @@ "resetpass-submit-loggedin": "Tesseram mutare", "resetpass-submit-cancel": "Dimittere", "resetpass-temp-password": "Tessera temporaria:", + "passwordreset": "Tesseram restituere", "passwordreset-username": "Nomen usoris:", "passwordreset-email": "Inscriptio electronica:", "passwordreset-emailelement": "Nomen usoris: \n$1\n\nMomentarius Tessera: \n$2", @@ -474,7 +482,7 @@ "newarticle": "(Nova)", "newarticletext": "Per nexum progressus es ad paginam quae nondum exsistit.\nNovam paginam si vis creare, in capsam infra praebitam scribe.\n(Vide [$1 paginam auxilii] si plura cognoscere vis.)\nSi hic es propter errorem, solum '''Retrorsum''' in navigatro tuo preme.", "anontalkpagetext": "----\nHaec est pagina disputationis usoris anonymi vel potius loci IP cuiusdam.\nMemento locos IP interdum mutari et ab usoribus vel pluribus adhiberi.\nSi ipse sis usor ignotus et ex improviso invenias querulas aliquas, nomen tibi [[Special:UserLogin/signup|impone]] vel [[Special:UserLogin|nomen tuum da]], ut decetero confusionem effugias!", - "noarticletext": "Hac in pagina non sunt litterae.\nPotes [[Special:Search/{{PAGENAME}}|hanc rem in aliis paginis quaerere]],\n[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} acta huius paginae videre]\naut [{{fullurl:{{FULLPAGENAME}}|action=edit}} hanc paginam creare].", + "noarticletext": "Hac in pagina non sunt litterae.\nLicet [[Special:Search/{{PAGENAME}}|hanc rem in aliis paginis quaerere]] vel\n[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} acta huius paginae inspicere]\nvel [{{fullurl:{{FULLPAGENAME}}|action=edit}} hanc paginam creare].", "noarticletext-nopermission": "Hac in pagina non sunt litterae.\nPotes [[Special:Search/{{PAGENAME}}|hanc rem in aliis paginis quaerere]] aut [{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} acta huius paginae videre], sed tibi non licet hanc paginam creare.", "userpage-userdoesnotexist": "Usor \"$1\" non est. Visne re vera hanc paginam creare vel recensere?", "updated": "(Novata)", @@ -543,7 +551,7 @@ "historysize": "({{PLURAL:$1|1 octetus|$1 octeti}})", "historyempty": "(vacua)", "history-feed-title": "Historia", - "history-feed-description": "Historia recensionum huius paginae", + "history-feed-description": "Historia redactionum huius paginae", "history-feed-item-nocomment": "$1 ad $2", "rev-deleted-comment": "(summarium celatum)", "rev-deleted-user": "(nomen usoris celatum est)", @@ -586,6 +594,7 @@ "mergelog": "Acta confundendi", "revertmerge": "Inconfundere", "history-title": "Historia paginae \"$1\"", + "difference-title": "Quantum redactiones paginae \"$1\" differant", "lineno": "Linea $1:", "compareselectedversions": "Redactiones selectas conferre", "showhideselectedversions": "Redactiones selectas vel ostendi vel celari iubere", @@ -636,7 +645,7 @@ "preferences": "Modi", "mypreferences": "Modi", "prefs-edits": "Numerus recensionum:", - "prefs-skin": "Aspectum", + "prefs-skin": "Formae delectus", "skin-preview": "Prospectus", "datedefault": "Modus nondum delectus", "prefs-user-pages": "Paginae usoris", @@ -650,7 +659,7 @@ "prefs-misc": "Misc", "prefs-resetpass": "Tesseram mutare", "prefs-email": "Modi ad litteras electronicas spectantes", - "prefs-rendering": "Conspectus", + "prefs-rendering": "Aspectus", "saveprefs": "Hos modos servare", "restoreprefs": "Omnes (diversi) modi in integrum restituantur", "prefs-editing": "Recensere", @@ -662,7 +671,7 @@ "recentchangescount": "Quot mutationes index respiciat:", "prefs-help-recentchangescount": "Inclusis nuper mutatis, paginarum historiis, actis", "savedprefs": "Modi tui servati sunt.", - "timezonelegend": "Zona temporis:", + "timezonelegend": "Zona temporalis:", "localtime": "Hora indigena:", "timezoneuseoffset": "Alia (da dissimilitudinem cinguli horae)", "servertime": "Hora moderatri:", @@ -710,11 +719,13 @@ "prefs-info": "Generalia", "prefs-i18n": "Sermonis delectus", "prefs-signature": "Subscriptio", + "prefs-dateformat": "Forma temporalium", + "prefs-timeoffset": "Zona temporalis", "prefs-advancedediting": "Generalia", "prefs-editor": "Capsa editoria", "prefs-preview": "Prospectus", "prefs-advancedrc": "Modi speciales", - "prefs-advancedwatchlist": "Indicis modi speciales", + "prefs-advancedwatchlist": "Modi speciales", "prefs-displayrc": "Modi generales", "prefs-displaywatchlist": "Modi generales", "prefs-diffs": "Differentiae", @@ -857,7 +868,7 @@ "rcshowhidecategorization-show": "Ostendere", "rcshowhidecategorization-hide": "Supprimere", "rclinks": "Monstrare $1 nuperrime mutata in $2 diebus proximis.
$3", - "diff": "diss", + "diff": "diff", "hist": "hist", "hide": "celare", "show": "monstrare", @@ -958,11 +969,11 @@ "shared-repo-name-wikimediacommons": "Vicimedia Communia", "filerevert": "Revertere $1", "filerevert-legend": "Reverti fasciculum", - "filerevert-intro": "Reversurus es '''[[Media:$1|$1]]''' ad [redactionem $4, sicut $2, $3 facta erat].", + "filerevert-intro": "Reversurus es '''[[Media:$1|$1]]''' ad [$4 redactionem quae $2, $3 facta erat].", "filerevert-comment": "Causa:", "filerevert-defaultcomment": "Reverti ad redactionem die $1, hora $2 ($3) factam", "filerevert-submit": "Revertere", - "filerevert-success": "'''[[Media:$1|$1]]''' reversum est ad redactionem [$4, quae $2, $3 facta erat].", + "filerevert-success": "'''[[Media:$1|$1]]''' reversum est ad [$4 redactionem quae $2, $3 facta erat].", "filedelete": "Delere $1", "filedelete-legend": "Fasciculum delere", "filedelete-intro": "Deles fasciculum '''[[Media:$1|$1]]''' una cum tota eius historia.", @@ -1063,6 +1074,7 @@ "suppress": "Censura", "booksources": "Librorum fontes", "booksources-search-legend": "Fontes impressas quaerere", + "booksources-search": "Quaerere", "specialloguserlabel": "Usor:", "speciallogtitlelabel": "Destinatum (titulus aut usor):", "log": "Acta", @@ -1084,8 +1096,6 @@ "cachedspecial-refresh-now": "Recentissima vide.", "categories": "Categoriae", "categoriespagetext": "{{PLURAL:$1|Categoria subter paginas vel fasciculos continet.|Categoriae subter paginas vel fasciculos continent.}}\n[[Special:UnusedCategories|Categoriae non in usu]] non monstrantur.\nVide etiam [[Special:WantedCategories|categorias desideratas]].", - "special-categories-sort-count": "ordinare secundum numerum", - "special-categories-sort-abc": "ordinare secundum abecedarium", "deletedcontributions": "Conlationes usoris deletae", "deletedcontributions-title": "Conlationes usoris deletae", "sp-deletedcontributions-contribs": "conlationes", @@ -1481,9 +1491,9 @@ "tooltip-ca-move": "Movere hanc paginam", "tooltip-ca-watch": "Hanc paginam observandam habere", "tooltip-ca-unwatch": "Hanc paginam non iam observandam habere", - "tooltip-search": "Quaerere aliquid in {{grammar:ablative|{{SITENAME}}}}", - "tooltip-search-go": "I ad paginam cum hoc titulo exacto, si est", - "tooltip-search-fulltext": "Hunc textum in paginis quaerere", + "tooltip-search": "Aliquid in {{grammar:ablative|{{SITENAME}}}} quaerere", + "tooltip-search-go": "Si modo sit, paginam huius ipsius tituli invisere", + "tooltip-search-fulltext": "Hunc textum in paginis requirere", "tooltip-p-logo": "Ire ad paginam primam", "tooltip-n-mainpage": "Ire ad paginam primam", "tooltip-n-mainpage-description": "Ire ad paginam primam", @@ -1504,7 +1514,7 @@ "tooltip-t-permalink": "Nexus perpetuus ad hanc paginae redactionem", "tooltip-ca-nstab-main": "Videre paginam", "tooltip-ca-nstab-user": "Videre paginam usoris", - "tooltip-ca-nstab-special": "Haec est pagina specialis. Pagina ipsa recenseri non potest.", + "tooltip-ca-nstab-special": "Ea est pagina specialis, quin recenseatur.", "tooltip-ca-nstab-project": "Videre paginam inceptorum", "tooltip-ca-nstab-image": "Videre paginam fasciculi", "tooltip-ca-nstab-mediawiki": "Videre nuntium systematis", @@ -1595,8 +1605,8 @@ "exif-artist": "Auctor", "exif-exifversion": "Redactio modi \"Exif\"", "exif-colorspace": "Spatium colorimetricum", - "exif-pixelydimension": "Amplitudo imaginis", - "exif-pixelxdimension": "Altitudo imaginis", + "exif-pixelxdimension": "Amplitudo imaginis", + "exif-pixelydimension": "Altitudo imaginis", "exif-usercomment": "Adnota usoris", "exif-relatedsoundfile": "Fasciculus soni relatus", "exif-datetimeoriginal": "Dies et tempus creationis", @@ -1806,7 +1816,6 @@ "version-license": "Permissio", "version-software-product": "Productum", "version-software-version": "Versio", - "fileduplicatesearch-legend": "Duplicatum quaerere", "fileduplicatesearch-filename": "Fasciculi nomen:", "fileduplicatesearch-submit": "Quaerere", "fileduplicatesearch-info": "$1 × $2 elementa imaginalia
Magnitudo fasciculi: $3
Typus MIME: $4", diff --git a/languages/i18n/lad.json b/languages/i18n/lad.json index 59cdf77d9c..f38737bfa8 100644 --- a/languages/i18n/lad.json +++ b/languages/i18n/lad.json @@ -128,13 +128,13 @@ "category-media-header": "Dosyas de multimedya en la kategoría \"$1\"", "category-empty": "''Esta kategoría oy día, no contiene ni hojas ni dosyas de multimedya''", "hidden-categories": "{{PLURAL:$1|Kategoría escondida|Kategorías escondidas}}", - "hidden-category-category": "Katēggorías escondidas", + "hidden-category-category": "Kategorías escondidas", "category-subcat-count": "{{PLURAL:$2|Esta kategoría contiene sólo la su-kategoría venidera.|Esta kategoría contiene {{PLURAL:$1|la su-kategoría venidera|$1 su-kategorías venideras}}, de un total de $2 su-kategorías.}}", - "category-subcat-count-limited": "Esta katēggoría contiene {{PLURAL:$1|la baxo-katēggoría venidera|$1 baxo-katēggorías venideras}}.", + "category-subcat-count-limited": "Esta kategoría contiene {{PLURAL:$1|la baxo-kategoría venidera|$1 baxo-kategorías venideras}}.", "category-article-count": "{{PLURAL:$2|Esta kategoría contiene sólo la hoja venidera.|{{PLURAL:$1|La hoja venidera apartiene|Las $1 hojas venideras apartienen}} a esta kategoría, de un total de $2.}}", - "category-article-count-limited": "{{PLURAL:$1|La hoja venidera apartiene|Las $1 hojas venideras apartienen}} a esta katēggoría.", - "category-file-count": "{{PLURAL:$2|Esta katēggoría contiene sólo la dosya venidera.|{{PLURAL:$1|La dosya venidera apartiene|Las $1 dosyas venideras apartienen}} a esta katēggoría, de un total de $2.}}", - "category-file-count-limited": "{{PLURAL:$1|La dosya venidera apartiene|Las $1 dosyas venideras apartienen}} a esta katēggoría.", + "category-article-count-limited": "{{PLURAL:$1|La hoja venidera apartiene|Las $1 hojas venideras apartienen}} a esta kategoría.", + "category-file-count": "{{PLURAL:$2|Esta kategoría contiene sólo la dosya venidera.|{{PLURAL:$1|La dosya venidera apartiene|Las $1 dosyas venideras apartienen}} a esta kategoría, de un total de $2.}}", + "category-file-count-limited": "{{PLURAL:$1|La dosya venidera apartiene|Las $1 dosyas venideras apartienen}} a esta kategoría.", "listingcontinuesabbrev": "cont.", "index-category": "Hojas arregladas en lista", "noindex-category": "Hojas no arregladas en lista", @@ -761,8 +761,6 @@ "allinnamespace": "Todas las pajinas (espasio $1)", "allpagessubmit": "Ir", "categories": "Kategorías", - "special-categories-sort-count": "ordenar por número", - "special-categories-sort-abc": "ordenar alefbeticamente", "linksearch": "Bushkida de enlases eksternos", "linksearch-ok": "Bushkar", "linksearch-line": "Atamiento para $1 en la hoja $2", @@ -800,7 +798,6 @@ "unwatch": "dexa de cudiar", "watchlist-details": "{{PLURAL:$1|$1 hoja|$1 hojas}} en tu lista de escogidas, sin contar las de la diskussión.", "wlshowlast": "Ver los trocamientos de las últimas $1 oras, $2 días", - "watchlistall2": "todos", "watchlist-options": "Opciones de la lista de escogidas", "watching": "Cudiando...", "unwatching": "Dexando de cudiar...", diff --git a/languages/i18n/lb.json b/languages/i18n/lb.json index 7986c9f8f9..4040aa4f2a 100644 --- a/languages/i18n/lb.json +++ b/languages/i18n/lb.json @@ -15,7 +15,8 @@ "VT98Fan", "Zinneke", "לערי ריינהארט", - "아라" + "아라", + "Nemo bis" ] }, "tog-underline": "Linken ënnersträichen:", @@ -155,7 +156,6 @@ "moredotdotdot": "Méi …", "morenotlisted": "Dës Lëscht ass net komplett.", "mypage": "Säit", - "anonuserpage": "Onbekannte Benotzer", "mytalk": "Diskussioun", "anontalk": "Diskussioun", "navigation": "Navigatioun", @@ -471,7 +471,7 @@ "noemail": "De Benotzer \"$1\" huet keng E-Mail-Adress uginn.", "noemailcreate": "Dir musst eng valabel E-Mail-Adress uginn", "passwordsent": "Een neit Passwuert gouf un déi fir de Benotzer \"$1\" gespäichert E-Mailadress geschéckt.\nMellt Iech w.e.g. domat un, soubal Dir et kritt hutt.", - "blocked-mailpassword": "Déi vun Iech benotzten IP-Adress ass fir d'Ännere vu Säite gespaart. Fir Mëssbrauch ze verhënneren, gouf d'Méiglechkeet fir een neit Passwuert unzefroen och gespaart.", + "blocked-mailpassword": "Är IP-Adress ass fir d'Ännere vu Säite gespaart. Fir Mëssbrauch ze verhënneren, gouf d'Méiglechkeet fir een neit Passwuert vun dëser IP-Adress aus unzefroen och gespaart.", "eauthentsent": "Eng Confirmatiouns-E-Mail gouf un déi Adress geschéckt déi Dir uginn hutt.\n\nIer iergendeng E-Mail vun anere Benotzer op dee Kont geschéckt ka ginn, musst Dir als éischt d'Instructiounen an der Confirmatiouns-E-Mail befollegen, fir ze bestätegen datt de Kont wierklech Ären eegenen ass.", "throttled-mailpassword": "An {{PLURAL:$1|der leschter Stonn|de leschte(n) $1 Stonnen}} eng E-Mail verschéckt fir d'Passwuert zréckzesetzen.\nFir de Mëssbrauch vun dëser Funktioun ze verhënneren kann nëmmen all {{PLURAL:$1|Stonn|$1 Stonnen}} sou eng Mail verschéckt ginn.", "mailerror": "Feeler beim Schécke vun der E-Mail: $1", @@ -488,7 +488,7 @@ "createaccount-title": "Opmaache vun engem Benotzerkont op {{SITENAME}}", "createaccount-text": "Et gouf e Benotzerkont \"$2\" fir Iech op {{SITENAME}} ($4) ugeluecht mat dem Passwuert \"$3\".\nDir sollt Iech aloggen an Äert Passwuert elo änneren.\n\nWann dëse Benotzerkont ongewollt ugeluecht gouf, kënnt Dir dës Noriicht einfach ignoréieren.", "login-throttled": "Dir hutt zevill dacks versicht Iech anzeloggen.\nWaart w.e.g. $1 ier Dir et nach eng Kéier probéiert.", - "login-abort-generic": "Dir sidd net ageloggt - Aloggen ofgebrach", + "login-abort-generic": "Äert Aloggen huet net funktionéiert - Ofgebrach", "login-migrated-generic": "Äre Benotzerkont gouf migréiert an Äre Benotzernumm gëtt et net méi op dëser Wiki.", "loginlanguagelabel": "Sprooch: $1", "suspicious-userlogout": "Är Ufro fir Iech auszeloggen gouf refuséiert well et sou ausgesäit wéi wa se vun engem futtise Browser oder Proxy-Tëschespäicher kënnt.", @@ -630,7 +630,7 @@ "newarticle": "(Nei)", "newarticletext": "Dir hutt op e Link vun enger Säit geklickt, déi et nach net gëtt. Fir déi Säit unzeleeën, gitt w.e.g. Ären Text an déi Këscht hei drënner an (kuckt d'[$1 Hëllef Säit] fir méi Informatiounen). Wann Dir duerch een Iertum heihi komm sidd, da klickt einfach op de Knäppchen '''Zréck''' vun Ärem Browser.", "anontalkpagetext": "---- ''Dëst ass d'Diskussiounssäit fir en anonyme Benotzer deen nach kee Kont opgemaach huet oder en net benotzt. Dowéinst musse mir d'IP Adress benotzen, fir de Benotzer z'identifizéieren.\nSou eng IP Adress ka vun e puer Benotzer gedeelt ginn.\nWann Dir en anonyme Benotzer sidd an Dir irrelevant Bemierkunge krut, [[Special:UserLogin/signup|maacht w.e.g. e Kont op]] oder [[Special:UserLogin|loggt Iech an]], fir weider Verwiesselunge mat aneren anonyme Benotzer ze verhënneren.''", - "noarticletext": "Dës Säit huet momentan keen Text.\nDir kënnt op anere Säiten no [[Special:Search/{{PAGENAME}}|dësem Säitentitel sichen]],\n[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} an den entspriechende Logbicher nokucken] oder [{{fullurl:{{FULLPAGENAME}}|action=edit}} sou eng Säit uleeën].", + "noarticletext": "Dës Säit huet elo keen Text.\nDir kënnt op anere Säiten no [[Special:Search/{{PAGENAME}}|dësem Säitentitel sichen]],\n[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} an den entspriechende Logbicher nokucken] oder [{{fullurl:{{FULLPAGENAME}}|action=edit}} dës Säit uleeën].", "noarticletext-nopermission": "Elo ass keen Text op dëser Säit.\nDir kënnt op anere Säiten [[Special:Search/{{PAGENAME}}|no dësem Säitentitel sichen]], oder [{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} an de Logbicher sichen], mä Dir hutt net déi néideg Rechter fir dës Säit unzeleeën.", "missing-revision": "D'Versioun #$1 vun der Säit mam Numm \"{{FULLPAGENAME}}\" gëtt et net.\n\nDat geschitt normalerweis wann Dir op e vereelste Link vun enger Versioun vun enger Säit klickt déi geläscht ginn ass.\nDetailer fannt Dir am [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} Logbuch vum Läschen].", "userpage-userdoesnotexist": "De Benotzerkont \"$1\" ass net registréiert.\nIwwerpréift w.e.g. op Dir dës Säit uleeën/ännere wëllt.", @@ -1000,7 +1000,7 @@ "gender-unknown": "Wann Dir ernimmt gitt da benotzt d'Software do wou et méiglech ass geschlechtsneutral Wierder", "gender-male": "Hien ännert Wikisäiten", "gender-female": "Si ännert Wikisäiten", - "prefs-help-gender": "Fakultativ:\nD'Software benotzt seng Wäerter fir Iech unzeschwätzen a fir vun Iech vis-a-vis vun Aneren grammatesch ''Gender-korrekt'' ze schwätzen. \n\nDës Informatioun ass ëffentlech.", + "prefs-help-gender": "Fakultativ:\nD'Software benotzt seng Wäerter fir Iech unzerieden a fir vun Iech vis-a-vis vun Anere grammatesch ''Gender-korrekt'' ze sinn. \n\nDës Informatioun ass ëffentlech.", "email": "E-Mail", "prefs-help-realname": "De richtegen Numm ass fakultativ.\nWann en ugi gouf, gëtt e benotzt fir Iech Är Kontributiounen zouzeuerdnen.", "prefs-help-email": "D'E-Mailadress ass fakultativ, awer si gëtt gebraucht fir Iech Äert Passwuert ze mailen, wann Dir et géift vergiessen.", @@ -1145,14 +1145,14 @@ "grant-createaccount": "Benotzerkonten opmaachen", "grant-createeditmovepage": "Säiten uleeën, änneren a réckelen", "grant-delete": "Säiten, Versiounen a Rubriken a Logbicher läschen", - "grant-editinterface": "MediaWiki-Nummraum a Benotzer CSS/JS änneren", - "grant-editmycssjs": "Ären eegene Benotzer CSS/JavaScript änneren", + "grant-editinterface": "MediaWiki-Nummraum a Benotzer CSS/JavaScript änneren", + "grant-editmycssjs": "Äre Benotzer CSS/JavaScript änneren", "grant-editmyoptions": "Ännert Är Benotzerastellungen", "grant-editmywatchlist": "Ännert Är Iwwerwaachungslëscht", "grant-editpage": "Säiten déi et gëtt änneren", "grant-editprotected": "Gespaart Säiten änneren", "grant-oversight": "Benotzer verstoppen a Versioune läschen", - "grant-patrol": "Ännerungen op Säiten iwwerwaachen", + "grant-patrol": "Ännerungen op Säiten kontrolléieren", "grant-protect": "Säite spären an entspären", "grant-rollback": "Ännerungen op Säiten zrécksetzen", "grant-sendemail": "Anere Benotzer E-Maile schécken", @@ -1272,9 +1272,9 @@ "recentchangeslinked-page": "Säitennumm:", "recentchangeslinked-to": "Weis Ännerungen zu de verlinkte Säiten aplaz vun der gefroter Säit", "recentchanges-page-added-to-category": "[[:$1]] an d'Kategorie derbäigesat", - "recentchanges-page-added-to-category-bundled": "{{PLURAL:$2|}}[[:$1]] a(n) {{PLURAL:$2|eng Säit|$2 Säiten}} an d'Kategorie derbäigesat", + "recentchanges-page-added-to-category-bundled": "[[:$1]] an d'Kategorie dobäigesat, [[Special:WhatLinksHere/$1|dës Säit ass an aner Säiten agebonn]]", "recentchanges-page-removed-from-category": "[[:$1]] erausgeholl aus der Kategorie", - "recentchanges-page-removed-from-category-bundled": "{{PLURAL:$2|}}[[:$1]] a(n) {{PLURAL:$2|eng Säit|$2 Säiten}} aus der Kategorie erausgeholl", + "recentchanges-page-removed-from-category-bundled": "[[:$1]] aus der Kategorie erausgeholl, [[Special:WhatLinksHere/$1|dës Säit ass an aner Säiten agebonn]]", "autochange-username": "Automatesch MediaWiki-Ännerung", "upload": "Eroplueden", "uploadbtn": "Fichier eroplueden", @@ -1425,6 +1425,7 @@ "uploadstash-badtoken": "D'Ausféiere vun dëser Aktioun huet net funktionéiert, vläicht well d'Informatiounen iwwer Är Rechter ofgelaf sinn. Probéiert et w.e.g. nach emol.", "uploadstash-errclear": "D'Läsche vun de Fichieren huet net funktionéiert.", "uploadstash-refresh": "Lëscht vun de Fichieren aktualiséieren", + "uploadstash-thumbnail": "Miniaturbild weisen", "img-auth-accessdenied": "Zougang refuséiert", "img-auth-nopathinfo": "PATH_INFO feelt.\nÄre Server ass net agestallt fir déi Informatioun weiderzeginn.\nEt kann u CGI leien an datt imag_auth net ënnerstëtzt gëtt.\nKuckt https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Image_Authorization", "img-auth-notindir": "De gefrote Pad ass net am Upload-Repertoire agestallt.", @@ -1724,8 +1725,6 @@ "categories-submit": "Weisen", "categoriespagetext": "Dës {{PLURAL:$1|Kategorie huet|Kategorien hu}} Säiten oder Medien.\n[[Special:UnusedCategories|Netbenotzt Kategorië]] ginn hei net gewisen.\nKuckt och [[Special:WantedCategories|Gewënscht Kategorien]].", "categoriesfrom": "Weis Kategorien ugefaange bei:", - "special-categories-sort-count": "no der Zuel zortéieren", - "special-categories-sort-abc": "alphabetesch zortéieren", "deletedcontributions": "Geläscht Kontributiounen", "deletedcontributions-title": "Geläscht Kontributiounen", "sp-deletedcontributions-contribs": "Kontributiounen", @@ -1971,7 +1970,7 @@ "viewdeletedpage": "Geläscht Säite weisen", "undeletepagetext": "Dës {{PLURAL:$1|Säit gouf |Säite goufe}} geläscht mä sinn nach ëmmer am Archiv a kënne vun Administrateure restauréiert ginn. D'Archiv gëtt periodesch eidel gemaach.", "undelete-fieldset-title": "Versioune restauréieren", - "undeleteextrahelp": "Fir d'Säit komplett mat alle Versiounen ze restauréieren, markéiert keng vun den eenzelne Casë mat engem Krop a klickt op '''''{{int:undeletebtn}}'''''.\nFir nëmmen eng bestëmmte Versioun vun der Säit ze restauréieren, markéiert d'Case vun der gewënschter Versioun mat engem Krop, a klickt duerno op '''''{{int:undeletebtn}}'''''.", + "undeleteextrahelp": "Fir d'Säit komplett mat alle Versiounen ze restauréieren, markéiert keng vun den eenzelne Casen a klickt op '''''{{int:undeletebtn}}'''''.\nFir nëmmen eng bestëmmt Versioun vun der Säit ze restauréieren, markéiert d'Case vun der gewënschter Versioun mat engem Krop, a klickt duerno op '''''{{int:undeletebtn}}'''''.", "undeleterevisions": "{{PLURAL:$1|1 Versioun|$1 Versioune}} geläscht", "undeletehistory": "Wann Dir dës Säit restauréiert, ginn och all déi al Versioune restauréiert.\nWann zanter dem Läschen eng nei Säit mat dem selwechten Numm ugeluecht gouf, ginn déi restauréiert Versioune chronologesch an den Historique agedroen.", "undeleterevdel": "D'Restauratioun gëtt net gemaach wann dat dozou féiert datt déi aktuell Versioun vun der Säit oder vum Fichier deelweis geläscht gëtt.\nA sou Fäll däerf déi neist Versioun net markéiert ginn oder déi neist geläscht Versioun muss nees ugewise ginn.", @@ -2088,6 +2087,7 @@ "ipb-unblock": "Spär vun enger IP-Adress oder engem Benotzer ophiewen", "ipb-blocklist": "Kuckt aktuell Spären", "ipb-blocklist-contribs": "Kontributioune vum {{GENDER:$1|$1}}", + "ipb-blocklist-duration-left": "$1 iwwreg", "unblockip": "Spär vum Benotzer ophiewen", "unblockiptext": "Benotzt dëse Formulaire fir enger IP-Adress oder engem Benotzer seng Spär opzehiewen.", "ipusubmit": "Des Spär ophiewen", @@ -2326,11 +2326,7 @@ "import-logentry-upload-detail": "$1 {{PLURAL:$1|Versioun|Versiounen}} importéiert", "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|Versioun|Versiounen}} importéiert vu(n) $2", "javascripttest": "JavaScript-Test", - "javascripttest-pagetext-noframework": "Dës Säit ass fir Java-Script-Tester reservéiert.", - "javascripttest-pagetext-unknownframework": "Onbekannten Test-Framework \"$1\".", "javascripttest-pagetext-unknownaction": "Onbekannt Aktioun \"$1\".", - "javascripttest-pagetext-frameworks": "Sicht w.e.g. eng vun dësen Test-Strukturen eraus: $1", - "javascripttest-pagetext-skins": "Sicht en Interface (skin) eraus fir d'Tester ze maachen:", "javascripttest-qunit-intro": "Kuckt d'[$1 Dokumentatioun vun den Tester] op mediawiki.org", "tooltip-pt-userpage": "{{GENDER:|Är Benotzer}}säit", "tooltip-pt-anonuserpage": "Benotzersäit vun der IP-Adress vun där aus Dir den Ament Ännerunge maachtt", @@ -2582,8 +2578,8 @@ "exif-colorspace": "Faarfraum", "exif-componentsconfiguration": "Bedeitung vun eenzelne Komponenten", "exif-compressedbitsperpixel": "Kompriméiert Bite pro Pixel", - "exif-pixelydimension": "Breet vum Bild", - "exif-pixelxdimension": "Héicht vum Bild", + "exif-pixelxdimension": "Breet vum Bild", + "exif-pixelydimension": "Héicht vum Bild", "exif-usercomment": "Bemierkunge vum Benotzer", "exif-relatedsoundfile": "Tounfichier deen dozou gehéiert", "exif-datetimeoriginal": "Erfaassungszäitpunkt", @@ -2901,6 +2897,7 @@ "confirmemail_body_set": "Iergendeen, wahrscheinlech Dir selwer, vun der IP-Adress $1,\nhuet d'E-Mail-Adress vum Benotzerkont \"$2\" op dës Adress op {{SITENAME}} geännert.\n\nFir ze confirméieren datt dëse Benotzerkont Iech wierklech gehéiert a fir d'E-Mailfonctiounen op {{SITENAME}} ze reaktivéieren, maacht dës Link an Ärem Browser op:\n\n$3\n\nWann de Benotzerkont Iech *net* gehéiert, da klickt op dëse Link fir d'Confirmatioun vun der E-Mail-Adress auszeschalten:\n\n$5\n\nDëse Confirmatiounscode leeft den $4 of.", "confirmemail_invalidated": "Confirmatioun vun der E-Mail-Adress annulléiert", "invalidateemail": "Annulléier d'E-Mailconfirmation", + "notificationemail_subject_removed": "D'E-Mail-Adress déi op {{SITENAME}} enregistréiert war gouf ewechgeholl", "scarytranscludedisabled": "[Interwiki-Abannung ass ausgeschalt]", "scarytranscludefailed": "[D'Siche no der Schabloun fir $1 huet net funktionéiert]", "scarytranscludefailed-httpstatus": "[D'Opruffe vun der Schabloun $1: HTTP $2 huet net funktionéiert]", @@ -3001,7 +2998,7 @@ "version-poweredby-others": "anerer", "version-poweredby-translators": "translatewiki.net Iwwersetzer", "version-credits-summary": "Mir soen dëse Persoune 'Merci' fir hir Mataarbecht u [[Special:Version|MediaWiki]].", - "version-license-info": "MediaWiki ass fräi Software; Dir kënnt se weiderginn an/oder s'änneren ënner de Bedingunge vun der GNU-General Public License sou wéi se vun der Free Softare Foundation publizéiert ass; entweder ënner der Versioun 2 vun der Lizenz, oder (no Ärem Choix) enger spéiderer Versioun.\n\nMediaWiki gëtt verdeelt an der Hoffnung datt se nëtzlech ass, awer OUNI IERGENDENG GARANTIE; ouni eng implizit Garantie vu Commercialisatioun oder Eegnung fir e bestëmmte Gebrauch. Kuckt d'GPL General Public License fir méi Informatiounen.\n\nDir misst eng [{{SERVER}}{{SCRIPTPATH}}/COPYING Kopie vun der GNU General Public License] mat dësem Programm kritt hunn; wann net da schreift der Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA oder [//www.gnu.org/licenses/old-licenses/gpl-2.0.html liest se online].", + "version-license-info": "MediaWiki ass eng fräi Software. Dir kënnt se weiderginn an/oder ënner de Bedingungen vun der GNU-General Public License, änneren, sou wéi se vun der Free Software Foundation publizéiert ass; entweder ënner der Versioun 2 vun der Lizenz, oder (no Ärem Choix) enger spéiderer Versioun.\n\nMediaWiki gëtt verdeelt, an der Hoffnung datt se nëtzlech ass, awer OUNI IERGENDENG GARANTIE an ouni eng implizit Garantie vu Commercialisatioun oder Eegnung fir e bestëmmte Gebrauch. Kuckt d'GPU General Public License fir méi Informatiounen.\n\nDir misst eng [{{SERVER}}{{SCRIPTPATH}}/COPYING Kopie vun der GNU General Public License] mat dësem Programm kritt hunn. Wann net da schreift der Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA oder [http://www.gnu.org/licenses/old-licenses/gpl-2.0.html liest se online].", "version-software": "Installéiert Software", "version-software-product": "Produkt", "version-software-version": "Versioun", @@ -3015,7 +3012,6 @@ "version-libraries-description": "Beschreiwung", "version-libraries-authors": "Auteuren", "redirect": "Viruleedung duerch e Fichier, e Benotzer, eng Säit, eng Versiouns-ID oder eng Logbuch-ID", - "redirect-legend": "Viruleedung op ee Fichier oder eng Säit", "redirect-summary": "Dës Spezialsäit ass eng Viruleedung op e Fichier (Fichiersnumm uginn), eng Säit (Versiounsnummer uginn), eng Benotzersäit (numeresch Benotzeridentifikatiounsnummer uginn) oder eng Entrée an engem Logbuch (vum Logbuch mat der ID).\nGebrauch:\n[[{{#Special:Redirect}}/file/Example.jpg]],\n[[{{#Special:Redirect}}/page/64308]],\n[[{{#Special:Redirect}}/revision/328429]],\n[[{{#Special:Redirect}}/user/101]], oder\n[[{{#Special:Redirect}}/logid/186]].", "redirect-submit": "Lass", "redirect-lookup": "Nosichen:", @@ -3027,7 +3023,6 @@ "redirect-not-exists": "Wäert net fonnt", "fileduplicatesearch": "No duebele Fichiere sichen", "fileduplicatesearch-summary": "Sichen no Doublone vu Fichieren op der Basis vun hirem ''Hash-Wäert''.", - "fileduplicatesearch-legend": "No engem Doublon sichen", "fileduplicatesearch-filename": "Numm vum Fichier:", "fileduplicatesearch-submit": "Sichen", "fileduplicatesearch-info": "$1 × $2 Pixel
Gréisst vum Fichier: $3
MIME Typ: $4", @@ -3189,7 +3184,9 @@ "logentry-newusers-create2": "De Benotzerkont $3 gouf vum $1 {{GENDER:$2|ugeluecht}}", "logentry-newusers-byemail": "De Benotzerkont $3 gouf vum $1 {{GENDER:$2|ugeluecht}} an d'Passwuert gouf per E-Mail geschéckt.", "logentry-newusers-autocreate": "De Benotzerkont $1 gouf automatesch {{GENDER:$2|ugeluecht}}", - "logentry-rights-rights": "$1 {{GENDER:$2|huet}} d'Gruppen zou deenen de Benotzer $3 gehéiert vu(n) $4 op $5 geännert", + "logentry-protect-protect": "$1 {{GENDER:$2|huet}} d'Säit $3 $4 gespaart", + "logentry-protect-protect-cascade": "$1 {{GENDER:$2|huet}} d'Säit $3 $4 gespaart [Kaskadespär]", + "logentry-rights-rights": "$1 {{GENDER:$2|huet}} d'Gruppen zou deenen {{GENDER:$3|d'|de}} $3 gehéiert vu(n) $4 op $5 geännert", "logentry-rights-rights-legacy": "$1 {{GENDER:$2|huet}} d'Gruppen zou deenen de Benotzer $3 gehéiert geännert", "logentry-rights-autopromote": "De Benotzer $1 {{GENDER:$2|krut}} d'Benotzerrechter automatesch vu(n) $4 op $5 geännert", "logentry-upload-upload": "$1 huet $3 {{GENDER:$2|eropgelueden}}", @@ -3332,6 +3329,7 @@ "special-characters-group-ipa": "IPA", "special-characters-group-symbols": "Symboler", "special-characters-group-greek": "Griichesch", + "special-characters-group-greekextended": "Griichesch erweidert", "special-characters-group-cyrillic": "Kyrillisch", "special-characters-group-arabic": "Arabesch", "special-characters-group-arabicextended": "Arabesch, erweidert", @@ -3354,5 +3352,22 @@ "mw-widgets-titleinput-description-redirect": "viruleeden op $1", "api-error-blacklisted": "Sicht w.e.g. en aneren Titel, dee méi iwwer de Sujet ausseet.", "sessionprovider-generic": "$1-Sessiounen", - "randomrootpage": "Zoufalls-Stammsäit" + "randomrootpage": "Zoufalls-Stammsäit", + "log-action-filter-block": "Typ vun der Spär:", + "log-action-filter-protect": "Typ vu Spär", + "log-action-filter-all": "All", + "log-action-filter-block-block": "Spären", + "log-action-filter-block-reblock": "Ännere vun enger Spär", + "log-action-filter-block-unblock": "Spär ophiewen", + "log-action-filter-delete-delete": "Säite läschen", + "log-action-filter-import-interwiki": "Transwiki-Import", + "log-action-filter-move-move_redir": "Réckele mat Iwwerschreiwe vu Viruleedungen", + "log-action-filter-patrol-patrol": "Manuell Kontroll", + "log-action-filter-patrol-autopatrol": "Automatesch Kontroll", + "log-action-filter-protect-protect": "Spär", + "log-action-filter-protect-modify": "Spär-pÄnnerung", + "log-action-filter-protect-move_prot": "Geréckelt Spär", + "log-action-filter-rights-rights": "Manuell Ännerung", + "log-action-filter-upload-upload": "Neien Upload", + "log-action-filter-upload-overwrite": "Nees eroplueden" } diff --git a/languages/i18n/li.json b/languages/i18n/li.json index 46849034da..62e24b218d 100644 --- a/languages/i18n/li.json +++ b/languages/i18n/li.json @@ -1367,8 +1367,6 @@ "categories": "Categorieë", "categoriespagetext": "De volgende {{PLURAL:$1|categorie bevat|categorieë bevatte}} pazjena's of mediabestenj.\n[[Special:UnusedCategories|Óngebroekde categorieë]] waere hie neet weergegaeve.\nZuuch ouch [[Special:WantedCategories|neet-bestaondje categorieë mit verwiezinge]].", "categoriesfrom": "Categorië waergaeve vanaaf:", - "special-categories-sort-count": "op aantal sortere", - "special-categories-sort-abc": "alfabetisch sortere", "deletedcontributions": "Eweggesjafde gebroekersbiedrages", "deletedcontributions-title": "Eweggesjafde gebroekersbiedrages", "sp-deletedcontributions-contribs": "biedraag", @@ -1887,10 +1885,6 @@ "import-logentry-upload-detail": "$1 {{PLURAL:$1|versie|versies}}", "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|versie|versies}} van $2", "javascripttest": "Tes JavaScript", - "javascripttest-pagetext-noframework": "Dees pagina is gerizzerveerd veur 't oetveure van JavaScriptteste.", - "javascripttest-pagetext-unknownframework": "Ónbekèndje testframework \"$1\".", - "javascripttest-pagetext-frameworks": "Kees ein vanne volgende tesframeworks: $1", - "javascripttest-pagetext-skins": "Kees 'n oeterlik óm de teste op te laote loupe:", "javascripttest-qunit-intro": "Zuuch de [$1 tesdocumentatie] op mediawiki.org.", "tooltip-pt-userpage": "Dien gebroekerspagina", "tooltip-pt-anonuserpage": "De gebroekerspazjena veur dit IP adres", @@ -2073,8 +2067,8 @@ "exif-colorspace": "Kläörruumde", "exif-componentsconfiguration": "Beteikenis van edere componènt", "exif-compressedbitsperpixel": "Cómpressiemeneer bie dit plaetje", - "exif-pixelydimension": "Aafbeildingsbrèdje", - "exif-pixelxdimension": "Aafbeildingsheugdje", + "exif-pixelxdimension": "Aafbeildingsbrèdje", + "exif-pixelydimension": "Aafbeildingsheugdje", "exif-usercomment": "Opmerkinge", "exif-relatedsoundfile": "Biebeheurendj audiobestandj", "exif-datetimeoriginal": "Datum en momint van verwèkking", @@ -2477,7 +2471,6 @@ "version-entrypoints-header-url": "URL", "fileduplicatesearch": "Zeuk veur döbbelbestaondje bestenj", "fileduplicatesearch-summary": "Zeuk veur döbbel bestaondje bestenj op basis van zien hashwaarde.", - "fileduplicatesearch-legend": "Zeuk veur 'ne döbbele", "fileduplicatesearch-filename": "Bestandjsnaam:", "fileduplicatesearch-submit": "Zeuk", "fileduplicatesearch-info": "$1 × $2 pixel
Bestandjsgrootte: $3
MIME type: $4", diff --git a/languages/i18n/lij.json b/languages/i18n/lij.json index 483b3a757f..9ede18f258 100644 --- a/languages/i18n/lij.json +++ b/languages/i18n/lij.json @@ -11,7 +11,8 @@ "아라", "V6rg", "C.R.", - "Macofe" + "Macofe", + "Nemo bis" ] }, "tog-underline": "Sottolineâ i collegamenti", @@ -1079,7 +1080,7 @@ "recentchangeslinked-page": "Nómme da pàgina:", "recentchangeslinked-to": "Fanni védde sôlo i cangiaménti a-e pàgine colegæ a-a pàgina specificâ", "recentchanges-page-added-to-category": "[[:$1]] azonto a-a categoria", - "recentchanges-page-added-to-category-bundled": "[[:$1]] e {{PLURAL:$2|una paggina a l'è azonta|$2 paggine son azonte}} a-a categoria", + "recentchanges-page-added-to-category-bundled": "[[:$1]] e [[Special:WhatLinksHere/$1|{{PLURAL:$2|una paggina a l'è azonta|$2 paggine son azonte}}]] a-a categoria", "recentchanges-page-removed-from-category": "[[:$1]] rimosso da-a categoria", "recentchanges-page-removed-from-category-bundled": "[[:$1]] e {{PLURAL:$2|una paggina a l'è rimossa|$2 paggine son rimosse}} da-a categoria", "autochange-username": "Modiffica aotomattica MediaWiki", diff --git a/languages/i18n/lki.json b/languages/i18n/lki.json index 3026652a01..ced7c580aa 100644 --- a/languages/i18n/lki.json +++ b/languages/i18n/lki.json @@ -230,7 +230,7 @@ "copyright": " محتوایۀل هانإ ژئرنظر اجازه‌نامهٔ $1 مۀگۀر یۀگإ خلاف یۀ بوشرئ/ذکر بو", "copyrightpage": "{{ns:project}}:حق تکثیر", "currentevents": "پێش هەتێەل ایسگە", - "currentevents-url": "Project:رویدادةل ایسة", + "currentevents-url": "پێش هەتێەل ایسگە(ایسە)", "disclaimers": "دروو نامه -تکذیب نامه", "disclaimerpage": "Project:تکذیب‌نامهٔ عمومی", "edithelp": "راهنمای دۀسکاری کردن", @@ -1682,8 +1682,6 @@ "categories-submit": "نیشان دائن", "categoriespagetext": "{{PLURAL:$1|ردهٔ|رده‌های}} زیر دارای صفحات یا پرونده‌هایی {{PLURAL:$1|است|هستند}}.\n[[Special:UnusedCategories|رده‌های استفاده‌نشده]] در اینجا نمایش داده نشده‌اند.\nهمچنین [[Special:WantedCategories|رده‌های مورد نیاز]] را ببینید.", "categoriesfrom": "نمایش رده‌ها با شروع از:", - "special-categories-sort-count": "مرتب کردن بر اساس تعداد", - "special-categories-sort-abc": "مرتب کردن الفبایی", "deletedcontributions": "مشارکت‌های حذف‌شده", "deletedcontributions-title": "مشارکت‌های حذف‌شده", "sp-deletedcontributions-contribs": "مشارکت‌ها", @@ -2291,11 +2289,7 @@ "import-logentry-upload-detail": "$1 {{PLURAL:$1|نسخه|نسخه ها}} واردشده", "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|نسخه|نسخه ها}} واردشده از $2", "javascripttest": "آزمایش جاوا اسکریپت", - "javascripttest-pagetext-noframework": "این صفحه برای اجرای آزمایش‌های جاوا اسکریپت کنار گذاشته شده‌است.", - "javascripttest-pagetext-unknownframework": "چارچوب آزمایشی ناشناخته «$1».", "javascripttest-pagetext-unknownaction": "تابع ناشناختهٔ \"$1\".", - "javascripttest-pagetext-frameworks": "لطفاً یکی از چارچوب‌های آزمایش زیر را انتخاب کنید: $1", - "javascripttest-pagetext-skins": "پوسته‌ای را برای اجرای آزمایش‌ها انتخاب کنید:", "javascripttest-qunit-intro": "[$1 مستندات آزمایش] را در mediawiki.org ببینید.", "tooltip-pt-userpage": "وةڵگة کاربۀری هؤمۀ", "tooltip-pt-anonuserpage": "صفحهٔ کاربری نشانی آی‌پی‌ای که با آن ویرایش می‌کنید", @@ -2547,8 +2541,8 @@ "exif-colorspace": "فضای رۀنگی", "exif-componentsconfiguration": "معنی هر یک از مؤلفه‌ها", "exif-compressedbitsperpixel": "حالت فشرده‌سازی تصویر", - "exif-pixelydimension": "پهنای تصویر", - "exif-pixelxdimension": "بلندی تصویر", + "exif-pixelxdimension": "پهنای تصویر", + "exif-pixelydimension": "بلندی تصویر", "exif-usercomment": "توضیحات کاربر", "exif-relatedsoundfile": "پروندهٔ صوتی مربوط", "exif-datetimeoriginal": "تاریخ و زمان تولید داده‌ها", @@ -2988,7 +2982,6 @@ "version-libraries-description": "توضیحةل", "version-libraries-authors": "نویسندگان", "redirect": "تغییرمسیر توسط پرونده، کاربر، صفحه یا شناسهٔ نسخه", - "redirect-legend": "تغییرمسیر به یک پرونده یا صفحه", "redirect-summary": "این صفحهٔ ویژه به پرونده (نام پرونده داده‌شده)، صفحه (شماره شناسهٔ صفحه یا شماره نسخهٔ داده‌شده) یا صفحهٔ کاربری (شناسهٔ عددی کاربری داده‌شده) تغییرمسیر می‌یابد. طرز استفاده: [[{{#Special:Redirect}}/file/Example.jpg]]، \n[[{{#Special:Redirect}}/page/64308]]، [[{{#Special:Redirect}}/revision/328429]] یا [[{{#Special:Redirect}}/user/101]].", "redirect-submit": "بِچۆ", "redirect-lookup": "مِنِی کِردِن(گێردین):", @@ -3000,7 +2993,6 @@ "redirect-not-exists": "مقدار پیدا نشد", "fileduplicatesearch": "جستجو برای پرونده‌های تکراری", "fileduplicatesearch-summary": "جستجو برای پرونده‌های تکراری بر اساس مقدار درهم‌شدهٔ آن‌ها صورت می‌گیرد.", - "fileduplicatesearch-legend": "جستجوی موارد تکراری", "fileduplicatesearch-filename": "نام پرونده:", "fileduplicatesearch-submit": "مِنِی کِردِن(گێردین)", "fileduplicatesearch-info": "$1 × $2 پیکسل
اندازهٔ پرونده: $3
نوع MIME: $4", diff --git a/languages/i18n/lrc.json b/languages/i18n/lrc.json index 1582bb3879..a835f91c28 100644 --- a/languages/i18n/lrc.json +++ b/languages/i18n/lrc.json @@ -7,7 +7,8 @@ "Macofe", "Mjbmr", "Matma Rex", - "Lakzon" + "Lakzon", + "Nemo bis" ] }, "tog-underline": "هوم پئیڤأند زیرخأط دار:", @@ -1665,8 +1666,6 @@ "categories": "دسه يا", "categoriespagetext": "{{PLURAL:$1|دسه|دسه یا}} هاری دشو جانیایا یا بلگه {{PLURAL:$1|هئ|هیئن}}.\n[[Special:UnusedCategories|دسه یا وه کار نگرته بیه]] د ایچه نیئن.\nهمچنو[[Special:WantedCategories|دسه یا حاستنی نه]] بوینیت.", "categoriesfrom": "دسه یایی که د شرو بینه نشو بیه:", - "special-categories-sort-count": "سرجاخودگری د اساس شمارشت", - "special-categories-sort-abc": "سرجاخودگری د اساس الفبا", "deletedcontributions": "هومیاریا پاکسا بیه کارور", "deletedcontributions-title": "هومیاریا پاک بیه کارور", "sp-deletedcontributions-contribs": "هومیاریا", @@ -1893,7 +1892,7 @@ "protect-otherreason-op": "دألیل ھأنی", "protect-dropdown": "*دلیلیا جاافتائه سی پر و پیم کاری\n** خراوکاری گپ کلون\n** هرزه نیسی گپ کلون\n** جئن ویرایشتی وه درد نحور\n** بلگه فره تماشاکار دار", "protect-edit-reasonlist": "دلیلا پر و پیم بیین ویرایشت", - "protect-expiry-options": "۱ ساعأت:1 hour,۱ روٙز:1 day,۱ ھأفتە:1 week,۲ ھأفتە:2 weeks,۱ ما:1 month,۳ ما:3 months,۶ ما:6 months,۱ سال:1 year,بی حئسۉ:infinite", + "protect-expiry-options": "2 hours:2 hours,1 day:1 day,3 days:3 days,1 week:1 week,2 weeks:2 weeks,1 month:1 month,3 months:3 months,6 months:6 months,1 year:1 year,indefinite:infinite", "restriction-type": "دسرسی:", "restriction-level": "ریتراز محدودیت:", "minimum-size": "انازه کمترونه", @@ -2011,7 +2010,7 @@ "ipbenableautoblock": "بستن خودانجوم آخری تیرنشون آی پی وه کار گرته بیه وه دس کاریار و تیرنشونیا هنی که که د ونو سی ویرایشت وه سعی می کن.", "ipbsubmit": "نهاگری ای کاریار", "ipbother": "وخت هنی:", - "ipboptions": "۱ ساعأت:1 hour,۱ روٙز:1 day,۱ ھأفتە:1 week,۲ ھأفتە:2 weeks,۱ ما:1 month,۳ ما:3 months,۶ ما:6 months,۱ سال:1 year,بی حئسۉ:infinite", + "ipboptions": "2 hours:2 hours,1 day:1 day,3 days:3 days,1 week:1 week,2 weeks:2 weeks,1 month:1 month,3 months:3 months,6 months:6 months,1 year:1 year,indefinite:infinite", "ipbhidename": "نوم کاروری نه سی ویرایشت یا و نوم گه یا قام کو", "ipbwatchuser": "پی گری بلگه کاریاری و بلگه چک چنه ای کاریار", "ipb-disableusertalk": "نها ای کاریار نه اوسه که میها د بلگه چک چنه ش ویرایشت بکه و وه قلف بیه بئر", @@ -2268,11 +2267,7 @@ "import-logentry-upload-detail": "$1 {{PLURAL:$1|وانئری|وانئریا}} وامین اومانه", "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|وانئری|وانئریا}} د $2 وامین اومائنه", "javascripttest": "ازمایشت کردن جاوا اسکریپت", - "javascripttest-pagetext-noframework": "ای بلگه سی انجوم دئن ازمایشتیا جاوا اسکریپت اماییه کاری بیه.", - "javascripttest-pagetext-unknownframework": "چوئه کار نادیار ازمایشت \"$1\"", "javascripttest-pagetext-unknownaction": "کنشتکاری نادیار \"$1\".", - "javascripttest-pagetext-frameworks": "لطفن یه گل د چوئه یا ازمایشت هاری نه انتخاو بکیت :$1", - "javascripttest-pagetext-skins": "یه گل پوسه نه سی انجوم دئن ازمایشتا انتخاو بکیت:", "javascripttest-qunit-intro": "[$1 مستندیا ازمایشت] نه د mediawiki.org سیل بکیت.", "tooltip-pt-userpage": "بلگه کاریاریتو", "tooltip-pt-anonuserpage": "بلگه کاریاری تیرنشون آی پی ای که دش ویرایشت می کید", @@ -2531,8 +2526,8 @@ "exif-colorspace": "رئن ورگه", "exif-componentsconfiguration": "مئنی هر اندوم", "exif-compressedbitsperpixel": "شکل جمع و جیل کردن عسگ", - "exif-pixelydimension": "پئنا عسگ", - "exif-pixelxdimension": "درازا عسگ", + "exif-pixelxdimension": "پئنا عسگ", + "exif-pixelydimension": "درازا عسگ", "exif-usercomment": "ویر و باوریا کارور", "exif-relatedsoundfile": "جانیا دنگ دار مرتوط", "exif-datetimeoriginal": "دمون و وخت راس بیئن دونسمنیا", @@ -2998,7 +2993,6 @@ "version-libraries-library": "کتاوگه", "version-libraries-version": "نسقه", "redirect": "واگردونی وا جانیا،بلگه یا وانیئری نوم دیارکو", - "redirect-legend": "واگردونی د جانیا یا بلگه", "redirect-summary": "ای بلگه ویجه وا جانیا (نوم جانیا هیئش)، بلگه (شماره شناسیار بلگه یا شماره نسقه دیار بیه) یا بلگه کاریاری (شناسیار عددی کاریاری دیار بیه) واگردونی بوئه. طرز وه کار گرتن: [[{{#Special:Redirect}}/file/Example.jpg]]، \n[[{{#Special:Redirect}}/page/64308]]، [[{{#Special:Redirect}}/revision/328429]] یا [[{{#Special:Redirect}}/user/101]].", "redirect-submit": "رو", "redirect-lookup": "پی جوری:", @@ -3010,7 +3004,6 @@ "redirect-not-exists": "انازه که پیدا نبی", "fileduplicatesearch": "پی جوری سی جانیایا دوکونه", "fileduplicatesearch-summary": "پی جوری سی جانیایا تکراری د پایه انازه د یک شیوسه ونو انجومگر بوئه.", - "fileduplicatesearch-legend": "پی جوری سی دوکونه", "fileduplicatesearch-filename": "نوم جانیا:", "fileduplicatesearch-submit": "پی جوری", "fileduplicatesearch-info": "$1 × $2 pixel
انازه جانیا: $3
MIME type: $4", diff --git a/languages/i18n/lt.json b/languages/i18n/lt.json index 2f1a6df655..3daa2d98af 100644 --- a/languages/i18n/lt.json +++ b/languages/i18n/lt.json @@ -34,7 +34,8 @@ "Albertas", "Macofe", "Zygimantus", - "Matma Rex" + "Matma Rex", + "Nemo bis" ] }, "tog-underline": "Nuorodos pabraukimas:", @@ -175,7 +176,6 @@ "moredotdotdot": "Daugiau...", "morenotlisted": "Šis sąrašas nėra išsamus.", "mypage": "Puslapis", - "anonuserpage": "Nežinomas naudotojas", "mytalk": "Aptarimas", "anontalk": "Aptarimas", "navigation": "Naršymas", @@ -665,7 +665,7 @@ "newarticle": "(Naujas)", "newarticletext": "Jūs patekote į dar neegzistuojantį puslapį.\nNorėdami sukurti puslapį, pradėkite rašyti žemiau esančiame įvedimo lauke\n(plačiau [$1 pagalbos puslapyje]).\nJei patekote čia per klaidą, paprasčiausiai spustelkite naršyklės mygtuką '''atgal'''.", "anontalkpagetext": "----''Tai yra anoniminio naudotojo, nesusikūrusio arba nenaudojančio paskyros, aptarimų puslapis.\nDėl to naudojamas IP adresas jo identifikavimui.\nŠis IP adresas gali būti dalinamas keliems naudotojams.\nJeigu Jūs esate anoniminis naudotojas ir atrodo, kad komentarai nėra skirti Jums, [[Special:UserLogin/signup|sukurkite paskyrą]] arba [[Special:UserLogin|prisijunkite]], ir nebūsite tapatinamas su kitais anoniminiais naudotojais.''", - "noarticletext": "Šiuo metu šiame puslapyje nėra jokio teksto.\nJūs galite [[Special:Search/{{PAGENAME}}|ieškoti šio puslapio pavadinimo]] kituose puslapiuose,\n[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} ieškoti susijusių įrašų],\narba [{{fullurl:{{FULLPAGENAME}}|action=edit}} redaguoti šį puslapį].", + "noarticletext": "Šiuo metu šiame puslapyje nėra jokio teksto.\nJūs galite [[Special:Search/{{PAGENAME}}|ieškoti šio puslapio pavadinimo]] kituose puslapiuose,\n[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} ieškoti susijusių įrašų] arba [{{fullurl:{{FULLPAGENAME}}|action=edit}} sukurti šį puslapį].", "noarticletext-nopermission": "Šiuo metu šiame puslapyje nėra jokio teksto.\nJūs galite [[Special:Search/{{PAGENAME}}|ieškoti šio puslapio pavadinimo]] kituose puslapiuose,\n[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} ieškoti susijusių įrašų], bet jūs neturite teisės sukurti šį puslapį.", "missing-revision": "Puslapio peržiūra #$1 pavadinto „{{FULLPAGENAME}}“ neegzistuoja.\n\nTai paprastai atsitinka kai pasenusi nuoroda veda į puslapį, kuris buvo ištrintas.\nInformaciją galima rasti [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} deletion log].", "userpage-userdoesnotexist": "Naudotojo paskyra „$1“ yra neužregistruota. Prašom patikrinti, ar jūs norite kurti/redaguoti šį puslapį.", @@ -1328,7 +1328,7 @@ "recentchangeslinked-page": "Puslapio pavadinimas:", "recentchangeslinked-to": "Rodyti su duotuoju puslapiu susijusių puslapių pakeitimus", "recentchanges-page-added-to-category": "[[:$1]] pridėta prie kategorijos", - "recentchanges-page-added-to-category-bundled": "[[:$1]] ir {{PLURAL:$2|vienas puslapis|$2 puslapiai}} pridėti prie kategorijos", + "recentchanges-page-added-to-category-bundled": "[[:$1]] ir [[Special:WhatLinksHere/$1|{{PLURAL:$2|vienas puslapis|$2 puslapiai}}]] pridėti prie kategorijos", "recentchanges-page-removed-from-category": "[[:$1]] pašalinta iš kategorijos", "recentchanges-page-removed-from-category-bundled": "[[:$1]] ir {{PLURAL:$2|vienas puslapis|$2 puslapiai}} pašalinti iš kategorijos", "autochange-username": "MediaWiki automatinis pakeitimas", @@ -1508,6 +1508,7 @@ "uploadstash-badtoken": "Scenos šį ieškinį, buvo nesėkmingas, galbūt todėl, kad jūsų redagavimo įgaliojimai pasibaigė. Bandykite dar kartą.", "uploadstash-errclear": "Kliringo failai buvo nesėkmingas.", "uploadstash-refresh": "Atnaujinti failų sąrašą", + "uploadstash-thumbnail": "rodyti miniatiūrą", "invalid-chunk-offset": "Neleistinas segmento poslinkis", "img-auth-accessdenied": "Prieiga uždrausta", "img-auth-nopathinfo": "Trūksta PATH_INFO.\nJūsų serveris nenustatytas perduoti šią informaciją.\nTai gali būti CGI paremta ir negali palaikyti img_auth.\nDaugiau informacijos https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Image_Authorization. žr.", @@ -1814,8 +1815,6 @@ "categories-submit": "Rodyti", "categoriespagetext": "{{PLURAL:$1|Ši kategorija|Šios kategorijos}} turi puslapių ar failų.\n[[Special:UnusedCategories|Nenaudojamos kategorijos]] čia nerodomos.\nTaip pat žiūrėkite [[Special:WantedCategories|trokštamas kategorijas]].", "categoriesfrom": "Vaizduoti kategorijas pradedant nuo:", - "special-categories-sort-count": "rikiuoti pagal skaičių", - "special-categories-sort-abc": "rikiuoti pagal abėcėlę", "deletedcontributions": "Ištrintas naudotojo indėlis", "deletedcontributions-title": "Ištrintas naudotojo indėlis", "sp-deletedcontributions-contribs": "indėlis", @@ -2432,11 +2431,7 @@ "import-logentry-upload-detail": "$1 {{PLURAL:$1|keitimas|keitimai}} importuoti", "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|keitimas|keitimai}} importuoti iš $2", "javascripttest": "JavaScript testavimas", - "javascripttest-pagetext-noframework": "Šis puslapis yra skirtas vykdyti JavaScript testavimus.", - "javascripttest-pagetext-unknownframework": "Nežinoma \"$1\" testavimo struktūra.", "javascripttest-pagetext-unknownaction": "Nežinomas veiksmas „$1“.", - "javascripttest-pagetext-frameworks": "Prašome pasirinkti vieną iš išvardintų testavimo struktūrų: $1", - "javascripttest-pagetext-skins": "Pasirinkite naudotojo sąsajos išvaizdą, kuriai atliksite testavimą:", "javascripttest-qunit-intro": "Peržiūrėkite [$1 testavimo dokumentaciją]", "tooltip-pt-userpage": "{{GENDER:|Jūsų naudotojo}} puslapis", "tooltip-pt-anonuserpage": "Naudotojo puslapis jūsų IP adresui", @@ -2692,8 +2687,8 @@ "exif-colorspace": "Spalvų pristatymas", "exif-componentsconfiguration": "kiekvieno komponento reikšmė", "exif-compressedbitsperpixel": "Paveikslėlio suspaudimo režimas", - "exif-pixelydimension": "Paveikslėlio plotis", - "exif-pixelxdimension": "Vaizdo aukštis", + "exif-pixelxdimension": "Paveikslėlio plotis", + "exif-pixelydimension": "Vaizdo aukštis", "exif-usercomment": "Naudotojo komentarai", "exif-relatedsoundfile": "Susijusi garso byla", "exif-datetimeoriginal": "Duomenų generavimo data ir laikas", @@ -3139,7 +3134,6 @@ "version-libraries-description": "Aprašymas", "version-libraries-authors": "Autoriai", "redirect": "Nukreiptas iš failo, naudotojo, versijos arba žurnalo įrašo ID", - "redirect-legend": "Nukreipti į failą ar puslapį", "redirect-summary": "Šis specialus puslapis peradresuoją į failą (nurodant failo pavadinimą), puslapį (nurodant versijos ID ar puslapio ID), naudotojo puslapį (nurodant skaitinį naudotojo ID), arba žurnalo įrašą (nurodant žurnalo įrašo ID).\nNaudojimas: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/page/64308]], [[{{#Special:Redirect}}/revision/328429]], [[{{#Special:Redirect}}/user/101]], arba[[{{#Special:Redirect}}/logid/186]].", "redirect-submit": "Eiti", "redirect-lookup": "Peržvalgos:", @@ -3152,7 +3146,6 @@ "redirect-not-exists": "Vertė nėra nustatyta", "fileduplicatesearch": "Ieškoti dublikuotų failų", "fileduplicatesearch-summary": "Pasikartojančių failų paieška pagal jų kontrolinę sumą.", - "fileduplicatesearch-legend": "Ieškoti dublikatų", "fileduplicatesearch-filename": "Failo vardas:", "fileduplicatesearch-submit": "Ieškoti", "fileduplicatesearch-info": "$1 × $2 pikselių
Failo dydis: $3
MIME tipas: $4", diff --git a/languages/i18n/lus.json b/languages/i18n/lus.json index 1a5e27ba02..740b14903e 100644 --- a/languages/i18n/lus.json +++ b/languages/i18n/lus.json @@ -1025,8 +1025,6 @@ "categories": "Pawlte", "categoriespagetext": "A hnuaia pawl{{PLURAL:$1||te}} hian phêk emaw media a{{PLURAL:$1||n}} nei.\nHetah hian [[Special:UnusedCategories|pawl hman lohho]] pholan tel a ni lo.\n[[Special:WantedCategories|Pawl mamawhho]] en bawk la.", "categoriesfrom": "Hemi-a inṭan pawlho hi pholang rawh:", - "special-categories-sort-count": "a chhúnga thil awm zât azirin thliar rawh", - "special-categories-sort-abc": "a-aw-b indawtin", "deletedcontributions": "Hmangtu kutthawhna paihbo tawhte", "deletedcontributions-title": "Hmangtu kutthawhna paihbo tawhte", "sp-deletedcontributions-contribs": "kutthawhnate", @@ -1392,8 +1390,8 @@ "exif-colorspace": "Rawng hmun", "exif-componentsconfiguration": "Péngtinte awmzia", "exif-compressedbitsperpixel": "Lem sàwrzìmphung", - "exif-pixelydimension": "Lem zauzáwng", - "exif-pixelxdimension": "Lem sànzáwng", + "exif-pixelxdimension": "Lem zauzáwng", + "exif-pixelydimension": "Lem sànzáwng", "exif-usercomment": "Hmangtu kamchhuak", "exif-relatedsoundfile": "Ritaksa laichinte", "exif-datetimeoriginal": "Hriattirna siamchhuah hun leh ni", diff --git a/languages/i18n/lv.json b/languages/i18n/lv.json index 2c27943894..31160828bd 100644 --- a/languages/i18n/lv.json +++ b/languages/i18n/lv.json @@ -23,13 +23,15 @@ "아라", "Macofe", "Nitalynx", - "Silraks" + "Silraks", + "Zuiks" ] }, "tog-underline": "Pasvītrot saites:", "tog-hideminor": "Paslēpt maznozīmīgus labojumus pēdējo izmaiņu lapā", "tog-hidepatrolled": "Slēpt apstiprinātās izmaņas pēdējo izmaiņu sarakstā", "tog-newpageshidepatrolled": "Paslēpt pārbaudītās lapas jauno lapu sarakstā", + "tog-hidecategorization": "Paslēpt lapu kategorizēšanu", "tog-extendwatchlist": "Izvērst uzraugāmo lapu sarakstu, lai parādītu visas veiktās izmaiņas (ne tikai pašas svaigākās)", "tog-usenewrc": "Grupēt izmaiņas pēc lapas pēdējās izmaiņās un uzraugāmo lapu sarakstā", "tog-numberheadings": "Automātiski numurēt virsrakstus", @@ -59,6 +61,7 @@ "tog-watchlisthideliu": "Paslēpt reģistrēto dalībnieku labojumus uzraugāmo lapu sarakstā", "tog-watchlisthideanons": "Paslēpt anonīmo dalībnieku labojumus uzraugāmo lapu sarakstā", "tog-watchlisthidepatrolled": "Paslēpt pārbaudītās lapas uzraugāmo lapu sarakstā", + "tog-watchlisthidecategorization": "Paslēpt lapu kategorizēšanu", "tog-ccmeonemails": "Sūtīt sev citiem dalībniekiem nosūtīto epastu kopijas", "tog-diffonly": "Nerādīt lapu saturu zem izmaiņām", "tog-showhiddencats": "Rādīt slēptās kategorijas", @@ -159,7 +162,6 @@ "moredotdotdot": "Vairāk...", "morenotlisted": "Šis saraksts nav pilnīgs.", "mypage": "Lapa", - "anonuserpage": "Nezināms lietotājs", "mytalk": "Diskusijas", "anontalk": "Diskusijas", "navigation": "Navigācija", @@ -400,6 +402,7 @@ "logout": "Iziet", "userlogout": "Iziet", "notloggedin": "Neesi iegājis", + "userlogin-noaccount": "Nav dalībnieka konta?", "userlogin-joinproject": "Pievienojieties {{SITENAME}}", "nologin": "Nav lietotājvārda? $1.", "nologinlink": "Reģistrējies", @@ -568,7 +571,7 @@ "accmailtext": "Nejauši ģenerēta parole lietotājam [[User talk:$1|$1]] tika nosūtīta uz $2.\n\nŠī konta paroli pēc ielogošanās varēs nomainīt ''[[Special:ChangePassword|šeit]]''.", "newarticle": "(Jauns raksts)", "newarticletext": "Šajā projektā vēl nav lapas ar šādu nosaukumu.\nLai izveidotu lapu, sāc rakstīt teksta logā apakšā (par teksta formatēšanu un sīkākai informācija skatīt [$1 palīdzības lapu]).\nJa tu šeit nonāci kļūdas pēc, vienkārši uzspied back pogu pārlūkprogrammā.", - "anontalkpagetext": "----''Šī ir diskusiju lapa anonīmam lietotājam, kurš vēl nav kļuvis par reģistrētu lietotāju vai arī neizmanto savu lietotājvārdu. Tādēļ mums ir jāizmanto skaitliskā IP adrese, lai viņu identificētu.\nŠāda IP adrese var būt vairākiem lietotājiem.\nJa tu esi anonīms lietotājs un uzskati, ka tev ir adresēti neatbilstoši komentāri, lūdzu, [[Special:UserLogin/signup|kļūsti par lietotāju]] vai arī [[Special:UserLogin|izmanto jau izveidotu lietotājvārdu]], lai izvairītos no turpmākām neskaidrībām un tu netiktu sajaukts ar citiem anonīmiem lietotājiem.''", + "anontalkpagetext": "----''Šī ir diskusiju lapa anonīmam dalībniekam, kurš vēl nav kļuvis par reģistrētu dalībnieku vai arī neizmanto savu dalībnieka vārdu. Tādēļ mums ir jāizmanto skaitliskā IP adrese, lai viņu identificētu.\nŠāda IP adrese var būt vairākiem dalībniekiem.\nJa tu esi anonīms dalībnieks un uzskati, ka tev ir adresēti neatbilstoši komentāri, lūdzu, [[Special:UserLogin/signup|kļūsti par dalībnieku]] vai arī [[Special:UserLogin|izmanto jau izveidotu dalībnieka vārdu]], lai izvairītos no turpmākām neskaidrībām un tu netiktu sajaukts ar citiem anonīmiem dalībniekiem.''", "noarticletext": "Šajā lapā šobrīd nav nekāda teksta, tu vari [[Special:Search/{{PAGENAME}}|meklēt citās lapās pēc šīs lapas nosaukuma]], [{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} meklēt saistītos reģistru ierakstos] vai arī [{{fullurl:{{FULLPAGENAME}}|action=edit}} sākt rediģēt šo lapu].", "noarticletext-nopermission": "Šajā lapā pašlaik nav nekāda teksta.\nTu vari [[Special:Search/{{PAGENAME}}|meklēt šīs lapas nosaukumu]] citās lapās,\nvai [{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} meklēt saistītus reģistru ierakstus], bet jums nav atļauja izveidot si lapu.", "userpage-userdoesnotexist": "Lietotājs \"$1\" nav reģistrēts.\nLūdzu, pārliecinies vai vēlies izveidot/izmainīt šo lapu.", @@ -1428,8 +1431,6 @@ "categories-submit": "Rādīt", "categoriespagetext": "{{PLURAL:$1|Šīs kategorijas|Šī kategorija|Šīs kategorijas}} satur lapas vai failus.\nŠeit nav parādītas [[Special:UnusedCategories|neizmantotās kategorijas]].\nSkatīt arī [[Special:WantedCategories|''sarkanās'' kategorijas]].", "categoriesfrom": "Parādīt kategorijas sākot ar:", - "special-categories-sort-count": "kārtot pēc skaita", - "special-categories-sort-abc": "kārtot alfabētiskā secībā", "deletedcontributions": "Dzēstais dalībnieka devums", "deletedcontributions-title": "Dzēstais dalībnieka devums", "sp-deletedcontributions-contribs": "devums", @@ -1444,12 +1445,13 @@ "listusers-noresult": "Neviens dalībnieks nav atrasts.", "listusers-blocked": "(bloķēts)", "activeusers": "Aktīvo dalībnieku saraksts", - "activeusers-intro": "Šis ir dalībnieku saraksts, kas veikuši kādu darbību {{PLURAL:daudzskaitlī:$1|pēdējā|pēdējās}} $1 {{PLURAL:daudzskaitlī:$1|dienā|dienās}}.", + "activeusers-intro": "Šis ir to dalībnieku saraksts, kuri veikuši kādu darbību {{PLURAL:daudzskaitlī:$1|pēdējā|pēdējās}} $1 {{PLURAL:daudzskaitlī:$1|dienā|dienās}}.", "activeusers-count": "$1 {{PLURAL:$1|darbību|darbība|darbības}} {{PLURAL:$3|pēdējās $3 dienās|pēdējā $3 dienā|pēdējās $3 dienās}}", "activeusers-from": "Parādīt dalībniekus, sākot ar:", "activeusers-hidebots": "Paslēpt botus", "activeusers-hidesysops": "Paslēpt administratorus", "activeusers-noresult": "Neviens dalībnieks nav atrasts.", + "activeusers-submit": "Parādīt aktīvos dalībniekus", "listgrouprights": "Lietotāju grupu tiesības", "listgrouprights-summary": "Šis ir šajā viki definēto dalībnieku grupu uzskaitījums, kopā ar tām atbilstošajām piekļuves tiesībām.\nPapildu informāciju par katru individuālu piekļuves tiesību veidu, iespējams, var atrast [[{{MediaWiki:Listgrouprights-helppage}}|šeit]].", "listgrouprights-group": "Grupa", @@ -2096,8 +2098,8 @@ "exif-colorspace": "Krāsu telpa", "exif-componentsconfiguration": "Katras sastāvdaļas nozīme", "exif-compressedbitsperpixel": "Attēla kompresijas pakāpe", - "exif-pixelydimension": "Attēla platums", - "exif-pixelxdimension": "Attēla augstums", + "exif-pixelxdimension": "Attēla platums", + "exif-pixelydimension": "Attēla augstums", "exif-usercomment": "Lietotāja komentāri", "exif-relatedsoundfile": "Saistītais skaņas fails", "exif-datetimeoriginal": "Izveidošanas datums un laiks", @@ -2435,7 +2437,6 @@ "redirect-not-exists": "Vērtība nav atrasta", "fileduplicatesearch": "Meklēt failu kopijas", "fileduplicatesearch-summary": "Meklē dublējošos failus, izmantojot uz jaucējfunkcijas vērtības.", - "fileduplicatesearch-legend": "Meklēt kopiju", "fileduplicatesearch-filename": "Faila vārds:", "fileduplicatesearch-submit": "Meklēt", "fileduplicatesearch-info": "$1 × $2 pikseļi
Faila izmērs: $3
MIME tips: $4", diff --git a/languages/i18n/lzh.json b/languages/i18n/lzh.json index 5ca407ead1..f1a65618e7 100644 --- a/languages/i18n/lzh.json +++ b/languages/i18n/lzh.json @@ -156,7 +156,6 @@ "moredotdotdot": "見逾", "morenotlisted": "列未成。", "mypage": "寒舍", - "anonuserpage": "無名氏", "mytalk": "書房", "anontalk": "議", "navigation": "導", diff --git a/languages/i18n/mai.json b/languages/i18n/mai.json index 965be18cec..7ba9c6bedb 100644 --- a/languages/i18n/mai.json +++ b/languages/i18n/mai.json @@ -28,11 +28,11 @@ "tog-underline": "लिङ्कके रेखाङ्कित करी:", "tog-hideminor": "सन्निकट परिवर्तनमे छोट परिवर्तन नुकाबी", "tog-hidepatrolled": "सन्निकट परिवर्तनमे नियन्त्रित कएल सम्पादन नुकाबी", - "tog-newpageshidepatrolled": "नियन्त्रित सम्पादनके नव पन्ना सूचीसँ नुकाबी", + "tog-newpageshidepatrolled": "नियन्त्रित सम्पादनक नव पन्ना सूचीसँ नुकाबी", "tog-hidecategorization": "पृष्ठसभक श्रेणीकरण हटाबी", "tog-extendwatchlist": "सन्निकट परिवर्तन नै,अखन ध्यानसूचीमे रहल सभ परिवर्तन देखाबी", "tog-usenewrc": "नीक सन्निकट परिवर्तन प्रयोग करी (जावास्क्रिप्ट चाही)", - "tog-numberheadings": "शीर्षक स्वयं-क्रमांकित करी", + "tog-numberheadings": "शीर्षक स्वयं-क्रमाङ्कित करी", "tog-showtoolbar": "सम्पादन ओजारपेटी देखाबी", "tog-editondblclick": "दू बेर क्लीक कए पन्ना सम्पादित करी", "tog-editsectiononrightclick": "अनुभाग शीर्षक पर दाहिन क्लिक करै पर अनुभाग सम्पादित करी", @@ -40,31 +40,31 @@ "tog-watchdefault": "हमर सम्पादित पृष्ठ हमर साकांक्ष सूचीमे देखाबी", "tog-watchmoves": "हमराद्वारा घस्काओल पृष्ठ हमर साकांक्ष सूचीमे राखी", "tog-watchdeletion": "हमराद्वारा मेटाओल पृष्ठ हमर साकांक्ष सूचीमे राखी", - "tog-watchrollback": "हमरा द्वारा जोडलगेल पृष्ठ हमार सांकक्ष सूचीमे राखू", - "tog-minordefault": "हमर सभ सम्पादन पूर्वन्यस्त रूपेँ मामूली कहू", + "tog-watchrollback": "हमराद्वारा रोलब्याक कएल पृष्ठ हमर सांकक्ष सूचीमे राखी", + "tog-minordefault": "हमर सभ सम्पादन पूर्वन्यस्त रूपमे मामूली कही", "tog-previewontop": "सम्पादन पेटीक ऊपर दृश्य देखाबी", "tog-previewonfirst": "पहिल सम्पादनक बाद पूर्वावलोकन देखाबी", - "tog-enotifwatchlistpages": "जौं हमर ध्यानसूचीक कोनो पन्नामे परिवर्तन हुअए तँ हमरा ई-पत्र पठाउ", - "tog-enotifusertalkpages": "हमर सदस्य वार्ता पृष्ठ पर भेल परिवर्त्तनक हेतु हमरा ई-मेल करथि", - "tog-enotifminoredits": "छोट परिवर्त्तनक हेतु सेहो हमरा ई-मेल पठाऊ", - "tog-enotifrevealaddr": "हमर ई-पत्र संकेत सूचना ई-पत्रमे देखाउ", - "tog-shownumberswatching": "ध्यान राखैबला प्रयोक्ताक संख्या", + "tog-enotifwatchlistpages": "जौं हमर ध्यानसूचीक कोनो पन्नामे परिवर्तन हुअए तँ हमरा इमेल पठाबी", + "tog-enotifusertalkpages": "हमर वार्ता पृष्ठ परिवर्तित भेला पर हमरा इमेल करी", + "tog-enotifminoredits": "छोट परिवर्तनक हेतु सेहो हमरा इमेल भेजी", + "tog-enotifrevealaddr": "अधिसूचना इमेलमे हमर इमेल पता देखाबी", + "tog-shownumberswatching": "ध्यान राखैबला प्रयोगकर्ताक सङ्ख्या", "tog-oldsig": "अखुनका दस्खत:", - "tog-fancysig": "दस्खतकें विकिटेक्सटक रूपमे देखू (स्वचालित श्रृंखला हीन)", + "tog-fancysig": "दस्खतक विकिटेक्सटक समान मानी (स्वचालित श्रृङ्खला हीन)", "tog-uselivepreview": "पूर्वावलोकनके उपयोग करी", - "tog-forceeditsummary": "हमरा सचेत करू जखन हम खाली सम्पादम सारांशमे जाइ", - "tog-watchlisthideown": "हमर साकांक्ष सूचीसँ हमर सम्पादन नुकाउ", - "tog-watchlisthidebots": "हमर साकांक्ष सूचीसँ स्वचालित सम्पादन हटाउ", - "tog-watchlisthideminor": "हमर साकांक्ष सूचीसँ मामूली सम्पादन नुकाउ", - "tog-watchlisthideliu": "साकांक्षसूचीसँ सम्प्रवेशित प्रयोक्ताक सम्पादन हटाउ", - "tog-watchlisthideanons": "साकांक्षसूचीसँ अनाम प्रयोक्ताक सम्पादन हटाउ", - "tog-watchlisthidepatrolled": "साकांक्ष सूचीसँ संचालित सम्पादन नुकाउ", - "tog-ccmeonemails": "हमरा द्वारा दोसर प्रयोक्ताकेँ पठाओल ई-पत्रक कॉपी पठाउ", - "tog-diffonly": "फाइल-अन्तर प्रणालीक नीचाँ पन्नाक सामिग्री नै देखाउ", - "tog-showhiddencats": "नुकाएल संवर्ग देखाउ", - "tog-norollbackdiff": "प्रत्यावर्तनक बाद फाइल-अन्तर प्रणालीकेँ बिसरू", - "tog-useeditwarning": "जब हम कोनो संपादन पृष्ठके बिना सुरक्षित केनै बदलाव संग छोइड दि त हमरा सूचित करु ।", - "tog-prefershttps": "सम्प्रवेशित करलाक बाद सदैव सुरक्षित कनेक्शनके प्रयोग करु", + "tog-forceeditsummary": "यदि सम्पादन सारांश नै देल गेल होए तहन हमरा सूचित करी", + "tog-watchlisthideown": "हमर साकांक्ष सूचीसँ हमर सम्पादन नुकाबी", + "tog-watchlisthidebots": "हमर साकांक्ष सूचीसँ स्वचालित सम्पादन हटाबी", + "tog-watchlisthideminor": "हमर साकांक्ष सूचीसँ मामूली सम्पादन नुकाबी", + "tog-watchlisthideliu": "साकांक्षसूचीसँ सम्प्रवेशित प्रयोक्ताक सम्पादन हटाबी", + "tog-watchlisthideanons": "साकांक्षसूचीसँ अनाम प्रयोक्ताक सम्पादन हटाबी", + "tog-watchlisthidepatrolled": "साकांक्ष सूचीसँ संचालित सम्पादन नुकाबी", + "tog-ccmeonemails": "हमरद्वारा दोसर प्रयोक्ताक पठाओल ई-पत्रक कपी पठाबी", + "tog-diffonly": "फाइल-अन्तर प्रणालीक नीचाँ पन्नाक सामिग्री नै देखाबी", + "tog-showhiddencats": "नुकाएल श्रेणी देखाबी", + "tog-norollbackdiff": "प्रत्यावर्तनक बाद फाइल-अन्तर प्रणालीक बिसरी", + "tog-useeditwarning": "जब हम कोनो सम्पादन पृष्ठके बिना सुरक्षित केनै बदलाव संग छोडि दि त हमरा सूचित करी ।", + "tog-prefershttps": "सम्प्रवेशित करलाक बाद सदैव सुरक्षित कनेक्शनके प्रयोग करी", "underline-always": "सदिखन", "underline-never": "कखनो नै", "underline-default": "पूर्वन्यस्त गवेषक", @@ -104,13 +104,13 @@ "march-gen": "मार्च", "april-gen": "अप्रैल", "may-gen": "मई", - "june-gen": "जून", + "june-gen": "जुन", "july-gen": "जुलाई", "august-gen": "अगस्त", - "september-gen": "सितंबर", - "october-gen": "अकटूबर", - "november-gen": "नवंबर", - "december-gen": "दिसंबर", + "september-gen": "सितम्बर", + "october-gen": "अकटुबर", + "november-gen": "नवम्बर", + "december-gen": "दिसम्बर", "jan": "जन.", "feb": "फर.", "mar": "मा.", @@ -128,49 +128,51 @@ "march-date": "मार्च $1", "april-date": "अप्रैल $1", "may-date": "मई $1", - "june-date": "जून $1", + "june-date": "जुन $1", "july-date": "जुलाई $1", "august-date": "अगस्त $1", "september-date": "सितम्बर $1", - "october-date": "अक्टूबर $1", + "october-date": "अक्टुबर $1", "november-date": "नवम्बर $1", "december-date": "दिसम्बर $1", + "period-am": "पूर्वाह्न", + "period-pm": "अपराह्न", "pagecategories": "{{PLURAL:$1|श्रेणी|कएटा श्रेणी}}", - "category_header": "संवर्ग \"$1\" मे पन्ना सभ", - "subcategories": "उपसंवर्ग", - "category-media-header": "संवर्ग \"$1\" मे मीडिया", - "category-empty": "''ऐ संवर्गमे अखन कोनो पन्ना वा मीडिया नै अछि।''", - "hidden-categories": "{{PLURAL:$1|नुकाएल वर्ग|नुकाएल वर्गसभ}}", - "hidden-category-category": "नुकाएल संवर्ग सभ", - "category-subcat-count": "{{PLURAL:$2| ऐ संवर्गक खाली ई सभ उप संवर्ग अछिइ।.|ऐ संवर्गमे ई सभ {{PLURAL:$1| उपसंवर्ग|$1 उपसंवर्ग सभ}}, ऐमे सँ $2 सभटा।}}", - "category-subcat-count-limited": "ऐ संवर्गमे अछि {{PLURAL:$1|उपसंवर्ग|$1उपसंवर्ग सभ}}", - "category-article-count": "{{PLURAL:$2|ऐ संवर्गमे खाली ई पन्ना अछि।| ई {{PLURAL:$1|पन्ना अछि|$1 पन्ना सभ अछि}} ऐ संवर्गमे, जाइमे सँ $2 सभ।}}", - "category-article-count-limited": "ई {{PLURAL:$1|पन्ना अछि|$1 पन्ना सभ अछि}}", - "category-file-count": "{{PLURAL:$2| ऐ संवर्गमे मातर ई फाइल अछि।| ई {{PLURAL:$1|फाइल अछि|$1 फाइल सभ अछि}} ऐ संवर्गमे, कुल $2 सँ।}}", - "category-file-count-limited": "ई {{PLURAL:$1|पन्ना अछि|$1 पन्ना सभ अछि}} ऐ संवर्गमे।", + "category_header": "श्रेणी \"$1\" मे पन्ना सभ", + "subcategories": "उपश्रेणी", + "category-media-header": "श्रेणी \"$1\" मे मीडिया", + "category-empty": "ई श्रेणीमे ई समय कोनो पृष्ठ या मिडिया नै अछि।", + "hidden-categories": "{{PLURAL:$1|नुकाएल श्रेणी|नुकाएल श्रेणीसभ}}", + "hidden-category-category": "नुकाएल श्रेणीसभ", + "category-subcat-count": "{{PLURAL:$2|ई श्रेणीमे मात्र निम्नलिखित उपश्रेणी अछि।|ई श्रेणीक कुल $2 मेसँ {{PLURAL:$1|उपश्रेणी निम्नलिखित अछि।|$1 उपश्रेणीसभ निम्नलिखित अछि।}}}}", + "category-subcat-count-limited": "ई श्रेणीमे निम्नलिखित {{PLURAL:$1|उपश्रेणी अछि|$1 उपश्रेणी अछि}}।", + "category-article-count": "{{PLURAL:$2|ई श्रेणीमे मात्र निम्नलिखित पृष्ठ अछि।|ई श्रेणीमे निम्नलिखित {{PLURAL:$1|पृष्ठ अछि|$1 पृष्ठ अछि}}, कुल पृष्ठ $2}}", + "category-article-count-limited": "निम्नलिखित {{PLURAL:$1|पृष्ठ|$1 पृष्ठ}} ई श्रेणीमे अछि।", + "category-file-count": "{{PLURAL:$2|ई श्रेणीमे मात्र निम्नलिखित फाइल अछि।|ई श्रेणीमे निम्नलिखित {{PLURAL:$1|फाइल|$1 फाइलसभ}} अछि, कुल फाइलसभ $2}}", + "category-file-count-limited": "ई श्रेणीमे निम्नलिखित {{PLURAL:$1|फाइल अछि।|फाइलसभ अछि।}}", "listingcontinuesabbrev": "शेष आगाँ।", "index-category": "क्रम कएल पन्ना सभ", - "noindex-category": "क्रम नै कएल पन्ना सभ", - "broken-file-category": "पन्ना सभ जाइमे फाइल लिंक सभ टूटल हुअए", - "about": "विषयमे", - "article": "विषय सूची पन्ना", - "newwindow": "(नव खिड़कीसँ खुजैछ)", + "noindex-category": "क्रम नै कएल पन्नासभ", + "broken-file-category": "पन्नासभ जाइमे फाइल लिङ्कसभ टूटल हुअए", + "about": "के विषयमे", + "article": "सामग्री लेख", + "newwindow": "(नव खिडकीसँ खुजैछ)", "cancel": "समाप्त", "moredotdotdot": "आर...", - "morenotlisted": "ई पुरा सूची नै अछी ।", + "morenotlisted": "ई पुरा सूची नै छी।", "mypage": "पन्ना", - "mytalk": "वार्त्ता", - "anontalk": "ऐ अनिकेत पता लेल विमर्श", + "mytalk": "वार्ता", + "anontalk": "वार्ता", "navigation": "सञ्चार", "and": " आर", "qbfind": "ताकू", "qbbrowse": "गवेषण करू", "qbedit": "सम्पादन करू", "qbpageoptions": "ई पृष्ठ", - "qbmyoptions": "हमर पृष्ठ सभ", + "qbmyoptions": "हमर पृष्ठसभ", "faq": "त्वरित प्रश्नोत्तरी", "faqpage": "Project: त्वरित प्रश्नोत्तरी", - "actions": "क्रिया सभ", + "actions": "क्रियासभ", "namespaces": "चेन्हासी समूहसभ", "variants": "प्रकारसभ", "navigation-heading": "दिक्चालन सूची", @@ -180,75 +182,75 @@ "help": "मदति", "search": "ताकी", "searchbutton": "ताकी", - "go": "जाऊ", - "searcharticle": "जाइ", + "go": "जाए", + "searcharticle": "जाए", "history": "पन्नाक इतिहास", "history_short": "इतिहास", "updatedmarker": "हमर अन्तिम आगमनसँ पहिने अद्यतन कएल", "printableversion": "प्रिन्ट करबा योग्य", "permalink": "स्थायी लिङ्क", - "print": "छापू", + "print": "छापी", "view": "देखी", - "view-foreign": "$1 पर देखु", + "view-foreign": "$1 पर देखी", "edit": "सम्पादन", - "edit-local": "स्थानीय विवरण संपादन", - "create": "बनाउ", + "edit-local": "स्थानीय विवरण सम्पादन", + "create": "बनाबी", "create-local": "स्थानीय विवरण निर्माण", - "editthispage": "एहि पृष्ठक संपादन", - "create-this-page": "ई पन्ना बनाउ", - "delete": "मेटाउ", - "deletethispage": "ई पन्ना मेटाउ", - "undeletethispage": "ई पन्ना मेटाउ", - "undelete_short": "आपस आनू {{PLURAL:$1|एक सम्पादनt|$1 सम्पादन सभ}}", - "viewdeleted_short": "देखू {{PLURAL:$1|एकटा मेटाएल सम्पादन|$1 मेटाएल सम्पादन सभ}}", - "protect": "बचाउ", - "protect_change": "बदलू", - "protectthispage": "ऐ पन्नाक रक्षा करू", - "unprotect": "रक्षा कवच बदलू", - "unprotectthispage": "ऐ पन्नाक रक्षा कवच बदलू", + "editthispage": "ई पृष्ठ सम्पादन करी", + "create-this-page": "ई पन्ना बनाबी", + "delete": "मेटाबी", + "deletethispage": "ई पन्ना मेटाबी", + "undeletethispage": "ई पृष्ठके पुनर्स्थापित करी।", + "undelete_short": "{{PLURAL:$1|एक हटाएल गएल|$1 हटाएल गएल}} परिवर्तन आपस आनी", + "viewdeleted_short": "देखी {{PLURAL:$1|एकटा मेटाएल सम्पादन|$1 मेटाएल सम्पादन सभ}}", + "protect": "सुरक्षित करी", + "protect_change": "बदली", + "protectthispage": "ई पन्नाक सुरक्षित करी", + "unprotect": "असुरक्षित", + "unprotectthispage": "ई पृष्ठक सुरक्षा स्तर बदली", "newpage": "नवका पन्ना", - "talkpage": "एहि पृष्ठ पर वार्त्तालाप", + "talkpage": "ई पृष्ठक बारेमे चर्चा करी", "talkpagelinktext": "वार्ता", "specialpage": "विशेष पन्ना", "personaltools": "व्यक्तिगत उपकरणसभ", - "articlepage": "विषय-सूची पन्ना देखू", + "articlepage": "विषय-सूची पन्ना देखी", "talk": "वार्तालाप", - "views": "दृष्टिसभ", - "toolbox": "उपकरणसभ", - "userpage": "प्रयोक्ता पन्ना देखू", - "projectpage": "परियोजना पन्ना देखू", - "imagepage": "पन्नाक पृष्ठ देखू", - "mediawikipage": "सन्देश पन्ना देखू", - "templatepage": "नमूना पृष्ठ देखू", - "viewhelppage": "सहायता पन्ना देखू", - "categorypage": "संवर्ग पन्ना देखू", - "viewtalkpage": "गपशप देखू", - "otherlanguages": "दोसर भाषामे", - "redirectedfrom": "(एतयसँ बहटारल $1)", - "redirectpagesub": "पन्नाकेँ पठाउ", - "redirectto": "मे पुनर्निर्देश:", - "lastmodifiedat": "ई पन्ना अन्तिम बेर संवर्धित भेल $1, केँ $2 बजे।", - "viewcount": "ई पन्ना देखल गेल {{PLURAL:$1|एक बेर|$1 एतेक बेर}}", - "protectedpage": "संरक्षित पन्ना", - "jumpto": "जाऊ:", - "jumptonavigation": "हेलू", - "jumptosearch": "ताकी", - "view-pool-error": "दुखी छी, वितरक सभ एखन व्यस्त अछि।\nबड्ड बेशी लोक ऐ पन्नाकेँ देखबामे लागल छथि।\nऐ पन्नाकेँ फेरसँ देखबा लेल कनी बिलमू। \n$1", - "generic-pool-error": "दुखी छी, वितरक सभ एखन व्यस्त अछि।\nबड्ड बेशी लोक ऐ पन्नाकेँ देखबामे लागल छथि।\nऐ पन्नाकेँ फेरसँ देखबा लेल कनी बिलमू। \n$1", + "views": "दर्शाव", + "toolbox": "उपकरण", + "userpage": "प्रयोक्ता पन्ना देखी", + "projectpage": "परियोजना पन्ना देखी", + "imagepage": "फाइल पृष्ठ देखी", + "mediawikipage": "सन्देश पन्ना देखी", + "templatepage": "नमूना पृष्ठ देखी", + "viewhelppage": "सहायता पन्ना देखी", + "categorypage": "श्रेणी पन्ना देखी", + "viewtalkpage": "गपशप देखी", + "otherlanguages": "अन्य भाषासभमे", + "redirectedfrom": "($1 सँ पुनर्निर्देशित)", + "redirectpagesub": "पृष्ठ पुनर्निर्देशित करी", + "redirectto": "क अनुप्रेषित:", + "lastmodifiedat": "ई पृष्ठक पहिनुका बदलाव $1 के $2 बजे भएल छल।", + "viewcount": "ई पृष्ठ {{PLURAL:$1|एक|$1}} बेर देखल गेल छल।", + "protectedpage": "सुरक्षित पृष्ठ", + "jumpto": "एतय जाए:", + "jumptonavigation": "भ्रमण", + "jumptosearch": "खोज", + "view-pool-error": "क्षमा करी, वितरकसभ एखन व्यस्त अछि।\nबड्ड बेशी लोक ई पन्नाक देखबामे लागल छथि।\nई पन्नाक फेरसँ देखबा लेल कनी बिलमू। \n$1", + "generic-pool-error": "क्षमा करी, वितरकसभ एखन व्यस्त अछि।\nबड्ड बेशी लोक ई पन्नाक देखबामे लागल छथि।\nई पन्नाक फेरसँ देखबा लेल कनी बिलमू।", "pool-timeout": "प्रतीक्षा निगृहीत कालावसान", "pool-queuefull": "प्रतीक्षा-पाँती पौती भरल", "pool-errorunknown": "अज्ञात भ्रम", - "pool-servererror": "पूल काउंटर सेवा उपलब्ध नै अछि ($1)।", + "pool-servererror": "पुल काउन्टर सेवा उपलब्ध नै अछि ($1)।", "poolcounter-usage-error": "उपयोग त्रुटि: $1", "aboutsite": "विषयमे {{SITENAME}}", "aboutpage": "Project:विवरण", - "copyright": "$1क अंतर्गत विषय सूची उपलब्ध अछि", + "copyright": "$1क अन्तर्गत विषय सूची उपलब्ध अछि", "copyrightpage": "{{ns:project}}:सर्वाधिकार", "currentevents": "आइ-काल्हिक घटनासभ", "currentevents-url": "Project:आइ-काल्हिक घटनासभ", "disclaimers": "अनाधिकार घोषणा", "disclaimerpage": "Project:अनाधिकार घोषणा", - "edithelp": "संपादन सहयोग", + "edithelp": "सम्पादन सहयोग", "helppage-top-gethelp": "मदति", "mainpage": "सम्मुख पन्ना", "mainpage-description": "सम्मुख पृष्ठ", @@ -258,36 +260,36 @@ "privacy": "गोपनीयताक नियम", "privacypage": "Project:गोपनीयता नियम", "badaccess": "आज्ञा गल्ती", - "badaccess-group0": "अहाँकेँ आग्रह कएल क्रियाकेँ करबाक अनुमति नै अछि।", - "badaccess-groups": "जइ क्रियाक अहाँ आग्रह केने छी से मात्र किछु प्रयोक्ता लेल सुरक्षित अछि {{PLURAL:$2|संवर्ग|संवर्ग सभमे एकटा}}: $1", - "versionrequired": "मिडियाविकीकऽ संस्करण $1 चाही", - "versionrequiredtext": "ऐ पन्नाक प्रयोग लेल मिडियाविकीकऽ संस्करण $1 चाही।\nदेखू [[Special:Version|पृष्ठ भर्सन]]", + "badaccess-group0": "अहाँक आग्रह कएल क्रियाक करबाक अनुमति नै अछि।", + "badaccess-groups": "अहाँ जे क्रिया आजमेने छी ओ मात्र {{PLURAL:$2|$1 समूह|$1 समूहसभ}}क सदस्य ही करि सकएत अछि।", + "versionrequired": "मिडियाविकिक संस्करण $1 चाही", + "versionrequiredtext": "ई पृष्ठ प्रयोग करैक लेल मिडियाविकिक $1 अवतरण जरुरी अछि।\nदेखी [[Special:Version|अवतरण पृष्ठ]]।", "ok": "ठीक अछि", "pagetitle-view-mainpage": "{{अन्तर्जाल}}", "backlinksubtitle": "← $1", "retrievedfrom": "प्राप्ति स्थल \"$1\"", - "youhavenewmessages": "अहाँ लग अछि $1 ($2).", + "youhavenewmessages": "{{PLURAL:$3|अहाँक लेल}} $1 ($2) अछि।", "youhavenewmessagesfromusers": "{{PLURAL:$4|अहाँके लेल}} $1 सँ {{PLURAL:$3|अन्य प्रयोक्ता|$3 प्रयोक्तासभ}} ($2)।", "youhavenewmessagesmanyusers": "अहाँके $1 सँ बहुत प्रयोक्ता सभ ($2)।", "newmessageslinkplural": "{{PLURAL:$1|एगो नयाँ पत्र|999=नयाँ पत्र}}", "newmessagesdifflinkplural": "अन्तिम {{PLURAL:$1|परिवर्त्तन|999=परिवर्त्तन सभ}}", "youhavenewmessagesmulti": "$1 पर अहाँ लेल नव पत्र अछि", "editsection": "सम्पादन करी", - "editold": "सम्पादित करू", - "viewsourceold": "जड़ि देखू", - "editlink": "सम्पादन करू", - "viewsourcelink": "जडी देखी", + "editold": "सम्पादित करी", + "viewsourceold": "स्रोत देखी", + "editlink": "सम्पादन करी", + "viewsourcelink": "स्रोत देखी", "editsectionhint": "सम्पादन शाखा: $1", "toc": "विषय सूचीसभ", - "showtoc": "देखाऊ", - "hidetoc": "नुकाऊ", - "collapsible-collapse": "भखड़ाउ", - "collapsible-expand": "बढ़ाउ", - "confirmable-confirm": "कि {{GENDER:$1|अहाँ}} छी?", + "showtoc": "देखाबी", + "hidetoc": "नुकाबी", + "collapsible-collapse": "भखडाबी", + "collapsible-expand": "विस्तार करी", + "confirmable-confirm": "कि {{GENDER:$1|अहाँ}} निश्चित छी?", "confirmable-yes": "हँ", "confirmable-no": "नै", - "thisisdeleted": "$1 देखू वा फेर सँ आनु?", - "viewdeleted": "$1 के देखाऊ?", + "thisisdeleted": "$1 देखी वा फेरसँ आनी?", + "viewdeleted": "$1 के देखाबी?", "restorelink": "{{PLURAL:$1|एकटा मेटाएल सम्पादन|$1 मेटाएल सम्पादन सभ}}", "feedlinks": "सूचक:", "feed-invalid": "अमान्य सूचक प्रकार मासुल", @@ -299,8 +301,8 @@ "feed-atom": "अणु", "feed-rss": "आर.एस.एस.", "red-link-title": "$1 (पृष्ठ उपलब्ध नै अछि)", - "sort-descending": "घटैत क्रममे छाँटू", - "sort-ascending": "बढ़ैत क्रममे छाँटू", + "sort-descending": "घटैत क्रममे छाँटी", + "sort-ascending": "बढैत क्रममे छाँटी", "nstab-main": "पन्ना", "nstab-user": "प्रयोक्ता पृष्ठ", "nstab-media": "मिडिया पृष्ठ", @@ -310,7 +312,7 @@ "nstab-mediawiki": "पत्र", "nstab-template": "आकृति", "nstab-help": "सहायता पृष्ठ", - "nstab-category": "संवर्ग", + "nstab-category": "श्रेणी", "mainpage-nstab": "सम्मुख पन्ना", "nosuchaction": "एहेन कोनो क्रिया नै अछि", "nosuchactiontext": "ऐ सार्वत्रिक विभव संकेत द्वारा निर्दिष्ट क्रिया अमान्य अछि।\nअहाँ सार्वत्रिक विभव संकेतक गलत टंकण केने हएब, वा कोनो गलत लिंकक पाछाँ गेल हएब।\nई {{अन्तर्जाल}} प्रयोक्ता द्वारा प्रयुक्त तंत्रांशमे स्थित कोनो दोषक संकेत सेहो कऽ सकैए।", @@ -326,11 +328,12 @@ "laggedslavemode": "'''चेतौनी:''' पन्नापर सम्भव जे अद्यतन परिवर्तन नै हुअए।", "readonly": "दत्तनिधि प्रतिबन्धित", "enterlockreason": "प्रतिबन्ध लेल कारण बताउ, संगमे एकटा अंदाज सेहो बताउ जे कखन ई प्रतिबन्ध हटाएल जाएत।", - "readonlytext": "अखन दत्तांशनिधि नव प्रविष्टि आ आन संशोधन लेल प्रतिबन्धित अछि, सम्भवतः सामान्त दत्तांशनिधि देखभाल लेल, तकर बाद ई सामान्य भऽ जाएत।\n\nसंचालक जे एकरा प्रतिबन्धित कएने छथि ई कारण दै छथि:$1", + "readonlytext": "अखन दत्तांशनिधि नव प्रविष्टि आ आन संशोधन लेल प्रतिबन्धित अछि, सम्भवतः सामान्त दत्तांशनिधि देखभाल लेल, तकर बाद ई सामान्य भऽ जाएत।\n\nसञ्चालक जे एकरा प्रतिबन्धित कएने छथि ई कारण दै छथि:$1", "missing-article": "दत्तनिधि पृष्ठक वांछित पाठ्य नै ताकि सकल, माने \"$1\" $2\nएकर कारण कोनो पुरान फाइल चेन्हासी वा ऐतिहासिक लिंकक पाछाँ जाएब अछि, जे मेटा देल गेल छै।\nजौं ई तकर कारण नै अछि, तखन अहाँकेँ तंत्रांशमे कोनो दोष भेटल अछि।\nएकर खबरि पहुँचाउ [[Special:ListUsers/sysop|administrator]], केँ, अपन सार्वत्रिक विभव संकेत सूचित करैत।", "missingarticle-rev": "(संशोधन#: $1)", "missingarticle-diff": "(फाइल-अन्तर प्रणाली: $1, $2)", "readonly_lag": "दत्तांशनिधि स्वचालित रूपेँ प्रतिबन्धित कएल गेल अछि जा परजीवी दतांशनिधि वितरक मूलक समक्ष नै आबि जाए।", + "nonwrite-api-promise-error": "'Promise-Non-Write-API-Action'क एचटिटिपी शीर्षकद्वारा भेजल गएल पर एपिआईमे लेखन मोड्युल अछि।", "internalerror": "आन्तरिक भ्रम", "internalerror_info": "आन्तरिक भ्रम: $1", "internalerror-fatal-exception": "प्रकारक गम्भीर अपवाद \"$1\"", @@ -342,7 +345,7 @@ "directorynotreadableerror": "निर्देशिका \"$1\" पठनीय नै अछि।", "filenotfound": "फाइल \"$1\" नै ताकि सकल।", "unexpected": "आसक विपरीत परिणाम: \"$1\"=\"$2\"", - "formerror": "फॉर्म नै पठा सकल", + "formerror": "त्रुटि: फर्म अनुरोध नै कएल जा सकल", "badarticleerror": "ई क्रिया ऐ पन्नापर नै कएल जा सकैए।", "cannotdelete": "पन्ना व संचिका \"$1\" मेटाएल नै जा सकल।", "cannotdelete-title": "पन्ना \"$1\" नै मेटा सकल", @@ -362,17 +365,17 @@ "perfcached": "ई दत्तांश उपस्मृतिक आधारपर अछि आ भऽ सकैए जे अद्यतन नै हुअए। अधिकतम {{PLURAL:$1|एकटा परिणाम|$1 परिणाम सभ}} क्याचेमे उपलब्ध अछि ।", "perfcachedts": "ई दत्तांश उपस्मृतिमे अछि, आ एकर अन्तिम परिवर्धन भेल अछि $1 केँ। A maximum of {{PLURAL:$4|one result is|$4 results are}} available in the cache.", "querypage-no-updates": "ऐ पन्नाक नवीनीकरण अखन बन्न अछि।\nएतुक्का दत्तांश अखन नवीकरण नै कएल जाएत।", - "viewsource": "जड़ि देखू", - "viewsource-title": "\"$1\" लेल जड़ि देखू", - "actionthrottled": "क्रियाकेँ मोकल गेल", - "actionthrottledtext": "अनपेक्षित संदेश रोका लेल, अहाँकेँ ऐ क्रियाकेँ कम्मे कालमे सीमासँ बेशी बेर करबासँ रोकल गेल अछि, अहाँ ओइ सीमाकेँ पार कऽ गेल छी।\nकृपया किछु काल बाद फेरसँ प्रयास करू।", + "viewsource": "स्रोत देखी", + "viewsource-title": "\"$1\" लेल स्रोत देखी", + "actionthrottled": "कार्य समाप्त करि देल गएल", + "actionthrottledtext": "अनपेक्षित सन्देश रोक लेल, अहाँक ई क्रियाक कम्मे कालमे सीमासँ बेसीबेर करबासँ रोकल गेल अछि, अहाँ ओ सीमाक पार कऽ गेल छी।\nकृपया किछ काल बाद फेरसँ प्रयास करी।", "protectedpagetext": "ई पन्ना सम्पादन रोकबा लेल संरक्षित अछि।", - "viewsourcetext": "अहाँ ऐ पन्नाक जड़िकेँ देख आ अनुकृत कऽ सकै छी:", - "viewyourtext": "अहाँ '''अहाँक सम्पादन''' केँ देख आ एतए उतारि सकै छी:", + "viewsourcetext": "अहाँ इ पृष्ठक जडिक देख आ अनुकृत कऽ सकै छी:", + "viewyourtext": "अहाँ ई पृष्ठमे '''अपन सम्पादन'''क देख आ एतए उतारि सकै छी:", "protectedinterface": "ई पन्ना तंत्रांश लेल मध्यस्थ पाठक व्यवस्था करैत अछि, आ अपशब्द रोकबाक ब्योंत करैत अछि।", "editinginterface": "'''चेतौनी''' अहाँ एकटा एहेन पन्नाक सम्पादन कऽ रहल छी जे तंत्रांशक मध्यस्थ पन्नाकेँ पाठ देबा लेल प्रयोग भऽ रहल अछि।\nऐ पन्नामे परिवर्तन दोसर प्रयोक्ता लेल प्रयोक्ता मध्यस्थक रूपमे परिवर्तन करत।\nअनुवाद लेल [//translatewiki.net/wiki/Main_Page?setlang=en translatewiki.net] जाउ, मीडियाविकी स्थानीयकरण परियोजना पर।", "translateinterface": "सभ विकिसब के लेल अनुवाद जोडइ या बदलई के लेल मीडियाविकि क्षेत्रीयकरण परियोजना [//translatewiki.net/ translatewiki.net] कें प्रयोग करु।", - "cascadeprotected": "ऐ पन्नाक सम्पादन सम्भव नै अछि, कारण ई ऐ मे सम्मिलित अछि, {{PLURAL:$1|पन्ना, जे अछि|पन्ना, से सभ अछि}} सुरक्षित अछि \"तराउपड़ी\" विकल्प खोललाक बाद:\n$2", + "cascadeprotected": "ई पन्नाक सम्पादन सम्भव नै अछि, कारण अहिमे सम्मिलित अछि, {{PLURAL:$1|पृष्ठ|पृष्ठसभ}} सुरक्षित अछि \"तराउपडी\" विकल्प खोललाक बाद:\n$2", "namespaceprotected": "अहाँकेँ '''$1''' नाम-पेटारमे सम्पादनक अनुमति नै अछि।", "customcssprotected": "अहांकें ऐ सी.एस.एस.पन्नाकें सम्पादित करबाक अधिकार नै अछि, कारण ऐमे दोसर प्रयोक्ताक व्यक्तिगत विकल्प छै।", "customjsprotected": "अहांकें ऐ जावास्क्रिप्ट पन्नाकें सम्पादित करबाक अधिकार नै अछि, कारण ऐमे दोसर प्रयोक्ताक व्यक्तिगत विकल्प छै।", @@ -382,7 +385,7 @@ "mypreferencesprotected": "अहाके अपन प्राथमिकता बदलैक अनुमति नै अछि।", "ns-specialprotected": "विशेष पन्ना सभकेँ सम्पादित नै कएल जा सकैए।", "titleprotected": "ऐ शीर्षकक निर्माण प्रतिबन्धित अछि [[User:$1|$1]] द्वारा।\nकारण एतऽ देल अछि $2।", - "filereadonlyerror": "\"$1\" फाइलके बदलैलेल अक्षम कियाक भण्डार \"$2\" इ समय 'मात्र पाठन के लेल' (रीड ओनली) अछि।\n\nजे प्रबंधक इ प्रबंध लगोनै अछि हुनका निम्न विवरण प्रदान कएल गेल अछि: \"$3\"।", + "filereadonlyerror": "\"$1\" फाइलके बदलैलेल अक्षम कियाक भण्डार \"$2\" इ समय 'मात्र पाठनक लेल' अछि।\n\nजे प्रबन्धक ई प्रबन्ध लगोनै अछि ओ निम्न विवरण प्रदान कएने अछि: \"$3\"।", "invalidtitle-knownnamespace": "\"$2\" नामस्थान आर \"$3\" नाम बला गलत शीर्षक", "invalidtitle-unknownnamespace": "अज्ञात नामस्थान संख्या $1 आर नाम \"$2\" वाला गलत शीर्षक", "exception-nologin": "सम्प्रवेशित नै", @@ -392,78 +395,84 @@ "virus-scanfailed": "बिम्ब विफल (विध्यादेश $1)", "virus-unknownscanner": "अज्ञात विषविधि निरोधक", "logouttext": "'''अहाँ निष्क्रमण कऽ गेल छी।'''\n\nअहाँ {{अन्तर्जाल}} प्रयोग अनाम भऽ कऽ सकै छी, वा अहाँ [$1 log in again] वएह आकि कोनो आन प्रयोक्ताक रूपमे सेहू प्रयोक कऽ सकै छी।\nई मोन राखू जे किछु पन्ना एना देखा पड़ि सकैए जेना अहाँ अखनो सम्प्रवेशित होइ, जावत अहाँ अपन गवेषकक उपस्मृति मेटा नै दै छी।", + "cannotlogoutnow-title": "अखन प्रस्थान नै भऽ रहल अछि", + "cannotlogoutnow-text": "$1 क उपयोग समय प्रस्थान नै कएल जा सकएत अछि।", "welcomeuser": "अहाके स्वागत अछि, $1!", "welcomecreation-msg": "अहाँक खाता बनाएल गेल अछि।\nअपन [[Special:Preferences|{{SITENAME}} पसन्द]] बदलै लेल नै बिसरब।", "yourname": "प्रयोक्ता:", "userlogin-yourname": "प्रयोक्ता:", - "userlogin-yourname-ph": "अपन प्रयोक्तानाम लिखु", - "createacct-another-username-ph": "एकटा प्रयोक्तानाम लिखू:", + "userlogin-yourname-ph": "अपन प्रयोगकर्तानाम लिखी", + "createacct-another-username-ph": "प्रयोगकर्तानाम प्रदान करी", "yourpassword": "कूटशब्द:", - "userlogin-yourpassword": "कूटशब्द:", - "userlogin-yourpassword-ph": "अपन कूटशब्द लिखु", - "createacct-yourpassword-ph": "कूटशब्द ई ठाम राखु", - "yourpasswordagain": "कूटशब्द फेरसँ टाइप करू:", - "createacct-yourpasswordagain": "कूटशब्दके जाँच करु", - "createacct-yourpasswordagain-ph": "कूटशब्द पुनः लिखु", - "remembermypassword": "हमर सम्प्रवेश ऐ गवेषकपर मोन राखू (बेशीसँ बेशी $1 {{PLURAL:$1|दिन|दिन}})", - "userlogin-remembermypassword": "हमरा सम्प्रवेशित राखु", - "userlogin-signwithsecure": "सुरक्षित कनेक्शनके प्रयोग करु", - "yourdomainname": "अहाँक प्रभावक्षेत्र:", - "password-change-forbidden": "अहा इ विकिमे कूटशब्द नै बदल सकैत छि ।", - "externaldberror": "खाहे सत्यापन दतांश भ्रम छल वा अहाँ अपन बाह्य खाताकेँ अद्यतन करबामे असमर्थ छी।", + "userlogin-yourpassword": "कूटशब्द", + "userlogin-yourpassword-ph": "अपन कूटशब्द लिखी", + "createacct-yourpassword-ph": "कूटशब्द दर्ज करी", + "yourpasswordagain": "कूटशब्द फेरसँ टाइप करी:", + "createacct-yourpasswordagain": "कूटशब्दक जाँच करी", + "createacct-yourpasswordagain-ph": "कूटशब्द पुनः लिखी", + "remembermypassword": "ई ब्राउजर पर हमर सम्प्रवेश याद राखी (अधिकतम $1 {{PLURAL:$1|दिन|दिनधरि}}क लेल)", + "userlogin-remembermypassword": "हमरा सम्प्रवेशित राखी", + "userlogin-signwithsecure": "सुरक्षित कनेक्शनक प्रयोग करी", + "cannotloginnow-title": "अखन प्रवेश नै भऽ रहल अछि", + "cannotloginnow-text": "$1 क उपयोग समय प्रवेश नै कएल जा सकएत अछि।", + "yourdomainname": "अहाँक डोमेन (प्रभावक्षेत्र):", + "password-change-forbidden": "अहाँ ई विकिमे कूटशब्द नै बदल सकैत छी।", + "externaldberror": "या त प्रमाणिकरण डेटाबेसमे त्रुटि भएल अछि या फेर अहाँक अपन बाह्य खाता अपडेट करैक अनुमति नै अछि।", "login": "सम्प्रवेश", - "nav-login-createaccount": "सम्प्रवेश /खेसरा बनाऊ", - "userlogin": "सम्प्रवेश/ खेसरा बनाऊ", + "nav-login-createaccount": "सम्प्रवेश / खाता खोली", + "userlogin": "सम्प्रवेश/ खाता बनाबी", "userloginnocreate": "सम्प्रवेश", "logout": "निष्क्रमण", "userlogout": "फेर आयब", "notloggedin": "सम्प्रवेशित नै छी", "userlogin-noaccount": "खाता नै अछि?", - "userlogin-joinproject": "{{SITENAME}} से जोडु", + "userlogin-joinproject": "{{SITENAME}}सँ जुडी", "nologin": "खाता नै अछि? $1।", - "nologinlink": "नव खाता खोलू", - "createaccount": "खाता खोलू", + "nologinlink": "नव खाता खोली", + "createaccount": "खाता खोली", "gotaccount": "पहिनहियेसँ खाता अछि? $1", "gotaccountlink": "सम्प्रवेश", - "userlogin-resetlink": "अपन सम्प्रवेश विवरण बिसरि गेलहुँ?", - "userlogin-resetpassword-link": "अपन कूटशब्द बिसर गेलौ ?", + "userlogin-resetlink": "अपन सम्प्रवेश विवरण बिसरि गेलौ?", + "userlogin-resetpassword-link": "अपन कूटशब्द बिसरि गेलौ?", "userlogin-helplink2": "सम्प्रवेशित करवाकलेल मदत", - "userlogin-loggedin": "अहा {{GENDER:$1|$1}} के रूपमे पहिले स सम्प्रवेशित छि।\nकोनो दोसर सदस्यके रुपमे सम्प्रवेशित करवाक लेल देल गेल फारमके प्रयोग करु।", - "userlogin-createanother": "दोसर खाता बनाउ", - "createacct-emailrequired": "ई-पत्र संकेत", - "createacct-emailoptional": "ई-पत्र संकेत (वैकल्पिक)", - "createacct-email-ph": "अपन ई-पत्र संकेत सत्यापित करू", - "createacct-another-email-ph": "ई-पत्र संकेत सत्यापित करू", - "createaccountmail": "ई-पत्र द्वारा", + "userlogin-loggedin": "अहाँ {{GENDER:$1|$1}}क रूपमे पहिनेसँ सम्प्रवेशित छी।\nकोनो दोसर सदस्यक रुपमे सम्प्रवेशित करवाक लेल देल गेल फारमके प्रयोग करी।", + "userlogin-createanother": "दोसर खाता बनाबी", + "createacct-emailrequired": "ई-मेल पता", + "createacct-emailoptional": "ई-मेल पता (वैकल्पिक)", + "createacct-email-ph": "अपन ई-मेल पता लिखी", + "createacct-another-email-ph": "ईमेल पता प्रदान करी", + "createaccountmail": "एक अस्थायी यादृच्छिक कूटशब्द चुनी आ ओ निर्दिष्ट ई-मेल पता पर भेजी", "createacct-realname": "असली नाम (वैकल्पिक)", "createaccountreason": "कारण:", "createacct-reason": "कारण:", "createacct-reason-ph": "अहा इगो आर दोसर खाता कियाक बनउने जा रहल छि", "createacct-submit": "अपन खाता बनाउ", - "createacct-another-submit": "दोसर खाता बनाउ", - "createacct-benefit-heading": "{{SITENAME}} अहि जोका लोकनिसभ द्वारा बनावल गेल अछि।", - "createacct-benefit-body1": "$1 {{PLURAL:$1|सम्पादन|सम्पादन सभ}}", - "createacct-benefit-body2": "{{PLURAL:$1|पन्ना}}", - "createacct-benefit-body3": "{{PLURAL:$1|योगदानकर्ता}}", - "badretype": "कूटशब्द जे अहाँ भरलहुँ से मेल नै खाइए।", - "userexists": "सम्प्रवेशित प्रयोक्तानाम पहिनहियेसँ प्रयोगमे अछि।\nकृपा कऽ कोनो दोसर नाम चुनू।", - "loginerror": "सम्प्रवेश भ्रम", - "createacct-error": "खाता निर्माण त्रुटि", - "createaccounterror": "खाता नै बना सकल: $1", - "nocookiesnew": "प्रयोक्ता खाता खुजि गेल, मुदा अहाँ सम्प्रवेशित नै छी।\n{{अन्तर्जाल}} सम्प्रवेशित प्रयोक्ताक लेल ज्ञापकक प्रयोग करैत अछि।\nअहाँ ज्ञापककेँ अशक्त केने छी।\nकृपा कऽ ओकरा सक्रिप करू, तखन अपन प्रयोक्तानाम आ कूटशब्दक संग सम्प्रवेश करू।", - "nocookieslogin": "{{अन्तर्जाल}} प्रयोक्ताकेँ सम्प्रवेशित करबा लेल ज्ञापकक प्रयोग करैत अछि।\nअहाँ ज्ञापककेँ अशक्त केने छी।\nकृपा कऽ ओकरा सक्रिय करू आ फेरसँ प्रयास करू।", - "nocookiesfornew": "प्रयोक्ता खाजा नै खुजल, कारण हम ओकर जड़ि पूर्ण रूपेँ नै ताकि सकलौं।\nई दृढ़ करू जे ज्ञापक सक्रिय अछि, ऐ पन्नाकेँ फेरसँ भारित करू आ फेरसँ प्रयास करू।", + "createacct-another-submit": "खाता बनाबी", + "createacct-benefit-heading": "{{SITENAME}} अहाँ जोका लोगसभद्वारा बनाएल गएल अछि।", + "createacct-benefit-body1": "$1 {{PLURAL:$1|सम्पादन|सम्पादनसभ}}", + "createacct-benefit-body2": "{{PLURAL:$1|पन्ना|पन्नासभ}}", + "createacct-benefit-body3": "सन्निकट {{PLURAL:$1|योगदानकर्ता|योगदानकर्तासभ}}", + "badretype": "कूटशब्द जे अहाँ देलौ से मेल नै खाइए।", + "usernameinprogress": "ई प्रयोक्ताक खाता निर्माण अखन चालू अछि।\nकृपया प्रतीक्षा करी।", + "userexists": "सम्प्रवेशित प्रयोक्तानाम पहिनहियेसँ प्रयोगमे अछि।\nकृपा कऽ कोनो दोसर नाम चुनी।", + "loginerror": "सम्प्रवेश त्रुटी", + "createacct-error": "खाता निर्माण त्रुटी", + "createaccounterror": "खाता नै बनि सकल: $1", + "nocookiesnew": "प्रयोक्ता खाता खुजि गेल, मुदा अहाँ सम्प्रवेशित नै छी।\n{{SITENAME}} सम्प्रवेशित प्रयोक्ताक लेल ज्ञापकक प्रयोग करैत अछि।\nअहाँ ज्ञापकक अशक्त केनए छी।\nकृपा कऽ ओकरा सक्रिय करी, तखन अपन प्रयोक्तानाम आ कूटशब्दक संग सम्प्रवेश करी।", + "nocookieslogin": "{{SITENAME}} प्रयोक्ताक सम्प्रवेशित करबा लेल ज्ञापकक प्रयोग करैत अछि।\nअहाँ ज्ञापकक अशक्त केने छी।\nकृपा कऽ ओकरा सक्रिय करी आ फेरसँ प्रयास करी।", + "nocookiesfornew": "प्रयोक्ता खाजा नै खुजल, कारण हम ओकर जडि पूर्ण रूपेँ नै ताकि सकलौ।\nई दृढ करी जे ज्ञापक सक्रिय अछि, ई पन्नाक फेरसँ भारित करी आ फेरसँ प्रयास करी।", "noname": "अहाँ वैध प्रयोक्तानाम नै देने छी।", - "loginsuccesstitle": "सम्प्रवेश सफल", + "loginsuccesstitle": "सम्प्रवेश भएल", "loginsuccess": "'''अहाँ सम्प्रवेश केलहुँ {{SITENAME}} \"$1\".'''क रूपमे।", - "nosuchuser": "\"$1\" नामसँ कोनो प्रयोक्ता नै अछि।\nप्रयोक्तानाम ब्रह्मक्षर-लघ्वक्षर भेद युक्त अछि।\nअपन ह्रिजै जाँचू, वा [[Special:UserLogin/signup|नव खाता बनाउ]] ।", - "nosuchusershort": "\"$1\" नाम्ना कोनो प्रयोक्ता नै अछि।\nअपन ह्रिजए सुधारू।", - "nouserspecified": "अहाँकेँ एकटा प्रयोक्तानाम देबऽ पड़त।", + "nosuchuser": "\"$1\" नामसँ कोनो प्रयोक्ता नै अछि।\nप्रयोक्तानाम ब्रह्मक्षर-लघ्वक्षर भेद युक्त अछि।\nअपन ह्रिजै जाँची, वा [[Special:UserLogin/signup|नव खाता बनाबी]] ।", + "nosuchusershort": "\"$1\" नाम्ना कोनो प्रयोक्ता नै अछि।\nअपन हिजए सुधारी।", + "nouserspecified": "अहाँक एकटा प्रयोक्तानाम देबऽ पडत।", "login-userblocked": "ई प्रयोक्ता प्रतिबन्धित अछि। सम्प्रवेशक अधिकार नै अछि।", "wrongpassword": "गलत कूटशब्द देल गेल।\nफेरसँ प्रयास करू।", "wrongpasswordempty": "रिक्त कूटशब्द देल गेल।\nफेरसँ प्रयास करू।", "passwordtooshort": "कूटशब्द कमसँ कम {{PLURAL:$1|1 वर्ण|$1 वर्णक}} हुअए।", "passwordtoolong": "कुटशब्द kuttsabda {{PLURAL:$1|1 वर्ण|$1 वर्णों}} से बेसी नम्हर भ्या सकएत अछि।", + "passwordtoopopular": "आम पासवर्ड अहाँ नै चुनि सकएत अछि। कृपया अनोखा पासवर्ड चुनी।", "password-name-match": "अहाँक कूटशब्द अहाँक प्रयोक्तानामसँ भिन्न हेबाक चाही।", "password-login-forbidden": "ऐ प्रयोक्तानाम आ कूटशब्दक प्रयोग प्रतिबन्धित अछि।", "mailmypassword": "नूतन कूटशब्द ई-पत्रसँ पठाउ", @@ -486,10 +495,10 @@ "emaildisabled": "ई अन्तर्जाल ई-पत्र नै पठाएत।", "accountcreated": "खाता खुजि गेल", "accountcreatedtext": "[[{{ns:User}}:$1|$1]] ([[{{ns:User talk}}:$1|वार्ता]]) के लेल खाता खोलल गेल अछि।", - "createaccount-title": "{{अन्तर्जाल}} लेल खाता निर्माण", + "createaccount-title": "{{SITENAME}}क लेल खाता बनाबी", "createaccount-text": "कियो अहाँक ई-पत्र संकेत लेल एकटा खाता {{अन्तर्जाल}} पर खोललन्हि ($4) नाम भेल \"$2\", कूटशब्द भेल \"$3\"।\nअहाँ सम्प्रवेश करू आ अपन कूटशब्द बदलू।\n\nअहाँ ऐ संदेशकेँ बिसरि सकै छी, जँ ई खाता भ्रमवश बनल हुअए।", "login-throttled": "अहाँ ढ़ेर रास सम्प्रवेश प्रयास केलहुँ।\nफेर प्रयास करबासँ पहिने कने काल थम्हू।", - "login-abort-generic": "अहाँक सम्प्रवेश सफल नै भेल- खतम", + "login-abort-generic": "अहाँक सम्प्रवेश सफल नै भेल- रोकल गएल", "login-migrated-generic": "अहाँके खाता माइग्रेट कएल गेल अछि, आर अहाँके प्रयोक्ता नाम आब ई विकिमे नै अछि।", "loginlanguagelabel": "भाषा : $1", "suspicious-userlogout": "अहाँक निष्क्रमणक अनुरोध नै मानल गेल कारण ई लागल जे ई पुरान गवेषकक लागि वा दोसराइत उपस्मृति द्वारा पठाओल गेल छल।", @@ -509,12 +518,25 @@ "newpassword": "नव कूटशब्द", "retypenew": "नव कूटशब्द फेरसँ टंकित करू", "resetpass_submit": "कूटशब्द बनाउ आ सम्प्रवेश करू", - "changepassword-success": "अहाँक कूटशब्द सफलतासँ बदलि देल गेल!", + "changepassword-success": "अहाँक पासवर्ड सफलतासँ बदलि देल गेल!", "changepassword-throttled": "अहाँ ढ़ेर रास सम्प्रवेश प्रयास केलहुँ।\nफेर प्रयास $1 करबासँ पहिने कने काल थम्हू।", + "botpasswords": "बोट पासवर्ड", + "botpasswords-disabled": "बोट पासवर्ड अखन निष्क्रिय अछि।", + "botpasswords-no-central-id": "बोट पासवर्डक उपयोग करएक लेल अहाँक मुख्य खातासँ प्रवेश करै पडत।", + "botpasswords-existing": "वर्तमान बोट पासवर्ड", + "botpasswords-createnew": "बोटक लेल नव पासवर्ड बनाबी", + "botpasswords-editexisting": "बोटक वर्तमान पासवर्डके बदली", + "botpasswords-label-appid": "बोट नाम:", + "botpasswords-label-create": "बनाबी", + "botpasswords-label-update": "अद्यतन", + "botpasswords-label-cancel": "रद्द करी", + "botpasswords-label-delete": "मेटाबी", + "botpasswords-label-resetpassword": "पासवर्ड पुनः तय करी", + "botpasswords-label-grants": "अनुदान आवेदन:", "resetpass_forbidden": "कूटशब्द नै बदलल जा सकैए।", "resetpass-no-info": "अहाँकेँ ऐ पन्नाकेँ सोझे प्रयोग करबालेल सम्प्रवेशित हुअए पड़त।", - "resetpass-submit-loggedin": "कूटशब्द बदलू", - "resetpass-submit-cancel": "खतम करू", + "resetpass-submit-loggedin": "कूटशब्द बदली", + "resetpass-submit-cancel": "रद्द करी", "resetpass-wrong-oldpass": "अमान्य अस्थायी वा अखुनका कूटशब्द।\nअहाँ पहिनहिये सफलतासँ कूटशब्द बदलि लेने छी वा एकटा नव अस्थायी कूटशब्द लेल आग्रह केने छी।", "resetpass-recycled": "रीसेट करएके लेल नयाँ कूटशब्दमे कृपया अपन वर्तमान कूटशब्द नै द के नयाँ कूटशब्द देल जाउ।", "resetpass-temp-emailed": "अहाँ अखन एकटा अस्थायी ई-पत्र कोड सँ सम्प्रवेशित केनए छी। सम्प्रवेश पूर्ण करए के लेल अहाँ के एतए नयाँ कूटशब्द राखए पडत:", @@ -546,9 +568,9 @@ "changeemail-oldemail": "अखुनका ई-पत्र संकेत:", "changeemail-newemail": "नव ई-पत्र संकेत:", "changeemail-none": "(कोनो नै)", - "changeemail-password": "अहाके {{SITENAME}} कूटशब्द:", - "changeemail-submit": "ई-पत्र संकेत बदलू", - "changeemail-throttled": "अहाँ ढ़ेर रास सम्प्रवेश प्रयास केलहुँ।\nफेर प्रयास करबासँ पहिने कने काल थम्हू।", + "changeemail-password": "अहाँक {{SITENAME}} कूटशब्द:", + "changeemail-submit": "ई-मेल बदली", + "changeemail-throttled": "अहाँ ढेर रास सम्प्रवेश प्रयास केलहुँ।\nफेर प्रयास करबासँ पहिने कने $1 काल थम्हू।", "resettokens": "टोकन रीसेट करी", "resettokens-text": "जे स्तोक अहाँके खाता सँ सम्बद्ध किछु विशिष्ट व्यक्तिगत जानकारी प्रदान करएत अछि, अहाँ वोकरा एतए सँ रिसेट कऽ सकएत छी।\n\nयदि अहाँ एकरा गलती सँ केकरो देखा देनए छी वा अहाँ के खाता ह्याक भ गेल अछि तहन अहाँके एकरा रिसेट कऽ देना चाही।", "resettokens-no-tokens": "रीसेट करवाक लेल कोनो टोकन नै अछि।", @@ -633,7 +655,7 @@ "token_suffix_mismatch": "'''अहाँक सम्पादन अस्वीकार कऽ देल गेल अछि कारण अहाँक ग्राहक प्रेष्यमान अंक विधानक विराम चेन्ह सभकेँ नष्ट कऽ देलन्हि।'''\nई सम्पादन पन्नाक पाठकेँ दूषित होएबासँ बचेबा लेल अमान्य कऽ देल गेल।\nई कखनो काल होइए जखन अहाँ जाल आधारित अनाम दोसरा लेल चल सेवा प्रयुक्त करै छी।", "edit_form_incomplete": "'''सम्पादन आवेदनक किछु भाग वितरक धरि नै पहुँचल; एक बेर फेर देखू जे अहाँक सम्पादन दुरुस्त अछि आ फेरसँ प्रयास करू।'''", "editing": "सम्पादन होइए $1", - "creating": "$1 बनाउ", + "creating": "$1 बनाबी", "editingsection": "सम्पादन कऽ रहल छी $1 (खण्ड)", "editingcomment": "सम्पादन कऽ रहल छी $1 (नव खण्ड)", "editconflict": "सम्पादन अन्तर: $1", @@ -642,7 +664,7 @@ "storedversion": "पेटारमे राखल संशोधन", "nonunicodebrowser": "'''चेतौनी: अहाँक गवेषक सार्वत्रिकाक्षरकूट सहयोगी नै अछि।'''\nएकटा अस्थायी-परोक्ष तंत्रांश अहाँकेँ सुरक्षित रूपेँ पन्नाक सम्पादनमे मदति करत: गएर-अस्की अक्षर सभ षोडशमान पद्धतिमे सम्पादन बक्सामे आएत।", "editingold": "'''चेतौनी: अहाँ ऐ पन्नाक एकटा पुरान संशोधनक सम्पादन कऽ रहल छी।'''\nजँ अहाँ एकरा संरक्षित करै छी, कोनो संशोधन जे ऐ संशोधनक बाद भेल छै से खतम भऽ जाएत।", - "yourdiff": "फराक", + "yourdiff": "अन्तर", "copyrightwarning": "कृपा कय बुझू जे सभटा योगदान {{SITENAME}} ई बुझि कय देल जा रहल अछि जे ई निम्नांकितक अंतर्गत अछि $2 (देखू $1 जनकारीक हेतु). जौँ अहाँ चाहैत छी जी अहाँक रचना बिना रोकटोकक संपादित नहि हो किंवा बाँटल नहि जाय, तँ एकर योगदान एतय नहि करू।
\nएतय अहाँ ईहो सप्पत खाइत छी जी ई अहाँक अपन रचना छी आकि अहाँ एकरा कोनो सार्वजनिक डोमेन किंवा ओह्ने कोनो मँगनीक संदर्भ-स्थलसँ कॉपी कएने छी।\n< दृढ़> सर्वाधिकार सुरक्षित कार्य एतय नहि दी।!", "copyrightwarning2": "कृपा कऽ बुझू जे सभटा योगदान {{अन्तर्जाल}} योगदानकर्ता द्वारा सम्पादित, बदलल वा हटाएल जा सकैत अछि।. जौँ अहाँ चाहैत छी जी अहाँक रचना बिना रोकटोकक संपादित नहि हो किंवा बाँटल नहि जाय, तँ एकर योगदान एतय नहि करू।
\nएतय अहाँ ईहो सप्पत खाइत छी जी ई अहाँक अपन रचना छी आकि अहाँ एकरा कोनो सार्वजनिक डोमेन किंवा ओहने कोनो मँगनीक संदर्भ-स्थलसँ कॉपी कएने छी(देखू $1 वर्णन लेल)।\n''' सर्वाधिकार सुरक्षित कार्य एतय नहि दी।!'''", "longpageerror": "'''भ्रम: पाठ जे अहाँ देने छी से $1 किलोबाइट नमगर अछि, जे अधिकतम आकार $2 किलोबाइट सँ बेशी नमगर अछि।'''\nई संरक्षित नै कएल जा सकत।", @@ -660,9 +682,9 @@ "edittools": "", "edittools-upload": "-", "nocreatetext": "{{अन्तर्जाल}} नव पन्ना निर्माणक क्षमताकेँ सीमित कऽ देने अछि।\nअहाँ आपस जा सकै छी आ कोनो पन्नाकेँ सम्पादित कऽ सकै छी, वा [[Special:UserLogin|log in or create an account]]", - "nocreate-loggedin": "अहाँकेँ नव पन्ना बनेबाक अधिकार नै अछि।", - "sectioneditnotsupported-title": "खंड सम्पादन समर्थन नै", - "sectioneditnotsupported-text": "खंड सम्पादनक ऐ पन्नापर समर्थन नै", + "nocreate-loggedin": "अहाँक नव पन्ना बनेबाक अधिकार नै अछि।", + "sectioneditnotsupported-title": "अनुभाग सम्पादन समर्थित नै अछि", + "sectioneditnotsupported-text": "ई पृष्ठ पर अनुभाग सम्पादन समर्थित नै अछि", "permissionserrors": "आज्ञा गल्ती", "permissionserrorstext": "अहाँके ऐ लेल अनुमति नै अछि, ऐ ले {{PLURAL:$1|कारण|कारण सभ}}:", "permissionserrorstext-withaction": "अहाँके अनुमति नै अछि $2 लेल, ऐ लेल {{PLURAL:$1|कारण|कारण सभ}}:", @@ -932,6 +954,7 @@ "columns": "स्तम्भ सभ", "searchresultshead": "ताकू", "stub-threshold": "सीमा काटल लागि सँचियाएल (अष्टक):", + "stub-threshold-sample-link": "उदाहरण", "stub-threshold-disabled": "अशक्त कएल", "recentchangesdays": "आइ-काल्हिक परिवर्तनमे कतेक दिन देखाएल गेल:", "recentchangesdays-max": "बेसीसँ बेसी $1 {{PLURAL:$1|दिन|दिन}}", @@ -939,6 +962,7 @@ "prefs-help-recentchangescount": "ऐ मे सम्मिलित अछि आइ-काल्हिक परिवर्तन, पन्नाक इतिहास आ वृत्तलेख", "prefs-help-watchlist-token2": "इ अहाँके कंक्षाकसूचीके वेब फिडके गोपनीय चाभी छी ।\nइ जे कोइ लंग अछि उ अपन कंक्षाकसूची पैढ सकैत अछि, ऐ लेल इ क्यों गोटा स नै बाटब ।\n[[Special:ResetTokens|एकरा रीसेट करवाक लेल यै ठाम क्लिक करु]]।", "savedprefs": "अहाँक पसिन्न सुरक्षित कएल गेल", + "savedrights": "प्रयोक्ता {{GENDER:$1|$1}}क सदस्य अधिकार सङ्ग्रह कएल गेल।", "timezonelegend": "समय क्षेत्र", "localtime": "स्थानीय समए:", "timezoneuseserverdefault": "पूर्वनिर्धारित वितरक प्रयुक्त करू ($1)", @@ -966,8 +990,8 @@ "prefs-reset-intro": "अहाँ ऐ पन्नाक प्रयोग अपन विकल्पकेँ पूर्वनिविष्ट रूपेँ जाल पुनर्निधारित करबा लेल कऽ सकै छी।\nई बदलल नै जा सकैए।", "prefs-emailconfirm-label": "ई-पत्र पुष्टि:", "youremail": "ई-पत्र:", - "username": "प्रयोक्तानाम:", - "prefs-memberingroups": "{{PLURAL:$1|संवर्ग|संवर्ग सभ}}:एकर सदस्य", + "username": "{{GENDER:$1|प्रयोगकर्तानाम}}:", + "prefs-memberingroups": "निम्नलिखित {{PLURAL:$1|समूह|समूहसभ}}क {{GENDER:$2|सदस्य}}:", "prefs-memberingroups-type": "$1", "prefs-registration": "पंजीकरणक समए:", "prefs-registration-date-time": "$1", @@ -980,7 +1004,7 @@ "badsig": "अमान्य प्रारम्भिक पहिचान।\nएच.टी.एम.एल.चेन्ह जाँचू।", "badsiglength": "अहाँक हस्ताक्षर बड्ड पैघ अछि।\nई $1 सँ बेसी नै हेबाक चाही {{PLURAL:$1|वर्ण|वर्ण}} पैघ।", "yourgender": "पुरुख आकि स्त्री", - "gender-unknown": "अज्ञात", + "gender-unknown": "अहाँक वर्णन करैत समय, जतेकधरि सम्भव होएत सफ्टवेयर लिङ्ग तटस्थ शब्दसभक प्रयोग करत", "gender-male": "पुरुख", "gender-female": "स्त्री", "prefs-help-gender": "वैकल्पिक: तंत्रांश द्वारा लिंग निरपेक्ष सम्बोधन लेल प्रयुक्त।\nई सूचना सार्वजनिक हएत।", @@ -1010,10 +1034,10 @@ "userrights": "प्रयोक्ता अधिकारक प्रबन्धन", "userrights-lookup-user": "प्रयोक्ता संवर्ग सभक प्रबन्ध करू", "userrights-user-editname": "एकटा प्रयोक्तानाम लिखू:", - "editusergroup": "प्रयोक्ता संवर्ग सभक सम्पादन करू", - "editinguser": "प्रयोक्ताक प्रयोक्ता अधिकार बदलब '''[[User:$1|$1]]''' $2", + "editusergroup": "{{GENDER:$1|सदस्य}} समूहसभक सम्पादन करी", + "editinguser": "सदस्य '''[[User:$1|$1]]''' $2 क अधिकार बदलि\n{{GENDER:$1|सदस्य}}क सदस्य अधिकार बदलल जा रहल अछि [[User:$1|$1]] $2", "userrights-editusergroup": "प्रयोक्ता संवर्ग सभक सम्पादन करू", - "saveusergroups": "प्रयोक्ता संवर्ग सभकेँ सुरक्षित करू", + "saveusergroups": "{{GENDER:$1|सदस्य}} समूह सङ्ग्रह करी", "userrights-groupsmember": "क सदस्य:", "userrights-groupsmember-auto": "क जानल सदस्य:", "userrights-groups-help": "अहाँ ऐ प्रयोक्ताक वर्गकेँ बदलि सकै छी:\n* एकटा निशान लगाएल बक्सा माने प्रयोक्ता ओइ वर्गमे अछि।\n* एकटा बिन निशान लगाएल माने प्रयोक्ता ओइ वर्गमे नै अछि।\n* ई * देखबैए जे अहाँ वर्गकेँ एक बेर देलाक बाद हटा नै सकै छी, आ एकर उलट सेहो ठीक अछि।", @@ -1027,31 +1051,32 @@ "userrights-irreversible-marker": "$1*", "userrights-conflict": "प्रयोक्ता अधिकार बदलावक समयमे अंतर्विरोध! कृपया अपन बदलाव जाँच करु आ पुनः सुनिश्चित करु।", "userrights-removed-self": "अहाँ सफलतापूर्वक अपन अधिकार हटा देने छी। अतः अहाँ आब ई पृष्ठ नै देख सकैत छी।", - "group": "वर्ग:", - "group-user": "प्रयोक्ता सभ", + "group": "समूह:", + "group-user": "प्रयोक्तासभ", "group-autoconfirmed": "स्वतःअनुमोदित प्रयोक्ता सभ", "group-bot": "स्वचालक", - "group-sysop": "माइनजन", + "group-sysop": "प्रबन्धक", "group-bureaucrat": "अधिकारी", - "group-suppress": "नजरिपर नै आएल", + "group-suppress": "नुकाबए वाला", "group-all": "(सभ)", "group-user-member": "{{लिंग:$1|प्रयोक्ता}}", "group-autoconfirmed-member": "{{लिंग:$1|स्वतःअनुमोदित प्रयोक्ता}}", "group-bot-member": "{{लिंग:$1|स्वचालक}}", "group-sysop-member": "{{लिंग:$1|माइनजन}}", "group-bureaucrat-member": "{{लिंग:$1|अधिकारी}}", - "group-suppress-member": "{{लिंग:$1|नजरिपर नै आएल}}", + "group-suppress-member": "{{GENDER:$1|नुकाए वाला}}", "grouppage-user": "{{ns:project}}:प्रयोक्ता सभ", "grouppage-autoconfirmed": "{{ns:project}}:स्वतःअनुमोदित प्रयोक्ता सभ", "grouppage-bot": "{{ns:project}}:स्वचालक सभ", "grouppage-sysop": "{{ns:project}}:माइनजन सभ", "grouppage-bureaucrat": "{{ns:project}}:अधिकारी सभ", - "grouppage-suppress": "{{ns:project}}:नजरिपर नै आएल", + "grouppage-suppress": "{{ns:project}}:नुकाबी", "right-read": "पन्ना सभ पढ़ू", "right-edit": "पन्ना सभ सम्पादन करू", "right-createpage": "पन्ना सभ बनाउ (जे वार्ता पन्ना नै हुअए)", "right-createtalk": "वार्ता पन्ना सभ बनाउ", "right-createaccount": "नव प्रयोक्ता खाता सभ बनाउ", + "right-autocreateaccount": "बाहरी खातासँ स्वतः प्रवेश", "right-minoredit": "सम्पादन सभकेँ मामूली चिन्हित करू", "right-move": "पन्ना सभ घसकाउ", "right-move-subpages": "पन्ना सभकेँ उपपन्ना सभक संग घसकाउ", @@ -1120,6 +1145,9 @@ "right-managechangetags": "डेटाबेस से [[Special:Tags|नुकाबू]] बनाबु आर हटाबु", "right-applychangetags": "प्रयोग में लाबू [[Special:Tags|tags]] कक्रो बदलाव के साथ।", "right-changetags": "जमा करु आर हटाबु स्वतंत्र [[Special:Tags|टैग]] व्यक्तिगत अवतरण आर लॉग प्रविक्ति पे", + "grant-generic": "\"$1\" अधिकार सङ्ग्रह", + "grant-group-page-interaction": "पृष्ठसभसँ जोडी", + "grant-group-file-interaction": "मिडियासँ जोडी", "newuserlogpage": "प्रयोक्ता रचना वृत्तलेख", "newuserlogpagetext": "ई प्रयोक्ता निर्माणक वृत्तलेख अछि।", "rightslog": "प्रयोक्ता अधिकार वृत्तलेख", @@ -1182,7 +1210,7 @@ "recentchanges-label-bot": "ई सम्पादन यांत्रिक छल।", "recentchanges-label-unpatrolled": "ऐ सम्पादनक पुनरीक्षण अखन धरि नै कएल गेल अछि।", "recentchanges-label-plusminus": "पन्नाके आकार इ बाइट संख्यासे बदलल गेल", - "recentchanges-legend-heading": "कुंजी:", + "recentchanges-legend-heading": "कुञ्जी:", "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} ([[Special:NewPages|नयाँ पन्नसभके सूची]] सहो देखु)", "rcnotefrom": "नीचाँमे '''$2''' सँ भेल परिवर्तन अछि ('''$1''' धरि देखाएल)।", "rclistfrom": "$3 $2 सँ शुरू भेल नव परिवर्तन देखू", @@ -1323,6 +1351,17 @@ "upload-copy-upload-invalid-domain": "कपि अपलोड इ डोमेन स उपलब्ध नै अछि।", "upload-dialog-title": "फाइल अपलोड करी", "upload-dialog-button-cancel": "रद्द करी", + "upload-dialog-button-done": "पूर्ण भएल", + "upload-dialog-button-save": "सङ्ग्रह करी", + "upload-dialog-button-upload": "उपारोपण", + "upload-form-label-infoform-title": "विवरण", + "upload-form-label-infoform-name": "नाम", + "upload-form-label-infoform-description": "विवरण", + "upload-form-label-usage-title": "उपयोग", + "upload-form-label-usage-filename": "फाइलक नाम", + "foreign-structured-upload-form-label-own-work": "ई हमर काज छी", + "foreign-structured-upload-form-label-infoform-categories": "श्रेणीसभ", + "foreign-structured-upload-form-label-infoform-date": "दिनाङ्क", "backend-fail-stream": "\"$1\" केँ नै स्ट्रिम क सकल।", "backend-fail-backup": "\"$1\" केँ नै ब्याकअप क सकल।", "backend-fail-notexists": "फाइल $1 नै अछि।", @@ -1627,8 +1666,6 @@ "categories": "संवर्ग सभ", "categoriespagetext": "ई {{PLURAL:$1|संवर्गमे अछि|संवर्ग सभमे अछि}} पन्ना वा मीडिया।\n[[Special:UnusedCategories|Unused categories]] एतए देखाएल नै अछि।\nईहो देखू [[Special:WantedCategories|wanted categories]]।", "categoriesfrom": "पन्ना प्रदर्शन प्रारम्भ भेल:", - "special-categories-sort-count": "गानि कऽ छाँटू", - "special-categories-sort-abc": "वर्णाक्षरानुसार छाँटू", "deletedcontributions": "मेटाएल प्रयोक्ता योगदान सभ", "deletedcontributions-title": "मेटाएल प्रयोक्ता योगदान सभ", "sp-deletedcontributions-contribs": "योगदान सभ", @@ -2185,11 +2222,7 @@ "import-logentry-upload-detail": "$1 {{PLURAL:$1|सुधार|सुधार सभ}}", "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|सुधार|सुधार सभ}} $2 सँ", "javascripttest": "जावास्क्रिप्ट परिक्षण", - "javascripttest-pagetext-noframework": "इ पृष्ठ जावास्क्रिप्ट परीक्षण चलावए के लेल अछि।", - "javascripttest-pagetext-unknownframework": "अज्ञात परीक्षण ढाँचा \"$1\"", "javascripttest-pagetext-unknownaction": "अज्ञात क्रिया \"$1\" ।", - "javascripttest-pagetext-frameworks": "कृपया निम्न परीक्षण ढाँचा सभ में सँ एक चुनु: $1", - "javascripttest-pagetext-skins": "परीक्षण करए के लेल त्वचा चुनु:", "javascripttest-qunit-intro": "mediawiki.org पर [$1 परीक्षण के प्रलेखन] देखु।", "tooltip-pt-userpage": "{{GENDER:|अहाँक प्रयोगकर्ता}} पृष्ठ", "tooltip-pt-anonuserpage": "सम्पाद्न कएल जा रहल स्थानक अनिकेतक प्रयोक्ता पन्ना", @@ -2451,8 +2484,8 @@ "exif-colorspace": "रंगक स्थान", "exif-componentsconfiguration": "सभ घटकक अर्थ", "exif-compressedbitsperpixel": "चित्र संकुचन अवस्था", - "exif-pixelydimension": "तस्वीरक चौडाई", - "exif-pixelxdimension": "तस्वीरक ऊँचाई", + "exif-pixelxdimension": "तस्वीरक चौडाई", + "exif-pixelydimension": "तस्वीरक ऊँचाई", "exif-usercomment": "सदस्यक टिप्पणी", "exif-relatedsoundfile": "संबंधित ध्वनि फ़ाईल", "exif-datetimeoriginal": "डाटा बनाबैक तारीख आ समय", @@ -2886,7 +2919,6 @@ "version-libraries-library": "लाइब्रेरी", "version-libraries-version": "संस्करण", "redirect": "अनुप्रेषित करु फ़ाइल, प्रयोगकर्ता, वा संशोधन पहीचान के आधार में", - "redirect-legend": "फ़ाइल अथवा पन्ना के पुनर्प्रेषण", "redirect-summary": "ई विशेष पन्ना फ़ाइलनाम प्रदान करै पे फ़ाइल नाम के, पन्न आइ॰दी अथवा अवतरण आइ॰दी दुनु पे पन्ना के,आर साथी सदस्य आइ॰दी दुनु पे सदस्य पन्ना के पुनर्प्रेषित करएत अछि । उदाहरण: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/page/64308]], [[{{#Special:Redirect}}/revision/328429]], या [[{{#Special:Redirect}}/user/101]]।", "redirect-submit": "जाऊ", "redirect-lookup": "ताकू:", @@ -2898,7 +2930,6 @@ "redirect-not-exists": "बैनर नैं मिल्ल", "fileduplicatesearch": "द्वितीयक संचिका ताकू", "fileduplicatesearch-summary": "हैश मानक आधारपर द्वितीयक संचिका ताकू।", - "fileduplicatesearch-legend": "द्वितीयक ताकू", "fileduplicatesearch-filename": "संचिकानाम:", "fileduplicatesearch-submit": "ताकू", "fileduplicatesearch-info": "$1 × $2 चित्राणु
फाइल आकार: $3
माइम प्रकार: $4", diff --git a/languages/i18n/mdf.json b/languages/i18n/mdf.json index e5169da87c..bd32f5a0ea 100644 --- a/languages/i18n/mdf.json +++ b/languages/i18n/mdf.json @@ -1135,8 +1135,6 @@ "categories": "Категориет", "categoriespagetext": "{{PLURAL:$1|Тя категориень|ся категориетнень}} эса улихть лопат эли медиат.\n[[Special:UnusedCategories|тевс апак нолдак категориятне]] тяса аф няфневихть.\nСтане ина ватт [[Special:WantedCategories|вешема категориет]].", "categoriesfrom": "Няфтемс категориет тяста ушедозь:", - "special-categories-sort-count": "арафтомс луфть коряс", - "special-categories-sort-abc": "арафтомс алфавитонь коряс", "deletedcontributions": "Нардаф тиихнень путкссна", "deletedcontributions-title": "Нардаф тиихнень путкссна", "linksearch": "Ушеширень сюлмафксне", @@ -1714,8 +1712,8 @@ "exif-colorspace": "Тюсонь ёткась", "exif-componentsconfiguration": "Эрь компонентонь асуц", "exif-compressedbitsperpixel": "Архтофксонь компрезийамась", - "exif-pixelydimension": "Кондясти архтофксонь келец", - "exif-pixelxdimension": "Кондясти архтофксонь серец", + "exif-pixelxdimension": "Кондясти архтофксонь келец", + "exif-pixelydimension": "Кондясти архтофксонь серец", "exif-usercomment": "Тиить тяштьксонза", "exif-relatedsoundfile": "Сотф аудио файлсь", "exif-datetimeoriginal": "Шинь тиевомать шись ди пингсь", @@ -1984,7 +1982,6 @@ "version-software-version": "Верзие", "fileduplicatesearch": "Вешендемс кафонзаф файлхне", "fileduplicatesearch-summary": "Вешендемс кафонзаф файлхнень хэш-кодонь лувкс коряс.", - "fileduplicatesearch-legend": "Вешендемс кафонзафкс", "fileduplicatesearch-filename": "Файллем:", "fileduplicatesearch-submit": "Вешендемс", "fileduplicatesearch-info": "$1 × $2 пиксель
Файл кувалмоц: $3
MIME сорт: $4", diff --git a/languages/i18n/mg.json b/languages/i18n/mg.json index 73f03b02b8..b7a8909d4d 100644 --- a/languages/i18n/mg.json +++ b/languages/i18n/mg.json @@ -149,7 +149,6 @@ "moredotdotdot": "Tohiny...", "morenotlisted": "Tsy feno ity lisitra ity.", "mypage": "Pejy", - "anonuserpage": "Mpikambana tsy fantatra", "mytalk": "Dinika", "anontalk": "Pejin-dresaka", "navigation": "Fikarohana", @@ -290,7 +289,7 @@ "sort-descending": "Fandaharana miiba", "sort-ascending": "Fandaharana miabo", "nstab-main": "Lahatsoratra", - "nstab-user": "Pejy ny mpikambana", + "nstab-user": "Pejim-pikambana", "nstab-media": "Pejy sary sy/na feo", "nstab-special": "Pejy Manokana", "nstab-project": "Tetikasa", @@ -1689,6 +1688,7 @@ "logempty": "Tsy nahitana.", "log-title-wildcard": "Hitady amin'ny lohateny manomboka amin'io soratra io", "showhideselectedlogentries": "Haneho/Hanafina ny iditry ny laogy nofidiana", + "checkbox-select": "Hifidy: $1", "checkbox-all": "Rehetra", "checkbox-none": "Tsy misy", "checkbox-invert": "Avadika", @@ -1705,13 +1705,12 @@ "allpages-bad-ns": "{{SITENAME}} dia tsy manana anaran-tsehatra mitondra anarana « $1 ».", "allpages-hide-redirects": "Haneho ny fihodinana", "cachedspecial-viewing-cached-ttl": "Mijery pejy anaty takona ianao, izay namboarina $1 taona lasa.", + "cachedspecial-viewing-cached-ts": "Mijery versiôna voatakon'ity pejy ity ianao, izay mety efa tsy mitaratra ny zava-misy ankehitriny intsony.", "cachedspecial-refresh-now": "Hijery ny farany indrindra", "categories": "Sokajy", "categories-submit": "Aseho", "categoriespagetext": "{{PLURAL:$1}}Ampiasain'ny rakitra na pejy ireo sokajy manaraka ireo.\nTsy hiseho eto ny [[Special:UnusedCategories|sokajy tsy miasa]].\nVangio koa ny [[Special:WantedCategories|sokajy ilaina]].", "categoriesfrom": "Haneho ny sokajy manomboka amin'ny :", - "special-categories-sort-count": "afantina amin'ny isan-javatra", - "special-categories-sort-abc": "famantinana ara-abidy", "deletedcontributions": "Fandraisan'anjara voafafa", "deletedcontributions-title": "fandraisan'anjara voafafa", "sp-deletedcontributions-contribs": "fandraisan'anjara", @@ -2026,6 +2025,7 @@ "whatlinkshere-hidelinks": "$1 ny rohy", "whatlinkshere-hideimages": "$1 ny rakitra mirohy", "whatlinkshere-filters": "sivana", + "whatlinkshere-submit": "Andao", "autoblockid": "Fanakanana mandeha ho azy #$1", "block": "Hanakana ilay mpikambana", "unblock": "Hanala ny sakan'ilay mpikambana", @@ -2275,7 +2275,6 @@ "importlogpagetext": "Fampidirana ara-pandraharahana ny pejy miaraka amin'ny tantaram-panvany avy any amin'ny wiki hafa.", "javascripttest": "Fanandramana JavaScript", "javascripttest-pagetext-unknownaction": "Asa tsy fantatra \"$1\".", - "javascripttest-pagetext-skins": "Mifidia skin hanaovana ny fanandramana:", "javascripttest-qunit-intro": "Jereo ny [$1 fanoroana mikasika ny andrana] eo amin'i mediawiki.org.", "tooltip-pt-userpage": "Ny pejim-pikambanao", "tooltip-pt-anonuserpage": "Ny pejim-bikamban'ny IP andraisanao anjara", @@ -2507,8 +2506,8 @@ "exif-colorspace": "Valan-doko", "exif-componentsconfiguration": "Dikan'ny mpanorina tsirairay", "exif-compressedbitsperpixel": "Fomba famintinan-tsary", - "exif-pixelydimension": "Haavon-tsary", - "exif-pixelxdimension": "Halala-tsary", + "exif-pixelxdimension": "Haavon-tsary", + "exif-pixelydimension": "Halala-tsary", "exif-usercomment": "Diniky ny mpikambana", "exif-relatedsoundfile": "Rakitra audio miaraka", "exif-datetimeoriginal": "Daty fangalana niaviana", @@ -2873,7 +2872,6 @@ "redirect-logid": "ID laogy", "redirect-not-exists": "Sanda tsy hita", "fileduplicatesearch": "Hitady rakitra mitovy endrika", - "fileduplicatesearch-legend": "Hitady mitovy endrika", "fileduplicatesearch-filename": "Anaran-drakitra :", "fileduplicatesearch-submit": "Hikaroka", "fileduplicatesearch-info": "piksely $1 × $2
Haben'ilay rakitra : $3
Karazana MIME : $4", diff --git a/languages/i18n/min.json b/languages/i18n/min.json index e498c304c8..7b6abe6fa1 100644 --- a/languages/i18n/min.json +++ b/languages/i18n/min.json @@ -194,7 +194,7 @@ "articlepage": "Lihek isi laman", "talk": "Rundiang", "views": "Caliak", - "toolbox": "Kotak pakakeh", + "toolbox": "Pakakeh", "userpage": "Lihek laman pangguno", "projectpage": "Caliak laman proyek", "imagepage": "Caliak laman berkas", @@ -282,6 +282,7 @@ "nstab-template": "Templat", "nstab-help": "Bantuan", "nstab-category": "Kategori", + "mainpage-nstab": "Palanta", "nosuchaction": "Indak ado tindakan tasabuik", "nosuchactiontext": "Tindakan nan diminta dek URL tasabuik indak valid. Sanak mungkin salah mangetikkan URL, atau mangikuik pautan nan salah. Iko mungkin manunjuakan adonyo suatu bug pado parangkaik lunak nan dipagunoan dek {{SITENAME}}.", "nosuchspecialpage": "Indak ado laman istimewa tasabuik", @@ -431,6 +432,8 @@ "login-abort-generic": "Proses masuak Sanak indak barasil - Dibatalan", "loginlanguagelabel": "Baso: $1", "suspicious-userlogout": "Pamintaan Sanak untuak kalua log ditulak karano tampaknyo dikirim oleh paramban nan rusak atau proksi panyinggah.", + "pt-login": "Masuak log", + "pt-createaccount": "Buek akun", "pt-userlogout": "Kalua log", "php-mail-error-unknown": "Kasalahan nan indak jaleh dalam fungsi mail() PHP", "user-mail-no-addy": "Mancubo mangirim surel tanpa alamaik surel.", @@ -953,6 +956,7 @@ "minoreditletter": "k", "newpageletter": "B", "boteditletter": "b", + "rc-change-size-new": "$1 {{PLURAL:$1|byte|bita}} satalah parubahan", "rc-enhanced-expand": "Tampilkan rincian (paralu JavaScript)", "rc-enhanced-hide": "Suruakkan rincian", "recentchangeslinked": "Parubahan takaik", @@ -1178,8 +1182,6 @@ "categories": "Kategori", "categoriespagetext": "{{PLURAL:$1|Isi kategori}} ko ado laman atau media.\n[[Special:UnusedCategories|Kategori nan indak tapakai]] indak nampak di siko.\nLihek pulo [[Special:WantedCategories|kategori nan diinginan]].", "categoriesfrom": "Tunjuakan kategori mulai jo:", - "special-categories-sort-count": "uruikan manuruik jumlah", - "special-categories-sort-abc": "uruikan manuruik abjad", "deletedcontributions": "Jariah nan dihapuih", "deletedcontributions-title": "Jariah nan dihapuih", "sp-deletedcontributions-contribs": "Jariah", @@ -1517,8 +1519,9 @@ "tooltip-pt-mycontris": "Daftar jariah Sanak", "tooltip-pt-login": "Sanak disaranan untuak masuak log; walaupun indak wajib", "tooltip-pt-logout": "Kalua log", + "tooltip-pt-createaccount": "Sanak dianjuaan mambuek akun dan masuak log; walaupun hal iko indak aruih", "tooltip-ca-talk": "Parudiangan tantang isi laman", - "tooltip-ca-edit": "Angku dapek manyuntiang laman ko. Silakan gunoan tombol pratonton sabalun manyimpan", + "tooltip-ca-edit": "Suntiang laman ko", "tooltip-ca-addsection": "Mulai bagian baru", "tooltip-ca-viewsource": "Laman ko dilinduangi.\nSanak hanyo buliah mancaliak sumbernyo sajo", "tooltip-ca-history": "Revisi sabalunnyo dari laman ko", @@ -1731,8 +1734,8 @@ "exif-colorspace": "Ruang warna", "exif-componentsconfiguration": "Arti tiok komponen", "exif-compressedbitsperpixel": "Mode kompresi gamba", - "exif-pixelydimension": "Leba gamba", - "exif-pixelxdimension": "Tinggi gamba", + "exif-pixelxdimension": "Leba gamba", + "exif-pixelydimension": "Tinggi gamba", "exif-usercomment": "Komen pangguno", "exif-relatedsoundfile": "Berkas audio nan bahubuangan", "namespacesall": "sadonyo", diff --git a/languages/i18n/mk.json b/languages/i18n/mk.json index 421bb6204b..902150aae4 100644 --- a/languages/i18n/mk.json +++ b/languages/i18n/mk.json @@ -16,7 +16,8 @@ "לערי ריינהארט", "아라", "Milicevic01", - "Macofe" + "Macofe", + "Nemo bis" ] }, "tog-underline": "Потцртување на врски:", @@ -157,7 +158,6 @@ "moredotdotdot": "Повеќе...", "morenotlisted": "Овој список не е целосен.", "mypage": "Страница", - "anonuserpage": "Непознат корисник", "mytalk": "разговор", "anontalk": "Разговор", "navigation": "Навигација", @@ -280,7 +280,7 @@ "toc": "Содржина", "showtoc": "прикажи", "hidetoc": "скриј", - "collapsible-collapse": "Собери", + "collapsible-collapse": "собери", "collapsible-expand": "прикажи", "confirmable-confirm": "Дали {{GENDER:$1|сте}} сигурни?", "confirmable-yes": "Да", @@ -1292,7 +1292,7 @@ "recentchangeslinked-page": "Име на страницата:", "recentchangeslinked-to": "Прикажи ги промените на страниците поврзани со дадената страница", "recentchanges-page-added-to-category": "[[:$1]] ставена во категорија", - "recentchanges-page-added-to-category-bundled": "[[:$1]] и уште {{PLURAL:$2|една страница ставена|$2 страници ставеи}} во категорија", + "recentchanges-page-added-to-category-bundled": "[[:$1]] и уште [[Special:WhatLinksHere/$1|{{PLURAL:$2|една страница ставена|$2 страници ставеи}}]] во категорија", "recentchanges-page-removed-from-category": "[[:$1]] отстранета од категорија", "recentchanges-page-removed-from-category-bundled": "[[:$1]] и уште {{PLURAL:$2|една страница отстранета|$2 страници отстранети}} од категорија", "autochange-username": "Автоматски промени на МедијаВики", @@ -1552,7 +1552,7 @@ "shared-repo": "заедничко складиште", "shared-repo-name-wikimediacommons": "Ризницата", "filepage.css": "/* Тука поставените каскадни стилски страници (CSS) се вклучени во описната страница на податотеката, како и на клиентските викија */", - "upload-disallowed-here": "Нажалост, не можете да презапишете врз сликава.", + "upload-disallowed-here": "За жал, не можете да презапишете врз сликава.", "filerevert": "Врати $1", "filerevert-legend": "Врати податотека", "filerevert-intro": "Ја враќате '''[[Media:$1|$1]]''' на [$4 верзијата од $3, $2].", @@ -1725,8 +1725,11 @@ "apisandbox-intro": "Страницава служи за вршење проби со '''Извршник на МедијаВики'''.\n\nПовеќе за употребата на овој извршник ќе најдете во [//www.mediawiki.org/wiki/API:Main_page неговата документација]. Пример: [//www.mediawiki.org/wiki/API#A_simple_example преземање на содржината на главната страница]. Одберете дејство за да видите повеќе примери.\n\nИмајте предвид дека она шо го правите на страницава може да се одрази врз викито, иако ова е песочник.", "apisandbox-submit": "Постави барање", "apisandbox-reset": "Исчисти", - "apisandbox-examples": "Пример", - "apisandbox-results": "Извод", + "apisandbox-examples": "Примери", + "apisandbox-dynamic-parameters": "Дополнителни параметри", + "apisandbox-dynamic-parameters-add-label": "Додај параметар:", + "apisandbox-dynamic-parameters-add-placeholder": "Назив на параметарот", + "apisandbox-results": "Исход", "apisandbox-request-url-label": "URL на барањето:", "apisandbox-request-time": "Време за барањето: $1", "booksources": "Печатени извори", @@ -1768,8 +1771,6 @@ "categories-submit": "Прикажи", "categoriespagetext": "{{PLURAL:$1|Следната категорија содржи|Следните категории содржат}} страници или мултимедијални податотеки.\n[[Special:UnusedCategories|Неискористените категории]] не се прикажани овде.\nПогледајте ги и [[Special:WantedCategories|потребните категории]].", "categoriesfrom": "Приказ на категории почнувајќи од:", - "special-categories-sort-count": "подреди по број", - "special-categories-sort-abc": "подреди азбучно", "deletedcontributions": "Избришани кориснички придонеси", "deletedcontributions-title": "Избришани кориснички придонеси", "sp-deletedcontributions-contribs": "придонеси", @@ -2385,11 +2386,7 @@ "import-logentry-upload-detail": "{{PLURAL:$1|Увезена е една преработка|Увезени се $1 преработки}}", "import-logentry-interwiki-detail": "{{PLURAL:$1|Увезена е една преработка|Увезени се $1 преработки}} од $2", "javascripttest": "Проба на JavaScript", - "javascripttest-pagetext-noframework": "Оваа страница е резервирана за вршење на проби со JavaScript.", - "javascripttest-pagetext-unknownframework": "Непозната рамка „$1“.", "javascripttest-pagetext-unknownaction": "Непознато дејство „$1“.", - "javascripttest-pagetext-frameworks": "Изберете една од следниве рамки: $1", - "javascripttest-pagetext-skins": "Одберете со кое руво да ја направите пробата:", "javascripttest-qunit-intro": "Вид. [$1 документација на испробувањето] на mediawiki.org.", "tooltip-pt-userpage": "{{GENDER:|Вашата}} корисничка страница", "tooltip-pt-anonuserpage": "Корисничка страница за IP-адресата од која уредувате", @@ -2694,8 +2691,8 @@ "exif-colorspace": "Боен простор", "exif-componentsconfiguration": "Значење на секој боен дел", "exif-compressedbitsperpixel": "Режим на набивање на сликата", - "exif-pixelydimension": "Ширина на сликата", - "exif-pixelxdimension": "Висина на сликата", + "exif-pixelxdimension": "Ширина на сликата", + "exif-pixelydimension": "Висина на сликата", "exif-usercomment": "Кориснички коментари", "exif-relatedsoundfile": "Поврзана аудиоснимка", "exif-datetimeoriginal": "Датум и време на сликање", @@ -3244,7 +3241,6 @@ "version-libraries-description": "Опис", "version-libraries-authors": "Автори", "redirect": "Пренасочување по податотеки, корисник или назнака на преработка", - "redirect-legend": "Пренасочување кон податотека или страница", "redirect-summary": "Оваа службена страница пренасочува кон податотека (се задава името), страница (се задава назнаката на преработката или страницата) или корисничка странца (се задава бројчената назнака на корисникот). Употреба: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/revision/328429]] или [[{{#Special:Redirect}}/user/101]].", "redirect-submit": "Дај", "redirect-lookup": "Пребарај:", @@ -3257,7 +3253,6 @@ "redirect-not-exists": "Вредноста не е најдена", "fileduplicatesearch": "Барање на дуплирани податотеки", "fileduplicatesearch-summary": "Пребарување на дуплирани податотеки по тарабни вредности.", - "fileduplicatesearch-legend": "Барање на дупликат", "fileduplicatesearch-filename": "Податотека:", "fileduplicatesearch-submit": "Барај", "fileduplicatesearch-info": "$1 × $2 пиксели
Големина на податотеката: $3
MIME-тип: $4", diff --git a/languages/i18n/ml.json b/languages/i18n/ml.json index e313abe782..560ecb0d13 100644 --- a/languages/i18n/ml.json +++ b/languages/i18n/ml.json @@ -1298,7 +1298,7 @@ "recentchangeslinked-page": "താളിന്റെ പേര്:", "recentchangeslinked-to": "തന്നിരിക്കുന്ന താളിലെ മാറ്റങ്ങൾക്കു പകരം ബന്ധപ്പെട്ട താളുകളിലെ മാറ്റങ്ങൾ കാണിക്കുക", "recentchanges-page-added-to-category": "[[:$1]] വർഗ്ഗത്തിലേക്ക് ചേർത്തിരിക്കുന്നു", - "recentchanges-page-added-to-category-bundled": "[[:$1]] താളും ഒപ്പം {{PLURAL:$2|മറ്റൊരു താളും|$2 താളുകളും}} വർഗ്ഗത്തിലേക്ക് ചേർത്തിരിക്കുന്നു", + "recentchanges-page-added-to-category-bundled": "[[:$1]] താളും ഒപ്പം [[Special:WhatLinksHere/$1|{{PLURAL:$2|മറ്റൊരു താളും|$2 താളുകളും}}]] വർഗ്ഗത്തിലേക്ക് ചേർത്തിരിക്കുന്നു", "recentchanges-page-removed-from-category": "[[:$1]] വർഗ്ഗത്തിൽ നിന്ന് നീക്കംചെയ്തു", "recentchanges-page-removed-from-category-bundled": "[[:$1]] താളും ഒപ്പം {{PLURAL:$2|മറ്റൊരു താളും|$2 താളുകളും}} വർഗ്ഗത്തിൽ നിന്ന് നീക്കംചെയ്തിരിക്കുന്നു", "autochange-username": "മീഡിയവിക്കി സ്വയംപ്രവർത്തിത മാറ്റം", @@ -1769,8 +1769,6 @@ "categories-submit": "പ്രദർശിപ്പിക്കുക", "categoriespagetext": "താഴെ കൊടുത്തിരിക്കുന്ന {{PLURAL:$1|വർഗ്ഗത്തിൽ|വർഗ്ഗങ്ങളിൽ}} താളുകളും പ്രമാണങ്ങളുമുണ്ട്.\n[[Special:UnusedCategories|ഉപയോഗിക്കപ്പെടാത്ത വർഗ്ഗങ്ങൾ]] ഇവിടെ കാണിക്കുന്നില്ല.\n[[Special:WantedCategories|അവശ്യവർഗ്ഗങ്ങൾ]] കൂടി കാണുക.", "categoriesfrom": "ഇങ്ങനെ തുടങ്ങുന്ന വർഗ്ഗങ്ങൾ കാട്ടുക:", - "special-categories-sort-count": "എണ്ണത്തിനനുസരിച്ച് ക്രമപ്പെടുത്തുക", - "special-categories-sort-abc": "അക്ഷരമാലാക്രമത്തിൽ ക്രമീകരിക്കുക", "deletedcontributions": "മായ്ക്കപ്പെട്ട ഉപയോക്തൃസംഭാവനകൾ", "deletedcontributions-title": "മായ്ക്കപ്പെട്ട ഉപയോക്തൃസംഭാവനകൾ", "sp-deletedcontributions-contribs": "സം‌ഭാവനകൾ", @@ -2378,11 +2376,7 @@ "import-logentry-upload-detail": "{{PLURAL:$1|ഒരു പതിപ്പ്|$1 പതിപ്പുകൾ}} ഇറക്കുമതി ചെയ്തു", "import-logentry-interwiki-detail": "$2 എന്നതിൽ നിന്ന് {{PLURAL:$1|ഒരു പതിപ്പ്|$1 പതിപ്പുകൾ}} ഇറക്കുമതി ചെയ്തു", "javascripttest": "ജാവാസ്ക്രിപ്റ്റ് പരീക്ഷണം", - "javascripttest-pagetext-noframework": "ഈ താൾ ജാവാസ്ക്രിപ്റ്റ് പരീക്ഷണങ്ങൾ നടത്താനായി മാറ്റിവെച്ചിരിക്കുന്നതാണ്.", - "javascripttest-pagetext-unknownframework": "അപരിചിതമായ പരീക്ഷണ ചട്ടക്കൂട് \"$1\".", "javascripttest-pagetext-unknownaction": "അജ്ഞാതമായ പ്രവൃത്തി \"$1\".", - "javascripttest-pagetext-frameworks": "താഴെക്കൊടുത്തിരിക്കുന്നവയിൽ ഒരു പരീക്ഷണ ചട്ടക്കൂട് തിരഞ്ഞെടുക്കുക: $1", - "javascripttest-pagetext-skins": "പരീക്ഷണങ്ങൾ നടത്താനുള്ള ദൃശ്യരൂപം തിരഞ്ഞെടുക്കുക:", "javascripttest-qunit-intro": "mediawiki.org-ലെ [$1 പരീക്ഷണ സഹായി] കാണുക.", "tooltip-pt-userpage": "{{GENDER:|താങ്കളുടെ}} ഉപയോക്തൃതാൾ", "tooltip-pt-anonuserpage": "താങ്കളുടെ ഐ.പി. വിലാസത്തിന്റെ ഉപയോക്തൃതാൾ", @@ -2647,8 +2641,8 @@ "exif-colorspace": "കളർ സ്പേസ്", "exif-componentsconfiguration": "ഓരോ ഘടകത്തിന്റേയും അർത്ഥം", "exif-compressedbitsperpixel": "ചിത്രം ചുരുക്കുവാനുപയോഗിച്ചിരിക്കുന്ന മാർഗ്ഗം", - "exif-pixelydimension": "ചിത്രത്തിന്റെ വീതി", - "exif-pixelxdimension": "ചിത്രത്തിന്റെ ഉയരം", + "exif-pixelxdimension": "ചിത്രത്തിന്റെ വീതി", + "exif-pixelydimension": "ചിത്രത്തിന്റെ ഉയരം", "exif-usercomment": "ഉപയോക്താവിന്റെ കുറിപ്പുകൾ", "exif-relatedsoundfile": "ഇതുമായി ബന്ധമുള്ള ഓഡിയോ പ്രമാണം", "exif-datetimeoriginal": "ഡാറ്റ സൃഷ്ടിക്കപ്പെട്ട തീയതിയും സമയവും", @@ -3098,7 +3092,6 @@ "version-libraries-description": "വിവരണം", "version-libraries-authors": "രചയിതാക്കൾ", "redirect": "പ്രമാണത്താൽ, ഉപയോക്താവിനാൽ, താളിനാൽ, നാൾപ്പതിപ്പിനാൽ അല്ലെങ്കിൽ രേഖയുടെ ഐ.ഡി.യാൽ ചെയ്യുന്ന തിരിച്ചുവിടൽ", - "redirect-legend": "ഒരു പ്രമാണത്തിലോട്ടോ താളിലോട്ടോ ഉള്ള തിരിച്ചുവിടൽ", "redirect-summary": "ഈ പ്രത്യേക താൾ ഒരു പ്രമാണത്തിലേയ്ക്കോ (പ്രമാണത്തിന്റെ പേര് തന്നിട്ടുണ്ട്), ഒരു താളിലേയ്ക്കോ (നാൾപ്പതിപ്പിന്റെ ഐ.ഡി. അല്ലെങ്കിൽ താൾ തന്നിട്ടുണ്ട്), ഒരു ഉപയോക്തൃതാളിലേയ്ക്കോ (ഉപയോക്താവിന്റെ സംഖ്യാ ഐ.ഡി. തന്നിട്ടുണ്ട്), ഒരു രേഖയിലെ ഉൾപ്പെടുത്തലിലേക്കോ (രേഖയുടെ ഐ.ഡി. തന്നിട്ടുണ്ട്) തിരിച്ചുവിടുന്നു. ഉപയോഗം: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/page/64308]], [[{{#Special:Redirect}}/revision/328429]], [[{{#Special:Redirect}}/user/101]] അല്ലെങ്കിൽ [[{{#Special:Redirect}}/logid/186]].", "redirect-submit": "പോകൂ", "redirect-lookup": "തേടുക:", @@ -3111,7 +3104,6 @@ "redirect-not-exists": "വില കണ്ടെത്താൻ കഴിഞ്ഞില്ല", "fileduplicatesearch": "ഒരേ പ്രമാണത്തിന്റെ പലപകർപ്പുകളുണ്ടോയെന്നു തിരയുക", "fileduplicatesearch-summary": "ഒരേ പ്രമാണം തന്നെ വിവിധ പേരിലുണ്ടോയെന്നു ഹാഷ് വാല്യൂവധിഷ്ഠിതമായി തിരയുക.", - "fileduplicatesearch-legend": "പകർപ്പുണ്ടോയെന്ന് തിരയുക", "fileduplicatesearch-filename": "പ്രമാണത്തിന്റെ പേര്:", "fileduplicatesearch-submit": "തിരയൂ", "fileduplicatesearch-info": "$1 × $2 ബിന്ദു
പ്രമാണത്തിന്റെ വലിപ്പം: $3
മൈം തരം: $4", diff --git a/languages/i18n/mn.json b/languages/i18n/mn.json index 89929c0c18..5b990cc9c2 100644 --- a/languages/i18n/mn.json +++ b/languages/i18n/mn.json @@ -1544,8 +1544,6 @@ "categories": "Ангиллууд", "categoriespagetext": "Дараах {{PLURAL:$1|ангилалд|ангиллуудад}} хуудас эсвэл медиа файл агуулагдаж байна.\n[[Special:UnusedCategories|Хэрэглэгдэхгүй байгаа]] ангиллуудыг энд харуулсангүй.\n[[Special:WantedCategories|Хэрэгтэй ангиллууд]] гэдгийг харна уу.", "categoriesfrom": "Эхний анги:", - "special-categories-sort-count": "тоогоор ялгах", - "special-categories-sort-abc": "үсгийн дарааллаар ялгах", "deletedcontributions": "Устгагдсан хэрэглэгчийн хувь нэмэр", "deletedcontributions-title": "Устгагдсан хэрэглэгчийн хувь нэмэр", "sp-deletedcontributions-contribs": "хувь нэмэр", @@ -2056,8 +2054,6 @@ "import-logentry-upload-detail": "$1 засвар", "import-logentry-interwiki-detail": "$2-с авсан $1 засвар", "javascripttest": "JavaScript туршилт", - "javascripttest-pagetext-noframework": "Уг хуудсыг JavaScript тест хийхэд ашиглана.", - "javascripttest-pagetext-unknownframework": "\"$1\" мэдэхгүй тест фреймворк байна.", "tooltip-pt-userpage": "Таны хэрэглэгчийн хуудас", "tooltip-pt-anonuserpage": "Таны хэрэглэж буй IP хаягийн хэрэглэгчийн хуудас", "tooltip-pt-mytalk": "Таны ярианы хуудас", @@ -2259,8 +2255,8 @@ "exif-colorspace": "Өнгөний завсар", "exif-componentsconfiguration": "Бүх бүрэлдэхүүн хэсгүүдийн утга", "exif-compressedbitsperpixel": "Зургийн файлыг шахах арга", - "exif-pixelydimension": "Зургийн өргөн", - "exif-pixelxdimension": "Зургийн өндөр", + "exif-pixelxdimension": "Зургийн өргөн", + "exif-pixelydimension": "Зургийн өндөр", "exif-usercomment": "Хэрэглэгчдийн тэмдэглэл", "exif-relatedsoundfile": "Холбоотой дуун файл", "exif-datetimeoriginal": "Мэдээллийг үүсгэсэн огноо ба цаг", @@ -2594,7 +2590,6 @@ "version-software-version": "Хувилбар", "fileduplicatesearch": "Давхардсан файлуудыг хайх", "fileduplicatesearch-summary": "Хэш кодыг ашиглан давхардсан файлуудын хайна.", - "fileduplicatesearch-legend": "Давхардалтыг хайх", "fileduplicatesearch-filename": "Файлын нэр:", "fileduplicatesearch-submit": "Хайх", "fileduplicatesearch-info": "$1 × $2 пиксэл
Файлын хэмжээ: $3
MIME төрөл: $4", diff --git a/languages/i18n/mr.json b/languages/i18n/mr.json index 1f7e833ec8..a4e9ab6ba0 100644 --- a/languages/i18n/mr.json +++ b/languages/i18n/mr.json @@ -1329,7 +1329,7 @@ "recentchangeslinked-page": "पृष्ठ नाव:", "recentchangeslinked-to": "याऐवजी दिलेल्या पानाला जोडलेल्या पानांवरील बदल दाखवा", "recentchanges-page-added-to-category": "[[:$1]] वर्गास जोडले", - "recentchanges-page-added-to-category-bundled": "[[:$1]] व {{PLURAL:$2|एक पान वर्गास जोडले|$2 पाने वर्गास जोडलीत}}", + "recentchanges-page-added-to-category-bundled": "[[:$1]] व [[Special:WhatLinksHere/$1|{{PLURAL:$2|एक पान वर्गास जोडले|$2 पाने वर्गास जोडलीत}}]]", "recentchanges-page-removed-from-category": "[[:$1]] ला वर्गातून हटविले", "recentchanges-page-removed-from-category-bundled": "[[:$1]] व {{PLURAL:$2|एक पान वर्गातून हटविले|$2 पाने वर्गातून हटविलीत}}", "autochange-username": "मिडियाविकि आपोआप बदल", @@ -1771,8 +1771,6 @@ "categories-submit": "दाखवा", "categoriespagetext": "विकिवर खालील वर्ग {{PLURAL:$1|आहे|आहेत}}.\n[[Special:UnusedCategories|न वापरलेले वर्ग]] येथे दाखवलेले नाहीत.\nहेही पहा: [[Special:WantedCategories|पाहिजे असलेले वर्ग]].", "categoriesfrom": "या शब्दापासून सुरू होणारे वर्ग दाखवा:", - "special-categories-sort-count": "मोजणीनुसार निवडा", - "special-categories-sort-abc": "अकारविल्हे निवडा", "deletedcontributions": "वगळलेली सदस्य संपादने", "deletedcontributions-title": "वगळलेली सदस्य संपादने", "sp-deletedcontributions-contribs": "संपादने", @@ -2361,11 +2359,7 @@ "import-logentry-upload-detail": "$1 {{PLURAL:$1|आवर्तन|आवर्तने}}आयात केलीत", "import-logentry-interwiki-detail": "$2 पासून $1 {{PLURAL:$1|आवर्तन|आवर्तने}} आयात केलीत", "javascripttest": "जावा स्क्रिप्ट तपासणी", - "javascripttest-pagetext-noframework": "हे पान जावा स्क्रिप्ट तपासणी साठी सुरक्षित केले आहे", - "javascripttest-pagetext-unknownframework": "अज्ञात तपासणीचे ठिकाण $1", "javascripttest-pagetext-unknownaction": "अनोळखी क्रिया \"$1\".", - "javascripttest-pagetext-frameworks": "कृपया टेस्टिंग साठी पुढील पैकी व्यवस्था / पद्धत निवडावी: $1", - "javascripttest-pagetext-skins": "टेस्ट करण्यासाठी योग्य ती स्कीन निवडावी", "javascripttest-qunit-intro": "mediawiki.org वर [$1 testing documentation] पहा", "tooltip-pt-userpage": "{{GENDER:|आपले सदस्य}} पान", "tooltip-pt-anonuserpage": "तुम्ही ज्या अंकपत्त्यान्वये संपादित करत आहात त्याकरिता हे सदस्य पान", @@ -2619,8 +2613,8 @@ "exif-colorspace": "रंगांकन (कलर स्पेस)", "exif-componentsconfiguration": "प्रत्येक घटकाचा अर्थ", "exif-compressedbitsperpixel": "चित्र आकुंचन स्थिती", - "exif-pixelydimension": "आकृतीची सुयोग्य रूंदी", - "exif-pixelxdimension": "आकृतीची सुयोग्य उंची", + "exif-pixelxdimension": "आकृतीची सुयोग्य रूंदी", + "exif-pixelydimension": "आकृतीची सुयोग्य उंची", "exif-usercomment": "सदस्य प्रतिक्रीया", "exif-relatedsoundfile": "संबधीत ध्वनी संचिका", "exif-datetimeoriginal": "विदा निर्मितीची तारीख आणि वेळ", @@ -3060,7 +3054,6 @@ "version-libraries-description": "वर्णन", "version-libraries-authors": "लेखक", "redirect": "संचिका,सदस्य किंवा आवृत्ती या ओळखणीनुसार पुनर्निर्देशन", - "redirect-legend": "संचिका अथवा पानास पुनर्निर्देशन", "redirect-summary": "हे विशेष पान एक संचिकेस पुनर्निर्देशित करते(दिलेले संचिकानाम),एक पान(दिलेली आवृत्ती किंवा पान ओळखण) किंवा एक सदस्यपान(दिलेला सदस्य अंक).\nवापर:[[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/page/64308]], [[{{#Special:Redirect}}/revision/328429]], किंवा [[{{#Special:Redirect}}/user/101]].", "redirect-submit": "जा", "redirect-lookup": "बघा:", @@ -3072,7 +3065,6 @@ "redirect-not-exists": "(योग्य)मुल्य (व्हॅल्यु) सापडले नाही", "fileduplicatesearch": "जुळ्या संचिका शोधा", "fileduplicatesearch-summary": "हॅश किंमतीप्रमाणे जुळ्या संचिका शोधा.", - "fileduplicatesearch-legend": "जुळी संचिका शोधा", "fileduplicatesearch-filename": "संचिकानाव:", "fileduplicatesearch-submit": "शोधा", "fileduplicatesearch-info": "$1 × $2 पीक्सेल
संचिकेचा आकार: $3
MIME प्रकार: $4", diff --git a/languages/i18n/ms.json b/languages/i18n/ms.json index aa44e04cd7..d4b395e0b9 100644 --- a/languages/i18n/ms.json +++ b/languages/i18n/ms.json @@ -20,7 +20,8 @@ "아라", "Pizza1016", "Macofe", - "Matma Rex" + "Matma Rex", + "Nemo bis" ] }, "tog-underline": "Garis bawah pautan:", @@ -1252,7 +1253,7 @@ "recentchangeslinked-page": "Nama laman:", "recentchangeslinked-to": "Paparkan perubahan pada laman yang mengandungi pautan ke laman yang diberikan", "recentchanges-page-added-to-category": "[[:$1]] ditambahkan kepada kategori", - "recentchanges-page-added-to-category-bundled": "[[:$1]] dan {{PLURAL:$2|satu|$2}} lagi halaman ditambahkan kepada kategori", + "recentchanges-page-added-to-category-bundled": "[[:$1]] dan [[Special:WhatLinksHere/$1|{{PLURAL:$2|satu|$2}}]] lagi halaman ditambahkan kepada kategori", "recentchanges-page-removed-from-category": "[[:$1]] digugurkan dari kategori", "recentchanges-page-removed-from-category-bundled": "[[:$1]] dan {{PLURAL:$2|satu|$2}} lagi halaman digugurkan dari kategori", "autochange-username": "Perubahan automatik MediaWiki", @@ -1708,8 +1709,6 @@ "categories": "Kategori", "categoriespagetext": "{{PLURAL:$1|Kategori|Kategori-kategori}} berikut mengandungi laman atau media.\n[[Special:UnusedCategories|Kategori yang tidak digunakan]] tidak dipaparkan di sini.\nLihat juga [[Special:WantedCategories|kategori yang dikehendaki]].", "categoriesfrom": "Paparkan kategori bermula daripada:", - "special-categories-sort-count": "susun mengikut tertib bilangan", - "special-categories-sort-abc": "susun mengikut tertib abjad", "deletedcontributions": "Sumbangan dihapuskan", "deletedcontributions-title": "Sumbangan dihapuskan", "sp-deletedcontributions-contribs": "sumbangan", @@ -2309,11 +2308,7 @@ "import-logentry-upload-detail": "$1 semakan diimportkan", "import-logentry-interwiki-detail": "$1 semakan diimportkan daripada $2", "javascripttest": "Ujian JavaScript", - "javascripttest-pagetext-noframework": "Laman ini ditempah untuk menjalankan ujian JavaScript.", - "javascripttest-pagetext-unknownframework": "Kerangka \"$1\" tidak dikenali.", "javascripttest-pagetext-unknownaction": "Tindakan \"$1\" tidak dikenali.", - "javascripttest-pagetext-frameworks": "Sila pilih salah satu kerangka yang berikut: $1", - "javascripttest-pagetext-skins": "Sila pilih satu kulit untuk menjalankan ujian:", "javascripttest-qunit-intro": "Lihat [$1 pendokumenan ujian] di mediawiki.org.", "tooltip-pt-userpage": "Laman pengguna anda", "tooltip-pt-anonuserpage": "Laman pengguna bagi alamat IP anda", @@ -2580,8 +2575,8 @@ "exif-colorspace": "Ruang warna", "exif-componentsconfiguration": "Maksud setiap komponen", "exif-compressedbitsperpixel": "Mod pemampatan imej", - "exif-pixelydimension": "Lebar imej", - "exif-pixelxdimension": "Tinggi imej", + "exif-pixelxdimension": "Lebar imej", + "exif-pixelydimension": "Tinggi imej", "exif-usercomment": "Komen pengguna", "exif-relatedsoundfile": "Fail audio berkaitan", "exif-datetimeoriginal": "Tarikh dan waktu penjanaan data", @@ -3034,7 +3029,6 @@ "version-libraries-description": "Keterangan", "version-libraries-authors": "Pengarang", "redirect": "Lencongkan mengikut ID fail, pengguna, halaman atau semakan", - "redirect-legend": "Lencongkan ke fail atau halaman", "redirect-summary": "Halaman khas ini melencong kepada fail (dengan nama fail), halaman (dengan ID semakan atau ID halaman) atau halaman pengguna (dengan ID pengguna berangka). Penggunaan: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/page/64308]], [[{{#Special:Redirect}}/revision/328429]], atau [[{{#Special:Redirect}}/user/101]].", "redirect-submit": "Pergi", "redirect-lookup": "Cari:", @@ -3046,7 +3040,6 @@ "redirect-not-exists": "Nilai tidak dijumpai", "fileduplicatesearch": "Cari fail serupa", "fileduplicatesearch-summary": "Anda boleh mencari fail serupa berdasarkan nilai cincangannya.", - "fileduplicatesearch-legend": "Cari fail serupa", "fileduplicatesearch-filename": "Nama fail:", "fileduplicatesearch-submit": "Cari", "fileduplicatesearch-info": "$1 × $2 piksel
Saiz fail: $3
Jenis MIME: $4", diff --git a/languages/i18n/mt.json b/languages/i18n/mt.json index f09f565b16..ed8281a6ac 100644 --- a/languages/i18n/mt.json +++ b/languages/i18n/mt.json @@ -106,7 +106,7 @@ "may": "Mejj", "jun": "Ġun", "jul": "Lul", - "aug": "Awwi", + "aug": "Aww", "sep": "Sett", "oct": "Ott", "nov": "Nov", @@ -258,7 +258,7 @@ "newmessageslinkplural": "{{PLURAL:$1|messaġġ ġdid|999=messaġġi ġodda}}", "newmessagesdifflinkplural": "l-aħħar {{PLURAL:$1|bidla|999=bidliet}}", "youhavenewmessagesmulti": "Għandek messaġġi ġodda fuq $1", - "editsection": "editja", + "editsection": "immodifika", "editold": "editja", "viewsourceold": "ara s-sors", "editlink": "editja", @@ -295,6 +295,7 @@ "nstab-template": "Mudell", "nstab-help": "Paġna tal-għajnuna", "nstab-category": "Kategorija", + "mainpage-nstab": "Il-Paġna prinċipali", "nosuchaction": "Ma teżistix din l-azzjoni", "nosuchactiontext": "L-azzjoni speċifikata mill-URL mhijiex valida.\nJista' jkun li tkun ktibt ħażin il-URL, jew ġejt imwassal għal ħolqa ħażina.\nDan jista' jindika wkoll bug fis-softwer użat fil-{{SITENAME}}.", "nosuchspecialpage": "L-ebda paġna speċjali", @@ -585,7 +586,7 @@ "newarticle": "(Ġdid)", "newarticletext": "Inti segwejt link għal paġna li għadha ma ġietx maħluqa.\nSabiex toħloq il-paġna, ikteb fil-kaxxa li tinsab hawn taħt (ara [$1 paġna tal-għajnuna] għal aktar informazzjoni).\nJekk wasalt hawn biż-żball, agħfas il-buttuna '''lura''' (''back'') fuq il-browser tiegħek.", "anontalkpagetext": "----''Din hija l-paġna ta' diskussjoni ta' utent anonimu li għadu ma ħoloqx kont, jew inkella li ma jużahx.\nGħaldaqstant biex nidentifikawh ikollna nużaw l-indirizz tal-IP tiegħu/tagħha.\nL-istess indirizz tal-IP jista' jkun użat minn bosta utenti differenti.\nJekk int utent anonimu u tħoss li qiegħed tirċievi kummenti irrelevanti jew li ma jagħmlux sens, jekk jogħġbok [[Special:UserLogin|idħol fil-kont tiegħek]] jew [[Special:UserLogin/signup|oħloq wieħed]] sabiex tevita li fil-futur tiġi konfuż ma' utenti anonimi oħra.''", - "noarticletext": "Bħalissa m'hemm l-ebda test f'din il-paġna.\nInti tista' [[Special:Search/{{PAGENAME}}|tfittex it-titlu ta' din il-paġna]] f'paġni oħra, jew [{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} tfittex ir-reġistri relatati], jew [{{fullurl:{{FULLPAGENAME}}|action=edit}} timmodifika din il-paġna].", + "noarticletext": "Bħalissa m'hemm l-ebda test f'din il-paġna.\nTista' [[Special:Search/{{PAGENAME}}|tfittex it-titlu ta' din il-paġna]] f'paġni oħra, [{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} tfittex ir-reġistri relatati], jew [{{fullurl:{{FULLPAGENAME}}|action=edit}} toħloq dil-paġna].", "noarticletext-nopermission": "Bħalissa m'hemm l-ebda test f'din il-paġna. Inti tista' [[Special:Search/{{PAGENAME}}|tfittex dan it-titlu tal-paġna]] f'paġni oħra, jew [{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} tfittex ir-reġistri relatati], imma m'għandikx permess toħloq dil-paġna.", "missing-revision": "Ir-reviżjoni #$1 tal-paġna bl-isem \"{{FULLPAGENAME}}\" ma teżistix.\n\nDan ħafna drabi jiġri minħabba li tkun segwejt ħolqa lejn paġna mħassra, f'kronoloġija li mhix aġġornata.\nId-detallji tista' ssibhom fir-[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} reġistru tat-tħassir].", "userpage-userdoesnotexist": "Il-kont tal-utent \"$1\" mhux reġistrat.\nJekk jogħġbok, ara jekk verament tridx toħloq/timodifika din il-paġna.", @@ -821,7 +822,7 @@ "searchprofile-images-tooltip": "Fittex għal fajls", "searchprofile-everything-tooltip": "Fittex kullimkien (inklużi l-paġni ta' diskussjoni)", "searchprofile-advanced-tooltip": "Fittex fi spazji tal-isem personalizzati", - "search-result-size": "$1 ({{PLURAL:$2|1 word|$2 kliem}})", + "search-result-size": "$1 ({{PLURAL:$2|1 kelma|$2 kliem}})", "search-result-category-size": "{{PLURAL:$1|membru wieħed|$1 membri}} ({{PLURAL:$2|sottokategorija waħda|$2 sottokategoriji}}, {{PLURAL:$3|fajl wieħed|$3 fajls}})", "search-redirect": "(rindirizza $1)", "search-section": "(sezzjoni $1)", @@ -1556,8 +1557,6 @@ "categories": "Kategoriji", "categoriespagetext": "Il-{{PLURAL:$1|kategorija segwenti għandha|kategoriji segwenti għandhom}} paġni jew fajls multimedjali.
\nIl-[[Special:UnusedCategories|kategoriji vojta]] ma jidhrux hawnhekk.\nAra wkoll il-[[Special:WantedCategories|kategoriji rikjesti]].", "categoriesfrom": "Uri kategoriji minn:", - "special-categories-sort-count": "irranġa skont in-numru", - "special-categories-sort-abc": "irranġa skont l-alfabett", "deletedcontributions": "Kontribuzzjonijiet imħassra tal-utent", "deletedcontributions-title": "Kontribuzzjonijiet imħassra tal-utent", "sp-deletedcontributions-contribs": "kontribuzzjonijiet", @@ -1818,6 +1817,7 @@ "contributions": "Kontributi tal-{{GENDER:$1|utent}}", "contributions-title": "Kontribuzzjonijiet tal-utent għal $1", "mycontris": "Kontributi", + "anoncontribs": "Kontribuzzjonijiet", "contribsub2": "Għal {{GENDER:$3|$1}} ($2)", "contributions-userdoesnotexist": "L-utent \"$1\" mhuwiex reġistrat.", "nocontribs": "L-Ebda modifiki li jisodisfa l-kriterji tat-tfittxija.", @@ -2127,12 +2127,9 @@ "import-logentry-upload-detail": "{{PLURAL:$1|Reviżjoni waħda importata|$1 reviżjonijiet importati}}", "import-logentry-interwiki-detail": "{{PLURAL:$1|reviżjoni|$1 reviżjonijiet}} minn $2", "javascripttest": "Testjar tal-JavaScript", - "javascripttest-pagetext-noframework": "Din il-paġna hi riservata għall-eżekuzzjoni tat-testijiet tal-JavaScript.", "javascripttest-pagetext-unknownaction": "Azzjoni \"$1\" mhux magħrufa.", - "javascripttest-pagetext-frameworks": "Jekk jogħġbok agħżel wieħed mill-oqsma tal-ittestjar: $1", - "javascripttest-pagetext-skins": "Agħżel aspett grafiku fuq liema tesegwixxi testijiet:", "javascripttest-qunit-intro": "Ara d-[$1 dokumentazzjoni dwar it-test] fuq mediawiki.org.", - "tooltip-pt-userpage": "Il-paġna tal-utent tiegħek", + "tooltip-pt-userpage": "Il-paġna tiegħek ta' utent", "tooltip-pt-anonuserpage": "Il-Paġna tal-utent ta' dan l-indirizz tal-IP", "tooltip-pt-mytalk": "Il-paġna ta' diskussjoni tiegħek", "tooltip-pt-anontalk": "Diskussjoni dwar il-modifiki magħmula minn dan l-indirizz tal-IP", @@ -2143,7 +2140,7 @@ "tooltip-pt-logout": "Oħroġ (illogja 'l barra)", "tooltip-pt-createaccount": "Nagħtuk parir toħloq kont u tidħol fih; però dan mhux obligatorju.", "tooltip-ca-talk": "Diskussjoni dwar il-paġna ta' kontenut", - "tooltip-ca-edit": "Tista' timmodifika din il-paġna. Jekk jogħġbok uża l-buttuna tad-dehra proviżorja qabel ma ssalva l-modifiki.", + "tooltip-ca-edit": "Immodifika din il-paġna", "tooltip-ca-addsection": "Ibda sezzjoni ġdida", "tooltip-ca-viewsource": "Din il-paġna hija protetta. Tista' tara s-sors tagħha.", "tooltip-ca-history": "Verżjonijiet preċedenti ta' din il-paġna", @@ -2154,7 +2151,7 @@ "tooltip-ca-move": "Mexxi din il-paġna", "tooltip-ca-watch": "Żid din il-paġna mal-lista ta' osservazzjoni tiegħek", "tooltip-ca-unwatch": "Neħħi din il-paġna mill-osservazzjonijiet speċjali tiegħek", - "tooltip-search": "Fittex fil-{{SITENAME}}", + "tooltip-search": "Fittex fis-sit: {{SITENAME}}", "tooltip-search-go": "Mur fil-paġna b'dan it-titlu eżatt, jekk teżisti", "tooltip-search-fulltext": "Fittex dan it-test fil-paġni", "tooltip-p-logo": "Żur il-paġna prinċipali", @@ -2162,14 +2159,14 @@ "tooltip-n-mainpage-description": "Żur il-paġna prinċipali", "tooltip-n-portal": "Dwar il-proġett, x'tista' tagħmel, fejn tista' ssib l-affarijiet", "tooltip-n-currentevents": "Sib aktar informazzjoni dwar il-ġrajjiet kurrenti", - "tooltip-n-recentchanges": "Il-lista tal-bidliet riċenti fil-wiki", + "tooltip-n-recentchanges": "Lista tal-bidliet riċenti fil-wiki", "tooltip-n-randompage": "Uri paġna kwalunkwe", "tooltip-n-help": "Il-post fejn issir taf iżjed.", "tooltip-t-whatlinkshere": "Lista tal-paġni tal-wiki kollha li jwasslu hawn", - "tooltip-t-recentchangeslinked": "Link għal modifiki riċenti ta' paġni relatati", + "tooltip-t-recentchangeslinked": "Modifiki riċenti f'paġni b'ħolqa minn din il-paġna", "tooltip-feed-rss": "Feed RSS għal din il-paġna", "tooltip-feed-atom": "Feed Atom għal din il-paġna", - "tooltip-t-contributions": "Uri l-lista tal-kontribuzzjonijiet ta' dan l-utent", + "tooltip-t-contributions": "Lista tal-kontribuzzjonijiet ta' {{GENDER:$1|dal-utent}}", "tooltip-t-emailuser": "Ibgħat posta elettronika lil dan l-utent", "tooltip-t-info": "Aktar informazzjoni fuq din il-paġna", "tooltip-t-upload": "Tella' fajls", @@ -2179,7 +2176,7 @@ "tooltip-ca-nstab-main": "Uri l-paġna ta' kontenut", "tooltip-ca-nstab-user": "Uri l-paġna tal-utent", "tooltip-ca-nstab-media": "Uri l-paġna tal-medja", - "tooltip-ca-nstab-special": "Din hija paġna speċjali, ma tistax tagħmel modifiki f'din il-paġna", + "tooltip-ca-nstab-special": "Din paġna speċjali, u ma tistax tiġi mmodifikata", "tooltip-ca-nstab-project": "Uri l-paġna tal-proġett", "tooltip-ca-nstab-image": "Uri l-paġna tal-fajl", "tooltip-ca-nstab-mediawiki": "Uri l-messaġġ tas-sistema", @@ -2378,8 +2375,8 @@ "exif-colorspace": "Spazju tal-kuluri", "exif-componentsconfiguration": "Tfissira dwar kull komponent", "exif-compressedbitsperpixel": "Għamla tal-kompressjoni tal-istampa", - "exif-pixelydimension": "Wisa' tal-istampa", - "exif-pixelxdimension": "Għoli tal-istama", + "exif-pixelxdimension": "Wisa' tal-istampa", + "exif-pixelydimension": "Għoli tal-istama", "exif-usercomment": "Noti tal-utent", "exif-relatedsoundfile": "Fajl relatat mal-ismiegħ", "exif-datetimeoriginal": "Data u ħin tal-ħolqien tad-data", @@ -2823,7 +2820,6 @@ "version-libraries-library": "Librerija", "version-libraries-version": "Verżjoni", "redirect": "Irrindirizza lejn fajl, utent, paġna jew reviżjoni", - "redirect-legend": "Irrindirizza lejn fajl jew paġna", "redirect-summary": "Din il-paġna speċjali tirrindirizza lejn fajl (meta tispeċifika isem ta' fajl), paġna (meta tispeċifika l-ID tar-reviżjoni jew l-ID tal-paġna) jew paġna tal-utent (meta tispeċifika l-ID numeriku tal-utent). Użu: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/page/64308]], [[{{#Special:Redirect}}/revision/328429]], jew [[{{#Special:Redirect}}/user/101]].", "redirect-submit": "Mur", "redirect-lookup": "Fittex:", @@ -2835,7 +2831,6 @@ "redirect-not-exists": "Il-valur ma nstabx", "fileduplicatesearch": "Fittex fajls duplikati", "fileduplicatesearch-summary": "Fittex fajls duplikati fil-bażi għal valur ''hash''.", - "fileduplicatesearch-legend": "Fittex għal duplikat", "fileduplicatesearch-filename": "Isem il-fajl:", "fileduplicatesearch-submit": "Fittex", "fileduplicatesearch-info": "$1 × $2 pixel
Daqs tal-fajl: $3
tip MIME: $4", diff --git a/languages/i18n/my.json b/languages/i18n/my.json index 01e201e678..c1cf0194cd 100644 --- a/languages/i18n/my.json +++ b/languages/i18n/my.json @@ -22,7 +22,8 @@ "아라", "9.sinistra", "Ninjastrikers", - "Penguinlay" + "Penguinlay", + "Nemo bis" ] }, "tog-underline": "လင့်ကို မျဉ်းသားသည့် ပုံစံ -", @@ -178,8 +179,8 @@ "returnto": "$1 သို့ ပြန်သွားရန်။", "tagline": "{{SITENAME}} မှ", "help": "အ​ကူ​အ​ညီ​", - "search": "ရှာ​ဖွေ​ရန်​", - "searchbutton": "ရှာ​ဖွေ​ရန်​", + "search": "ရှာဖွေရန်", + "searchbutton": "ရှာဖွေရန်", "go": "သွား​ပါ​", "searcharticle": "သွား​ပါ​", "history": "စာမျက်နှာ ရာဇဝင်", @@ -230,7 +231,7 @@ "protectedpage": "ကာကွယ်ထားသည့် စာမျက်နှာ", "jumpto": "ဤနေရာသို့သွားရန် -", "jumptonavigation": "အ​ညွှန်း​", - "jumptosearch": "ရှာ​ဖွေ​ရန်​", + "jumptosearch": "ရှာဖွေရန်", "view-pool-error": "ဆာဗာသည် ယခုအချိန်တွင် မမျှသောဝန်ကို ထမ်းနေရသည်။\nအသုံးပြုသူ အမြောက်အများက ဤစာမျက်နှာကို ကြည့်ရှုရန် ကြိုးပမ်းနေကြသည်။\nဤစာမျက်နှာကို နောက်တစ်ကြိမ် ပြန်မကြည့်မီ ခဏတာမျှ စောင့်ပါ။\n\n$1", "generic-pool-error": "ဝမ်းနည်းပါသည်၊ ဆာဗာများသည် ယခုအချိန်တွင် မမျှသောဝန်ကို ထမ်းနေရသည်။\nအသုံးပြုသူ အမြောက်အများက ဤစာမျက်နှာကို ကြည့်ရှုရန် ကြိုးပမ်းနေကြသည်။\nဤစာမျက်နှာကို နောက်တစ်ကြိမ် ပြန်မကြည့်မီ ခဏတာမျှ စောင့်ပါ။", "pool-errorunknown": "အမည်မသိအမှား", @@ -561,6 +562,12 @@ "revdelete-nooldid-title": "တရားမဝင်သော မူအမည်", "revdelete-no-file": "ဖော်ပြထားသောဖိုင် မရှိပါ။", "revdelete-show-file-submit": "မှန်", + "revdelete-selected-file": "[[:$2]] ၏ ရွေးချယ်ထားသော {{PLURAL:$1|ဖိုင်ဗားရှင်း|ဖိုင်ဗားရှင်းများ}}:", + "revdelete-text-text": "ဖျက်လိုက်သည့် မူများသည် စာမျက်နှာရာဇဝင်တွင် ရှိနေဦးမည်ဖြစ်သော်လည်း ထိုပါဝင်အကြောင်းအရာသည် အများပြည်သူမှ မြင်ရတော့မည် မဟုတ်ပေ။", + "revdelete-text-file": "ဖျက်လိုက်သော ဖိုင်ဗားရှင်းများသည် ဖိုင်ရာဇဝင်ထဲတွင် ရှိနေဦးမည်ဖြစ်သော်လည်း ယင်းတို့ကို အများပြည်သူ ကြည့်ရှုနိုင်မည် မဟုတ်ပေ။", + "logdelete-text": "ဖျက်လိုက်သော မှတ်တမ်းသည် မှတ်တမ်းများထဲတွင် ပေါ်နေဦးမည်ဖြစ်သော်လည်း ပါဝင်အကြောင်းအရာကို အများပြည်သူများ မြင်ရတော့မည် မဟုတ်ပေ။", + "revdelete-text-others": "အပိုကန့်သတ်ချက်များကို မထည့်ထားပါက အခြားသော အက်ဒမင်များအနေဖြင့် ဝှက်ထားသော အကြောင်းအရာကို ကြည့်နိုင်ပြီး ဖျက်ထားခြင်းကို ပယ်ဖျက်နိုင်သည်။", + "revdelete-confirm": "ဤသို့ ဖျက်ပစ်ရန် သင် အမှန်တကယ် ရည်ရွယ်လျက် နောက်ဆက်တွဲ အကျိုးဆက်များကို သိရှိနားလည်ပြီး [[{{MediaWiki:Policy-url}}|မူဝါဒ]]အတိုင်း လုပ်ဆောင်နေခြင်းဖြစ်ကြောင်းကို ကျေးဇူးပြု၍ အတည်ပြုပေးပါ။", "revdelete-legend": "မြင်နိုင်စွမ်းရှိမှုတို့အား ကန့်သတ်ခြင်းကို သတ်မှတ်ရန်", "revdelete-hide-text": "တည်းဖြတ်မူမှ စာသား", "revdelete-hide-image": "ဖိုင်ပါ အေကြာင်းအရာများကို ဝှက်ရန်", @@ -598,6 +605,7 @@ "mergehistory-reason": "​ကြောင်း​ပြ​ချက် -", "mergelog": "ပေါင်းလိုက်သော မှတ်တမ်း", "revertmerge": "ပြန်ခွဲထုတ်ရန်", + "mergelogpagetext": "အောက်ပါတို့သည် စာမျက်နှာ ရာဇဝင်ကို အခြားတစ်ခုသို့ မကြာမီက ပေါင်းလိုက်သော စာရင်းဖြစ်သည်။", "history-title": "\"$1\"၏ တည်းဖြတ်မှု ရာဇဝင်", "difference-title": "\"$1\" ၏ တည်းဖြတ်မှု မူကွဲများ", "difference-title-multipage": "စာမျက်နှာ \"$1\" နှင့် \"$2\" အကြား ကွဲပြားမှု", @@ -679,7 +687,7 @@ "prefs-editing": "တည်းဖြတ်ခြင်း", "rows": "အလျားလိုက်တန်း -", "columns": "ဒေါင်လိုက်တန်း -", - "searchresultshead": "ရှာ​ဖွေ​ရန်​", + "searchresultshead": "ရှာဖွေရန်", "stub-threshold-disabled": "ပိတ်ထားသည်", "recentchangesdays": "လတ်တလောအပြောင်းအလဲများကို ပြရန်နေ့များ -", "recentchangesdays-max": "အများဆုံး $1 {{PLURAL:$1|ရက်|ရက်}}", @@ -704,7 +712,7 @@ "timezoneregion-indian": "အိန္ဒိယသမုဒ္ဒရာ", "timezoneregion-pacific": "ပစိဖိတ်သမုဒ္ဒရာ", "allowemail": "အခြားအသုံးပြုသူများထံမှ အီးမေးများကို လက်ခံရန်", - "prefs-searchoptions": "ရှာ​ဖွေ​ရန်​", + "prefs-searchoptions": "ရှာဖွေရန်", "prefs-namespaces": "အမည်ညွှန်း", "default": "ပုံမှန်အားဖြင့်", "prefs-files": "ဖိုင်", @@ -812,7 +820,7 @@ "right-sendemail": "အခြားအသုံးပြုသူများကို အီးမေးပို့ရန်", "grant-editmywatchlist": "သင့် စောင့်ကြည့်စာရင်းကို တည်းဖြတ်ရန်", "newuserlogpage": "အသုံးပြုသူအသစ်ရောက်လာခြင်း မှတ်တမ်း", - "newuserlogpagetext": "ဤသည်မှာ အသုံးပြုသူအသစ် ဖတ်တီးမှု မှတ်တမ်း ဖြစ်သည်။", + "newuserlogpagetext": "ဤသည်မှာ အသုံးပြုသူအသစ် ဖန်တီးမှု မှတ်တမ်း ဖြစ်သည်။", "rightslog": "အသုံးပြုသူ၏ အခွင့်အရေးများ မှတ်တမ်း", "rightslogtext": "ဤသည်မှာ အသုံးပြုသူအခွင့်အရေးများ၏ ပြောင်းလဲမှုများမှတ်တမ်းဖြစ်သည်။", "action-read": "ဤစာမျက်နှာကို ဖတ်ရန်", @@ -872,7 +880,7 @@ "rcshowhideanons": "အမည်မသိ အသုံးပြုသူ $1ရန်", "rcshowhideanons-show": "ပြသရန်", "rcshowhideanons-hide": "ဝှက်", - "rcshowhidepatr": "စောင့်ြကပ်တည်းဖြတ်မှု $1ရန်", + "rcshowhidepatr": "စောင့်ကြပ်တည်းဖြတ်မှု $1ရန်", "rcshowhidepatr-show": "ပြသရန်", "rcshowhidepatr-hide": "ဝှက်ရန်", "rcshowhidemine": "ကျွန်ုပ်တည်းဖြတ်ထားသည်များ $1", @@ -904,7 +912,7 @@ "recentchangeslinked-page": "စာမျက်နှာ အမည် -", "recentchangeslinked-to": "ပေးထားသော စာမျက်နှာများအစား လင့်များနှင့် ဆက်စပ်နေသာ စာမျက်နှာများ၏ အပြောင်းအလဲများကို ပြရန်", "recentchanges-page-added-to-category": "ကဏ္ဍထဲသို့ [[:$1]] ကို ပေါင်းထည့်ခဲ့သည်", - "recentchanges-page-added-to-category-bundled": "[[:$1]] နှင့် {{PLURAL:$2|စာမျက်နှာ တစ်ခု|စာမျက်နှာ $2 ခု}}ကို ကဏ္ဍထဲသို့ ပေါင်းထည့်ခဲ့သည်", + "recentchanges-page-added-to-category-bundled": "[[:$1]] နှင့် [[Special:WhatLinksHere/$1|{{PLURAL:$2|စာမျက်နှာ တစ်ခု|စာမျက်နှာ $2 ခု}}]]ကို ကဏ္ဍထဲသို့ ပေါင်းထည့်ခဲ့သည်", "recentchanges-page-removed-from-category": "ကဏ္ဍထဲမှ [[:$1]] ကို ဖယ်ရှားခဲ့သည်", "recentchanges-page-removed-from-category-bundled": "[[:$1]] နှင့် {{PLURAL:$2|စာမျက်နှာ တစ်ခု|စာမျက်နှာ $2 ခု}}ကို ကဏ္ဍထဲမှ ဖယ်ရှားခဲ့သည်", "upload": "ဖိုင်​တင်​ရန်​", @@ -919,6 +927,7 @@ "upload-preferred": "အလေးပေးထားသော ဖိုင် {{PLURAL:$2|အမျိုးအစား|အမျိုးအစားများ}}: $1။", "upload-prohibited": "တားမြစ်ထားသော ဖိုင် {{PLURAL:$2|အမျိုးအစား|အမျိုးအစားများ}}: $1။", "uploadlogpage": "Upload တင်သည့် မှတ်တမ်း", + "uploadlogpagetext": "အောက်ပါတို့သည် မကြာမီက upload လုပ်ထားသော ဖိုင်စာရင်း ဖြစ်သည်။\nပိုမို၍ ခြုံငုံသုံးသပ်ကြည့်ရှုနိုင်ရန် [[Special:NewFiles|ဖိုင်အသစ်များ ပြခန်း]]ကို ကြည့်ပါ။", "filename": "ဖိုင်အမည်", "filedesc": "အ​ကျဉ်း​ချုပ်​", "fileuploadsummary": "အ​ကျဉ်း​ချုပ်​ -", @@ -1041,6 +1050,7 @@ "statistics-edits-average": "စာတစ်မျက်နှာလျှင် ပျမ်းမျှတည်းဖြတ်မှုနှုန်း", "statistics-users": "မှတ်ပုံတင်ထားသော [[Special:ListUsers|အသုံးပြုသူများ]]", "statistics-users-active": "လက်ရှိလုပ်ကိုင်နေသော အသုံးပြုသူများ", + "statistics-users-active-desc": "နောက်ဆုံး {{PLURAL:$1|ရက်|$1 ရက်}}အတွင်း ဆောင်ရွက်ချက်ရှိသည့် အသုံးပြုသူများ", "doubleredirects": "နှစ်ဆင့်ပြန် ပြန်ညွှန်းများ", "double-redirect-fixed-move": "[[$1]] ကို ရွှေ့ပြောင်းပြီးဖြစ်သည်။ ၎င်းအား အလိုအလျောက် ပြင်ဆင်ပြီး [[$2]] သို့ ပြန်ညွှန်းထားသည်။", "brokenredirects": "ကျိုးပျက်နေသော ပြန်ညွှန်းများ", @@ -1095,6 +1105,7 @@ "log": "မှတ်​တမ်း​များ​", "logeventslist-submit": "ပြသရန်", "all-logs-page": "အများနှင့်ဆိုင်သောမှတ်တမ်းအားလုံး", + "alllogstext": "{{SITENAME}}၏ ရရှိနိုင်သော မှတ်တမ်းများအားလုံး ပေါင်းစည်းပြသခြင်း ဖြစ်သည်။\nမှတ်တမ်းအမျိုးအစား၊ အသုံးပြုသူအမည် (စာလုံးအကြီးအသေး)၊ သို့မဟုတ် သက်ဆိုင်ရာ စာမျက်နှာ (စာလုံးအကြီးအသေး) ကို ရွေးချယ်ခြင်းဖြင့် ကြည့်ရှုမှုကို အကျဉ်းချုံးနိုင်ပါသည်။", "logempty": "မှတ်တမ်းထဲတွင် ကိုက်ညီသော အရာများ မရှိပါ။", "allpages": "စာမျက်နှာအားလုံး", "nextpage": "နောက်ထပ်စာမျက်နှာ ($1)", @@ -1108,21 +1119,20 @@ "categories": "ကဏ္ဍများ", "categories-submit": "ပြသရန်", "categoriesfrom": "ဤမှစသော အမျိုးအစားများကို ပြရန် -", - "special-categories-sort-count": "အနည်းအများအလိုက်စီရန်", - "special-categories-sort-abc": "အက္ခရာစဉ်အလိုက်စီရန်", "deletedcontributions": "ဖျက်လိုက်သော ပံ့ပိုးမှုများ", "deletedcontributions-title": "ဖျက်လိုက်သော ပံ့ပိုးမှုများ", "sp-deletedcontributions-contribs": "ပံ့ပိုးထားမှုများ", "linksearch": "ပြင်ပလင့်ခ်များ ရှာဖွေ", "linksearch-pat": "ရှာသည့်ပုံစံ -", "linksearch-ns": "အမည်ညွှန်း -", - "linksearch-ok": "ရှာ​ဖွေ​ရန်​", + "linksearch-ok": "ရှာဖွေရန်", "linksearch-line": "$1 သည် $2 မှ လင့်ချိတ်ထားသည်", "listusersfrom": "ဤမှစသော အသုံးပြုသူများကို ပြရန် -", "listusers-submit": "ပြ", "listusers-noresult": "အသုံးပြုသူ မတွေ့ပါ။", "listusers-blocked": "(ပိတ်ပင်ထားသည်)", "activeusers": "တက်ကြွလှုပ်ရှားသည့် အသုံးပြုသူစာရင်း", + "activeusers-intro": "ဤသည်မှာ နောက်ဆုံး $1 {{PLURAL:$1|ရက်|ရက်}}အတွင်း တက်ကြွလှုပ်ရှားသည့် အသုံးပြုသူများ စာရင်း ဖြစ်သည်။", "activeusers-from": "ဤမှစသော အသုံးပြုသူများကို ပြရန် -", "activeusers-hidebots": "ဘော့များကို ဝှက်ရန်", "activeusers-hidesysops": "အက်ဒမင်များကို ဝှက်ရန်", @@ -1168,12 +1178,15 @@ "notanarticle": "မာတိကာစာမျက်နှာတစ်ခု မဟုတ်", "watchlist-details": "{{PLURAL:$1|စာမျက်နှာ $1 ခု|စာမျက်နှာ $1 ခု}} သည် သင့်စောင့်ကြည့်စာရင်းတွင် ရှိပြီး ဆွေးနွေးချက်စာမျက်နှာများကို ထည့်တွက် မထားပါ။", "wlheader-showupdated": "သင် နောက်ဆုံးကြည့်ရှုခဲ့ပြီးနောက် ပြောင်းလဲမှုရှိခဲ့သော စာမျက်နှာများကို စာလုံးမဲ ဖြင့် ပြသထားသည်", + "wlnote": "အောက်ပါတို့သည် $3၊ $4 အထိ နောက်ဆုံး {{PLURAL:$2|နာရီ|$2 နာရီ}}အတွင်း {{PLURAL:$1|နောက်ဆုံးပြောင်းလဲချက် တစ်ခု|နောက်ဆုံးပြောင်းလဲချက်များ $1 ခု}} ဖြစ်သည်။", "wlshowlast": "နောက်ဆုံး $1 နာရီ $2 ရက် ကိုပြရန်", "watchlist-hide": "ဝှက်", "watchlist-submit": "ပြသရန်", + "wlshowtime": "ပြသပေးရမည့် အချိန်ကာလ:", "wlshowhideminor": "အရေးမကြီးသော ပြင်ဆင်မှုများ", "wlshowhideliu": "မှတ်ပုံတင်ထားသော အသုံးပြုသူများ", "wlshowhideanons": "အမည်မသိ အသုံးပြုသူများ", + "wlshowhidemine": "ကျွန်ုပ်၏ တည်းဖြတ်မှုများ", "wlshowhidecategorization": "စာမျက်နှာ ကဏ္ဍထည့်သွင်းခြင်း", "watchlist-options": "စောင့်ကြည့်စာရင်းအတွက် ရွေးချယ်စရာများ", "watching": "စောင့်ကြည့်လျက်ရှိ...", @@ -1194,6 +1207,7 @@ "actionfailed": "ဆောင်ရွက်မှုမအောင်မြင်ပါ", "deletedtext": "\"$1\" ကို ဖျက်ပစ်လိုက်ပြီးဖြစ်သည်။\nလတ်တလောဖျက်ထားသည်များ၏ မှတ်တမ်းကို $2 တွင် ကြည့်ပါ။", "dellogpage": "ဖျက်ထားသည်များ မှတ်တမ်း", + "dellogpagetext": "အောက်ပါတို့သည် မကြာမီက ဖျက်ထားမှုများ စာရင်း ဖြစ်သည်။", "deletionlog": "ဖျက်ပစ်သည့်မှတ်တမ်း", "deletecomment": "အ​ကြောင်း​ပြ​ချက် -", "deleteotherreason": "အခြားသော/နောက်ထပ် အကြောင်းပြချက် -", @@ -1202,6 +1216,7 @@ "rollbacklink": "နောက်ပြန် ပြန်သွားရန်", "rollbacklinkcount": "{{PLURAL:$1|တည်းဖြတ်မှု|တည်းဖြတ်မှုများ}} $1 ကို နောက်ပြန်ပြင်ရန်", "protectlogpage": "ကာကွယ်မှုများ၏ မှတ်တမ်း", + "protectlogtext": "အောက်ပါတို့သည် စာမျက်နှာ ကာကွယ်မှုများအတွက် အပြောင်းအလဲ စာရင်း ဖြစ်သည်။\nလက်ရှိ စာမျက်နှာ ကာကွယ်မှုများ စာရင်းအတွက် [[Special:ProtectedPages|ကာကွယ်ထားသော စာမျက်နှာများ စာရင်း]]ကို ကြည့်ပါ။", "protectedarticle": "\"[[$1]]\" ကို ကာကွယ်ထားသည်", "modifiedarticleprotection": "\"[[$1]]\" ၏ ကာကွယ်မှု အဆင့်ကို ပြောင်းရန်", "protect-title": "\"$1\" ၏ ကာကွယ်မှုအဆင့်ကို ပြောင်းလဲရန်", @@ -1221,6 +1236,7 @@ "protect-level-sysop": "စီမံခန့်ခွဲသူများသာ", "protect-summary-cascade": "အစီအစဉ်ကျအောင် စီနေသည်", "protect-expiring": "$1 (UTC) တွင် သက်တမ်းကုန်မည်", + "protect-expiry-indefinite": "အနန္တ", "protect-cascade": "ဤစာမျက်နှာအတွင်း ပါဝင်သော စာမျက်နှာများကို ထိန်းသိမ်းကာကွယ်ပါ (အများခွင့်ပြုချက်ဖြင့်သာ ပြင်ဆင်သင့်သည်)", "protect-cantedit": "ကာကွယ်ထားသောစာမျက်နှာဖြစ်သည့်အတွက် ပြင်ဆင်၍ မရနိုင်ပါ။ အဘယ့်ကြောင့်ဆိုသော် သင့်မှာ တည်းဖြတ်ပိုင်ခွင့် မရှိ၍ ဖြစ်ပါသည်။", "protect-otherreason": "အခြားသော/နောက်ထပ် အကြောင်းပြချက် -", @@ -1251,7 +1267,7 @@ "undeletecomment": "အ​ကြောင်း​ပြ​ချက် -", "undeletedrevisions": "{{PLURAL:$1|မူတစ်ခု|မူ $1 ခု}} ကိုပြန်လည် ထိန်းသိမ်းပြီး", "undelete-search-box": "ဖျက်ပစ်သည့် စာမျက်နှာများမှ ရှာရန်", - "undelete-search-submit": "ရှာ​ဖွေ​ရန်​", + "undelete-search-submit": "ရှာဖွေရန်", "undelete-show-file-submit": "မှန်", "namespace": "အမည်ညွှန်း -", "invert": "ရွေးချယ်ထားခြင်းကို ပြောင်းပြန်လှန်ရန်", @@ -1276,7 +1292,7 @@ "sp-contributions-search": "ပံ့ပိုးမှုများကို ရှာရန်", "sp-contributions-username": "အိုင်ပီလိပ်စာ သို့ အသုံးပြုသူအမည် :", "sp-contributions-toponly": "နောက်ဆုံးတည်းဖြတ်မူများသာပြရန်", - "sp-contributions-submit": "ရှာ​ဖွေ​ရန်​", + "sp-contributions-submit": "ရှာဖွေရန်", "whatlinkshere": "ဘယ်ကလင့်ခ်ထားလဲ", "whatlinkshere-title": "\"$1\" ကို လင့်ထားသော စာမျက်နှာများ", "whatlinkshere-page": "စာမျက်နှာ -", @@ -1288,7 +1304,7 @@ "whatlinkshere-prev": "{{PLURAL:$1|နောက်သို့|နောက်သို့ $1}}", "whatlinkshere-next": "{{PLURAL:$1|ရှေ့သို့|ရှေ့သို့ $1}}", "whatlinkshere-links": "← လင့်များ", - "whatlinkshere-hideredirs": "redirect ပြန်ညွှန်း $1 ခု", + "whatlinkshere-hideredirs": "ပြန်ညွှန်းများ $1ရန်", "whatlinkshere-hidetrans": "ထည့်သွင်းကူးယူချက် $1 ခု", "whatlinkshere-hidelinks": "လင့် $1 ခု", "whatlinkshere-hideimages": "ဖိုင်အချိတ်အဆက်များ $1 ခု", @@ -1319,7 +1335,7 @@ "blocklist": "ပိတ်ပင်ထားသော အသုံးပြုသူများ", "ipblocklist": "ပိတ်ပင်ထားသော အသုံးပြုသူများ", "ipblocklist-legend": "ပိတ်ပင်ထားသော အသုံးပြုသူတစ်ဦးကို ရှာရန်", - "ipblocklist-submit": "ရှာ​ဖွေ​ရန်​", + "ipblocklist-submit": "ရှာဖွေရန်", "ipblocklist-otherblocks": "အခြား ပိတ်ပင်ထားမှု{{PLURAL:$1|ခု|ခု}}", "infiniteblock": "အကန့်အသတ်မရှိ", "expiringblock": "$1 ရက် $2 အချိန်တွင် သက်တမ်းကုန်မည်", @@ -1334,6 +1350,7 @@ "contribslink": "ပံ့ပိုး", "blocklogpage": "ပိတ်ပင်တားဆီးမှု မှတ်တမ်း", "blocklogentry": "[[$1]] ကို $2 ကြာအောင် ပိတ်ပင် တားဆီးလိုက်သည် $3", + "blocklogtext": "ဤသည်မှာ အသုံးပြုသူအား ပိတ်ပင်ခြင်းနှင့် ပိတ်ပင်မှုဖယ်ရှားခြင်း ဆောင်ရွက်မှု မှတ်တမ်း ဖြစ်သည်။\nအလိုအလျောက် ပိတ်ပင်ထားသည့် အိုင်ပီလိပ်စာများအား မထည့်သွင်းထားပါ။\nလက်ရှိ တားမြစ်မှုများနှင့် ပိတ်ပင်မှုများ စာရင်းအတွက် [[Special:BlockList|ပိတ်ပင်စာရင်း]]ကို ကြည့်ပါ။", "unblocklogentry": "$1 ကို ပိတ်ထားရာမှ ပြန်ဖွင့်ရန်", "block-log-flags-anononly": "အမည်မသိ အသုံးပြုသူများသာ", "block-log-flags-nocreate": "အကောင့်ဖန်တီးခြင်းကို ပိတ်ထားသည်", @@ -1360,6 +1377,7 @@ "movepage-page-moved": "စာမျက်နှာ $1 ကို $2 သို့ ရွှေ့ပြီးပြီ ဖြစ်သည်။", "movepage-page-unmoved": "စာမျက်နှာ $1 ကို $2 သို့ ရွှေ့မရနိုင်ပါ။", "movelogpage": "ရွှေ့ပြောင်းခြင်း မှတ်တမ်း", + "movelogpagetext": "အောက်ပါတို့သည် စာမျက်နှာ ရွေ့ပြောင်းမှုများ အားလုံး စာရင်း ဖြစ်သည်။", "movereason": "အ​ကြောင်း​ပြ​ချက် -", "revertmove": "ပြောင်းရန်", "delete_and_move_confirm": "ဟုတ်ပါသည်။ စာမျက်နှာကို ဖျက်ပါ။", @@ -1413,7 +1431,7 @@ "tooltip-ca-move": "ဤစာမျက်နှာကို ရွှေ့ပြောင်းရန်", "tooltip-ca-watch": "ဤစာမျက်နှာကို စောင့်ကြည့်စာရင်းသို့ ထည့်ရန်", "tooltip-ca-unwatch": "ဤစာမျက်နှာကို စောင့်ကြည့်စာရင်းမှ ဖြုတ်ရန်", - "tooltip-search": "{{SITENAME}}ကို ရှာရန်", + "tooltip-search": "{{SITENAME}}တွင် ရှာဖွေရန်", "tooltip-search-go": "ဤအမည်နှင့် ထပ်တူညီသော စာမျက်နှာရှိပါက ယင်းသို့ သွားရန်", "tooltip-search-fulltext": "ဤစာပါသော စာမျက်နှာများကို ရှာရန်", "tooltip-p-logo": "ဗဟိုစာမျက်နှာသို့ သွားရန်", @@ -1472,7 +1490,7 @@ "newimages-legend": "စိစစ်မှု", "newimages-label": "ဖိုင်အမည် (သို့ ယင်း၏အစိတ်အပိုင်း) -", "noimages": "ကြည့်စရာဘာမှ မရှိပါ။", - "ilsubmit": "ရှာ​ဖွေ​ရန်​", + "ilsubmit": "ရှာဖွေရန်", "bydate": "ရက်စွဲဖြိင့်", "sp-newimages-showfrom": "$1 နေ့ $2 အချိန်ကစသော ဖိုင်အသစ်များကို ပြရန်", "bad_image_list": "ဖောမတ်ပုံစံမှာ အောက်ပါအတိုင်းဖြစ်သည်။\n\nစာရင်းတွင်ထည့်သွင်းထားသော အရာများကိုသာ ထည့်သွင်းစဉ်းစားမည်။ (ခရေပွင့် * ဖြင့်စသော စာကြောင်းများ)\nစာကြောင်း၏ ပထမဆုံး လင့်သည် ဖိုင်ညံ့ ဖြစ်ရမည်။\nယင်းစာကြောင်းတွင်ပင် နောက်ထပ်လာသောလင့်များကို ချွင်းချက်အဖြစ် စဉ်းစားမည်။ ဆိုလိုသည်မှာ ၎င်းလင့်များတွင်လည်း အဆိုပါ ဖိုင်ညံ့ ပါကောင်း ပါဝင်နေမည်။", @@ -1495,8 +1513,8 @@ "exif-copyright": "မူပိုင်ခွင့်ပိုင်ရှင်", "exif-exifversion": "Exif ဗားရှင်း", "exif-colorspace": "အရောင်နေရာ", - "exif-pixelydimension": "ပုံအကျယ်", - "exif-pixelxdimension": "ပုံအမြင့်", + "exif-pixelxdimension": "ပုံအကျယ်", + "exif-pixelydimension": "ပုံအမြင့်", "exif-usercomment": "အသုံးပြုသူ မှတ်ချက်များ", "exif-relatedsoundfile": "ဆက်နွယ်သော အသံဖိုင်", "exif-datetimeoriginal": "ဒေတာဖန်တီးခဲ့သော နေ့စွဲနှင့် အချိန်", @@ -1559,7 +1577,9 @@ "autosumm-new": "\"$1\" အစချီသော စာလုံးတို့နှင့် စာမျက်နှာကို ဖန်တီးလိုက်သည်", "watchlistedit-normal-title": "စောင့်ကြည့်စာရင်းကို တည်းဖြတ်ရန်", "watchlistedit-normal-legend": "စောင့်ကြည့်စာရင်းမှ ခေါင်းစဉ်များကို ဖျက်ရန်", + "watchlistedit-normal-explain": "သင်၏ စောင့်ကြည့်စာရင်းရှိ ခေါင်းစဉ်များကို အောက်တွင် ပြသထားသည်။\nခေါင်းစဉ်တစ်ခုကို ဖယ်ရှားရန် ထိုခေါင်းစဉ်ဘေးရှိ အကွက်တွင် အမှန်ခြစ်ပြီး \"{{int:Watchlistedit-normal-submit}}\" ကိုနှိပ်ပါ။\n[[Special:EditWatchlist/raw|စောင့်ကြည့်စာရင်း အကြမ်း]]ကိုလည်း ကြည့်နိုင်ပါသည်။", "watchlistedit-normal-submit": "ခေါင်းစဉ်များကို ဖယ်ရှားရန်", + "watchlistedit-normal-done": "{{PLURAL:$1|ခေါင်းစဉ်တစ်ခု|ခေါင်းစဉ် $1 ခုတို့}}ကို သင်၏ စောင့်ကြည့်စာရင်းမှ ဖယ်ရှားပြီးပြီ:", "watchlistedit-raw-titles": "ခေါင်းစဉ်များ -", "watchlisttools-view": "ကိုက်ညီသော အပြောင်းအလဲများကို ကြည့်ရန်", "watchlisttools-edit": "စောင့်ကြည့်စာရင်းများကို ကြည့်ပြီး တည်းဖြတ်ပါ။", @@ -1574,9 +1594,8 @@ "version-software-product": "ထုတ်ကုန်", "version-software-version": "ဗားရှင်း", "fileduplicatesearch": "နှစ်ခုထပ်နေသောဖိုင်များကို ရှာရန်", - "fileduplicatesearch-legend": "နှစ်ခုထပ်နေသည်ကို ရှာရန်", "fileduplicatesearch-filename": "ဖိုင်အမည် -", - "fileduplicatesearch-submit": "ရှာ​ဖွေ​ရန်​", + "fileduplicatesearch-submit": "ရှာဖွေရန်", "specialpages": "အ​ထူး ​စာ​မျက်​နှာ​များ", "specialpages-group-maintenance": "ထိန်းသိမ်းမှု အစီရင်ခံချက်များ", "specialpages-group-other": "အခြားအထူးစာမျက်နှာများ", @@ -1611,12 +1630,15 @@ "htmlform-reset": "ပြောင်းလဲထားသည်များ မလုပ်တော့ရန်", "htmlform-selectorother-other": "အခြား", "logentry-delete-delete": "$3 စာမျက်နှာကို $1 က {{GENDER:$2|ဖျက်ပစ်ခဲ့သည်}}", + "logentry-delete-revision": "$3 စာမျက်နှာပေါ်ရှိ {{PLURAL:$5|တည်းဖြတ်မူတစ်ခု|တည်းဖြတ်မူ $5 ခု}}၏ အမြင်ပုံစံကို $1 က {{GENDER:$2|ပြောင်းလဲခဲ့သည်}}: $4", + "revdelete-content-hid": "အကြောင်းအရာ ဝှက်ခြင်း", "revdelete-restricted": "အက်ဒမင်များသို့ ကန့်သတ်ချက်များ သက်ရောက်ရန်", "revdelete-unrestricted": "အက်ဒမင်များအတွက် ကန့်သတ်ချက်များကို ဖယ်ရှားရန်", "logentry-move-move": "$3 စာမျက်နှာကို $4 သို့ $1က {{GENDER:$2|ရွှေ့ခဲ့သည်}}", "logentry-move-move-noredirect": "$3 မှ $4 သို့ စာမျက်နှာကို ပြန်ညွှန်းချန်မထားပဲ $1 {{GENDER:$2|က ရွှေ့ခဲ့သည်}}", "logentry-newusers-create": "အသုံးပြုသူအကောင့် $1 ကို {{GENDER:$2|ဖန်တီးခဲ့သည်}}", "logentry-upload-upload": "$1 သည် $3 ကို {{GENDER:$2|upload တင်ခဲ့သည်}}", + "logentry-upload-overwrite": "$3 ၏ ဗားရှင်းအသစ်ကို $1 {{GENDER:$2|upload တင်ခဲ့သည်}}", "rightsnone": "(ဘာမှမရှိ)", "revdelete-summary": "အကျဉ်းချုပ်ကို တည်းဖြတ်ရန်", "searchsuggest-search": "ရှာဖွေရန်", diff --git a/languages/i18n/myv.json b/languages/i18n/myv.json index a1a9bb125d..9f40bf462e 100644 --- a/languages/i18n/myv.json +++ b/languages/i18n/myv.json @@ -1006,8 +1006,6 @@ "allpages-bad-ns": "{{SITENAME}} сайтсэнть арась лем потмо \"$1\".", "categories": "Категорият", "categoriespagetext": "{{PLURAL:$1|Те категориясонть|Неть категориятнесэ}} улить лопат эли медият.\n[[Special:UnusedCategories|тевс апак нолда категориятне]] тесэ а невтевить.\nИстяжо ванытя [[Special:WantedCategories|вешема категориятнень]].", - "special-categories-sort-count": "аравтомс цётонь коряс", - "special-categories-sort-abc": "аравтомс альфавитэнь коряс", "sp-deletedcontributions-contribs": "путовксонзо", "linksearch": "Ушо ёндонь сюлмавомапенень вешнема", "linksearch-pat": "Вешнемкс парцун:", @@ -1412,8 +1410,8 @@ "exif-artist": "Теицязо", "exif-copyright": "Копия теемань видечинь кирдицясь", "exif-colorspace": "Тюс ютко", - "exif-pixelydimension": "Артовксонть келезэ", - "exif-pixelxdimension": "Артовксонть сэрезэ", + "exif-pixelxdimension": "Артовксонть келезэ", + "exif-pixelydimension": "Артовксонть сэрезэ", "exif-usercomment": "Теицянь мельть-арьсемат", "exif-exposuretime": "Валдомтомань (Экспозициянь) шка", "exif-fnumber": "Диафрагмань числась", @@ -1583,7 +1581,6 @@ "version-software-product": "Шкавкс-нолдавкс", "version-software-version": "Верзия", "fileduplicatesearch": "Вешнемс кавтаське файлат", - "fileduplicatesearch-legend": "Вешнемс кавтаське", "fileduplicatesearch-filename": "Файла лем:", "fileduplicatesearch-submit": "Вешнемс", "specialpages": "Башка тевень лопат", diff --git a/languages/i18n/nan.json b/languages/i18n/nan.json index 69be88a6e4..01c2df0d85 100644 --- a/languages/i18n/nan.json +++ b/languages/i18n/nan.json @@ -14,6 +14,7 @@ "tog-hideminor": "Am chòe-kīn ê sió kái-piàn", "tog-hidepatrolled": "Am chòe-kīn sûn koè--ê kái-piàn", "tog-newpageshidepatrolled": "Sin-ia̍h ê chheng-toaⁿ am sûn koè--ê", + "tog-hidecategorization": "Kā ia̍h ê lūi-pia̍t chhàng--khì-lâi", "tog-extendwatchlist": "thián-khui kàm-sī-toaⁿ, khoàⁿ choân-pō͘ kái ê, m̄-nā choè-kīn niā.", "tog-usenewrc": "共文章最近有改的佮監視列表囥做伙", "tog-numberheadings": "Phiau-tê chū-tōng pian-hō", @@ -34,7 +35,7 @@ "tog-shownumberswatching": "Hián-sī tng leh khoàⁿ ê iōng-chiá sò͘-bo̍k", "tog-oldsig": "Chit-má ê chhiam-miâ:", "tog-fancysig": "共我的簽名當做文章文字,(無需要自動連結)", - "tog-uselivepreview": "Ēng sui khoàⁿ-māi (chhì-giām--ê)", + "tog-uselivepreview": "Ēng sui khoàⁿ-māi", "tog-forceeditsummary": "Pian-chi̍p khài-iàu bô thiⁿ ê sî-chūn, kā goá thê-chhéⁿ", "tog-watchlisthideown": "Kàm-sī-toaⁿ bián hián-sī goá ê pian-chi̍p", "tog-watchlisthidebots": "Kàm-sī-toaⁿ bián hián-sī ki-khì pian-chi̍p", @@ -42,6 +43,7 @@ "tog-watchlisthideliu": "Kàm-sī-toaⁿ bián hián-sī iōng-chiá ū teng-ji̍p ê pian-chi̍p", "tog-watchlisthideanons": "Kàm-sī-toaⁿ bián hián-sī bû-bêng-sī ê pian-chi̍p", "tog-watchlisthidepatrolled": "Kàm-sī-toaⁿ bián hián-sī khoàⁿ-koè--ê pian-chi̍p", + "tog-watchlisthidecategorization": "Kā ia̍h ê lūi-pia̍t chhàng--khì-lâi", "tog-ccmeonemails": "Kià hō͘ pa̍t-lâng ê email sūn-soà kià copy hō͘ goá", "tog-diffonly": "Diff ē-pêng bián hián-sī ia̍h ê loē-iông", "tog-showhiddencats": "Hián-sī chhàng khí--lâi ê lūi-pia̍t", @@ -118,6 +120,8 @@ "october-date": "10月$1", "november-date": "11月$1", "december-date": "12月$1", + "period-am": "AM", + "period-pm": "PM", "pagecategories": "{{PLURAL:$1|Lūi-pia̍t|Lūi-pia̍t}}", "category_header": "Tī \"$1\" chit ê lūi-pia̍t ê bûn-chiuⁿ", "subcategories": "Ē-lūi-pia̍t", @@ -143,7 +147,7 @@ "morenotlisted": "這毋是完整的表", "mypage": "Ia̍h", "mytalk": "Thó-lūn", - "anontalk": "Chit ê IP ê thó-lūn-ia̍h", + "anontalk": "Thó-lūn", "navigation": "Se̍h chām", "and": " kap", "qbfind": "Chhōe", @@ -222,6 +226,7 @@ "pool-queuefull": "Tūi-lia̍t pâi moá ah", "pool-errorunknown": "M̄-chai siáⁿ chhò-gō͘", "pool-servererror": "無提供系統服務總數的統計。", + "poolcounter-usage-error": "Ēng-hoat chhò-gō͘: $1", "aboutsite": "Koan-hē {{SITENAME}}", "aboutpage": "Project:Koan-hē", "copyright": "Tû liáu ū lēng-goā kóng, nā bô loē-iông sī chiàu $1 tiâu-kiāⁿ tō thang sú-iōng.", @@ -464,6 +469,10 @@ "changeemail": "Kái tiān-chú-phoe ê tē-chí", "changeemail-oldemail": "Chit-má ê E-mail tē-chí:", "changeemail-newemail": "Sin E-mail ê chū-chí:", + "changeemail-password": "Lí-ê {{SITENAME}} bi̍t-bé:", + "changeemail-submit": "Kái-piàn tiān-chu-phoe", + "changeemail-throttled": "Lí chi̍t-ê-á teng-ji̍p liáu siuⁿ chē kái.\nChiáⁿ tan-thāi $1 kòe-āu chài chhì chi̍t pái.", + "changeemail-nochange": "Chhiáⁿ su-ji̍p chi̍t-ê bô-kâng ê sin tiān-chú-phoe chū-chí.", "bold_sample": "Chho·-thé bûn-jī", "bold_tip": "Chho·-thé jī", "italic_sample": "Chhú-thé ê bûn-jī", @@ -530,6 +539,11 @@ "recreate-moveddeleted-warn": "'''Sè-jī: Lí taⁿ chún-pī beh khui ê ia̍h, chêng bat hō͘ lâng thâi tiāu koè.''' Lí tio̍h chim-chiok soà-chiap pian-chi̍p chit ia̍h ê pit-iàu-sèng. Chia ū chit ia̍h ê san-tû kì-lo̍k (deletion log) hō͘ lí chham-khó:", "edit-conflict": "Siu-kái sio-chhiong", "defaultmessagetext": "Siat piān ê bûn-jī", + "content-model-wikitext": "wikitext", + "content-model-text": "sûn bûn-pún", + "content-model-javascript": "JavaScript", + "content-json-empty-object": "Khang bu̍t-kiāⁿ", + "content-json-empty-array": "Khang tīn-lia̍t", "post-expand-template-inclusion-warning": "'''Kéng-pò:'''Pau ji̍t lâi ê pán-bôo sioⁿ koè tsē ia̍h tuā.\nŪ chi̍t-koá-á ē bô pau ji̍t lâi.", "undo-success": "Pian-chi̍p í-keng chhú-siau. Chhiáⁿ khak-tēng, liáu-āu kā ē-kha ho̍k-goân ê kái-piàn pó-chûn--khí-lâi.", "undo-failure": "Pian-chi̍p bē-tàng chhú-siau, in-ūi chhiong tio̍h kî-kan chhah-ji̍p ê pian-chi̍p.", @@ -576,7 +590,7 @@ "searchprofile-everything-tooltip": "Chhoē choân-pō͘ (pau-koat thó-lūn-ia̍h)", "searchprofile-advanced-tooltip": "佇你家己設的名空間內底揣", "search-result-size": "$1 ({{PLURAL:$2|1 jī-goân|$2 jī-goân}})", - "search-redirect": "(轉去 $1)", + "search-redirect": "($1 轉)", "search-section": "(toān-lo̍h $1)", "searchall": "choân-pō·", "showingresults": "Ē-kha tùi #$2 khai-sí hián-sī $1 hāng kiat-kó.", @@ -606,9 +620,28 @@ "localtime": "Chāi-tē sî-kan sī", "servertime": "Server sî-kan hiān-chāi sī", "guesstimezone": "Tùi liû-lám-khì chhau--lâi", + "timezoneregion-africa": "Hui-chiu", + "timezoneregion-america": "Bí-chiu", + "timezoneregion-antarctica": "Lâm-ke̍k-chiu", + "timezoneregion-arctic": "Pak-ke̍k", + "timezoneregion-asia": "A-chiu", + "timezoneregion-atlantic": "Tāi-se-iûⁿ", + "timezoneregion-australia": "Australia", + "timezoneregion-europe": "Au-chiu", + "timezoneregion-indian": "Ìn-tō͘-iûⁿ", + "timezoneregion-pacific": "Thài-pêng-iûⁿ", "allowemail": "Ún-chún pa̍t-ê iōng-chiá kià email kòe-lâi", + "prefs-searchoptions": "Cha-sûn", + "prefs-namespaces": "Miâ-khong-kan", + "default": "kì-tēng", "prefs-files": "Tóng-àn", + "prefs-custom-css": "Chū-siat CSS", + "prefs-custom-js": "Chū-siat JavaScript", + "prefs-common-css-js": "Só͘-ū gōa-phôe kong-ke ê CSS/JavaScript", + "prefs-reset-intro": "Lí ē-sài ēng pún ia̍h lâi chiong lí ê siat-tì têng-siat chò pún chām kì-tēng.\nChe bē hoat-tō͘ ho̍k-goân.", + "prefs-emailconfirm-label": "Tiān-chú-phoe khak-tēng:", "youremail": "Lí ê email:", + "username": "{{GENDER:$1|Ēng-chiá-miâ-hō}}:", "yourrealname": "Lí ê chin miâ:", "yourlanguage": "Kài-bīn gú-giân:", "yournick": "Lí ê sió-miâ (chhiam-miâ iōng):", @@ -622,7 +655,12 @@ "group-bureaucrat-member": "{{GENDER:$1|Koaⁿ-liâu}}", "grouppage-sysop": "{{ns:project}}:Hêng-chèng jîn-oân", "grouppage-bureaucrat": "{{ns:project}}:Koaⁿ-liâu", + "right-move-categorypages": "Sóa tōng ia̍h-bīn lūi-lia̍t", + "right-movefile": "Sóa tóng-àn", + "right-upload": "Kā tóng-àn chiūⁿ-bāng", + "right-upload_by_url": "Tùi 1-ê URL thoân thóng-àn", "right-writeapi": "用API寫", + "right-delete": "Thâi ia̍h", "newuserlogpage": "khui kháu-chō ji̍t-chì", "rightslogtext": "Chit-ê log lia̍t-chhut kái-piàn iōng-chiá koân-lī ê tōng-chok.", "action-edit": "Siu-kái chit ia̍h", @@ -724,14 +762,19 @@ "doubleredirects": "Siang-thâu choán-ia̍h", "brokenredirects": "Choán-ia̍h kò·-chiòng", "brokenredirectstext": "Í-hā ê choán-ia̍h liân kàu bô chûn-chāi ê ia̍h:", + "brokenredirects-edit": "siu-kái", + "brokenredirects-delete": "thâi", "withoutinterwiki": "Bô gí-giân liân-kiat ê ia̍h", "withoutinterwiki-summary": "Ē-kha ê ia̍h bô kî-thaⁿ gí-giân pán-pún ê liân-kiat:", + "withoutinterwiki-legend": "Jī-thâu", + "withoutinterwiki-submit": "Hían-sī", "fewestrevisions": "Siōng bô siu-tēng ê bûn-chiuⁿ", "nbytes": "$1 {{PLURAL:$1|jī-goân|jī-goân}}", "ncategories": "$1 {{PLURAL:$1|ê lūi-pia̍t |ê lūi-pia̍t}}", - "nlinks": "$1 ê liân-kiat", + "nlinks": "$1 ê {{PLURAL:$1|liân-kiat}}", "nmembers": "$1{{PLURAL:$1|ê sêng-oân}}", - "nrevisions": "$1 ê siu-tēng-pún", + "nmemberschanged": "$1 → $2 ê {{PLURAL:$2|sêng-oân}}", + "nrevisions": "$1 ê {{PLURAL:$1|siu-tēng-pún}}", "lonelypages": "Ko·-ia̍h", "uncategorizedpages": "Bô lūi-pia̍t ê ia̍h", "uncategorizedcategories": "Bô lūi-pia̍t ê lūi-pia̍t", @@ -752,6 +795,7 @@ "deadendpages": "Khu̍t-thâu-ia̍h", "deadendpagestext": "Ē-kha ê ia̍h bô liân kàu wiki lāi-té ê kî-thaⁿ ia̍h.", "protectedpages": "Siū pó-hō͘ ê ia̍h", + "protectedpages-page": "Ia̍h", "listusers": "Iōng-chiá lia̍t-toaⁿ", "newpages": "Sin ia̍h", "newpages-username": "Iōng-chiá miâ-chheng:", @@ -895,9 +939,11 @@ "move-watch": "Kàm-sī chit ia̍h", "movepagebtn": "Sóa ia̍h", "pagemovedsub": "Sóa-ūi sêng-kong", + "movepage-moved": "\"$1\" í-keng hong sóa khì \"$2\"", "articleexists": "Kāng miâ ê ia̍h í-keng tī leh, a̍h-sī lí kéng ê miâ bô-hāu. Chhiáⁿ kéng pa̍t ê miâ.", "movetalk": "Sūn-sòa sóa thó-lūn-ia̍h", "movepage-page-moved": "$1 í-keng sóa khì tī $2.", + "movepage-page-unmoved": "$1 chit ia̍h hô hoat-tō͘ sóa khì $2.", "movelogpagetext": "Ē-kha lia̍t-chhut hông soá-ūi ê ia̍h.", "movereason": "Lí-iû:", "revertmove": "hôe-tńg", diff --git a/languages/i18n/nap.json b/languages/i18n/nap.json index d1b54bd27d..c0886a660a 100644 --- a/languages/i18n/nap.json +++ b/languages/i18n/nap.json @@ -12,7 +12,8 @@ "아라", "Candalua", "Macofe", - "V6rg" + "V6rg", + "Nemo bis" ] }, "tog-underline": "Sottolinia 'e jonte:", @@ -153,7 +154,6 @@ "moredotdotdot": "Cchiù...", "morenotlisted": "Chisto elenco nun è cumpreto.", "mypage": "Paggena", - "anonuserpage": "Utente scanusciuto", "mytalk": "'E chiàcchieriate mmie", "anontalk": "Chiacchierate", "navigation": "Navigazzione", @@ -471,7 +471,7 @@ "noemail": "Nun ce sta indirizzo e-mail pe' l'utente \"$1\".", "noemailcreate": "S'add'appruviggiunà n'indirizzo e-mail buono.", "passwordsent": "Na password nova è stata inviata a l'innerizzo e-mail riggistrato 'a ll'utente \"$1\".\nPe' piacere, trasite appena avite ricevuta sta password.", - "blocked-mailpassword": "Ll'IP tuoja è bloccata pe' scrivere, picciò nun se ponno usà 'e ffunzione pe te mannà na password nova.", + "blocked-mailpassword": "Ll'IP toja è bloccata pe' scrivere. Pe' ce sparagnà n'abbuso, nun se ponn'ausà 'e ffunzione pe ve mannà na password nova 'a st'indirizzo IP.", "eauthentsent": "Na mmasciata 'e conferma t'è stata mannata a l'indirizzo e-mail nzignàto.\nApprimm' 'e te mannà n'atu mail, hè 'a stà 'a ffà 'e struzione dint'a l'e-mail, pe' cunfermà ca 'o cunto fosse d' 'o tujo overo.", "throttled-mailpassword": "S'è mannata na mail pe te' riabbià 'a password 'a meno 'e {{PLURAL:$1|n'ora|$1 ore}}.\nPe' ce sparagnà abbuse, 'a funzione 'e riabbiamento d' 'a password se può usa sulamente na vota ogne {{PLURAL:$1|ora|$1 ore}}.", "mailerror": "Errore pe' tramente ca se mannava na mmasciata: $1", @@ -1309,9 +1309,9 @@ "recentchangeslinked-page": "Nomme d' 'a paggena", "recentchangeslinked-to": "Mmusta sulamente 'e cagnamiente a 'e paggene cullegate a chilla specificata", "recentchanges-page-added-to-category": "[[:$1]] azzeccato â categurìa", - "recentchanges-page-added-to-category-bundled": "[[:$1]] e {{PLURAL:$2|na paggena|$2 paggene}} azzeccate â categurìa", + "recentchanges-page-added-to-category-bundled": "[[:$1]] e [[Special:WhatLinksHere/$1|{{PLURAL:$2|na paggena|$2 paggene}}]] azzeccate â categurìa", "recentchanges-page-removed-from-category": "[[:$1]] luvato d' 'a categurìa", - "recentchanges-page-removed-from-category-bundled": "[[:$1]] e {{PLURAL:$2|na paggena|$2 paggena}} luvate d' 'a categurìa", + "recentchanges-page-removed-from-category-bundled": "[[:$1]] e [[Special:WhatLinksHere/$1|{{PLURAL:$2|na paggena|$2 paggena}}]] luvate d' 'a categurìa", "autochange-username": "Cagnamiento automateco MediaWiki", "upload": "Carreca file", "uploadbtn": "Carreca file", @@ -1490,6 +1490,7 @@ "uploadstash-badtoken": "L'esecuzione 'e sta azione scassaje.\nForse pecché 'e credenziale 'e cagnamiento so' mmaturate.\nPruvate n'ata vota.", "uploadstash-errclear": "'A pulezzia d' 'e file scassaje.", "uploadstash-refresh": "Agghiuorna l'elenco d' 'e file", + "uploadstash-thumbnail": "vide miniatura", "invalid-chunk-offset": "Distanza d' 'a parte nun valida", "img-auth-accessdenied": "Acciesso negato", "img-auth-nopathinfo": "PATH_INFO mancante.\n'O server nun è mpustato pe' passà sta nfurmazione.\nPuò darse ca, essenno basato ncopp'a CGI, nun putesse suppurtà img_auth.\nVide https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Image_Authorization", @@ -1808,8 +1809,6 @@ "categories-submit": "Faje vedé", "categoriespagetext": "{{PLURAL:$1|'A categurìa 'nnecata 'e seguito cuntiene|'E categurìe 'nnecate 'e seguito cuntengono}} paggene o file multimediale.\n'E [[Special:UnusedCategories|categurìe vuote]] nun song mostrate ccà.\nVere anche 'e [[Special:WantedCategories|categurìe richieste]].", "categoriesfrom": "Fà vedè 'e categurìe partenno 'a:", - "special-categories-sort-count": "arricetta pe' cunteggio", - "special-categories-sort-abc": "arricetta arfabbeticamente", "deletedcontributions": "Contribbute utente scancellate", "deletedcontributions-title": "Contribbute utente scancellate", "sp-deletedcontributions-contribs": "contribbute", @@ -2185,6 +2184,7 @@ "ipb-unblock": "Sblocca nomme utente o indirizzo IP", "ipb-blocklist": "Fà vedé 'e blocche ch'esisteno", "ipb-blocklist-contribs": "Contribbute 'e {{GENDER:$1|$1}}", + "ipb-blocklist-duration-left": "$1 rummase", "unblockip": "Sblocca utente", "unblockiptext": "Ausa 'o modulo ccà abbascio p'arrepiglià 'e deritte 'e scrittura a l'indirizze IP o cunte utente ca primma so state bluccate.", "ipusubmit": "Lèva stu blocco", @@ -2426,11 +2426,7 @@ "import-logentry-upload-detail": "$1 {{PLURAL:$1|verzione|verziune}} mpurtate", "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|verzione|verziune}} mpurtate 'a $2", "javascripttest": "Test JavaScript", - "javascripttest-pagetext-noframework": "Sta paggena è riservata pe' l'esecuziune d' 'e test 'e Javascript.", - "javascripttest-pagetext-unknownframework": "Ambiente 'e test scanusciuto \"$1\".", "javascripttest-pagetext-unknownaction": "Azione scanusciuta \"$1\".", - "javascripttest-pagetext-frameworks": "Pe' piacere sciglite uno 'e ll'ambiente 'e test ccà abbascio: $1", - "javascripttest-pagetext-skins": "Sciglite nu skin pe' ne fà 'e test:", "javascripttest-qunit-intro": "Vedite 'a [$1 documentaziona d' 'o test] ncopp'a mediawiki.org.", "tooltip-pt-userpage": "'A paggena {{GENDER:|utente}} vòsta", "tooltip-pt-anonuserpage": "'A paggena utente pe l'IP ca vuje state cagnanno cumme", @@ -2684,8 +2680,8 @@ "exif-colorspace": "Spazio d' 'e culore", "exif-componentsconfiguration": "Significato d'ogne componente", "exif-compressedbitsperpixel": "Modo 'e compressione 'e l'immaggene", - "exif-pixelydimension": "Larghezza 'e l'immaggene", - "exif-pixelxdimension": "Autezza 'e l'immaggene", + "exif-pixelxdimension": "Larghezza 'e l'immaggene", + "exif-pixelydimension": "Autezza 'e l'immaggene", "exif-usercomment": "Note 'e ll'utente", "exif-relatedsoundfile": "File audio cullegato", "exif-datetimeoriginal": "Data e ora d' 'a criazione d' 'e date", @@ -3126,7 +3122,6 @@ "version-libraries-description": "Descrizzione", "version-libraries-authors": "Auture", "redirect": "Rediretto 'a nu file, n'utente, na paggena, na verziona o nu riggistro ID", - "redirect-legend": "Rediretto ca spuntasse a nu file o na paggena", "redirect-summary": "Sta pàggena speciale redireziona a nu file (dato 'o nomme d' 'o file), na pàggene (dato n'ID 'e verziona), o 'na pàggene utente (dato n'ID nummereca 'e l'utende), o na trasuta a 'o riggistro (dato 'o riggistro ID). Ause: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/revision/328429]], o [[{{#Special:Redirect}}/user/101]], o [[{{#Special:Redirect}}/logid/186]].", "redirect-submit": "Vaje", "redirect-lookup": "Ascìa:", @@ -3139,7 +3134,6 @@ "redirect-not-exists": "Valore nun accucchiato", "fileduplicatesearch": "Ascìa 'e file duprecate", "fileduplicatesearch-summary": "Circa pe' file duprecate cu bbase 'o valore hash.", - "fileduplicatesearch-legend": "Circa pe' nu duprecato", "fileduplicatesearch-filename": "Nomme d' 'o file", "fileduplicatesearch-submit": "Truova", "fileduplicatesearch-info": "$1 × $2 pixel, dimenzione d' 'o file: $3
tipo MIME: $4", @@ -3340,7 +3334,7 @@ "logentry-protect-protect-cascade": "$1 {{GENDER:$2|pruteggette}} $3 $4 [cascading]", "logentry-protect-modify": "$1 {{GENDER:$2|cagnaje}} 'o livello 'e prutezione pe' $3 $4", "logentry-protect-modify-cascade": "$1 {{GENDER:$2|cagnaje}} 'o livello 'e prutezione pe' $3 $4 [cascading]", - "logentry-rights-rights": "$1 {{GENDER:$2|cagnaje}} 'e gruppo pe' $3 'a $4 a $5", + "logentry-rights-rights": "$1 {{GENDER:$2|cagnaje}} 'e gruppo pe' {{GENDER:$3|$3}} 'a $4 a $5", "logentry-rights-rights-legacy": "$1 {{GENDER:$2|cagnaje}} 'e gruppo pe' $3", "logentry-rights-autopromote": "$1 è {{GENDER:$2|stato promosso|stata promossa}} automatecamente 'a $4 a $5", "logentry-upload-upload": "$1 {{GENDER:$2|ave carrecato}} $3", @@ -3433,6 +3427,7 @@ "api-error-unknownerror": "Errore scanusciuto: \"$1\"", "api-error-uploaddisabled": "'E carreche so' stutate dint'a sta siki.", "api-error-verification-error": "Stu file putesse stà nguacchiato, o tene n'estensione sbagliata.", + "api-error-was-deleted": "Nu file cu stu nomme s'è carrecato primma e po' s'è scancellaje.", "duration-seconds": "$1 {{PLURAL:$1|secondo|seconde}}", "duration-minutes": "$1 {{PLURAL:$1|minuto|minute}}", "duration-hours": "$1 {{PLURAL:$1|ora|ore}}", @@ -3523,6 +3518,7 @@ "special-characters-group-ipa": "IPA", "special-characters-group-symbols": "Simmule", "special-characters-group-greek": "Grieco", + "special-characters-group-greekextended": "Grieco spannuto", "special-characters-group-cyrillic": "Cirillico", "special-characters-group-arabic": "Arabo", "special-characters-group-arabicextended": "Arabo spannuto", @@ -3548,5 +3544,25 @@ "sessionprovider-generic": "$1 sessiune", "sessionprovider-mediawiki-session-cookiesessionprovider": "sessiune basate ncopp' 'e cookie", "sessionprovider-nocookies": "'E cookie ponno stà stutate. Vedite si 'e cookie stann'appicciate e accumminciate n'ata vota.", - "randomrootpage": "Paggena 'e rareca a ccaso" + "randomrootpage": "Paggena 'e rareca a ccaso", + "log-action-filter-block": "Tipo 'e blocco:", + "log-action-filter-delete": "Tipo 'e scancellazione:", + "log-action-filter-patrol": "Tipo 'e verifica:", + "log-action-filter-protect": "Tipo 'e protezione:", + "log-action-filter-upload": "Tipo 'e carreca:", + "log-action-filter-all": "Tutte", + "log-action-filter-block-block": "Blocco", + "log-action-filter-block-reblock": "Modifica blocco", + "log-action-filter-block-unblock": "Sblocca", + "log-action-filter-delete-delete": "Scancellazione 'e paggena", + "log-action-filter-delete-restore": "Arrepigliament' 'e paggena", + "log-action-filter-delete-event": "Scancellazione d' 'o reggistro", + "log-action-filter-delete-revision": "Scancellazione d' 'a verziona", + "log-action-filter-patrol-patrol": "Verifica manuale", + "log-action-filter-patrol-autopatrol": "Verifica automatica", + "log-action-filter-protect-protect": "Prutezione", + "log-action-filter-protect-modify": "Cagna prutezione", + "log-action-filter-protect-unprotect": "Sprutezione", + "log-action-filter-upload-upload": "Carreca nova", + "log-action-filter-upload-overwrite": "Recarreca" } diff --git a/languages/i18n/nb.json b/languages/i18n/nb.json index 4bdecee698..d3ec6498e3 100644 --- a/languages/i18n/nb.json +++ b/languages/i18n/nb.json @@ -47,7 +47,8 @@ "Kingu", "Tarjeimo", "Matma Rex", - "SuperPotato" + "SuperPotato", + "Nemo bis" ] }, "tog-underline": "Strek under lenker:", @@ -1346,7 +1347,7 @@ "recentchangeslinked-page": "Sidenavn:", "recentchangeslinked-to": "Vis endringer på sider som lenker til den gitte siden istedet", "recentchanges-page-added-to-category": "[[:$1]] lagt til kategori", - "recentchanges-page-added-to-category-bundled": "[[:$1]] og {{PLURAL:$2|én side|$2 sider}} lagt til kategori", + "recentchanges-page-added-to-category-bundled": "[[:$1]] og [[Special:WhatLinksHere/$1|{{PLURAL:$2|én side|$2 sider}}]] lagt til kategori", "recentchanges-page-removed-from-category": "[[:$1]] fjernet fra kategori", "recentchanges-page-removed-from-category-bundled": "[[:$1]] og {{PLURAL:$2|én side|$2 sider}} fjernet fra kategori", "autochange-username": "Automatisk MediaWiki-endring", @@ -1810,8 +1811,6 @@ "categories-submit": "Vis", "categoriespagetext": "Følgende {{PLURAL:$1|kategori|kategorier}} inneholder sider eller media.\n[[Special:UnusedCategories|Ubrukte kategorier]] vises ikke her.\nSe også [[Special:WantedCategories|ønskede kategorier]].", "categoriesfrom": "Vis kategorier fra og med:", - "special-categories-sort-count": "soter etter antall", - "special-categories-sort-abc": "sorter alfabetisk", "deletedcontributions": "Slettede brukerbidrag", "deletedcontributions-title": "Slettede brukerbidrag", "sp-deletedcontributions-contribs": "bidrag", @@ -2423,11 +2422,7 @@ "import-logentry-upload-detail": "{{PLURAL:$1|Én revisjon|$1 revisjoner}} er importert", "import-logentry-interwiki-detail": "{{PLURAL:$1|Én revisjon|$1 revisjoner}} er importert fra $2", "javascripttest": "JavaScript-testing", - "javascripttest-pagetext-noframework": "Denne siden er reservert for å kjøre JavaScript-tester.", - "javascripttest-pagetext-unknownframework": "Ukjent testerammeverk \"$1\".", "javascripttest-pagetext-unknownaction": "Ukjent handling «$1».", - "javascripttest-pagetext-frameworks": "Vennligst velg en av følgende testerammeverk: $1", - "javascripttest-pagetext-skins": "Velg et utseende for testene:", "javascripttest-qunit-intro": "Se [$1 testedokumentasjonen] på mediawiki.org.", "tooltip-pt-userpage": "{{GENDER:|Din brukerside}}", "tooltip-pt-anonuserpage": "Brukersiden for IP-adressen du redigerer fra", @@ -2683,8 +2678,8 @@ "exif-colorspace": "Fargerom", "exif-componentsconfiguration": "Betydning av hver komponent", "exif-compressedbitsperpixel": "Bildekompresjonsmodus", - "exif-pixelydimension": "Bildebredde", - "exif-pixelxdimension": "Bildehøyde", + "exif-pixelxdimension": "Bildebredde", + "exif-pixelydimension": "Bildehøyde", "exif-usercomment": "Brukerkommentarer", "exif-relatedsoundfile": "Relatert lydfil", "exif-datetimeoriginal": "Dato og tid for datagenerering", @@ -3152,7 +3147,6 @@ "version-libraries-description": "Beskrivelse", "version-libraries-authors": "Forfattere", "redirect": "Omdiriger via filnavn, bruker eller versjonsid", - "redirect-legend": "Omdiriger til en fil eller side", "redirect-summary": "Denne spesialsiden omdirigerer til en fil (hvis et filnavn angis), en side (hvis et redigeringsnummer angis) eller en brukerside (hvis en numerisk brukeridentifikator angis).\nEksempler:[[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/revision/328429]], or [[{{#Special:Redirect}}/user/101]].", "redirect-submit": "Gå", "redirect-lookup": "Oppslag:", @@ -3164,7 +3158,6 @@ "redirect-not-exists": "Verdi er ikke funnet", "fileduplicatesearch": "Søk etter duplikatfiler", "fileduplicatesearch-summary": "Søk etter duplikatfiler basert på dets hash-verdi.", - "fileduplicatesearch-legend": "Søk etter en duplikatfil", "fileduplicatesearch-filename": "Filnavn:", "fileduplicatesearch-submit": "Søk", "fileduplicatesearch-info": "$1 × $2 piksler
Filstørrelse: $3
MIME-type: $4", diff --git a/languages/i18n/nds-nl.json b/languages/i18n/nds-nl.json index e122c0e958..754f6da6c9 100644 --- a/languages/i18n/nds-nl.json +++ b/languages/i18n/nds-nl.json @@ -299,6 +299,7 @@ "nstab-template": "Mal", "nstab-help": "Hulpe", "nstab-category": "Kategorie", + "mainpage-nstab": "Veurblad", "nosuchaction": "De op-egeven haandeling besteet niet", "nosuchactiontext": "De opdrachte in t webadres in ongeldig.\nJe hebben t webadres misschien verkeerd in-etikt of de verkeerde verwiezing evolgd.\nDit kan oek dujen op n fout in de programmatuur van {{SITENAME}}.", "nosuchspecialpage": "Der besteet gien spesiale zied mit disse naam", @@ -573,7 +574,7 @@ "newarticle": "(Niej)", "newarticletext": "Disse zied besteet nog niet.\nIn t veld hieronder ku'j wat schrieven um disse zied an te maken (meer informasie vie'j op de [$1 hulpzied]).\nA'j hier per ongelok terechtekeumen bin gebruuk dan de knoppe '''veurige''' um weerumme te gaon.", "anontalkpagetext": "---- ''Disse overlegzied heurt bie n anonieme gebruker die nog gien gebrukersnaam hef, of t niet gebruukt. We gebruken daorumme t IP-adres um hum of heur te herkennen, mer t kan oek ween dat meerdere personen t zelfde IP-adres gebruken, en da'j hiermee berichten ontvangen die niet veur joe bedoeld bin. A'j dit veurkoemen willen, dan ku'j t best [[Special:UserLogin/signup|n gebrukersnaam anmaken]] of [[Special:UserLogin|anmelden]].''", - "noarticletext": "Der steet noen gien tekste op disse zied.\nJe kunnen [[Special:Search/{{PAGENAME}}|de titel opzeuken]] in aandere ziejen,\n[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} zeuken in de logboeken],\nof [{{fullurl:{{FULLPAGENAME}}|action=edit}} disse zied bewarken].", + "noarticletext": "Der steet noen gien tekste op disse zied.\nJe kunnen [[Special:Search/{{PAGENAME}}|de titel opzeuken]] in aandere ziejen,\n[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} zeuken in de logboeken],\nof [{{fullurl:{{FULLPAGENAME}}|action=edit}} disse zied anmaken].", "noarticletext-nopermission": "Op disse zied steet gien tekste.\nJe kunnen [[Special:Search/{{PAGENAME}}|zeuken naor disse term]] in aandere ziejen of\n[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} de logboeken deurzeuken], mer je hebben gien rechten um disse zied an te maken.", "missing-revision": "De versie #$1 van de zied \"{{FULLPAGENAME}} besteet niet.\n\nDit kömp meestentieds deur t volgen van n verouwerde verwiezing naor n zied die vortedaon is.\nWaorschienlik ku'j der meer gegevens over vienen in t [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} vortdologboek].", "userpage-userdoesnotexist": "Je bewarken n gebrukerszied van n gebruker die niet besteet (gebruker \"$1\"). Kiek effen nao o'j disse zied wel anmaken/bewarken willen.", @@ -1532,8 +1533,6 @@ "categories": "Kategorieën", "categoriespagetext": "De de volgende {{PLURAL:$1|kategorie steet|kategorieën staon}} ziejen of mediabestaanden.\n[[Special:UnusedCategories|ongebruukten kategorieën]] zie'j hier niet.\nZie oek [[Special:WantedCategories|gewunste kategorieën]].", "categoriesfrom": "Laot kategorieën zien vanaof:", - "special-categories-sort-count": "op antal sorteren", - "special-categories-sort-abc": "alfebeties sorteren", "deletedcontributions": "Vortedaone gebrukersbiedragen", "deletedcontributions-title": "Vortedaone gebrukersbiedragen", "sp-deletedcontributions-contribs": "biedragen", @@ -1781,6 +1780,7 @@ "contributions": "{{GENDER:$1|Biedragen van disse gebruker}}", "contributions-title": "Biedragen van $1", "mycontris": "Mien biedragen", + "anoncontribs": "Biedragen", "contribsub2": "Veur {{GENDER:$3|$1}} ($2)", "nocontribs": "Gien wiezigingen evunnen die an de estelde criteria voldoon.", "uctop": "(leste wieziging)", @@ -2079,23 +2079,19 @@ "import-logentry-upload-detail": "$1 {{PLURAL:$1|versie|versies}}", "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|versie|versies}} van $2", "javascripttest": "JavaScript testen", - "javascripttest-pagetext-noframework": "Disse zied is ereserveerd veur t uutvoeren van JavaScript-testen.", - "javascripttest-pagetext-unknownframework": "Onbekend testraamwark \"$1\".", - "javascripttest-pagetext-frameworks": "Kies een van de volgende testraamwarken: $1", - "javascripttest-pagetext-skins": "Kies n vormgeving um de tests mee uut te voeren:", "javascripttest-qunit-intro": "Zie de [$1 testdokumentasie] op mediawiki.org.", - "tooltip-pt-userpage": "Oew gebroekersziede", + "tooltip-pt-userpage": "{{GENDER:|Oew}} gebroekersziede", "tooltip-pt-anonuserpage": "Gebroekersbladziede vuur t IP-adres da'j broekt", - "tooltip-pt-mytalk": "Oew oaverlegbladziede", + "tooltip-pt-mytalk": "{{GENDER:|Oew}} oaverlegziede", "tooltip-pt-anontalk": "Oaverlegbladziede van n naamlozen gebroeker van dit IP-adres", - "tooltip-pt-preferences": "Miene vuurkeuren", + "tooltip-pt-preferences": "{{GENDER:|Miene}} vuurkeuren", "tooltip-pt-watchlist": "Lieste van zieden die op miene volglieste stoan", - "tooltip-pt-mycontris": "Liest van oew biejdraegen", + "tooltip-pt-mycontris": "Oaverzicht van {{GENDER:|oew}} biejdreagen", "tooltip-pt-login": "Iej wördt van harte oetneugd um oe an te melden as gebroeker, mer t is nich verplicht", "tooltip-pt-logout": "Ofmaelden", "tooltip-pt-createaccount": "Schrief je eigen veural in en meld je an, mer t is niet verplicht.", "tooltip-ca-talk": "Loat n oaverlegtekst oaver disse ziede zeen", - "tooltip-ca-edit": "Bewaerk disse ziede", + "tooltip-ca-edit": "Beweark disse ziede", "tooltip-ca-addsection": "Niej oonderwaerp tovogen", "tooltip-ca-viewsource": "Disse ziede is beveiligd taegen veraanderen. Iej könt wal kieken noar de ziede", "tooltip-ca-history": "Oaldere versies van disse ziede", @@ -2121,7 +2117,7 @@ "tooltip-t-recentchangeslinked": "Pas verrichte veraanderingen die noar disse ziede verwiezen", "tooltip-feed-rss": "RSS-voer vuur disse ziede", "tooltip-feed-atom": "Atom-voer vuur disse ziede", - "tooltip-t-contributions": "Lieste met biejdraegen van disse gebroeker", + "tooltip-t-contributions": "Lieste met biejdreagen van {{GENDER:$1|disse gebroeker}}", "tooltip-t-emailuser": "Stuur disse gebroeker n netpostbericht", "tooltip-t-info": "Meer informasie over disse zied", "tooltip-t-upload": "Laad ofbeeldingen en/of geluudsmateriaal", @@ -2170,7 +2166,7 @@ "spam_reverting": "Bezig mit t weerummezetten naor de leste versie die gien verwiezing hef naor $1", "spam_blanking": "Alle wiezigingen mit n verwiezing naor $1 wörden vortehaold", "spam_deleting": "In alle versies staon verwiezingen naor $1. Zied vortedaon", - "simpleantispam-label": "Antispamkontraole.\nHier '''NIKS''' invullen!", + "simpleantispam-label": "Antispamkontraole.\nHier niks invullen!", "pageinfo-title": "Informasie over \"$1\"", "pageinfo-not-current": "Disse gegevens bin allinnig beschikbaor veur disse versie.", "pageinfo-header-basic": "Baosisinformasie", @@ -2328,8 +2324,8 @@ "exif-colorspace": "Kleurruumte", "exif-componentsconfiguration": "Betekenisse van elk compenent", "exif-compressedbitsperpixel": "Beeldkompressiemethode", - "exif-pixelydimension": "Aofbeeldingsbreedte", - "exif-pixelxdimension": "Aofbeeldingsheugte", + "exif-pixelxdimension": "Aofbeeldingsbreedte", + "exif-pixelydimension": "Aofbeeldingsheugte", "exif-usercomment": "Opmarkingen", "exif-relatedsoundfile": "Biebeheurend geluudsbestaand", "exif-datetimeoriginal": "Tiedstip van datagenerasie", @@ -2742,7 +2738,6 @@ "version-entrypoints-header-entrypoint": "Ingang", "version-entrypoints-header-url": "Webadres", "redirect": "Deurverwiezen op bestaandsnaam, gebrukersnummer, ziednummer of versienummer", - "redirect-legend": "Deurverwiezen naor n bestaand of zied", "redirect-summary": "Disse spesiale zied verwis deur naor n bestaand (as de bestaandsnaam op-egeven wördt), n zied (as n zied- of versienummer op-egeven wördt) of n gebrukerszied (as t gebrukersnummer op-egeven wördt). Gebruuk: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/page/64308]], [[{{#Special:Redirect}}/revision/328429]], of [[{{#Special:Redirect}}/user/101]].", "redirect-submit": "Zeuk", "redirect-lookup": "Opzeuken:", @@ -2753,7 +2748,6 @@ "redirect-not-exists": "Weerde niet evunnen", "fileduplicatesearch": "Dubbele bestaanden zeuken", "fileduplicatesearch-summary": "Dubbele bestaanden zeuken op baosis van de hashweerde.", - "fileduplicatesearch-legend": "Dubbele bestaanden zeuken", "fileduplicatesearch-filename": "Bestaandsnaam:", "fileduplicatesearch-submit": "Zeuken", "fileduplicatesearch-info": "$1 × $2 beeldpunten
Bestaandsgrootte: $3
MIME-type: $4", diff --git a/languages/i18n/nds.json b/languages/i18n/nds.json index f83ab1405d..40f07fd188 100644 --- a/languages/i18n/nds.json +++ b/languages/i18n/nds.json @@ -1186,8 +1186,6 @@ "categories": "Kategorien", "categoriespagetext": "In disse Kategorien staht Sieden oder Mediendatein.\n[[Special:UnusedCategories|Nich bruukte Kategorien]] warrt hier nich wiest.\nKiek ok bi de [[Special:WantedCategories|wünschten Kategorien]].", "categoriesfrom": "Wies Kategorien anfungen mit:", - "special-categories-sort-count": "na Tall sorteren", - "special-categories-sort-abc": "alphabeetsch sorteren", "deletedcontributions": "Wegsmetene Bidrääg vun’n Bruker", "deletedcontributions-title": "Wegsmetene Bidrääg vun’n Bruker", "sp-deletedcontributions-contribs": "Bidrääg", @@ -1813,8 +1811,8 @@ "exif-colorspace": "Farvruum", "exif-componentsconfiguration": "Bedüden vun elk Kumponent", "exif-compressedbitsperpixel": "Komprimeerte Bits je Pixel", - "exif-pixelydimension": "Gellen Bildbreed", - "exif-pixelxdimension": "Gellen Bildhööchd", + "exif-pixelxdimension": "Gellen Bildbreed", + "exif-pixelydimension": "Gellen Bildhööchd", "exif-usercomment": "Brukerkommentar", "exif-relatedsoundfile": "Tohörige Toondatei", "exif-datetimeoriginal": "Tiet vun de Opnahm", @@ -2109,7 +2107,6 @@ "version-entrypoints-header-url": "URL", "fileduplicatesearch": "Söök na Datein, de jüst gliek sünd", "fileduplicatesearch-summary": "Söök na Datein, de na jemehr Hash-Tallen jüst gliek sünd.", - "fileduplicatesearch-legend": "Söök na Datein, de jüst gliek sünd", "fileduplicatesearch-filename": "Dateinaam:", "fileduplicatesearch-submit": "Söken", "fileduplicatesearch-info": "$1 × $2 Pixel
Dateigrött: $3
MIME-Typ: $4", diff --git a/languages/i18n/ne.json b/languages/i18n/ne.json index ac0d25ce61..470c2888c8 100644 --- a/languages/i18n/ne.json +++ b/languages/i18n/ne.json @@ -1681,8 +1681,6 @@ "categories-submit": "देखाउनुहोस्", "categoriespagetext": "निम्नलिखित {{PLURAL:$1|श्रेणी|श्रेणीहरू}}मा पृष्ठ वा मीडिया छन् । जुन [[Special:UnusedCategories|प्रयोग नगरिएका श्रेणीहरू]] यहाँ देखाइएको छैन। [[Special:WantedCategories|चाहिएको श्रेणीहरू]] पनि हेर्नुहोस।", "categoriesfrom": "श्रेणीहरू देखाउन शुरु हुने यहाँ:", - "special-categories-sort-count": "गणना क्रममा राख्नुहोस्", - "special-categories-sort-abc": "वर्णानुक्रम अनुसार मिलाउने", "deletedcontributions": "प्रयोगकर्ताका मेटिएका योगदानहरू", "deletedcontributions-title": "प्रयोगकर्ताका मेटाइएका योगदानहरू", "sp-deletedcontributions-contribs": "योगदानहरू", @@ -2282,11 +2280,7 @@ "import-logentry-upload-detail": "$1 {{PLURAL:$1|संशोधन|संशोधनहरू}} आयात भयो", "import-logentry-interwiki-detail": "$2 देखि $1 {{PLURAL:$1|पुनरावलोकन|पुनरावलोकनहरु}} आयात भयो", "javascripttest": "JavaScript जाँच गरिदै", - "javascripttest-pagetext-noframework": "यो पृष्ठ जाभास्क्रिपट जाँचहरूको लागी जगेडामा राखिएको छ ।", - "javascripttest-pagetext-unknownframework": "अज्ञात जाँच खाँका \"$1\" ।", "javascripttest-pagetext-unknownaction": "अज्ञात कारवाही \"$1\" ।", - "javascripttest-pagetext-frameworks": "कृपया निम्न परीक्षण ढाँचाहरू मध्ये एउटा छान्नुहोस्: $1", - "javascripttest-pagetext-skins": "परीक्षणको लागि खोल छान्नुहोस्:", "javascripttest-qunit-intro": "mediawiki.org मा [$1 जाँचको कागजात] हेर्नुहोस् ।", "tooltip-pt-userpage": "तपाईंको प्रयोगकर्ता पृष्ठ", "tooltip-pt-anonuserpage": "तपाईँ जुन IP ठेगानाको रुपमा सम्पादन गर्दै हुनुहुन्छ , त्यसको प्रयोगकर्ता पृष्ठ निम्न छ :", @@ -2542,8 +2536,8 @@ "exif-colorspace": "वर्ण स्थान", "exif-componentsconfiguration": "प्रत्येक घटकको अर्थ", "exif-compressedbitsperpixel": "चित्र सम्पीडन मोड", - "exif-pixelydimension": "चित्रको चौड़ाई", - "exif-pixelxdimension": "चित्रको उचाई", + "exif-pixelxdimension": "चित्रको चौड़ाई", + "exif-pixelydimension": "चित्रको उचाई", "exif-usercomment": "प्रयोगकर्ताका टिप्पणखरु:", "exif-relatedsoundfile": "सम्बन्धित अडियो फाइल", "exif-datetimeoriginal": "डेटा सञ्चालनको मिति र समय", @@ -3062,7 +3056,6 @@ "version-libraries-description": "वर्णन", "version-libraries-authors": "लेखकहरू", "redirect": "फाइल, प्रयोगकर्ता, वा संशोधन आइडीको आधारमा अनुप्रेषित गर्ने", - "redirect-legend": "फाइल वा पृष्ठमा रिडाइरेक्ट", "redirect-summary": "यस विशेष पृष्ठ (प्रदान गरिएको फाइलनाम), पृष्ठको (पृष्ठ आइडी अथवा अवतरण आइडी), वा (प्रयोगकर्ता आइडी) राख्दा प्रयोगकर्तापृष्ठमा मा सारिनेछ। उदाहरण: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/page/64308]], [[{{#Special:Redirect}}/revision/328429]], वा [[{{#Special:Redirect}}/user/101]]।", "redirect-submit": "जाने", "redirect-lookup": "खोजी:", @@ -3074,7 +3067,6 @@ "redirect-not-exists": "मान पत्ता लागेन", "fileduplicatesearch": "नक्कल फाइल खोज्ने", "fileduplicatesearch-summary": "ह्यास मानको आधारमा दुरुस्त नक्कल फाइहरु खोज्ने ।", - "fileduplicatesearch-legend": " नक्कल खोज्नुहोस्", "fileduplicatesearch-filename": "फाइलनाम:", "fileduplicatesearch-submit": "खोजी गर्नुहोस्", "fileduplicatesearch-info": "$1 × $2 पिक्सेल
फाइल आकार: $3
MIME प्रकार: $4", diff --git a/languages/i18n/new.json b/languages/i18n/new.json index 95b66b25d0..6dccabf006 100644 --- a/languages/i18n/new.json +++ b/languages/i18n/new.json @@ -339,8 +339,8 @@ "exif-software": "छ्यलातःगु सफ्तवेयर", "exif-artist": "च्वमि", "exif-copyright": "लेखाधिकार थुवा", - "exif-pixelydimension": "किपा ब्याः", - "exif-pixelxdimension": "किपा जाः", + "exif-pixelxdimension": "किपा ब्याः", + "exif-pixelydimension": "किपा जाः", "exif-dc-date": "तिथि", "namespacesall": "सकल", "autosumm-new": "न्हुगु पौ: $1", diff --git a/languages/i18n/nl.json b/languages/i18n/nl.json index a3b815b393..4dd5546df0 100644 --- a/languages/i18n/nl.json +++ b/languages/i18n/nl.json @@ -73,7 +73,9 @@ "Matma Rex", "Robin van der Vliet", "Catrope", - "Edoderoo" + "Edoderoo", + "Nemo bis", + "Lemondoge" ] }, "tog-underline": "Koppelingen onderstrepen:", @@ -91,6 +93,7 @@ "tog-watchdefault": "Pagina’s en bestanden die ik bewerk automatisch volgen", "tog-watchmoves": "Pagina’s en bestanden die ik hernoem automatisch volgen", "tog-watchdeletion": "Pagina’s en bestanden die ik verwijder automatisch volgen", + "tog-watchuploads": "Nieuwe bestanden die ik upload toevoegen aan mijn volglijst", "tog-watchrollback": "Pagina's waarop ik heb teruggedraaid automatisch volgen", "tog-minordefault": "Mijn bewerkingen standaard als kleine bewerking markeren", "tog-previewontop": "Voorvertoning boven bewerkingsveld weergeven", @@ -214,7 +217,6 @@ "moredotdotdot": "Meer…", "morenotlisted": "Deze lijst is niet compleet.", "mypage": "Gebruikerspagina", - "anonuserpage": "Onbekende gebruiker", "mytalk": "Overleg", "anontalk": "Overleg", "navigation": "Navigatie", @@ -532,7 +534,7 @@ "noemail": "Er is geen e-mailadres bekend voor gebruiker \"$1\".", "noemailcreate": "U moet een geldig e-mailadres opgeven", "passwordsent": "Het wachtwoord is verzonden naar het e-mailadres voor \"$1\".\nMeld u aan nadat u het hebt ontvangen.", - "blocked-mailpassword": "Uw IP-adres is geblokkeerd voor het maken van wijzigingen.\nOm misbruik te voorkomen is het niet mogelijk om een nieuw wachtwoord aan te vragen.", + "blocked-mailpassword": "Uw IP-adres is geblokkeerd voor het maken van wijzigingen. Om misbruik te voorkomen is het niet mogelijk om een nieuw wachtwoord aan te vragen.", "eauthentsent": "Er is ter bevestiging een e-mail naar het opgegeven e-mailadres gezonden.\nVolg de aanwijzingen in de e-mail om aan te geven dat het uw e-mailadres is.\nTot die tijd worden er geen e-mails naar het e-mailadres gezonden.", "throttled-mailpassword": "In {{PLURAL:$1|het laatste uur|de laatste $1 uur}} is al een wachtwoordherinnering verzonden.\nOm misbruik te voorkomen wordt er slechts één wachtwoordherinnering per {{PLURAL:$1|uur|$1 uur}} verzonden.", "mailerror": "Fout bij het verzenden van e-mail: $1", @@ -549,7 +551,7 @@ "createaccount-title": "Gebruikers registreren voor {{SITENAME}}", "createaccount-text": "Iemand heeft een gebruiker op {{SITENAME}} ($4) aangemaakt met de naam \"$2\" en uw e-mailadres.\nHet wachtwoord voor \"$2\" is \"$3\".\nMeld u aan en wijzig uw wachtwoord.\n\nNegeer dit bericht als deze gebruiker zonder uw medeweten is aangemaakt.", "login-throttled": "U heeft recentelijk te veel mislukte aanmeldpogingen gedaan.\nWacht alstublieft $1 voordat u het opnieuw probeert.", - "login-abort-generic": "U bent niet aangemeld. De procedure is afgebroken.", + "login-abort-generic": "Uw aanmelding is mislukt - Afgebroken", "login-migrated-generic": "Uw gebruikersnaam is hernoemd, en uw gebruikersnaam bestaat niet langer op deze wiki.", "loginlanguagelabel": "Taal: $1", "suspicious-userlogout": "Uw verzoek om af te melden is genegeerd, omdat het lijkt alsof het verzoek is verzonden door een browser of cacheproxy die stuk is.", @@ -569,7 +571,7 @@ "newpassword": "Nieuw wachtwoord:", "retypenew": "Herhaling nieuwe wachtwoord:", "resetpass_submit": "Wachtwoord instellen en aanmelden", - "changepassword-success": "Uw wachtwoord is gewijzigd.", + "changepassword-success": "Uw wachtwoord is gewijzigd!", "changepassword-throttled": "U heeft recentelijk te veel mislukte aanmeldpogingen gedaan.\nWacht alstublieft $1 voordat u het opnieuw probeert.", "botpasswords": "Botwachtwoorden", "botpasswords-summary": "Botwachtwoorden zorgen voor toegang tot de API via een gebruikersaccount zonder gebruik te maken van de aanmeldgegevens van dat account. De gebruikersrechten die beschikbaar zijn kunnen afwijken indien er aangemeld is met een botwachtwoord.\n\nAls u niet weet wat de gevolgen hiervan zijn, is het handiger om dit ook dan niet te doen. Niemand hoort u te vragen om een botwachtwoord aan te maken en deze vervolgens aan hem of haar te geven.", @@ -592,7 +594,7 @@ "botpasswords-insert-failed": "Toevoegen van botnaam \"$1\" mislukt. Is deze misschien al toegevoegd?", "botpasswords-update-failed": "Bijwerken van botnaam \"$1\" mislukt. Is deze misschien verwijderd?", "botpasswords-created-title": "Botwachtwoord aangemaakt", - "botpasswords-created-body": "Het botwachtwoord \"$1\" is succesvol aangemaakt.", + "botpasswords-created-body": "Het botwachtwoord voor botnaam \"$1\" van gebruiker \"$2\" is gemaakt.", "botpasswords-updated-title": "Botwachtwoord bijgewerkt", "botpasswords-updated-body": "Het botwachtwoord \"$1\" is succesvol bijgewerkt.", "botpasswords-deleted-title": "Botwachtwoord verwijderd", @@ -600,7 +602,7 @@ "botpasswords-newpassword": "Het nieuwe wachtwoord om aan te melden met $1 is nu $2. Bewaar dit goed voor toekomstig gebruik.", "botpasswords-no-provider": "BotPasswordsSessionProvider is niet beschikbaar.", "botpasswords-restriction-failed": "Botwachtwoordbeperkingen maken het aanmelden onmogelijk.", - "botpasswords-invalid-name": "De gebruikersnaam mag niet het scheidingsteken van het botwachtwoord (\"$1\") bevatten.", + "botpasswords-invalid-name": "De gebruikersnaam bevat niet het scheidingsteken van het botwachtwoord (\"$1\").", "botpasswords-not-exist": "Gebruiker \"$1\" heeft geen botwachtwoord genaamd \"$2\"", "resetpass_forbidden": "Wachtwoorden kunnen niet gewijzigd worden", "resetpass-no-info": "U dient aangemeld zijn voordat u deze pagina kunt gebruiken.", @@ -628,7 +630,7 @@ "passwordreset-emailtext-ip": "Iemand, waarschijnlijk u, heeft vanaf het IP-adres $1 een aanvraag gedaan om uw wachtwoord voor {{SITENAME}} ($4) opnieuw in te stellen. De volgende {{PLURAL:$3|gebruiker is|gebruikers zijn}} gekoppeld aan dit e-mailadres:\n\n$2\n\n{{PLURAL:$3|Dit tijdelijke wachtwoord vervalt|Deze tijdelijke wachtwoorden vervallen}} over {{PLURAL:$5|een dag|$5 dagen}}. Meld u aan en wijzig het wachtwoord nu. Als u dit verzoek niet zelf heeft gedaan, of als u het oorspronkelijke wachtwoord nog kent en het niet wilt wijzigen, negeer dit bericht dan en blijf uw oude wachtwoord gebruiken.", "passwordreset-emailtext-user": "Gebruiker $1 op de site {{SITENAME}} heeft een aanvraag gedaan om uw wachtwoord voor {{SITENAME}} ($4) opnieuw in te stellen. De volgende {{PLURAL:$3|gebruiker is|gebruikers zijn}} gekoppeld aan dit e-mailadres:\n\n$2\n\n{{PLURAL:$3|Dit tijdelijke wachtwoord vervalt|Deze tijdelijke wachtwoorden vervallen}} over {{PLURAL:$5|een dag|$5 dagen}}.\nMeld u aan en wijzig het wachtwoord nu. Als u dit verzoek niet zelf heeft gedaan, of als u het oorspronkelijke wachtwoord nog kent en het niet wilt wijzigen, negeer dit bericht dan en blijf uw oude wachtwoord gebruiken.", "passwordreset-emailelement": "Gebruikersnaam: \n$1\n\nTijdelijk wachtwoord: \n$2", - "passwordreset-emailsentemail": "Als dit een e-mailadres is dat gekoppeld is aan uw account, dan wordt er een e-mail verzonden om uw wachtwoord opnieuw in te stellen.", + "passwordreset-emailsentemail": "Als dit e-mailadres aan uw account gekoppeld is, dan wordt er een e-mail verzonden om uw wachtwoord opnieuw in te stellen.", "passwordreset-emailsentusername": "Als er een e-mailadres geregistreerd is voor die gebruikersnaam, dan wordt er een e-mail verzonden om uw wachtwoord opnieuw in te stellen.", "passwordreset-emailsent-capture": "Er is een e-mail voor het opnieuw instellen van een wachtwoord verzonden. Deze wordt hieronder weergegeven.", "passwordreset-emailerror-capture": "Er is een e-mail voor het opnieuw instellen van een wachtwoord aangemaakt. Deze wordt hieronder weergegeven. Het verzenden naar de {{GENDER:$2|gebruiker}} is mislukt om de volgende reden: $1", @@ -890,7 +892,7 @@ "revdelete-unsuppress": "Beperkingen op teruggeplaatste wijzigingen verwijderen", "revdelete-log": "Reden:", "revdelete-submit": "Toepassen op de geselecteerde {{PLURAL:$1|bewerking|bewerkingen}}", - "revdelete-success": "Deze zichtbaarheid van de wijziging is bijgewerkt.", + "revdelete-success": "Zichtbaarheid van wijziging bijgewerkt.", "revdelete-failure": "De zichtbaarheid van de wijziging kon niet bijgewerkt worden:\n$1", "logdelete-success": "De zichtbaarheid van de gebeurtenis is ingesteld.", "logdelete-failure": "De zichtbaarheid van de logboekregel kon niet ingesteld worden:\n$1", @@ -1374,7 +1376,7 @@ "recentchangeslinked-page": "Paginanaam:", "recentchangeslinked-to": "Wijzigingen aan pagina's met koppelingen naar deze pagina bekijken", "recentchanges-page-added-to-category": "[[:$1]] aan categorie toegevoegd", - "recentchanges-page-added-to-category-bundled": "[[:$1]] en {{PLURAL:$2|één pagina|$2 pagina's}} zijn toegevoegd aan categorie", + "recentchanges-page-added-to-category-bundled": "[[:$1]] en [[Special:WhatLinksHere/$1|{{PLURAL:$2|één pagina|$2 pagina's}}]] zijn toegevoegd aan categorie", "recentchanges-page-removed-from-category": "[[:$1]] is verwijderd uit categorie", "recentchanges-page-removed-from-category-bundled": "[[:$1]] en {{PLURAL:$2|één pagina|$2 pagina's}} zijn verwijderd uit categorie", "autochange-username": "Automatische wijziging van MediaWiki", @@ -1554,8 +1556,9 @@ "uploadstash-clear": "Verborgen bestanden weggooien", "uploadstash-nofiles": "Er zijn geen verborgen bestanden.", "uploadstash-badtoken": "Het uitvoeren van de handeling is mislukt. Dit komt mogelijk doordat uw bewerkingsreferenties zijn verlopen. Probeer het opnieuw.", - "uploadstash-errclear": "Het verwijderen van de bestanden is mislukt.", + "uploadstash-errclear": "Het wissen van de bestanden is mislukt.", "uploadstash-refresh": "Lijst met bestanden bijwerken", + "uploadstash-thumbnail": "miniatuurafbeelding weergeven", "invalid-chunk-offset": "Ongeldige chunkoffset", "img-auth-accessdenied": "Toegang geweigerd", "img-auth-nopathinfo": "PATH_INFO ontbreekt.\nUw server is niet ingesteld om deze gegevens door te geven.\nMisschien gebruikt deze CGI, en dan wordt img_auth niet ondersteund.\nZie https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Image_Authorization voor meer informatie.", @@ -1809,7 +1812,7 @@ "apisandbox-api-disabled": "De API is uitgeschakeld op deze site.", "apisandbox-intro": "Gebruik deze pagina om te experimenteren met de MediaWiki-API.\nZie de [[mw:API:Main page|API-documentatie]] voor verdere details over het gebruik van de API. Voorbeeld: [//www.mediawiki.org/wiki/API#A_simple_example hoe de inhoud van een Hoofdpagina ophalen]. Selecteer een handeling om meer voorbeelden te zien.\n\nHoewel dit een testfunctie is, kunnen sommige handelingen toch wijzigingen in de wiki maken.", "apisandbox-fullscreen": "Paneel uitvouwen", - "apisandbox-fullscreen-tooltip": "Het zandbakvenster uitvoeren om het browservenster te vullen.", + "apisandbox-fullscreen-tooltip": "Het zandbakpaneel zo groot als het browservenster maken.", "apisandbox-unfullscreen": "Pagina weergeven", "apisandbox-unfullscreen-tooltip": "Het zandbakvenster samenvouwen zodat de navigatie voor MediaWiki weer beschikbaar is.", "apisandbox-submit": "Verzoek uitvoeren", @@ -1876,8 +1879,6 @@ "categories-submit": "Weergeven", "categoriespagetext": "De volgende {{PLURAL:$1|categorie bevat|categorieën bevatten}} pagina's of mediabestanden.\n[[Special:UnusedCategories|Ongebruikte categorieën]] worden hier niet weergegeven.\nZie ook [[Special:WantedCategories|niet-bestaande categorieën met koppelingen]].", "categoriesfrom": "Categorieën weergeven vanaf:", - "special-categories-sort-count": "op aantal sorteren", - "special-categories-sort-abc": "alfabetisch sorteren", "deletedcontributions": "Verwijderde bijdragen", "deletedcontributions-title": "Verwijderde gebruikersbijdragen", "sp-deletedcontributions-contribs": "bijdragen", @@ -2045,7 +2046,7 @@ "delete-toobig": "Deze pagina heeft een lange bewerkingsgeschiedenis, meer dan $1 {{PLURAL:$1|versie|versies}}.\nHet verwijderen van dit soort pagina's is met rechten beperkt om het per ongeluk verstoren van de werking van {{SITENAME}} te voorkomen.", "delete-warning-toobig": "Deze pagina heeft een lange bewerkingsgeschiedenis, meer dan $1 {{PLURAL:$1|versie|versies}}.\nHet verwijderen van deze pagina kan de werking van de database van {{SITENAME}} verstoren.\nWees voorzichtig.", "deleteprotected": "U kunt deze pagina niet verwijderen omdat hij is beveiligd.", - "deleting-backlinks-warning": "'''Waarschuwing:''' [[Special:WhatLinksHere/{{FULLPAGENAME}}|andere pagina's]] gebruiken of verwijzen naar de pagina die u wilt verwijderen.", + "deleting-backlinks-warning": "Waarschuwing: [[Special:WhatLinksHere/{{FULLPAGENAME}}|andere pagina's]] gebruiken of verwijzen naar de pagina die u wilt verwijderen.", "rollback": "Wijzigingen ongedaan maken", "rollbacklink": "terugdraaien", "rollbacklinkcount": "{{PLURAL:$1|één bewerking|$1 bewerkingen}} terugdraaien", @@ -2253,6 +2254,7 @@ "ipb-unblock": "Een gebruiker of IP-adres deblokkeren", "ipb-blocklist": "Bestaande blokkades bekijken", "ipb-blocklist-contribs": "Bijdragen van {{GENDER:$1|$1}}", + "ipb-blocklist-duration-left": "$1 te gaan", "unblockip": "Gebruiker deblokkeren", "unblockiptext": "Gebruik het onderstaande formulier om opnieuw schrijftoegang te geven aan een geblokkeerde gebruiker of IP-adres.", "ipusubmit": "Blokkade opheffen", @@ -2494,11 +2496,7 @@ "import-logentry-upload-detail": "$1 {{PLURAL:$1|versie|versies}} geïmporteerd", "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|versie|versies}} geïmporteerd uit $2", "javascripttest": "JavaScript testen", - "javascripttest-pagetext-noframework": "Deze pagina is gereserveerd voor het uitvoeren van JavaScripttesten.", - "javascripttest-pagetext-unknownframework": "Onbekend testframework \"$1\".", "javascripttest-pagetext-unknownaction": "Onbekende handeling \"$1\".", - "javascripttest-pagetext-frameworks": "Kies een van de volgende testframeworks: $1", - "javascripttest-pagetext-skins": "Kies een vormgeving om de tests mee uit te voeren:", "javascripttest-qunit-intro": "Zie de [$1 testdocumentatie] op mediawiki.org.", "tooltip-pt-userpage": "{{GENDER:|Uw}} gebruikerspagina", "tooltip-pt-anonuserpage": "Gebruikerspagina voor uw IP-adres", @@ -2769,8 +2767,8 @@ "exif-colorspace": "Kleurruimte", "exif-componentsconfiguration": "Betekenis van elke component", "exif-compressedbitsperpixel": "Beeldcompressiemethode", - "exif-pixelydimension": "Afbeeldingsbreedte", - "exif-pixelxdimension": "Afbeeldingshoogte", + "exif-pixelxdimension": "Afbeeldingsbreedte", + "exif-pixelydimension": "Afbeeldingshoogte", "exif-usercomment": "Opmerkingen", "exif-relatedsoundfile": "Bijbehorend audiobestand", "exif-datetimeoriginal": "Tijdstip gegevensaanmaak", @@ -3226,7 +3224,6 @@ "version-libraries-description": "Beschrijving", "version-libraries-authors": "Auteurs", "redirect": "Doorverwijzen op bestandsnaam, gebruikers-, pagina-, versie- of logboekregelnummer", - "redirect-legend": "Doorverwijzen naar een bestand of pagina", "redirect-summary": "Deze speciale pagina verwijst door naar een bestand (als een bestandsnaam wordt opgegeven), een pagina (als een paginanummer of versienummer wordt opgegeven), een gebruikerspagina (als een gebruikersnummer wordt opgegeven) of een logboekregel (als een logboekregel-ID wordt opgegeven). Gebruik: [[{{#Special:Redirect}}/file/Voorbeeld.jpg]], [[{{#Special:Redirect}}/page/64308]], [[{{#Special:Redirect}}/revision/328429]], [[{{#Special:Redirect}}/user/101]] of [[{{#Special:Redirect}}/logid/186]].", "redirect-submit": "OK", "redirect-lookup": "Opzoeken:", @@ -3239,7 +3236,6 @@ "redirect-not-exists": "Waarde niet gevonden", "fileduplicatesearch": "Duplicaatbestanden zoeken", "fileduplicatesearch-summary": "Duplicaatbestanden zoeken op basis van de hashwaarde.", - "fileduplicatesearch-legend": "Duplicaatbestanden zoeken", "fileduplicatesearch-filename": "Bestandsnaam:", "fileduplicatesearch-submit": "Zoeken", "fileduplicatesearch-info": "$1 × $2 pixels
Bestandsgrootte: $3
MIME-type: $4", @@ -3533,6 +3529,7 @@ "api-error-unknownerror": "Onbekende fout: \"$1\"", "api-error-uploaddisabled": "Uploaden is niet mogelijk in deze wiki.", "api-error-verification-error": "Dit bestand is mogelijk beschadigd of heeft een onjuiste extensie.", + "api-error-was-deleted": "Een bestand met deze naam is al eerder geüpload en vervolgens verwijderd.", "duration-seconds": "$1 {{PLURAL:$1|seconde|seconden}}", "duration-minutes": "$1 {{PLURAL:$1|minuut|minuten}}", "duration-hours": "$1 {{PLURAL:$1|uur|uren}}", @@ -3623,6 +3620,7 @@ "special-characters-group-ipa": "IPA", "special-characters-group-symbols": "Symbolen", "special-characters-group-greek": "Grieks", + "special-characters-group-greekextended": "Grieks-uitgebreid", "special-characters-group-cyrillic": "Cyrillisch", "special-characters-group-arabic": "Arabisch", "special-characters-group-arabicextended": "Arabisch uitgebreid", @@ -3650,5 +3648,29 @@ "sessionprovider-generic": "$1 sessies", "sessionprovider-mediawiki-session-cookiesessionprovider": "sessies gebaseerd op cookies", "sessionprovider-nocookies": "Cookies kunnen uitgeschakeld zijn. Zorg ervoor dat u cookies hebt ingeschakeld en probeer het opnieuw.", - "randomrootpage": "Willekeurige hoofdpagina" + "randomrootpage": "Willekeurige hoofdpagina", + "log-action-filter-block": "Soort blokkade:", + "log-action-filter-delete": "Soort verwijdering:", + "log-action-filter-managetags": "Type labelbeheerhandeling:", + "log-action-filter-move": "Soort hernoeming:", + "log-action-filter-newusers": "Type accountaanmaak:", + "log-action-filter-patrol": "Soort markering:", + "log-action-filter-protect": "Soort beveiliging:", + "log-action-filter-all": "Alles", + "log-action-filter-block-block": "Blokkade", + "log-action-filter-block-reblock": "Aanpassing van blokkade", + "log-action-filter-block-unblock": "Opheffing van blokkade", + "log-action-filter-delete-delete": "Verwijderen van pagina", + "log-action-filter-delete-restore": "Terugplaatsen van pagina", + "log-action-filter-newusers-autocreate": "Automatische aanmaak", + "log-action-filter-patrol-patrol": "Handmatige markering", + "log-action-filter-patrol-autopatrol": "Automatische markering", + "log-action-filter-protect-protect": "Beveiliging", + "log-action-filter-protect-modify": "Aanpassing van beveiliging", + "log-action-filter-protect-unprotect": "Opheffen van beveliging", + "log-action-filter-protect-move_prot": "Beveiliging verplaatst", + "log-action-filter-rights-rights": "Handmatige aanpassing", + "log-action-filter-rights-autopromote": "Automatische aanpassing", + "log-action-filter-upload-upload": "Nieuwe upload", + "log-action-filter-upload-overwrite": "Herupload" } diff --git a/languages/i18n/nn.json b/languages/i18n/nn.json index d751514c13..c01b64a278 100644 --- a/languages/i18n/nn.json +++ b/languages/i18n/nn.json @@ -494,6 +494,7 @@ "resetpass-wrong-oldpass": "Feil mellombels eller noverande passord.\nDu kan allereie ha byta passordet, eller ha bede om å få eit nytt mellombels passord.", "resetpass-temp-password": "Mellombels passord:", "resetpass-abort-generic": "Passordbytet vart stogga av ei utviding.", + "resetpass-validity-soft": "Passordet ditt er ikkje gyldig: $1\n\nGjer vel å velja eit nytt passord no, eller klikk «{{int:resetpass-submit-cancel}}» for å endra det seinare.", "passwordreset": "Attendestilling av passord", "passwordreset-text-one": "Fyll ut dette skjemaet for å attendestilla passordet ditt.", "passwordreset-disabled": "↓Tilbakestilling av passord er ikkje aktivert på denne wikien", @@ -633,6 +634,7 @@ "edit-conflict": "Endringskonflikt.", "edit-no-change": "Endringa di vart ignorert fordi det ikkje vart gjort endringar i teksten.", "postedit-confirmation-created": "Sida vart oppretta.", + "postedit-confirmation-restored": "Sida vart attoppretta.", "postedit-confirmation-saved": "Endringa di vart lagra.", "edit-already-exists": "Kunne ikkje opprette ny side fordi ho alt eksisterer.", "defaultmessagetext": "Standard meldingstekst", @@ -1558,8 +1560,6 @@ "categories-submit": "Vis", "categoriespagetext": "Følgjande {{PLURAL:$1|category contains|kategoriar inneheld}} sider eller media.\n[[Special:UnusedCategories|Unytta kategoriar]] vert ikkje vist her.\nSjå òg [[Special:WantedCategories|ønska kategoriar]].", "categoriesfrom": "Vis kategoriar frå og med:", - "special-categories-sort-count": "sorter etter storleik", - "special-categories-sort-abc": "sorter alfabetisk", "deletedcontributions": "Sletta brukarbidrag", "deletedcontributions-title": "Sletta brukarbidrag", "sp-deletedcontributions-contribs": "bidrag", @@ -2127,11 +2127,7 @@ "import-logentry-upload-detail": "{{PLURAL:$1|Éin versjon|$1 versjonar}}", "import-logentry-interwiki-detail": "{{PLURAL:$1|Éin versjon|$1 versjonar}} frå $2", "javascripttest": "JavaScript-utrøyning", - "javascripttest-pagetext-noframework": "Sida er reservert for køyring av JavaScript-utrøyningar.", - "javascripttest-pagetext-unknownframework": "Ukjent utrøyningsrammeverk: «$1».", "javascripttest-pagetext-unknownaction": "Ukjend handling \"$1\".", - "javascripttest-pagetext-frameworks": "Vel eitt av dei fylgjande utrøyningsrammeverka: $1", - "javascripttest-pagetext-skins": "Vel ei drakt som utrøyningane skal køyrast med:", "javascripttest-qunit-intro": "Sjå [$1 utrøyningsdokumentasjon] på mediawiki.org.", "tooltip-pt-userpage": "{{GENDER:|Brukarsida}} di", "tooltip-pt-anonuserpage": "Brukarsida for ip-adressa du endrar under", @@ -2379,8 +2375,8 @@ "exif-colorspace": "Fargerom", "exif-componentsconfiguration": "Komponentanalyse", "exif-compressedbitsperpixel": "Komprimerte bits pr. pixel", - "exif-pixelydimension": "Biletbreidd", - "exif-pixelxdimension": "Bilethøgd", + "exif-pixelxdimension": "Biletbreidd", + "exif-pixelydimension": "Bilethøgd", "exif-usercomment": "Brukarkommentarar", "exif-relatedsoundfile": "Tilknytt lydfil", "exif-datetimeoriginal": "Dato og tid laga", @@ -2811,7 +2807,6 @@ "version-libraries-library": "Bibliotek", "version-libraries-version": "Versjon", "redirect": "Omdiriger etter filnamn, brukar- eller versjons-ID", - "redirect-legend": "Omdiriger til ei fil eller ei side", "redirect-summary": "Denne spesialsida omdirigerer til ei fil (med eit filnamn), ei side (med ein versjons-ID) eller ei brukarside (med eit brukartal).", "redirect-submit": "Gå", "redirect-lookup": "Sjå etter:", @@ -2823,7 +2818,6 @@ "redirect-not-exists": "Fann ikkje verdi", "fileduplicatesearch": "Søk etter duplikatfiler", "fileduplicatesearch-summary": "Søk etter duplikatfiler basert på hash-verdiane deira.", - "fileduplicatesearch-legend": "Søk etter ei duplikatfil", "fileduplicatesearch-filename": "Filnamn:", "fileduplicatesearch-submit": "Søk", "fileduplicatesearch-info": "$1 × $2 pikslar
Filstorleik: $3
MIME-type: $4", diff --git a/languages/i18n/oc.json b/languages/i18n/oc.json index 3a68073ecc..e16a822e5f 100644 --- a/languages/i18n/oc.json +++ b/languages/i18n/oc.json @@ -1610,8 +1610,6 @@ "categories": "Categorias", "categoriespagetext": "{{PLURAL:$1|La categoria seguenta es utilizada|Las categorias seguentas son utilizadas}} per de paginas o de fichièrs.\n[[Special:UnusedCategories|Las categorias inutilizadas]] son pas afichadas aicí.\nVejatz tanben [[Special:WantedCategories|las categorias demandadas]].", "categoriesfrom": "Afichar las categorias que començan a :", - "special-categories-sort-count": "triada per compte", - "special-categories-sort-abc": "triada alfabetica", "deletedcontributions": "Contribucions suprimidas d’un utilizaire", "deletedcontributions-title": "Contribucions suprimidas d’un utilizaire", "sp-deletedcontributions-contribs": "contribucions", @@ -2175,11 +2173,7 @@ "import-logentry-upload-detail": "$1 {{PLURAL:$1|revision importada|revisions importadas}}", "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|revision importada|revisions importadas}} dempuèi $2", "javascripttest": "Tèst de JavaScript", - "javascripttest-pagetext-noframework": "Aquesta pagina es reservada per l'execucion dels tèsts JavaScript.", - "javascripttest-pagetext-unknownframework": "Estructura « $1 » desconeguda.", "javascripttest-pagetext-unknownaction": "Accion « $1 » desconeguda.", - "javascripttest-pagetext-frameworks": "Causissètz una de las estructuras de tèst seguentas : $1", - "javascripttest-pagetext-skins": "Causissètz un abilhatge amb lo qual cal aviar los tèsts :", "javascripttest-qunit-intro": "Veire [$1 la documentacion de tèst] sus mediawiki.org.", "tooltip-pt-userpage": "Vòstra pagina d'{{GENDER:|utilizaire|utilizaira}}", "tooltip-pt-anonuserpage": "La pagina d'utilizare de l’IP amb la quala contribuissètz", @@ -2430,8 +2424,8 @@ "exif-colorspace": "Espaci colorimetric", "exif-componentsconfiguration": "Significacion de cada compausanta", "exif-compressedbitsperpixel": "Mòde de compression de l’imatge", - "exif-pixelydimension": "Largor de l’imatge", - "exif-pixelxdimension": "Nautor de l’imatge", + "exif-pixelxdimension": "Largor de l’imatge", + "exif-pixelydimension": "Nautor de l’imatge", "exif-usercomment": "Comentaris de l'utilizaire", "exif-relatedsoundfile": "Fichièr àudio associat", "exif-datetimeoriginal": "Data e ora de la generacion de donadas", @@ -2873,7 +2867,6 @@ "version-libraries-description": "Descripcion", "version-libraries-authors": "Autors", "redirect": "Redirigit per fichièr, utilizaire, pagina o ID de revision.", - "redirect-legend": "Redirigir cap a una pagina o un fichièr", "redirect-submit": "Validar", "redirect-lookup": "Recèrca :", "redirect-value": "Valor :", @@ -2884,7 +2877,6 @@ "redirect-not-exists": "Valor pas trobada", "fileduplicatesearch": "Recèrca dels fichièrs en doble", "fileduplicatesearch-summary": "Recèrca de las còpias de fichièrs identics d'aprèp lor emprenta de hachatge.", - "fileduplicatesearch-legend": "Recèrca d’un doble", "fileduplicatesearch-filename": "Nom del fichièr :", "fileduplicatesearch-submit": "Recercar", "fileduplicatesearch-info": "$1 × $2 pixèls
Talha del fichièr : $3
MIME type : $4", diff --git a/languages/i18n/or.json b/languages/i18n/or.json index b72829552d..d711ecdaa1 100644 --- a/languages/i18n/or.json +++ b/languages/i18n/or.json @@ -375,7 +375,7 @@ "virus-badscanner": "ମନ୍ଦ ସଂରଚନା: ଅଜଣା ଭାଇରସ ସ୍କାନର: ''$1''", "virus-scanfailed": "ସ୍କାନ କରିବା ବିଫଳ ହେଲା (କୋଡ଼ $1)", "virus-unknownscanner": "ଅଜଣା ଆଣ୍ଟିଭାଇରସ:", - "logouttext": "ଲଗ-ଆଉଟ ହୋଇଗଲା ।\n\nଆପଣ ନିଜର ବ୍ରାଉଜରର ଅସ୍ଥାୟୀ ସ୍ମତି (cache) ନ ଲିଭାଇବା ଯାଏ ହୁଏତ କିଛି ପୃଷ୍ଠାରେ ଲଗ-ଇନ ହୋଇ ରହିପାରେ ।", + "logouttext": "ଆପଣ ଲଗ-ଆଉଟ ହୋଇଗଲେ ।\n\nଆପଣ ନିଜର ବ୍ରାଉଜରର ଅସ୍ଥାୟୀ ସ୍ମୃତି (cache) ଖାଲି ନ'କରିବାଯାଏ, ହୁଏତ କିଛି ପୃଷ୍ଠାରେ ଲଗ-ଇନ ହୋଇଥିବା ପରି ଦେଖାଯାଇପାରେ ।", "cannotlogoutnow-title": "ଲଗ ଆଉଟ ହେଇପାରିଲା ନାହିଁ", "cannotlogoutnow-text": "$1ବ୍ୟବହାର କରୁଥିବା ବେଳେ ଲଗ ଆଉଟ ହେଇପାରିବ ନାହିଁ ।", "welcomeuser": "ସ୍ଵାଗତ, $1!", @@ -1092,7 +1092,7 @@ "right-rollback": "ଏକ ନିର୍ଦ୍ଦିଷ୍ଟ ପୃଷ୍ଠାକୁ ବଦଳାଇଥିବା ଶେଷ ସଭ୍ୟଙ୍କ ସମ୍ପାଦନାକୁ ସଙ୍ଗେସଙ୍ଗେ ପୁରାପୁରି ପଛକୁ ଫେରାଇଦେବେ", "right-markbotedits": "ପୁରାପୁରି ପଛକୁ ଫେରାଇବା ବଦଳଗୁଡ଼ିକ ଆପେ ଆପେ କରା ବଦଳ ବୋଲି ଗଣିବେ", "right-noratelimit": "ବିରଳ ସୀମା ଦେଇ ପ୍ରଭାବିତ ହୋଇ ନଥିବା", - "right-import": "ବାକି ଉଇକିରୁ ପୃଷ୍ଠାମାନ ଆମଦାନୀ କରିବେ", + "right-import": "ବାକି ଉଇକିରୁ ପୃଷ୍ଠାମାନ ଆମଦାନି କରିବେ", "right-importupload": "ଏକ ଫାଇଲ ଅପଲୋଡ଼ରୁ ଏହି ପୃଷ୍ଠାସବୁ ଆଣିବେ", "right-patrol": "ବାକି ମାନଙ୍କ ବଦଳକୁ ଜଗାଯାଇଥିବା ବଦଳ ବୋଲି ଚିହ୍ନିତ କରିବେ", "right-autopatrol": "ଜଣକର ଆପଣା ସମ୍ପାଦନାସବୁ ଜଗାଯାଇଅଛି ବୋଲି ଚିହ୍ନିତ ହୋଇଯାଉ", @@ -1516,16 +1516,16 @@ "specialpage-empty": "ଏହି ଅନୁରୋଧ ପାଇଁ କିଛି ଫଳାଫଳ ମିଳିଲା ନାହିଁ ।", "lonelypages": "ଅନାଥ ପୃଷ୍ଠା ସବୁ", "lonelypagestext": "ତଲାଲିଖିତ ପୃଷ୍ଠାମାନ {{SITENAME}}ରେ ଥିବା ବାକି ପୃଷ୍ଠାମାନଙ୍କ ସହ ଯୋଡ଼ାଯାଇନାହିଁ ବା କେବଳ ସେଥିରେ ବ୍ୟବହାର କରାଯାଇନାହିଁ ।", - "uncategorizedpages": "ଶ୍ରେଣୀହିନ ପୃଷ୍ଠାସମୂହ", - "uncategorizedcategories": "ଶ୍ରେଣୀହିନ ଶ୍ରେଣୀସମୂହ", + "uncategorizedpages": "ଶ୍ରେଣୀହୀନ ପୃଷ୍ଠାସମୂହ", + "uncategorizedcategories": "ଶ୍ରେଣୀହୀନ ଶ୍ରେଣୀସମୂହ", "uncategorizedimages": "ଶ୍ରେଣୀହୀନ ଫାଇଲସମୂହ", - "uncategorizedtemplates": "ଶ୍ରେଣୀହିନ ଛାଞ୍ଚସବୁ", + "uncategorizedtemplates": "ଶ୍ରେଣୀହୀନ ଛାଞ୍ଚସବୁ", "unusedcategories": "ବ୍ୟବହାର ହେଉନଥିବା ଶ୍ରେଣୀସମୂହ", "unusedimages": "ବ୍ୟବହାର ହେଉନଥିବା ଫାଇଲସମୂହ", "wantedcategories": "ଦରକାରୀ ଶ୍ରେଣୀସମୂହ", - "wantedpages": "ଦରକାରି ପୃଷ୍ଠା", + "wantedpages": "ଦରକାରୀ ପୃଷ୍ଠା", "wantedpages-badtitle": "$1 ଉତ୍ତରସବୁରେ ଥିବା ଭୁଲ ଟାଇଟଲ", - "wantedfiles": "ଦରକାରି ଫାଇଲ", + "wantedfiles": "ଦରକାରୀ ଫାଇଲ", "wantedfiletext-cat": "ନିମ୍ନଲିଖିତ ଫାଇଲଗୁଡିକ ବ୍ୟବହୃତ ହେଇଛି ହଲେ ନାହିଁ । ରହିଥିବା ଫାଇଲ ବଦଳରେ ବାହାରେ ଥିବା ଫାଇଲଗୁଡିକ ତାଲିକାଭୁକ୍ତ ହେଇଛି । ଏହିଭଳି ଭୁଲ ସତ୍ୟଗୁଡିକ struck out ହେଇଯିବ । ଅଧିକନ୍ତୁ, ପ୍ରକୃତରେ ନଥିବା ଫାଇଲଗୁଡିକର ପୃଷ୍ଠାଗୁଡିକ [[:$1]]ରେ ତାଲିକାଭୁକ୍ତ ହୋଇଛି ।", "wantedfiletext-cat-noforeign": "ଏହି ଫାଇଲସବୁ ତିଆରି ନ କରାଯାଇ ବ୍ୟବହାର କରାଯାଇଛି । ଏଥି ସହିତ, ତିଆରି ହୋଇନଥିବା ଫାଇଲକୁ ଏମବେଡ଼ କରିଥିବା ପୃଷ୍ଠାସବୁର ତାଲିକା [[:$1]]ରେ ରହିଛି ।", "wantedfiletext-nocat": "ନିମ୍ନଲିଖିତ ଫାଇଲଗୁଡିକ ବ୍ୟବହୃତ ହେଇଛି ହଲେ ନାହିଁ । ରହିଥିବା ଫାଇଲ ବଦଳରେ ବାହାରେ ଥିବା ଫାଇଲଗୁଡିକ ତାଲିକାଭୁକ୍ତ ହେଇଛି । ଏହିଭଳି ଭୁଲ ସତ୍ୟଗୁଡିକ struck out ହେଇଯିବ ।", @@ -1622,8 +1622,6 @@ "categories": "ଶ୍ରେଣୀସମୂହ", "categoriespagetext": "ତଳଲିଖିତ {{PLURAL:$1|ଶ୍ରେଣୀ|ଶ୍ରେଣୀସମୂହ}}ରେ ପୃଷ୍ଠା ବା ମିଡ଼ିଆ ରହିଅଛି ।\n[[Special:UnusedCategories|ବ୍ୟବହାର ହୋଇନଥିବା ଶ୍ରେଣୀସବୁ]] ଦେଖାଯାଇନାହିଁ ।\n[[Special:WantedCategories|ଦରକାରୀ ଶ୍ରେଣୀସମୂହ]] ସବୁ ଦେଖନ୍ତୁ ।", "categoriesfrom": "ଏହି ନାମରେ ଆରମ୍ଭ ହେଉଥିବା ଶ୍ରେଣୀଗୁଡ଼ିକୁ ଦେଖାଇବେ:", - "special-categories-sort-count": "ଗଣନ କରି ସଜାଇବେ", - "special-categories-sort-abc": "ଅକ୍ଷରର କ୍ରମ ଅନୁସାରେ ସଜାଇବେ", "deletedcontributions": "ଲିଭାଇ ଦିଆଯାଇଥିବା ସଭ୍ୟଙ୍କ ଅବଦାନ", "deletedcontributions-title": "ଲିଭାଇ ଦିଆଯାଇଥିବା ସଭ୍ୟଙ୍କ ଅବଦାନସମୂହ", "sp-deletedcontributions-contribs": "ଅବଦାନସମୂହ", @@ -2161,16 +2159,16 @@ "import-interwiki-sourcepage": "ମୂଳ ପୃଷ୍ଠା:", "import-interwiki-history": "ଏହି ପୃଷ୍ଠା ନିମନ୍ତେ ସବୁଯାକ ସଂସ୍କରଣ ଇତିହାସ ନକଲ କରିନିଅନ୍ତୁ", "import-interwiki-templates": "ସବୁଯାକ ଛାଞ୍ଚ ଏହା ଭିତରେ ରଖିବେ", - "import-interwiki-submit": "ଆମଦାନୀ", + "import-interwiki-submit": "ଆମଦାନି", "import-upload-filename": "ଫାଇଲ ନାମ:", "import-comment": "ମତାମତ:", "importtext": "[[Special:Export|ରପ୍ତାନି ସୁବିଧା]] ବ୍ୟବହାର କରି ମୂଳ ଉଇକିରୁ ଫାଇଲଟି ରପ୍ତାନି କରନ୍ତୁ ।\nତାହାକୁ ଆପଣା କମ୍ପୁଟରରେ ସାଇତି ଏଠାରେ ଅପଲୋଡ଼ କରନ୍ତୁ ।", "importstart": "ପୃଷ୍ଠା ଆମଦାନି କରୁଛୁ...", "import-revision-count": "$1 ଗୋଟି {{PLURAL:$1|ସଂସ୍କରଣ|ସଂସ୍କରଣ}}", "importnopages": "ଆମଦାନି କରିବା ନିମନ୍ତେ ପୃଷ୍ଠା ନାହିଁ ।", - "imported-log-entries": "$1 ଗୋଟି {{PLURAL:$1|ଇତିହାସ|ଇତିହାସ}}ର ନିବେଶ ଆମଦାନୀ କରାଗଲା ।", + "imported-log-entries": "$1 ଗୋଟି {{PLURAL:$1|ଇତିହାସ|ଇତିହାସ}}ର ନିବେଶ ଆମଦାନି କରାଗଲା ।", "importfailed": "ଆମଦାନି ବିଫଳ ହେଲା: $1", - "importunknownsource": "ଅଜଣା ଆମଦାନୀ ମୂଳାଧାର ପ୍ରକାର", + "importunknownsource": "ଆମଦାନି ମୂଳାଧାର ପ୍ରକାର ଅଜଣା", "importcantopen": "ଆହରଣ ଫାଇଲଟି ଖୋଲି ପାରିଲୁ ନାହିଁ", "importbadinterwiki": "ଖରାପ ଇଣ୍ଟରଉଇକି ଲିଙ୍କ", "importsuccess": "ଆହରଣ ଶେଷ ହେଲା!", @@ -2201,10 +2199,6 @@ "import-logentry-upload-detail": "$1 {{PLURAL:$1|ଗୋଟି ସଂସ୍କରଣ|ଗୋଟି ସଂସ୍କରଣ}} ଅଣାଗଲା", "import-logentry-interwiki-detail": "$2ରୁ $1 {{PLURAL:$1|ଗୋଟି ସଂସ୍କରଣ|ଗୋଟି ସଂସ୍କରଣ}} ଅଣାଗଲା", "javascripttest": "ଜାଭାସ୍କ୍ରିପ୍ଟ ପରଖ", - "javascripttest-pagetext-noframework": "ଏହି ପୃଷ୍ଠାଟି ଜାଭାସ୍କ୍ରିପ୍ଟ ପରଖ ପାଇଁ ସଂରକ୍ଷଣ କରି ରଖାଯାଇଛି ।", - "javascripttest-pagetext-unknownframework": "\"$1\" ଅଜଣା ପରଖ ଗତିବିଧି ।", - "javascripttest-pagetext-frameworks": "ଦୟାକରି ନିମ୍ନରେ ଥିବା ଏକ ପରଖ ପ୍ରକ୍ରିୟାକୁ ବାଛନ୍ତୁ :$1", - "javascripttest-pagetext-skins": "ଏହି ପରଖକୁ ଚାଲୁ କରିବା ପାଇଁ ଏକ ଆବରଣ ବାଛନ୍ତୁ ।", "javascripttest-qunit-intro": "mediawiki.orgରେ [$1 testing documentation]କୁ ଦେଖନ୍ତୁ ।", "tooltip-pt-userpage": "{{GENDER:|ଆପଣଙ୍କ}} ବ୍ୟବହାରକାରୀ ପୃଷ୍ଠା", "tooltip-pt-anonuserpage": "ଆପଣ ଯେଉଁ IP ଠିକଣାର ବ୍ୟବହାରକାରୀ ପୃଷ୍ଠାଟି ବଦଳାଇବା ପାଇଁ ଚେଷ୍ଟା କରୁଛନ୍ତି", @@ -2449,8 +2443,8 @@ "exif-colorspace": "ରଙ୍ଗ ଫାଙ୍କା ଜାଗା", "exif-componentsconfiguration": "ପ୍ରତିତି ଉପାଦାନର ଅର୍ଥ", "exif-compressedbitsperpixel": "ଛବି ସଙ୍କୋଚନ ଅବସ୍ଥା", - "exif-pixelydimension": "ଛବି ଓସାର", - "exif-pixelxdimension": "ଛବି ଉଚ୍ଚତା", + "exif-pixelxdimension": "ଛବି ଓସାର", + "exif-pixelydimension": "ଛବି ଉଚ୍ଚତା", "exif-usercomment": "ସଭ୍ୟ ମତାମତ", "exif-relatedsoundfile": "ସମ୍ବନ୍ଧିତ ଶବ୍ଦ ଫାଇଲ", "exif-datetimeoriginal": "ତଥ୍ୟ ତିଆରିହେବାର ତାରିଖ ଓ ସମୟ", @@ -2885,7 +2879,6 @@ "version-libraries-library": "ପାଠାଗାର", "version-libraries-version": "ସଂସ୍କରଣ", "redirect": "ଫାଇଲ, ସଭ୍ୟ, ପୃଷ୍ଠା କିମ୍ବା ସଂସ୍କରଣ ID ଅନୁସାରେ ପୁନପ୍ରେରଣ", - "redirect-legend": "ଏକ ଫାଇଲ କିମ୍ବା ପୃଷ୍ଠାକୁ ପୁନପ୍ରେରଣ କରନ୍ତୁ", "redirect-summary": "(ଫାଇଲ ନାମ ଥିଲେ), (ଏକ ସଂସ୍କରଣ ID କିମ୍ବା ପୃଷ୍ଠା ID ଥିଲେ) କିମ୍ବା ଏକ ସଭ୍ୟ ଖାତା ଥିଲେ (ଏକ ସାଂଖିକ ସଭ୍ୟ ID)ଏହି ବିଶେଷ ପୃଷ୍ଠାଟି ଏକ ଫାଇଲକୁ ଲେଉଟାଇ ଦେଇଥାଏ । ବ୍ୟବହାର: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/page/64308]], [[{{#Special:Redirect}}/revision/328429]], କିମ୍ବା [[{{#Special:Redirect}}/user/101]].", "redirect-submit": "ଯାଆନ୍ତୁ", "redirect-lookup": "ଖୋଜନ୍ତୁ:", @@ -2897,7 +2890,6 @@ "redirect-not-exists": "ମୂଳ୍ୟ ମିଳିଲା ନାହିଁ", "fileduplicatesearch": "ଏହାର ନକଲ ପୃଷ୍ଠା ଖୋଜିବେ ।", "fileduplicatesearch-summary": "ହାସ୍ ମୂଲ୍ୟକୁ ନେଇ ଦୁଇଥର ଥିବା ଫାଇଲ ଖୋଜନ୍ତୁ ।", - "fileduplicatesearch-legend": "ନକଲ ପାଇଁ ଖୋଜନ୍ତୁ ।", "fileduplicatesearch-filename": "ଫାଇଲ ନାମ:", "fileduplicatesearch-submit": "ଖୋଜନ୍ତୁ", "fileduplicatesearch-info": "$1 × $2 pixel
ଫାଇଲ ପ୍ରକାର: $3
MIME ପ୍ରକାର: $4", diff --git a/languages/i18n/pa.json b/languages/i18n/pa.json index 407e9b9f44..9bb2e213f6 100644 --- a/languages/i18n/pa.json +++ b/languages/i18n/pa.json @@ -1356,8 +1356,6 @@ "categories": "ਸ਼੍ਰੇਣੀਆਂ", "categories-submit": "ਦਿਖਾਓ", "categoriesfrom": "ਇਸਤੋਂ ਸ਼ੁਰੂ ਹੋਣ ਵਾਲ਼ੀਆਂ ਕੈਟੇਗਰੀਆਂ ਵਖਾਓ:", - "special-categories-sort-count": "ਗਿਣਤੀ ਮੁਤਾਬਕ ਤਰਤੀਬ ਦੇਵੋ", - "special-categories-sort-abc": "ਅੱਖਰਾਂ ਮੁਤਾਬਕ ਤਰਤੀਬ ਦਿਓ", "deletedcontributions": "ਮਿਟਾਏ ਹੋਏ ਵਰਤੋਂਕਾਰ ਯੋਗਦਾਨ", "deletedcontributions-title": "ਮਿਟਾਏ ਹੋਏ ਵਰਤੋਂਕਾਰ ਯੋਗਦਾਨ", "sp-deletedcontributions-contribs": "ਯੋਗਦਾਨ", @@ -1920,8 +1918,8 @@ "exif-copyright": "ਕਾਪੀਰਾਈਟ ਟਾਇਟਲ", "exif-exifversion": "ਐਗਜ਼ਿਫ਼ ਦਾ ਰੂਪ", "exif-colorspace": "ਰੰਗ ਸਪੇਸ", - "exif-pixelydimension": "ਤਸਵੀਰ ਦੀ ਚੌੜਾਈ", - "exif-pixelxdimension": "ਤਸਵੀਰ ਦੀ ਲੰਬਾਈ", + "exif-pixelxdimension": "ਤਸਵੀਰ ਦੀ ਚੌੜਾਈ", + "exif-pixelydimension": "ਤਸਵੀਰ ਦੀ ਲੰਬਾਈ", "exif-usercomment": "ਵਰਤੋਂਕਾਰ ਦੀਆਂ ਟਿੱਪਣੀਆਂ", "exif-relatedsoundfile": "ਮਿਲਦੀ-ਜੁਲਦੀ ਆਡੀਓ ਫ਼ਾਈਲ", "exif-datetimeoriginal": "ਡਾਟਾ ਦੇ ਬਣਨ ਦੀ ਮਿਤੀ ਅਤੇ ਸਮਾਂ", @@ -2226,7 +2224,6 @@ "version-software-version": "ਵਰਜਨ", "version-entrypoints-header-entrypoint": "ਦਾਖ਼ਲਾ ਬਿੰਦੂ", "version-entrypoints-header-url": "ਯੂ.ਆਰ.ਐੱਲ", - "redirect-legend": "ਕਿਸੇ ਸਫ਼ੇ ਜਾਂ ਫ਼ਾਈਲ ਵੱਲ ਰੀਡਾਇਰੈਕਟ ਕਰੋ", "redirect-submit": "ਜਾਓ", "redirect-lookup": "ਲੱਭੋ:", "redirect-value": "ਮੁੱਲ:", @@ -2236,7 +2233,6 @@ "redirect-file": "ਫ਼ਾਈਲ ਦਾ ਨਾਂ", "redirect-not-exists": "ਮੁੱਲ ਲੱਭਿਆ ਨਹੀਂ", "fileduplicatesearch": "ਨਕਲੀ ਫ਼ਾਈਲਾਂ ਲਈ ਖੋਜ ਕਰੋ", - "fileduplicatesearch-legend": "ਕਿਸੇ ਨਕਲ ਲਈ ਖੋਜੋ", "fileduplicatesearch-filename": "ਫ਼ਾਈਲ ਦਾ ਨਾਂ:", "fileduplicatesearch-submit": "ਖੋਜ", "fileduplicatesearch-noresults": "\"$1\" ਨਾਂ ਦੀ ਕੋਈ ਫ਼ਾਈਲ ਨਹੀਂ ਲੱਭੀ।", diff --git a/languages/i18n/pam.json b/languages/i18n/pam.json index 7060c0bbcd..6e60056fe3 100644 --- a/languages/i18n/pam.json +++ b/languages/i18n/pam.json @@ -955,8 +955,6 @@ "allpages-bad-ns": "Ing {{SITENAME}} ala lang pirinan lagyung (namespace) \"$1\".", "categories": "Kategoriya", "categoriespagetext": "Deng tutuking categoria atin lang bulung o media\n[[Special:UnusedCategories|Unused categories]] are not shown here.\nAlso see [[Special:WantedCategories|wanted categories]].", - "special-categories-sort-count": "surian tukituki agpang keng bilang", - "special-categories-sort-abc": "surian lang tukituki agpang keng kulitan", "deletedcontributions": "Deng ambag da reng talagamit a mebura", "deletedcontributions-title": "Deng ambag da reng talagamit a mebura", "linksearch": "Suglung palual", @@ -1454,8 +1452,8 @@ "exif-colorspace": "Pirinan kule (color space)", "exif-componentsconfiguration": "Kabaldugan ning balang dake (component)", "exif-compressedbitsperpixel": "Paralan/ayus pamamitpit larawan (image compression mode)", - "exif-pixelydimension": "Ustung lapad ning larawan", - "exif-pixelxdimension": "Ustung katas ning larawan", + "exif-pixelxdimension": "Ustung lapad ning larawan", + "exif-pixelydimension": "Ustung katas ning larawan", "exif-usercomment": "Komentu da ring talagamit", "exif-relatedsoundfile": "Makaugneng simpan a katni (audio file)", "exif-datetimeoriginal": "Petsa ampong oras ning pamaglalang king data (data generation)", @@ -1644,7 +1642,6 @@ "version-software-version": "Bersion", "version-libraries-license": "Lisensya", "fileduplicatesearch": "Maintun simpan (file) a kapareu", - "fileduplicatesearch-legend": "Maintun kapareu", "fileduplicatesearch-filename": "Lagyungsimpan (filename):", "fileduplicatesearch-submit": "Maintun", "fileduplicatesearch-result-1": "Ala yang eksaktung kapareu ing simpan (file) a \"$1\".", diff --git a/languages/i18n/pdc.json b/languages/i18n/pdc.json index ec42bffb8d..608b0d1f07 100644 --- a/languages/i18n/pdc.json +++ b/languages/i18n/pdc.json @@ -460,7 +460,6 @@ "statistics-header-users": "Nummere vun Yuuser", "statistics-pages": "Bledder", "doubleredirects": "Zweefache Weiderleidinge", - "double-redirect-fixer": "Xqbot", "brokenredirects": "Kaputte Weiderleidinge", "brokenredirects-edit": "ennere", "brokenredirects-delete": "verwische", @@ -596,7 +595,6 @@ "contribslink": "Ardickele", "move-page": "„$1“ ziehe", "move-page-legend": "Blatt ziehe", - "movearticle": "Blatt ziehe:", "move-watch": "watsch des Blatt", "movepagebtn": "Blatt ziehe", "pagemovedsub": "Blatt iss gezoge warre", diff --git a/languages/i18n/pl.json b/languages/i18n/pl.json index cb6bd27331..23272b7e2e 100644 --- a/languages/i18n/pl.json +++ b/languages/i18n/pl.json @@ -82,7 +82,10 @@ "PiotrAntosz", "The Polish", "Expert3222", - "Mateuszek045" + "Mateuszek045", + "Sethakill", + "Mateon1", + "Jdx" ] }, "tog-underline": "Podkreślenie linków:", @@ -100,6 +103,7 @@ "tog-watchdefault": "Dodawaj do obserwowanych strony i pliki, które edytuję", "tog-watchmoves": "Dodawaj do obserwowanych strony i pliki, które przenoszę", "tog-watchdeletion": "Dodawaj do obserwowanych strony i pliki, które usuwam", + "tog-watchuploads": "Dodawaj do obserwowanych przesyłane przeze mnie nowe pliki", "tog-watchrollback": "Dodawaj do obserwowanych strony, w których {{GENDER:|wycofałem|wycofałam}} edycję", "tog-minordefault": "Wszystkie edycje domyślnie oznaczaj jako drobne", "tog-previewontop": "Pokazuj podgląd powyżej obszaru edycji", @@ -223,7 +227,6 @@ "moredotdotdot": "Więcej...", "morenotlisted": "Nie jest to kompletna lista.", "mypage": "Strona", - "anonuserpage": "Użytkownik anonimowy", "mytalk": "Dyskusja", "anontalk": "Dyskusja", "navigation": "Nawigacja", @@ -543,7 +546,7 @@ "noemail": "Brak zdefiniowanego adresu e‐mail dla użytkownika „$1”.", "noemailcreate": "Musisz podać prawidłowy adres e‐mail", "passwordsent": "Nowe hasło zostało wysłane na adres e‐mail użytkownika „$1”.\nPo otrzymaniu go zaloguj się ponownie.", - "blocked-mailpassword": "Twój adres IP został zablokowany i nie możesz używać funkcji odzyskiwania hasła z powodu możliwości jej nadużywania.", + "blocked-mailpassword": "Edycja z twojego adresu IP jest zablokowana. Aby zapobiec nadużyciom, dla tego adresu IP funkcja odzyskiwania hasła nie jest możliwa.", "eauthentsent": "Potwierdzenie zostało wysłane na adres e‐mail.\nZanim jakiekolwiek inne wiadomości zostaną wysłane na ten adres, należy wykonać zawarte w mailu instrukcje. Potwierdzisz w ten sposób, że ten adres e‐mail należy do Ciebie.", "throttled-mailpassword": "Przypomnienie hasła zostało już wysłane w ciągu {{PLURAL:$1|ostatniej godziny|ostatnich $1 godzin}}.\nAby zapobiec nadużyciom nadużyć możliwość wysyłania przypomnień została ograniczona do jednego na {{PLURAL:$1|godzinę|$1 godziny|$1 godzin}}.", "mailerror": "W trakcie wysyłania wiadomości e‐mail wystąpił błąd: $1", @@ -583,13 +586,31 @@ "changepassword-success": "Twoje hasło zostało zmienione!", "changepassword-throttled": "Ostatnio zbyt wiele razy próbowałeś zalogować się na to konto.\nOdczekaj $1, zanim ponowisz próbę.", "botpasswords": "Hasła bota", + "botpasswords-summary": "Hasła bota pozwalają na dostęp do konta użytkownika za pośrednictwem interfejsu API bez korzystania z danych konta. Uprawnienia uczestnika przy użyciu hasła bota mogą być ograniczone.\n\nJeśli nie wiesz, dlaczego miałbyś je tworzyć, nie powinieneś tego robić. Nikt nie powinien prosić Cię o utworzyć i podanie tego hasła.", + "botpasswords-disabled": "Hasła robotów zostały wyłączone.", + "botpasswords-no-central-id": "Aby użyć hasła robotów, musisz być zalogowany na koncie uniwersalnym.", + "botpasswords-existing": "Istniejące hasło bota", + "botpasswords-createnew": "Stwórz nowe hasło bota", + "botpasswords-editexisting": "Edytuj istniejące hasło bota", "botpasswords-label-appid": "Nazwa bota:", "botpasswords-label-create": "Utwórz", "botpasswords-label-update": "Aktualizuj", "botpasswords-label-cancel": "Anuluj", "botpasswords-label-delete": "Usuń", "botpasswords-label-resetpassword": "Zresetuj hasło", + "botpasswords-label-grants": "Zastosowane uprawnienia:", + "botpasswords-label-restrictions": "Ograniczenia użytkowania:", "botpasswords-label-grants-column": "Przyznane", + "botpasswords-bad-appid": "Nazwa bota \"$1\" nie jest prawidłowa.", + "botpasswords-created-title": "Hasło bota stworzone", + "botpasswords-created-body": "Hasło bota \"$1\" użytkownika \"$2\" zostało utworzone.", + "botpasswords-updated-title": "Hasło bota zaktualizowane", + "botpasswords-updated-body": "Hasło bota \"$1\" użytkownika \"$2\" zostało zaktualizowane.", + "botpasswords-deleted-title": "Hasło bota usunięte", + "botpasswords-deleted-body": "Hasło bota \"$1\" użytkownika \"$2\" zostało usunięte.", + "botpasswords-no-provider": "BotPasswordsSessionProvider nie jest dostępne.", + "botpasswords-restriction-failed": "Logowanie nie powiodło się z powodu ograniczeń na hasło bota.", + "botpasswords-not-exist": "Użytkownik \"$1\" nie ma hasła dla bota o nazwie \"$2\".", "resetpass_forbidden": "Hasła nie mogą zostać zmienione", "resetpass-no-info": "Musisz być zalogowany, by uzyskać bezpośredni dostęp do tej strony.", "resetpass-submit-loggedin": "Zmień hasło", @@ -914,6 +935,7 @@ "mergehistory-fail-bad-timestamp": "Znacznik czasu jest nieprawidłowy.", "mergehistory-fail-invalid-source": "Strona źródłowa jest nieprawidłowa.", "mergehistory-fail-invalid-dest": "Strona docelowa jest nieprawidłowa.", + "mergehistory-fail-permission": "Brak uprawnień aby połączyć historię.", "mergehistory-fail-self-merge": "Strona źródłowa i docelowa są takie same.", "mergehistory-fail-toobig": "Nie można połączyć historii, gdyż wymagałoby to przeniesienia więcej niż maksymalnej dopuszczalnej liczby $1 {{PLURAL:$1|wersji}}.", "mergehistory-no-source": "Strona źródłowa $1 nie istnieje.", @@ -1356,9 +1378,9 @@ "recentchangeslinked-page": "Tytuł strony:", "recentchangeslinked-to": "Pokaż zmiany nie na stronach linkowanych, a na stronach linkujących do podanej strony", "recentchanges-page-added-to-category": "dodano [[:$1]] do kategorii", - "recentchanges-page-added-to-category-bundled": "dodano [[:$1]] oraz {{PLURAL:$2|jedną stronę|$2 strony|$2 stron}} do kategorii", + "recentchanges-page-added-to-category-bundled": "dodano [[:$1]] do kategorii, [[Special:WhatLinksHere/$1|ta strona jest zawarta w innych stronach]]", "recentchanges-page-removed-from-category": "usunięto [[:$1]] z kategorii", - "recentchanges-page-removed-from-category-bundled": "usunięto [[:$1]] oraz {{PLURAL:$2|jedną stronę|$2 strony|$2 stron}} z kategorii", + "recentchanges-page-removed-from-category-bundled": "usunięto [[:$1]] z kategorii, [[Special:WhatLinksHere/$1|ta strona jest zawarta w innych stronach]]", "autochange-username": "Automatyczna zmiana MediaWiki", "upload": "Prześlij plik", "uploadbtn": "Prześlij plik", @@ -1427,6 +1449,7 @@ "uploaddisabledtext": "Możliwość przesyłania plików została wyłączona.", "php-uploaddisabledtext": "Przesyłanie plików PHP zostało zablokowane. Sprawdź ustawienie „file_uploads”.", "uploadscripted": "Plik zawiera kod HTML lub skrypt, który może zostać błędnie zinterpretowany przez przeglądarkę internetową.", + "upload-scripted-pi-callback": "Nie można przesłać pliku, zawierającego instrukcję obsługi arkusza stylów XML.", "uploaded-script-svg": "Znaleziono element skryptowy „$1” we przesyłanym pliku SVG.", "uploaded-hostile-svg": "Znaleziono niebezpieczny kod CSS w przesyłanym pliku SVG.", "uploadscriptednamespace": "Ten plik SVG zawiera niedozwoloną przestrzeń nazw '$1'", @@ -1441,7 +1464,7 @@ "upload-description": "Opis pliku", "upload-options": "Opcje przesyłania", "watchthisupload": "Obserwuj ten plik", - "filewasdeleted": "Plik o tej nazwie istniał, ale został usunięty.\nZanim załadujesz go ponownie, sprawdź $1.", + "filewasdeleted": "Plik o tej nazwie już istniał, ale został usunięty.\nZanim załadujesz go ponownie, sprawdź $1.", "filename-thumb-name": "Nazwa pliku wskazuje na to, że próbujesz przesłać miniaturkę obrazka. Prosimy nie przesyłać miniaturek w ramach tej samej wiki. Jeśli jest to konieczne, to zmień nazwę na bardziej opisową (w szczególności taką, w której nie ma prefiksu typowego dla miniaturek).", "filename-bad-prefix": "Nazwa pliku, który przesyłasz, zaczyna się od '''„$1”'''. Jest to nazwa zazwyczaj przypisywana automatycznie przez cyfrowe aparaty fotograficzne, która nie informuje o zawartości pliku.\nZmień nazwę pliku na bardziej opisową.", "filename-prefix-blacklist": " #
\n# Składnia jest następująca:\n#  * Wszystko od znaku \"#\" do końca linii uznawane jest za komentarz\n#  * Każda niepusta linia zawiera początek nazwy pliku domyślnie wykorzystywany przez aparaty cyfrowe\nCIMG # Casio\nDSC_ # Nikon\nDSCF # Fuji\nDSCN # Nikon\nDUW # niektóre telefony komórkowe\nIMG # ogólny\nJD # Jenoptik\nMGP # Pentax\nPICT # wiele różnych\n  #
", @@ -1526,6 +1549,7 @@ "uploadstash-badtoken": "Operacja nie powiodła się. Być może Twoje upoważnienie do edytowania wygasło. Spróbuj ponownie.", "uploadstash-errclear": "Czyszczenie plików nie powiodło się.", "uploadstash-refresh": "Odśwież listę plików", + "uploadstash-thumbnail": "pokaż miniaturkę", "invalid-chunk-offset": "Nieprawidłowe przesunięcie fragmentu", "img-auth-accessdenied": "Odmowa dostępu", "img-auth-nopathinfo": "Brak PATH_INFO.\nSerwer nie został skonfigurowany, tak aby przekazywał tę informację.\nMożliwe, że jest oparty na CGI i nie może obsługiwać img_auth.\nWięcej o informacji o autoryzacji grafik na https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Image_Authorization.", @@ -1785,6 +1809,7 @@ "apisandbox-reset": "Wyczyść", "apisandbox-retry": "Ponów próbę", "apisandbox-loading": "Ładowanie informacji o module API „$1”…", + "apisandbox-load-error": "Wystąpił błąd podczas pobierania informacji dla modułu API „$1”: $2", "apisandbox-no-parameters": "Ten moduł API nie posiada parametrów.", "apisandbox-helpurls": "Linki pomocy", "apisandbox-examples": "Przykłady", @@ -1799,6 +1824,7 @@ "apisandbox-results": "Wyniki", "apisandbox-sending-request": "Wysyłanie zapytania API…", "apisandbox-loading-results": "Pobieranie wyników API...", + "apisandbox-results-error": "Wystąpił błąd podczas pobierania odpowiedzi na zapytanie API: $1.", "apisandbox-request-url-label": "URL zapytania:", "apisandbox-request-time": "Czas przetwarzania zapytania: {{PLURAL:$1|$1 ms}}", "apisandbox-results-fixtoken": "Popraw token i wyślij ponownie", @@ -1842,8 +1868,6 @@ "categories-submit": "Pokaż", "categoriespagetext": "Strona przedstawia {{PLURAL:$1|kategorię zawierającą|listę kategorii zawierających}} strony lub pliki.\n[[Special:UnusedCategories|Nieużywane kategorie]] zostały ukryte.\nZobacz również [[Special:WantedCategories|brakujące kategorie]].", "categoriesfrom": "Wyświetl kategorie, zaczynając od:", - "special-categories-sort-count": "sortowanie według liczby", - "special-categories-sort-abc": "sortowanie alfabetyczne", "deletedcontributions": "Usunięty wkład użytkownika", "deletedcontributions-title": "Usunięty wkład użytkownika", "sp-deletedcontributions-contribs": "wkład", @@ -2218,6 +2242,7 @@ "ipb-unblock": "Odblokuj użytkownika lub adres IP", "ipb-blocklist": "Zobacz istniejące blokady", "ipb-blocklist-contribs": "Wkład {{GENDER:$1|$1}}", + "ipb-blocklist-duration-left": "pozostało $1", "unblockip": "Odblokuj użytkownika", "unblockiptext": "Użyj poniższego formularza, by przywrócić możliwość edycji z wcześniej zablokowanego adresu IP lub użytkownikowi.", "ipusubmit": "Odblokuj", @@ -2459,11 +2484,7 @@ "import-logentry-upload-detail": "$1 {{PLURAL:$1|wersja|wersje|wersji}}", "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|wersja|wersje|wersji}} z $2", "javascripttest": "Testowanie JavaScript", - "javascripttest-pagetext-noframework": "Ta strona jest zarezerwowana dla wykonywania testów JavaScript.", - "javascripttest-pagetext-unknownframework": "Nieznany framework testowania „$1”.", "javascripttest-pagetext-unknownaction": "Nieznana akcja \"$1\".", - "javascripttest-pagetext-frameworks": "Wybierz jeden z następujących frameworków testowania: $1", - "javascripttest-pagetext-skins": "Wybierz skórkę, na której chcesz uruchomić testy:", "javascripttest-qunit-intro": "Zobacz [$1 dokumentację testów] na mediawiki.org.", "tooltip-pt-userpage": "{{GENDER:|Moja}} strona osobista", "tooltip-pt-anonuserpage": "Strona użytkownika dla adresu IP, spod którego edytujesz", @@ -2728,8 +2749,8 @@ "exif-colorspace": "Przestrzeń kolorów", "exif-componentsconfiguration": "Znaczenie składowych", "exif-compressedbitsperpixel": "Skompresowanych bitów na piksel", - "exif-pixelydimension": "Prawidłowa szerokość obrazu", - "exif-pixelxdimension": "Prawidłowa wysokość obrazu", + "exif-pixelxdimension": "Szerokość obrazu", + "exif-pixelydimension": "Wysokość obrazu", "exif-usercomment": "Komentarz użytkownika", "exif-relatedsoundfile": "Powiązany plik audio", "exif-datetimeoriginal": "Data i czas utworzenia oryginału", @@ -3097,7 +3118,7 @@ "autoredircomment": "Przekierowanie do [[$1]]", "autosumm-new": "Utworzono nową stronę \"$1\"", "autosumm-newblank": "Utworzono pustą stronę", - "size-bytes": "$1 B", + "size-bytes": "$1 {{PLURAL:$1|bajt|bajty|bajtów}}", "size-kilobytes": "$1 KB", "size-megabytes": "$1 MB", "size-gigabytes": "$1 GB", @@ -3212,8 +3233,7 @@ "version-libraries-description": "Opis", "version-libraries-authors": "Autorzy", "redirect": "Przekierowanie z identyfikatora pliku, użytkownika, strony, wersji lub wpisu rejestru", - "redirect-legend": "Przekieruj do pliku lub strony", - "redirect-summary": "Ta strona specjalna przekierowuje do: pliku (o podanej nazwie), do strony (o podanym numerze wersji lub identyfikatorze strony) albo do strony użytkownika (o podanym identyfikatorze numerycznym). Sposób użycia: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/revision/328429]] albo [[{{#Special:Redirect}}/user/101]].", + "redirect-summary": "Ta strona specjalna przekierowuje do: pliku (o podanej nazwie), do strony (o podanym numerze wersji lub identyfikatorze strony), do strony użytkownika (o podanym identyfikatorze numerycznym) albo do rejestru (o podanym numerze akcji). Sposób użycia: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/revision/328429]], [[{{#Special:Redirect}}/user/101]] albo [[{{#Special:Redirect}}/logid/186]].", "redirect-submit": "Przejdź", "redirect-lookup": "Wyszukaj:", "redirect-value": "Wartość:", @@ -3221,10 +3241,10 @@ "redirect-page": "Identyfikator strony", "redirect-revision": "Wersja strony", "redirect-file": "Nazwa pliku", + "redirect-logid": "ID rejestru", "redirect-not-exists": "Nie znaleziono wartości", "fileduplicatesearch": "Wyszukiwanie duplikatów pliku", "fileduplicatesearch-summary": "Wyszukiwanie duplikatów pliku na podstawie wartości funkcji skrótu.", - "fileduplicatesearch-legend": "Szukaj duplikatów pliku", "fileduplicatesearch-filename": "Nazwa pliku:", "fileduplicatesearch-submit": "Szukaj", "fileduplicatesearch-info": "$1 × $2 pikseli
Wielkość pliku: $3
Typ MIME: $4", @@ -3422,7 +3442,7 @@ "logentry-protect-protect-cascade": "$1 {{GENDER:$2|zabezpieczył|zabezpieczyła|zabezpieczył(a)}} $3 $4 [kaskadowo]", "logentry-protect-modify": "$1 {{GENDER:$2|zmienił|zmieniła|zmienił(a)}} poziom zabezpieczenia dla $3 $4", "logentry-protect-modify-cascade": "$1 {{GENDER:$2|zmienił|zmieniła|zmienił(a)}} poziom zabezpieczenia dla $3 $4 [kaskadowo]", - "logentry-rights-rights": "$1 {{GENDER:$2|zmienił|zmieniła}} przynależność $3 do grup ($4 → $5)", + "logentry-rights-rights": "$1 {{GENDER:$2|zmienił|zmieniła|zmienił(a)}} przynależność {{GENDER:$3|$3}} do grupy z $4 do $5", "logentry-rights-rights-legacy": "$1 {{GENDER:$2|zmienił|zmieniła}} przynależność $3 do grup", "logentry-rights-autopromote": "$1 automatycznie {{GENDER:$2|zmienił|zmieniła}} przynależność ($4 → $5)", "logentry-upload-upload": "$1 {{GENDER:$2|przesłał|przesłała}} $3", @@ -3500,7 +3520,7 @@ "api-error-stashfailed": "Błąd wewnętrzny – serwer nie mógł zapisać pliku tymczasowego.", "api-error-publishfailed": "Błąd wewnętrzny: serwer nie mógł zapisać pliku tymczasowego.", "api-error-stasherror": "Wystąpił błąd podczas przesyłania pliku.", - "api-error-stashedfilenotfound": "Nie odnaleziono pliku zapasowego podczas próby jego pobrania z archiwum.", + "api-error-stashedfilenotfound": "Nie odnaleziono pliku podczas próby pobrania go ze schowka.", "api-error-stashpathinvalid": "Ścieżka do pliku zapasowego jest błędna.", "api-error-stashfilestorage": "Wystąpił błąd podczas przesyłania pliku do archiwum.", "api-error-stashzerolength": "Serwer nie może zapisać pliku zapasowego do archiwum, gdyż ma on zerową długość.", @@ -3515,6 +3535,7 @@ "api-error-unknownerror": "Nieznany błąd: „$1”", "api-error-uploaddisabled": "Na tej wiki przesyłanie zostało wyłączone.", "api-error-verification-error": "Plik może być uszkodzony lub nazwa pliku ma nieprawidłowe rozszerzenie.", + "api-error-was-deleted": "Plik o tej nazwie już istniał, ale został usunięty.", "duration-seconds": "$1 {{PLURAL:$1|sekunda|sekundy|sekund}}", "duration-minutes": "$1 {{PLURAL:$1|minuta|minuty|minut}}", "duration-hours": "$1 {{PLURAL:$1|godzina|godziny|godzin}}", @@ -3552,6 +3573,7 @@ "expand_templates_generate_rawhtml": "Pokaż surowy HTML", "expand_templates_preview": "Podgląd", "expand_templates_preview_fail_html": "Ponieważ {{SITENAME}} ma włączony surowy kod HTML i zaistniała strata danych z sesji, podgląd jest ukryty jako zabezpieczenie przed atakiem JavaScript.\n\nJeśli to jest próba słusznego podglądu, proszę spróbować ponownie.\nJeśli to nie pomoże – spróbuj [[Special:UserLogout|wylogować się]] i zalogować ponownie, a także upewnij się, że twoja przeglądarka akceptuje ciasteczka z tej witryny.", + "expand_templates_input_missing": "Trzeba wpisać jakiś tekst.", "pagelanguage": "Zmiana języka strony", "pagelang-name": "Strona", "pagelang-language": "Język", @@ -3602,6 +3624,7 @@ "special-characters-group-ipa": "IPA", "special-characters-group-symbols": "Symbole", "special-characters-group-greek": "Greckie", + "special-characters-group-greekextended": "Greckie (rozszerzony)", "special-characters-group-cyrillic": "Cyrylica", "special-characters-group-arabic": "Arabskie", "special-characters-group-arabicextended": "Arabskie (rozszerzony)", @@ -3625,5 +3648,30 @@ "mw-widgets-titleinput-description-new-page": "strona jeszcze nie istnieje", "mw-widgets-titleinput-description-redirect": "przekierowanie do $1", "api-error-blacklisted": "Wybierz inny, opisowy tytuł.", - "randomrootpage": "Losowa strona (bez podstron)" + "sessionmanager-tie": "Nie można łączyć kilku rodzajów uwierzytelniania dla zapytania: $1.", + "sessionprovider-mediawiki-session-cookiesessionprovider": "sesje na podstawie cookie", + "sessionprovider-nocookies": "Być może cookies są wyłączone. Upewnij się, że masz włączone cookies i zacznij od nowa.", + "randomrootpage": "Losowa strona (bez podstron)", + "log-action-filter-block": "Rodzaj blokady:", + "log-action-filter-delete": "Rodzaj usunięcia:", + "log-action-filter-protect": "Rodzaj zabezpieczenia:", + "log-action-filter-upload": "Rodzaj przesłanych:", + "log-action-filter-all": "Wszystkie", + "log-action-filter-block-block": "Zablokowanie", + "log-action-filter-block-reblock": "Zmiana blokady", + "log-action-filter-block-unblock": "Odblokowanie", + "log-action-filter-delete-delete": "Usunięcie strony", + "log-action-filter-delete-restore": "Odtworzenie strony", + "log-action-filter-delete-event": "Usunięcie wpisu rejestru", + "log-action-filter-delete-revision": "Usunięcie wersji", + "log-action-filter-import-interwiki": "Import transwiki", + "log-action-filter-managetags-create": "Utworzenie znacznika", + "log-action-filter-managetags-delete": "Usunięcie znacznika", + "log-action-filter-managetags-activate": "Aktywacja znacznika", + "log-action-filter-managetags-deactivate": "Deaktywacja znacznika", + "log-action-filter-protect-protect": "Zabezpieczenie", + "log-action-filter-protect-modify": "Zmiana zabezpieczenia", + "log-action-filter-protect-unprotect": "Odbezpieczenie", + "log-action-filter-upload-upload": "Nowe przesłane", + "log-action-filter-upload-overwrite": "Przesłane ponownie" } diff --git a/languages/i18n/pms.json b/languages/i18n/pms.json index 305806f391..f127930f88 100644 --- a/languages/i18n/pms.json +++ b/languages/i18n/pms.json @@ -1656,8 +1656,6 @@ "categories": "Categorìe", "categoriespagetext": "{{PLURAL:$1|Costa categorìa a conten|Coste categorìe a conten-o}} dle pàgine ò dj'archivi.\n[[Special:UnusedCategories|Le categorìe nen dovrà]] a son pa mostrà ambelessì.\nCh'a bèica ëdcò [[Special:WantedCategories|le categorìe domandà]].", "categoriesfrom": "Smon-e le categorìe an partend da:", - "special-categories-sort-count": "ordiné për nùmer", - "special-categories-sort-abc": "rangé la lista an órdin alfabétich", "deletedcontributions": "Modìfiche faite da utent scancelà", "deletedcontributions-title": "Modìfiche faite da utent scancelà", "sp-deletedcontributions-contribs": "contribussion", @@ -2240,11 +2238,7 @@ "import-logentry-upload-detail": "$1 {{PLURAL:$1|revision}} amportà", "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|revision}} amportà da $2", "javascripttest": "Preuva ëd JavaScript", - "javascripttest-pagetext-noframework": "Costa pàgina a l'é arservà për fé dle preuve JavaScript.", - "javascripttest-pagetext-unknownframework": "Strutura ëd preuva pa conossùa «$1».", "javascripttest-pagetext-unknownaction": "Assion nen conossùa «$1».", - "javascripttest-pagetext-frameworks": "Për piasì, ch'a serna un-a dle struture ëd preuva sì-dapress: $1", - "javascripttest-pagetext-skins": "Ch'a serna na pel për fé le preuve:", "javascripttest-qunit-intro": "Vëdde [$1 la documentassion dle preuve] dzora a mediawiki.org.", "tooltip-pt-userpage": "Soa pàgina utent", "tooltip-pt-anonuserpage": "La pàgina utent për l'IP con ël qual chiel a contribuiss", @@ -2494,8 +2488,8 @@ "exif-colorspace": "Spassi dij color", "exif-componentsconfiguration": "Significà ëd minca component", "exif-compressedbitsperpixel": "Sistema ëd compression dle figure", - "exif-pixelydimension": "Larghëssa dla figura", - "exif-pixelxdimension": "Autëssa dla figura", + "exif-pixelxdimension": "Larghëssa dla figura", + "exif-pixelydimension": "Autëssa dla figura", "exif-usercomment": "Nòte lìbere", "exif-relatedsoundfile": "Archivi sonor colegà", "exif-datetimeoriginal": "Data e ora dla generassion dij dat", @@ -2954,7 +2948,6 @@ "version-libraries-library": "Biblioteca", "version-libraries-version": "Version", "redirect": "Ridirigiù da archivi, utent, pàgina o ID ëd revision", - "redirect-legend": "Ridirige a n'archivi o na pàgina", "redirect-summary": "Costa pàgina special a ponta a n'archivi (dàit ël nòm dl'archivi), na pàgina (dàit n'ID ëd revision o n'ID ëd pàgina) o na pàgina d'utent (dàit n'identificativ numérich a l'utent). Usagi: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/revision/328429]], o [[{{#Special:Redirect}}/user/101]].", "redirect-submit": "Andé", "redirect-lookup": "Arserca:", @@ -2966,7 +2959,6 @@ "redirect-not-exists": "Valor nen trovà", "fileduplicatesearch": "Arsërca dj'archivi dobi", "fileduplicatesearch-summary": "Arsërca dj'archivi dobi a parte dal valor d'ordinament.", - "fileduplicatesearch-legend": "Arsërca ëd na dobia", "fileduplicatesearch-filename": "Nòm dl'archivi:", "fileduplicatesearch-submit": "Arsërca", "fileduplicatesearch-info": "$1 × $2 pontin
Amzure: $3
Sòrt MIME: $4", diff --git a/languages/i18n/pnb.json b/languages/i18n/pnb.json index 57c0b4290b..3ef60e7ef4 100644 --- a/languages/i18n/pnb.json +++ b/languages/i18n/pnb.json @@ -1357,8 +1357,6 @@ "categories": "گٹھاں", "categoriespagetext": "تھلے {{PLURAL:$1|گٹھ چ|گٹھاں چ}} صفے یا میڈیا۔\n[[Special:UnusedCategories|ناں ورتیاں گٹھاں]] ایتھے نئیں دسے گۓ۔\nایہ وی ویکھو [[Special:WantedCategories|چائیدیاں گٹھاں]]", "categoriesfrom": "گٹھاں وکھاؤ جیہڑیاں شروع ہون:", - "special-categories-sort-count": "گنتی سعاب نال وکھریاں کرو", - "special-categories-sort-abc": "ا ب دے سعاب نال ونڈو", "deletedcontributions": "ورتن والے دے کم مٹادتے گۓ۔", "deletedcontributions-title": "ورتن والے دے کم مٹادتے گۓ۔", "sp-deletedcontributions-contribs": " کم", @@ -1878,10 +1876,6 @@ "import-logentry-upload-detail": "$1 {{PLURAL:$1|ریوین|ریویناں}}", "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|ریوین|ریویناں }} $2 توں", "javascripttest": "JavaScript ٹیسٹنگ", - "javascripttest-pagetext-noframework": "ایہ صفہ JavaScript ٹیسٹاں لئی بچایا گیا اے۔", - "javascripttest-pagetext-unknownframework": "\"$1\" انجانا ٹیسٹنگ فریمورک۔", - "javascripttest-pagetext-frameworks": "مہربانی کرکے تھلے دتے گۓ ٹیسٹ فریمورکاں چوں اک چنو : $1", - "javascripttest-pagetext-skins": "اپنی پسند دا کوئی نمونہ چنو جیدے تے ٹیسٹ چلن:", "javascripttest-qunit-intro": "mediawiki.org تے [$1 ٹسٹنگ ڈوکومنٹیشن] ویکھو۔", "tooltip-pt-userpage": "میرا صفہ", "tooltip-pt-anonuserpage": "ورتن صفہ IP پتے لئی تسی تبدیل کر رۓ او۔۔۔", @@ -2065,8 +2059,8 @@ "exif-colorspace": "رنگ سپیس", "exif-componentsconfiguration": "ہر انگ دا مطلب", "exif-compressedbitsperpixel": "امیج کمپریشن موڈ", - "exif-pixelydimension": "امیج چوڑائی", - "exif-pixelxdimension": "امیج اچائی", + "exif-pixelxdimension": "امیج چوڑائی", + "exif-pixelydimension": "امیج اچائی", "exif-usercomment": "ورتن آلے دی صلاع", "exif-relatedsoundfile": "رلدی آڈیو فائل", "exif-datetimeoriginal": "تریخ تے ویلہ ڈیٹا جنریشن دا", @@ -2466,7 +2460,6 @@ "version-software-version": "ورژن", "fileduplicatesearch": "دوہری فائلاں دی کھوج کرو", "fileduplicatesearch-summary": "دوہریاں فائلاں دی کھوج ہیش ویلیو تے اے۔", - "fileduplicatesearch-legend": "دوہری دی کھوج کرو۔", "fileduplicatesearch-filename": "فائل دا ناں", "fileduplicatesearch-submit": "کھوج", "fileduplicatesearch-info": "$1 × $2 پکسل
فائل ناپ: $3
مائم ٹائپ: $4", diff --git a/languages/i18n/prg.json b/languages/i18n/prg.json index 3a71cc6ee6..698cbc1335 100644 --- a/languages/i18n/prg.json +++ b/languages/i18n/prg.json @@ -1078,8 +1078,6 @@ "allpages-bad-ns": "En {{SITENAME}} ni ast tītelin plattibi \"$1\".", "categories": "Kategōrijas", "categoriesfrom": "Waidinnais kategōrijans pagaūnintins sen:", - "special-categories-sort-count": "rikaūjais pa gīrbin", - "special-categories-sort-abc": "rikaūjais pa alfabētan", "deletedcontributions": "Aupausintā tērpautajas ēndija", "deletedcontributions-title": "Aupausintā tērpautajas ēndija", "sp-deletedcontributions-contribs": "ēndija", @@ -1665,8 +1663,8 @@ "exif-colorspace": "Bārwis plattibi", "exif-componentsconfiguration": "Kōmpunēntin zentlisnā", "exif-compressedbitsperpixel": "Bildes kōmpresiōnis wīds", - "exif-pixelydimension": "Tikrōmiskan bildes plattu", - "exif-pixelxdimension": "Tikrōmiskan bildes aūktan", + "exif-pixelxdimension": "Tikrōmiskan bildes plattu", + "exif-pixelydimension": "Tikrōmiskan bildes aūktan", "exif-usercomment": "Tērpautajas kumentārai", "exif-relatedsoundfile": "Sēitan audiō zūrbrukis", "exif-datetimeoriginal": "Ōriginālas teīksnas dātan be kerdā", @@ -1907,7 +1905,6 @@ "version-software-version": "Wersiōni", "fileduplicatesearch": "Laukīs dwigubbintans zūrbrukins", "fileduplicatesearch-summary": "Laukīs dwigubbintans zūrbrukins pa tenēisan kōntrōlingin summin.", - "fileduplicatesearch-legend": "Laukīs dwigubbintans zūrbrukins", "fileduplicatesearch-filename": "Zūrbrukes pabilisnā:", "fileduplicatesearch-submit": "Laukīs", "fileduplicatesearch-info": "$1 × $2 pikselai
ZÅ«rbrukis debban: $3
MIME tīps: $4", diff --git a/languages/i18n/ps.json b/languages/i18n/ps.json index adb63dceaf..8e677db5a3 100644 --- a/languages/i18n/ps.json +++ b/languages/i18n/ps.json @@ -419,7 +419,7 @@ "nocookiesnew": "ستاسې گڼون جوړ شو، خو تاسې لا غونډال ته نه ياست ورننوتلي.\n{{SITENAME}} کې د ننوتلو لپاره کوکيز کارېږي.\nاو ستاسې د کتنمل کوکيز ناچارن دي.\nلطفاً خپل د کتنمل کوکيز چارن کړۍ او بيا د خپل کارن-نوم او پټنوم په کارولو سره غونډال ته ورننوځی.", "nocookieslogin": "{{SITENAME}} کې د ننوتلو لپاره کوکيز کارېږي.\nاو ستاسې د کتنمل کوکيز ناچارن دي.\nلطفاً خپل د کتنمل کوکيز چارن کړۍ او بيا د خپل کارن-نوم او پټنوم په کارولو سره غونډال ته ورننوځی.", "noname": "تاسې تر اوسه پورې کوم کره کارن نوم نه دی ځانگړی کړی.", - "loginsuccesstitle": "غونډال کې بريالی ورننوتلۍ", + "loginsuccesstitle": "غونډال کې ورننوتلۍ", "loginsuccess": "'''تاسې اوس {{SITENAME}} کې د \"$1\" په نوم ننوتي ياست.'''", "nosuchuser": "د \"$1\" په نوم هېڅ کارن نشته.\nد کارنانو نومونه د غټو او واړو تورو سره حساس دي.\nخپل حجا وڅارۍ، او يا هم [[Special:UserLogin/signup|يو نوی گڼون جوړ کړی]].", "nosuchusershort": "د \"$1\" په نوم هېڅ کوم گڼون نشته. لطفاً خپل د نوم ليکلې بڼې ته ځير شی چې پکې تېروتنه نه وي.", @@ -453,7 +453,7 @@ "createaccount-title": "د {{SITENAME}} د گڼون جوړېدنه", "createaccount-text": "يو چا د {{SITENAME}} په وېبځي ($4) کې ستاسې د برېښليک پتې لپاره د \"$2\" په نامه يو گڼون جوړ کړی چې پټنوم يې \"$3\" دی.\nتاسې بايد غونډال ته ورننوځۍ او همدا اوس خپل پټنوم بدل کړی.\n\nکه چېرته دا کړنه په تېروتنه کې شوی وي نو تاسې کولای شی چې دا پيغام بابېزه وگڼۍ.", "login-throttled": "تاسې څو واره هڅه کړې چې غونډال ته ورننوځۍ.\nلطفاً د بيا هڅې نه مخکې $1 شېبې تم شۍ.", - "login-abort-generic": "غونډال کې مو ننوتل نابريالی شو - ناڅاپي بند شو", + "login-abort-generic": "غونډال کې مو ننوتل نابرياله شوه - ناڅاپي بند شو", "loginlanguagelabel": "ژبه: $1", "pt-login": "ننوتل", "pt-login-button": "ننوتل", @@ -469,7 +469,7 @@ "newpassword": "نوی پټنوم:", "retypenew": "نوی پټنوم بيا وليکه:", "resetpass_submit": "پټنوم مو وټاکۍ او بيا غونډال ته ورننوځۍ", - "changepassword-success": "ستاسې پټنوم په برياليتوب سره بدل شو!", + "changepassword-success": "ستاسې پټنوم بدل شو!", "changepassword-throttled": "تاسې څو واره هڅه کړې چې غونډال ته ورننوځۍ.\nلطفاً د بيا هڅې نه مخکې $1 شېبې تم شۍ.", "botpasswords": "روباټ پټنومونه", "botpasswords-label-appid": "روباټ نوم:", @@ -673,9 +673,9 @@ "revdelete-unsuppress": "له بيازېرمل شويو بڼو څخه محدوديتونه لرې کول", "revdelete-log": "سبب:", "revdelete-submit": "{{PLURAL:$1|ټاکلې بڼه|ټاکلو بڼو}} کې پلي کول", - "revdelete-success": "د بڼې ښکارېدنه په برياليتوب سره هممهاله شوه.", + "revdelete-success": "د بياکتنې ښکارېدنه هممهاله شوه.", "revdelete-failure": "د بڼې ښکارېدنه نه شي هممهاله کېدای:\n$1", - "logdelete-success": "د ښکارېدنې يادښت په برياليتوب سره جوړ شو.", + "logdelete-success": "د يادښت ښکارېدنه ځانگړې شوه.", "logdelete-failure": "د ښکارېدنې يادښت نه شي جوړېدلی:\n$1", "revdel-restore": "ښکارېدنه بدلول", "pagehist": "د مخ پېښليک", @@ -1415,8 +1415,6 @@ "categories-submit": "ښکاره کول", "categoriespagetext": "دا لاندينۍ {{PLURAL:$1|وېشنيزه|وېشنيزې}} مخونه يا رسنيزې دوتنې لري.\nدلته [[Special:UnusedCategories|ناکارېدلې وېشنيزې]] نه دي ښکاره شوي.\n[[Special:WantedCategories|غوښتلې وېشنيزې]] هم وگورۍ.", "categoriesfrom": "هغه وېشنيزې کتل چې پېلېږي په:", - "special-categories-sort-count": "د شمېر له مخې اوډل", - "special-categories-sort-abc": "د ابېڅو له مخې اوډل", "deletedcontributions": "ړنگېدلې کارن ونډې", "deletedcontributions-title": "ړنگېدلې کارن ونډې", "sp-deletedcontributions-contribs": "ونډې", @@ -1569,6 +1567,7 @@ "editcomment": "د سمون لنډيز دا و: \"''$1''\".", "changecontentmodel-title-label": "مخ سرليک", "changecontentmodel-reason-label": "سبب:", + "changecontentmodel-submit": "بدلول", "logentry-contentmodel-change-revertlink": "په څټ گرځول", "logentry-contentmodel-change-revert": "په څټ گرځول", "protectlogpage": "د ژغورنې يادښت", @@ -1859,7 +1858,6 @@ "import-logentry-upload-detail": "$1 {{PLURAL:$1|بڼه|بڼې}} راولېږدېدې", "javascripttest": "د جاوا سکرېپټ آزمېښت", "javascripttest-pagetext-unknownaction": "ناڅرگنده کړنه \"$1\".", - "javascripttest-pagetext-skins": "د آزمېښتونو د پلي کولو لپاره يوه پوښۍ وټاکئ:", "tooltip-pt-userpage": "{{GENDER:|ستاسې کارن}} مخ", "tooltip-pt-mytalk": "{{GENDER:|ستاسې}} د خبرواترو مخ", "tooltip-pt-preferences": "{{GENDER:|ستاسې}} غوره توبونه", @@ -2070,8 +2068,8 @@ "exif-copyright": "د رښتو خاوند", "exif-exifversion": "Exif بڼه", "exif-colorspace": "رنگ تشيال", - "exif-pixelydimension": "د انځور سور", - "exif-pixelxdimension": "د انځور جگوالی", + "exif-pixelxdimension": "د انځور سور", + "exif-pixelydimension": "د انځور جگوالی", "exif-usercomment": "د کارن تبصرې", "exif-relatedsoundfile": "اړونده غږيزه دوتنه", "exif-datetimeoriginal": "د اومتوک د جوړېدنې وخت او نېټه", @@ -2376,7 +2374,6 @@ "redirect-logid": "پېژند يادښت", "redirect-not-exists": "ارزښت و نه موندل شو", "fileduplicatesearch": "د دوه گونو دوتنو پلټنه", - "fileduplicatesearch-legend": "د دوه گونو دوتنو پلټنه", "fileduplicatesearch-filename": "د دوتنې نوم:", "fileduplicatesearch-submit": "پلټل", "fileduplicatesearch-info": "$1 × $2 پېکسل
د دوتنې کچه: $3
ډول MIME: $4", @@ -2437,7 +2434,7 @@ "tags-deactivate-submit": "نافعالول", "tags-edit-title": "نښلنونه سمول", "tags-edit-manage-link": "نښلنونه مهارول", - "tags-edit-existing-tags-none": "''هېڅ''", + "tags-edit-existing-tags-none": "هېڅ", "tags-edit-new-tags": "نوي نښلنونه:", "tags-edit-add": "دا نښلنونه ورگډول:", "tags-edit-remove": "دا نښلنونه غورځول:", @@ -2604,5 +2601,7 @@ "mw-widgets-dateinput-placeholder-month": "کککک-م م", "mw-widgets-titleinput-description-new-page": "تر اوسه پورې دا مخ نشته", "mw-widgets-titleinput-description-redirect": "$1 ته ورگرځېدنه", - "randomrootpage": "د ناټاکلې ريښې مخ" + "randomrootpage": "د ناټاکلې ريښې مخ", + "log-action-filter-all": "ټول", + "log-action-filter-block-block": "بنديز لگول" } diff --git a/languages/i18n/pt-br.json b/languages/i18n/pt-br.json index 223f5b4c9f..6000918c08 100644 --- a/languages/i18n/pt-br.json +++ b/languages/i18n/pt-br.json @@ -91,7 +91,11 @@ "Raphaelras", "Arthurteb303", "Rffontenelle", - "HenriqueCrang" + "HenriqueCrang", + "Caçador de Palavras", + "Luk3", + "Ryuu", + "Luan" ] }, "tog-underline": "Sublinhar links:", @@ -233,7 +237,6 @@ "moredotdotdot": "Mais...", "morenotlisted": "Esta lista não está completa.", "mypage": "Página", - "anonuserpage": "Usuário desconhecido", "mytalk": "Discussão", "anontalk": "Discussão", "navigation": "Navegação", @@ -379,7 +382,7 @@ "nstab-user": "Página d{{GENDER:{{BASEPAGENAME}}|o usuário|a usuária|e usuário(a)}}", "nstab-media": "Página de mídia", "nstab-special": "Página especial", - "nstab-project": "Página de projeto", + "nstab-project": "Página do projeto", "nstab-image": "Arquivo", "nstab-mediawiki": "Mensagem", "nstab-template": "Predefinição", @@ -613,11 +616,12 @@ "botpasswords-insert-failed": "Falha ao adicionar o nome de robô \"$1\". Ele já foi adicionado?", "botpasswords-update-failed": "Falha ao atualizar o nome do robô \"$1\". Elo já foi apagado?", "botpasswords-created-title": "Senha de robô criada", - "botpasswords-created-body": "A senha do robô \"$1\" foi criada com sucesso.", + "botpasswords-created-body": "A senha de robo para o robô de nome \"$1\" do usuário \"$2\" foi criada.", "botpasswords-updated-title": "Senha de robô atualizada", - "botpasswords-updated-body": "A senha de robô \"$1\" foi atualizada com sucesso.", + "botpasswords-updated-body": "A senha de robô para o robô de nome \"$1\" do usuário \"$2\" foi atualizada.", "botpasswords-deleted-title": "Senha de bot apagada", - "botpasswords-deleted-body": "A senha de bot \"$1\" foi apagada.", + "botpasswords-deleted-body": "A senha de robô para o robô de nome \"$1\" do usuário \"$2\" foi apagada.", + "botpasswords-newpassword": "A nova senha para se autenticar com $1 é $2. Por favor, guarde isto para referência futura.", "botpasswords-no-provider": "BotPasswordsSessionProvider não está disponível.", "botpasswords-restriction-failed": "Restrições de senha de robô evitam esta autenticação.", "botpasswords-invalid-name": "O nome de usuário especificado não contém o separador de senha de robô (\"$1\").", @@ -724,7 +728,7 @@ "newarticle": "(Nova)", "newarticletext": "Você seguiu um link para uma página que ainda não existe.\nPara criá-la, comece escrevendo na caixa abaixo (veja [$1 a página de ajuda] para mais informações).\nSe você chegou aqui por engano, clique no botão '''voltar''' do seu navegador.", "anontalkpagetext": "---- ''Esta é a página de discussão para um usuário anônimo que ainda não criou uma conta ou que não a usa, de forma que temos de utilizar o endereço de IP para identificá-lo(a). Tal endereço de IP pode ser compartilhado por vários usuários. Se você é um usuário anônimo e acha que comentários irrelevantes foram direcionados a você, por gentileza, [[Special:UserLogin/signup|crie uma conta]] ou [[Special:UserLogin|autentique-se]], a fim de evitar futuras confusões com outros usuários anônimos.''", - "noarticletext": "No momento, não há conteúdo nesta página.\nVocê pode [[Special:Search/{{PAGENAME}}|pesquisar pelo título desta página]] em outras páginas, [{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} buscar por registros relacionados],\nou [{{fullurl:{{FULLPAGENAME}}|action=edit}} criar esta página].", + "noarticletext": "Não há conteúdo nesta página no momento.\nVocê pode [[Special:Search/{{PAGENAME}}|pesquisar pelo título desta página]] em outras páginas, [{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} buscar por registros relacionados],\nou [{{fullurl:{{FULLPAGENAME}}|action=edit}} criar esta página].", "noarticletext-nopermission": "No momento, não há conteúdo nesta página\nVocê pode [[Special:Search/{{PAGENAME}}|pesquisar pelo título desta página]] em outras páginas,\nou [{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} buscar por registros relacionados] . Note que, no entanto, você não tem permissão para criar esta página.", "missing-revision": "A revisão #$1 da página denominada \"{{FULLPAGENAME}}\" não existe.\n\nIsto é geralmente causado por seguir um link de histórico desatualizado para uma página que foi eliminada.\nOs detalhes podem ser encontrados no [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} registro de eliminação].", "userpage-userdoesnotexist": "A conta \"$1\" não se encontra registrada.\nVerifique se deseja mesmo criar/editar esta página.", @@ -744,7 +748,7 @@ "continue-editing": "Ir para a área de edição", "previewconflict": "Esta previsão reflete o texto que está na área de edição acima e como ele aparecerá se você escolher salvar.", "session_fail_preview": "Pedimos desculpas, mas não foi possível processar a sua edição devido à perda de dados da sua sessão.\n'''Por favor, verifique se você ainda está autenticado e tente novamente.'''\nCaso continue não funcionando, tente [[Special:UserLogout|sair]] e voltar a entrar na sua conta, e cheque se seu navegador permite cookies desse site.", - "session_fail_preview_html": "'''Desculpe-nos! Não foi possível processar a sua edição devido a uma perda de dados de sessão.'''\n\n''Como o projeto {{SITENAME}} possui HTML bruto ativo, a previsão não será exibida, como uma precaução contra ataques por JavaScript.''\n\n'''Se esta é uma tentativa de edição legítima, por favor tente novamente.\nCaso continue não funcionando, tente [[Special:UserLogout|desautenticar-se]] e voltar a entrar na sua conta.'''", + "session_fail_preview_html": "Desculpe! Não foi possível processar a sua edição devido a uma perda de dados de sessão.\n\nComo {{SITENAME}} possui HTML bruto ativo, a previsão não será exibida como uma precaução contra ataques por JavaScript.\n\nSe esta é uma tentativa de edição legítima, por favor tente novamente.\nCaso continue não funcionando, tente [[Special:UserLogout|desautenticar-se]] e voltar a entrar na sua conta, e cheque se seu navegador permite cookies vindo deste site.", "token_suffix_mismatch": "'''A sua edição foi rejeitada uma vez que seu software de navegação mutilou os sinais de pontuação do sinal de edição. A edição foi rejeitada para evitar perdas no texto da página.\nIsso acontece ocasionalmente quando se usa um serviço de proxy anonimizador mal configurado.'''", "edit_form_incomplete": "'''Algumas partes do formulário de edição não chegaram ao servidor; verifique que a sua edição continua intacta e tente novamente, por favor.'''", "editing": "Editando $1", @@ -781,6 +785,7 @@ "permissionserrors": "Erro de permissão", "permissionserrorstext": "Você não possui permissão de fazer isso, {{PLURAL:$1|pelo seguinte motivo|pelos seguintes motivos}}:", "permissionserrorstext-withaction": "Você não possui permissão para $2, {{PLURAL:$1|pelo seguinte motivo|pelos motivos a seguir}}:", + "contentmodelediterror": "Você não pode editar essa revisão pois seu modelo de conteúdo é $1, que difere do modelo de conteúdo atual da página $2.", "recreate-moveddeleted-warn": "'''Atenção: Você está recriando uma página já eliminada em outra ocasião.'''\n\nConsidere se é realmente adequado continuar editando esta página.\nOs registros de eliminação e de movimentação desta página são exibidos a seguir, para sua comodidade:", "moveddeleted-notice": "Esta página foi eliminada.\nOs registros de eliminação e de movimentação para esta página estão disponibilizados abaixo, para referência.", "moveddeleted-notice-recent": "Desculpe, esta página foi eliminada recentemente (nos últimos 24 horas). A eliminação e se mover para a página de log são fornecidos abaixo para referência.", @@ -807,14 +812,14 @@ "content-json-empty-object": "Objeto vazio", "content-json-empty-array": "Array vazia", "duplicate-args-warning": " Aviso: [[:$1]] está chamando [[:$2]] com mais de um valor para o parâmetro \"$3\". Será utilizado apenas o último valor fornecido.", - "duplicate-args-category": "Páginas que utilizam argumentos duplicados ao chamar predefinições", + "duplicate-args-category": "Páginas com argumentos de predefinições duplicados", "duplicate-args-category-desc": "A pagina contem modelos que usam argumentos duplicados, como {{foo|bar=1|bar=2}} ou {{foo|bar|1=baz}}.", "expensive-parserfunction-warning": "Aviso: Esta página contém muitas chamadas a funções do analisador \"parser\".\n\nDeveria ter menos de $2 {{PLURAL:$2|chamada|chamadas}}. Neste momento {{PLURAL:$1|há $1 chamada|existem $1 chamadas}}.", "expensive-parserfunction-category": "Páginas com muitas chamadas a funções do analisador \"parser\"", "post-expand-template-inclusion-warning": "'''Aviso''': a soma do tamanho de inclusão de predefinições é muito grande.\nAlgumas predefinições não serão processadas.", - "post-expand-template-inclusion-category": "Páginas onde a soma do tamanho de inclusão de predefinições é excedido", + "post-expand-template-inclusion-category": "Páginas com excesso de predefinições", "post-expand-template-argument-warning": "Aviso: Esta página contém pelo menos um argumento de predefinição com um tamanho muito grande.\nEstes argumentos foram omitidos.", - "post-expand-template-argument-category": "Páginas com omissões de argumentos em predefinições", + "post-expand-template-argument-category": "Páginas com argumentos de predefinições descartados", "parser-template-loop-warning": "Ciclo de predefinições detectado: [[$1]]", "parser-template-recursion-depth-warning": "O limite de profundidade de recursividade de predefinição foi ultrapassado ($1)", "language-converter-depth-warning": "O limite de profundidade do conversor de línguas excedeu a ($1)", @@ -909,9 +914,9 @@ "revdelete-unsuppress": "Remover restrições das edições restauradas", "revdelete-log": "Motivo:", "revdelete-submit": "Aplicar {{PLURAL:$1|à revisão selecionada|às revisões selecionadas}}", - "revdelete-success": "'''A visibilidade da revisão foi atualizada.'''", + "revdelete-success": "Visibilidade da revisão atualizada.", "revdelete-failure": "'''A visibilidade da revisão não foi atualizada:'''\n$1", - "logdelete-success": "'''Visibilidade de evento definida com sucesso.'''", + "logdelete-success": "Visibilidade do registro definida.", "logdelete-failure": "'''A visibilidade do registro não pôde ser estabelecida:'''\n$1", "revdel-restore": "alterar visibilidade", "pagehist": "Histórico da página", @@ -942,6 +947,13 @@ "mergehistory-empty": "Não existem edições habilitadas a serem fundidas.", "mergehistory-done": "$3 {{PLURAL:$3|revisão|revisões}} de $1 fundidas em [[:$2]] com sucesso.", "mergehistory-fail": "Não foi possível fundir os históricos; por gentileza, verifique a página e os parâmetros de tempo.", + "mergehistory-fail-bad-timestamp": "Informação data/hora inválida.", + "mergehistory-fail-invalid-source": "Página de origem inválida.", + "mergehistory-fail-invalid-dest": "Página de destino é inválida.", + "mergehistory-fail-no-change": "A fusão de histórico não fundiu nenhuma revisão. Por favor reavalie os parâmetros página e tempo.", + "mergehistory-fail-permission": "Permissões insuficientes para fundir histórico.", + "mergehistory-fail-self-merge": "As páginas de origem e destino são as mesmas.", + "mergehistory-fail-timestamps-overlap": "As revisões fonte sobrescrevem ou vêm após as revisões de destino", "mergehistory-fail-toobig": "Não é possível fundir o histórico, já que um número de revisão(ões) acima do limite ($1 {{PLURAL:$1|revisão|revisões}}) seriam movidos.", "mergehistory-no-source": "A página de origem ($1) não existe.", "mergehistory-no-destination": "A página de destino ($1) não existe.", @@ -1147,7 +1159,7 @@ "userrights-changeable-col": "Grupos que pode alterar", "userrights-unchangeable-col": "Grupos que não pode alterar", "userrights-conflict": "Há um comflito de permissões de usuário! Por favor, revise e confirme as alterações novamente.", - "userrights-removed-self": "Você removeu com sucesso seus direitos de usuário. Como tal, você agora está impossibilitado de acessar esta página.", + "userrights-removed-self": "Você removeu seus privilégios. Portanto, você agora não pode mais acessar esta página.", "group": "Grupo:", "group-user": "Usuários", "group-autoconfirmed": "Usuários autoconfirmados", @@ -1242,7 +1254,9 @@ "right-managechangetags": "Criar e apagar [[Special:Tags|tags]] na base de dados", "right-applychangetags": "Aplicar [[Special:Tags|etiquetas]] juntamente com as alterações de alguém", "right-changetags": "Adicionar e remover [[Special:Tags|etiquetas]] arbitrárias em revisões e ''logs'' individuais", + "grant-generic": "conjunto de direitos \"$1\"", "grant-group-page-interaction": "Interagir com páginas", + "grant-group-file-interaction": "Interagir com multimídia", "grant-group-watchlist-interaction": "Interagir com sua lista de páginas vigiadas", "grant-group-email": "Enviar e-mail", "grant-group-high-volume": "Realizar grande volume de atividades", @@ -1253,6 +1267,8 @@ "grant-createaccount": "Criar contas", "grant-createeditmovepage": "Criar, editar e mover páginas", "grant-delete": "Excluir páginas, revisões e entradas de registro", + "grant-editinterface": "Editar o domínio MediaWiki e o CSS/JavaScript do usuário", + "grant-editmycssjs": "Editar o seu CSS/JavaScript de usuário", "grant-editmyoptions": "Editar suas preferências de usuário", "grant-editmywatchlist": "Editar sua lista de páginas vigiadas", "grant-editpage": "Editar páginas existentes", @@ -1355,6 +1371,7 @@ "rcshowhidemine": "$1 minhas edições", "rcshowhidemine-show": "Exibir", "rcshowhidemine-hide": "Ocultar", + "rcshowhidecategorization": "$1 categorização de páginas", "rcshowhidecategorization-show": "Exibir", "rcshowhidecategorization-hide": "Esconder", "rclinks": "Exibir as $1 alterações recentes feitas nos últimos $2 dias
$3", @@ -1381,6 +1398,9 @@ "recentchangeslinked-page": "Nome da página:", "recentchangeslinked-to": "Inversamente, mostrar mudanças nas páginas que contêm ligações para esta", "recentchanges-page-added-to-category": "[[:$1]]adicionada à categoria", + "recentchanges-page-added-to-category-bundled": "[[:$1]] e [[Special:WhatLinksHere/$1|{{PLURAL:$2|uma página|$2 páginas}}]] adicionadas à categoria", + "recentchanges-page-removed-from-category": "[[:$1]] removida da categoria", + "recentchanges-page-removed-from-category-bundled": "[[:$1]] e [[Special:WhatLinksHere/$1|{{PLURAL:$2|uma página|$2 páginas}}]] removidas da categoria", "autochange-username": "Alteração automática do MediaWiki", "upload": "Enviar arquivo", "uploadbtn": "Enviar arquivo", @@ -1453,6 +1473,8 @@ "uploaded-script-svg": "Encontrado elemento de script \"$1\" no arquivo SVG carregado.", "uploaded-hostile-svg": "Encontrado CSS inseguro no elemento de estilo do arquivo SVG carregado.", "uploaded-event-handler-on-svg": "Não é permitido configurar atributos que manipulem eventos $1=\"$2\" em arquivos SVG.", + "uploaded-href-attribute-svg": "os atributos href nos ficheiros SVG só están autorizados a ligar a direccións http:// ou https://, atopado <$1 $2=\"$3\">.", + "uploaded-href-unsafe-target-svg": "Encontrado href para dados não seguros: alvo URI <$1 $2=\"$3\"> no arquivo SVG carregado.", "uploadscriptednamespace": "Este aruivo SVG contém um espaço nominal probido \"$1\"", "uploadinvalidxml": "O XML no arquivo enviado não pôde ser analisado.", "uploadvirus": "O arquivo contém vírus!\nDetalhes: $1", @@ -1539,6 +1561,7 @@ "uploadstash-badtoken": "Não foi possível executar essa operação, talvez porque as suas credenciais de edição expiraram. Tente novamente.", "uploadstash-errclear": "Não foi possível apagar os arquivos.", "uploadstash-refresh": "Atualizar a lista de arquivos", + "uploadstash-thumbnail": "ver miniatura", "invalid-chunk-offset": "Deslocamento de fragmento inválido", "img-auth-accessdenied": "Acesso negado", "img-auth-nopathinfo": "PATH_INFO em falta.\nO seu servidor não está configurado para passar esta informação.\nPode ser baseado em CGI e não consegue suportar img_auth.\nConsulte a documentação em [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Image_Authorization Image Authorization].", @@ -1833,8 +1856,6 @@ "categories-submit": "Exibir", "categoriespagetext": "{{PLURAL:$1|A seguinte categoria contém|As seguintes contém}} páginas ou mídia.\n[[Special:UnusedCategories|Categorias não utilizadas]] não são mostradas aqui.\nVeja também [[Special:WantedCategories|categorias pedidas]].", "categoriesfrom": "Listar categorias começando por:", - "special-categories-sort-count": "ordenar por contagem", - "special-categories-sort-abc": "ordenar alfabeticamente", "deletedcontributions": "Edições eliminadas", "deletedcontributions-title": "Contribuições eliminadas", "sp-deletedcontributions-contribs": "contribuições", @@ -2444,11 +2465,7 @@ "import-logentry-upload-detail": "{{PLURAL:$1|uma edição|$1 edições}}", "import-logentry-interwiki-detail": "{{PLURAL:$1|$1 edição|$1 edições}} de $2", "javascripttest": "Teste de JavaScript", - "javascripttest-pagetext-noframework": "Esta página é exclusiva para testes de JavaScript.", - "javascripttest-pagetext-unknownframework": "A estrutura de testes \"$1\" é desconhecida.", "javascripttest-pagetext-unknownaction": "Ação desconhecida de $1", - "javascripttest-pagetext-frameworks": "Escolha uma das seguintes estruturas de teste: $1", - "javascripttest-pagetext-skins": "Escolha o tema para executar os testes:", "javascripttest-qunit-intro": "Veja a [$1 documentação de testes] no mediawiki.org.", "tooltip-pt-userpage": "Sua página de {{GENDER:|usuário|usuária|usuário(a)}}", "tooltip-pt-anonuserpage": "A página de usuário para o ip com o qual você está editando", @@ -2702,8 +2719,8 @@ "exif-colorspace": "Espaço de cor", "exif-componentsconfiguration": "Significado de cada componente", "exif-compressedbitsperpixel": "Modo de compressão de imagem", - "exif-pixelydimension": "Largura da imagem", - "exif-pixelxdimension": "Altura da imagem", + "exif-pixelxdimension": "Largura da imagem", + "exif-pixelydimension": "Altura da imagem", "exif-usercomment": "Comentários de usuários", "exif-relatedsoundfile": "arquivo áudio relacionado", "exif-datetimeoriginal": "Data e hora de geração de dados", @@ -3096,7 +3113,7 @@ "watchlisttools-edit": "Ver e editar a lista de páginas vigiadas", "watchlisttools-raw": "Edição crua da lista de páginas vigiadas", "signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|discussão]])", - "timezone-local": "Localização", + "timezone-local": "Local", "duplicate-defaultsort": "Aviso: A chave de ordenação padrão \"$2\" sobrepõe-se à anterior chave de ordenação padrão \"$1\".", "duplicate-displaytitle": "Aviso: O título exibido \"$2\" substituí o título anterior \"$1\".", "invalid-indicator-name": "Erro: O atributo indicador do status da página name não deve estar vazio.", @@ -3146,7 +3163,6 @@ "version-libraries-description": "Descrição", "version-libraries-authors": "Autores", "redirect": "Redirecionar por arquivo, usuário, página, revisão ou registro de identificação.", - "redirect-legend": "Redirecionar para um arquivo ou página", "redirect-summary": "Esta página especial redireciona a um arquivo (dado o nome do arquivo), a uma página (dado um ID de revisão ou ID da página) ou a uma página de usuário (dado o ID do usuário). Uso: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/page/64308]], [[{{#Special:Redirect}}/revision/328429]], or [[{{#Special:Redirect}}/user/101]].", "redirect-submit": "Ir", "redirect-lookup": "Buscar", @@ -3158,7 +3174,6 @@ "redirect-not-exists": "Valor não encontrado", "fileduplicatesearch": "Procurar por arquivos duplicados", "fileduplicatesearch-summary": "Procure por arquivos duplicados tendo por base seu valor \"hash\".", - "fileduplicatesearch-legend": "Procurar por duplicatas", "fileduplicatesearch-filename": "Nome do arquivo:", "fileduplicatesearch-submit": "Pesquisa", "fileduplicatesearch-info": "$1 × $2 pixels
Tamanho: $3
tipo MIME: $4", diff --git a/languages/i18n/pt.json b/languages/i18n/pt.json index ac3d274c23..66a5bb5cc7 100644 --- a/languages/i18n/pt.json +++ b/languages/i18n/pt.json @@ -67,7 +67,9 @@ "Ti4goc", "Jkb8", "Önni", - "Diniscoelho" + "Diniscoelho", + "Josep Maria Roca Peña", + "Luan" ] }, "tog-underline": "Sublinhar ligações:", @@ -85,6 +87,7 @@ "tog-watchdefault": "Adicionar as páginas e ficheiros que eu editar às minhas páginas vigiadas", "tog-watchmoves": "Adicionar as páginas e ficheiros que eu mover às minhas páginas vigiadas", "tog-watchdeletion": "Adicionar as páginas e ficheiros que eu eliminar às minhas páginas vigiadas", + "tog-watchuploads": "Adicionar novos ficheiros carregados por mim à minha lista de artigos vigiados", "tog-watchrollback": "Adicionar páginas onde fiz uma reversão às minhas páginas vigiadas", "tog-minordefault": "Por omissão, marcar todas as edições como menores", "tog-previewontop": "Mostrar a antevisão antes da caixa de edição", @@ -208,7 +211,6 @@ "moredotdotdot": "Mais...", "morenotlisted": "Esta lista não está completa.", "mypage": "Página", - "anonuserpage": "Utilizador desconhecido", "mytalk": "Discussão", "anontalk": "Discussão", "navigation": "Navegação", @@ -351,7 +353,7 @@ "nstab-user": "Página d{{GENDER:{{BASEPAGENAME}}|o utilizador|a utilizadora|e utilizador(a)}}", "nstab-media": "Multimédia", "nstab-special": "Página especial", - "nstab-project": "Página de projeto", + "nstab-project": "Página do projeto", "nstab-image": "Ficheiro", "nstab-mediawiki": "Mensagem", "nstab-template": "Predefinição", @@ -523,7 +525,7 @@ "noemail": "Não foi registado um endereço de correio eletrónico para o utilizador \"$1\".", "noemailcreate": "Tem de fornecer um endereço de correio eletrónico válido.", "passwordsent": "Foi enviada uma palavra-passe nova para o endereço de correio eletrónico do utilizador \"$1\".\nVolte a iniciar sessão após recebê-la, por favor.", - "blocked-mailpassword": "O seu endereço IP foi bloqueado e, portanto, não será possível utilizar a função de recuperação da palavra-passe, para prevenir o uso abusivo.", + "blocked-mailpassword": "O seu endereço IP está bloqueado para edição. Para evitar abusos, não é permitido a utilização da recuperação de palavra-passe a partir deste endereço IP.", "eauthentsent": "Foi enviada uma mensagem de confirmação para o endereço de correio eletrónico que especificou.\nAntes que seja enviada qualquer outra mensagem para a conta, terá de seguir as instruções na mensagem enviada, de modo a confirmar que a conta lhe pertence.", "throttled-mailpassword": "Já foi enviada um email de recuperação de palavra-passe {{PLURAL:$1|na última hora|nas últimas $1 horas}}.\nPara prevenir abusos, só um email de recuperação de palavra-passe pode ser enviado a cada {{PLURAL:$1|hora|$1 horas}}.", "mailerror": "Erro ao enviar correio electrónico: $1", @@ -775,14 +777,14 @@ "content-json-empty-object": "Objeto vazio", "content-json-empty-array": "Matriz vazia", "duplicate-args-warning": "Aviso: [[:$1]] chama [[:$2]] com mais de um valor para o parâmetro \"$3\". Somente o último valor fornecido será utilizado.", - "duplicate-args-category": "Páginas que utilizam argumentos duplicados ao chamar predefinições", + "duplicate-args-category": "Páginas com argumentos de predefinições duplicados", "duplicate-args-category-desc": "A página contém campos de predefinições que utilizam duplicatas de argumentos, tais como {{foo|bar=1|bar=2}} ou {{foo|bar|1=baz}}.", "expensive-parserfunction-warning": "'''Aviso:''' Esta página contém demasiadas chamadas de funções exigentes do analisador sintático.\n\nDevia ter menos de $2 {{PLURAL:$2|chamada|chamadas}}. Neste momento tem $1 {{PLURAL:$1|chamada|chamadas}}.", "expensive-parserfunction-category": "Páginas com demasiadas chamadas a funções exigentes", "post-expand-template-inclusion-warning": "Aviso: O tamanho de inclusão de predefinições é demasiado grande, algumas predefinições não serão incluídas.", - "post-expand-template-inclusion-category": "Páginas onde o tamanho de inclusão de predefinições é excedido", + "post-expand-template-inclusion-category": "Páginas com excesso de predefinições", "post-expand-template-argument-warning": "Aviso: Esta página contém pelo menos um argumento de predefinição com um tamanho expandido demasiado grande.\nEstes argumentos foram omitidos.", - "post-expand-template-argument-category": "Páginas com omissão de argumentos para predefinições", + "post-expand-template-argument-category": "Páginas com argumentos de predefinições descartados", "parser-template-loop-warning": "Ciclo de predefinições detetado: [[$1]]", "parser-template-recursion-depth-warning": "Foi excedido o limite da profundidade de recursividade nas predefinições ($1)", "language-converter-depth-warning": "O limite de profundidade do conversor de idiomas excedeu a ($1)", @@ -1359,9 +1361,9 @@ "recentchangeslinked-page": "Nome da página:", "recentchangeslinked-to": "Inversamente, mostrar mudanças às páginas que contêm ligações para esta", "recentchanges-page-added-to-category": "[[:$1]] foi adicionada à categoria", - "recentchanges-page-added-to-category-bundled": "[[:$1]] e {{PLURAL:$2|uma outra página|$2 outras páginas}} foram adicionadas à categoria", + "recentchanges-page-added-to-category-bundled": "[[:$1]] adicionada à categoria; [[Special:WhatLinksHere/$1|esta página está incluída noutras]]", "recentchanges-page-removed-from-category": "[[:$1]] foi removida da categoria", - "recentchanges-page-removed-from-category-bundled": "[[:$1]] e {{PLURAL:$2|uma outra página|$2 outras páginas}} foram removidas da categoria", + "recentchanges-page-removed-from-category-bundled": "[[:$1]] removida da categoria; [[Special:WhatLinksHere/$1|esta página está incluída noutras]]", "autochange-username": "Alteração automática do MediaWiki", "upload": "Carregar ficheiro", "uploadbtn": "Carregar ficheiro", @@ -1528,6 +1530,7 @@ "uploadstash-badtoken": "Não foi possível executar a operação. Talvez as suas credenciais de edição tenham expirado. Tente novamente.", "uploadstash-errclear": "Não foi possível apagar os ficheiros.", "uploadstash-refresh": "Atualizar a lista de ficheiros", + "uploadstash-thumbnail": "ver miniatura", "invalid-chunk-offset": "Deslocamento de fragmento inválido", "img-auth-accessdenied": "Acesso negado", "img-auth-nopathinfo": "PATH_INFO em falta.\nO seu servidor não está configurado para passar esta informação.\nPode ser baseado em CGI e não consegue suportar img_auth.\nConsulte a documentação em https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Image_Authorization.", @@ -1799,6 +1802,7 @@ "apisandbox-results": "Resultados", "apisandbox-request-url-label": "URL do pedido:", "apisandbox-request-time": "Tempo de processamento: {{PLURAL:$1|$1 ms}}", + "apisandbox-alert-field": "O valor deste campo não é válido.", "booksources": "Fontes bibliográficas", "booksources-search-legend": "Pesquisar referências bibliográficas", "booksources-search": "Pesquisar", @@ -1837,8 +1841,6 @@ "categories-submit": "Mostrar", "categoriespagetext": "{{PLURAL:$1|A seguinte categoria contém páginas ou ficheiros multimédia|As seguintes categorias contêm páginas ou ficheiros multimédia}}.\nAs [[Special:UnusedCategories|categorias não utilizadas]] não são apresentadas nesta lista.\nVeja também as [[Special:WantedCategories|categorias desejadas]].", "categoriesfrom": "Mostrar categorias que comecem por:", - "special-categories-sort-count": "ordenar por contagem", - "special-categories-sort-abc": "ordenar alfabeticamente", "deletedcontributions": "Edições eliminadas", "deletedcontributions-title": "Edições eliminadas", "sp-deletedcontributions-contribs": "contribuições", @@ -2028,6 +2030,12 @@ "changecontentmodel-submit": "Alterar", "changecontentmodel-success-title": "O modelo de conteúdo foi alterado", "changecontentmodel-success-text": "O tipo de conteúdo de [[:$1]] foi alterado.", + "changecontentmodel-cannot-convert": "O conteúdo em [[:$1]] não pode ser convertido para um tipo de $2.", + "changecontentmodel-nodirectediting": "O modelo de conteúdo $1 não suporta edição direta", + "log-name-contentmodel": "Registo de alteração de modelo de conteúdo", + "log-description-contentmodel": "Eventos relacionados com os modelos de conteúdo de uma página", + "logentry-contentmodel-new": "$1 {{GENDER:$2|criou}} a página $3 com o modelo de conteúdo desconhecido \"$5\"", + "logentry-contentmodel-change": "$1 {{GENDER:$2|alterou}} o modelo de conteúdo da página $3 de \"$4\" para \"$5\"", "logentry-contentmodel-change-revertlink": "reverter", "logentry-contentmodel-change-revert": "reverter", "protectlogpage": "Registo de proteção", @@ -2209,6 +2217,7 @@ "ipb-unblock": "Desbloquear um utilizador ou endereço IP", "ipb-blocklist": "Ver bloqueios em vigência", "ipb-blocklist-contribs": "Contribuições de {{GENDER:$1|$1}}", + "ipb-blocklist-duration-left": "resta $1", "unblockip": "Desbloquear utilizador", "unblockiptext": "Utilize o formulário abaixo para restaurar o acesso de escrita de um endereço IP ou utilizador previamente bloqueado.", "ipusubmit": "Remover este bloqueio", @@ -2450,11 +2459,7 @@ "import-logentry-upload-detail": "$1 {{PLURAL:$1|edição importada|edições importadas}}", "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|edição importada|edições importadas}} de $2", "javascripttest": "Teste de JavaScript", - "javascripttest-pagetext-noframework": "Esta página é reservada para a execução de testes de JavaScript.", - "javascripttest-pagetext-unknownframework": "Estrutura de testes \"$1\" desconhecida.", "javascripttest-pagetext-unknownaction": "Ação \"$1\" desconhecida.", - "javascripttest-pagetext-frameworks": "Escolha, por favor, uma das seguintes estruturas de teste: $1", - "javascripttest-pagetext-skins": "Escolher um tema para executar os testes com:", "javascripttest-qunit-intro": "Consulte a [ $1 documentação de testes] no mediawiki.org.", "tooltip-pt-userpage": "A sua página de {{GENDER:|utilizador|utilizadora|utilizador(a)}}", "tooltip-pt-anonuserpage": "A página de utilizador para o endereço IP que está a usar", @@ -2714,8 +2719,8 @@ "exif-colorspace": "Espaço de cores", "exif-componentsconfiguration": "Significado de cada componente", "exif-compressedbitsperpixel": "Modo de compressão da imagem", - "exif-pixelydimension": "Largura válida da imagem", - "exif-pixelxdimension": "Altura válida da imagem", + "exif-pixelxdimension": "Largura da imagem", + "exif-pixelydimension": "Altura da imagem", "exif-usercomment": "Comentários de utilizadores", "exif-relatedsoundfile": "Ficheiro áudio relacionado", "exif-datetimeoriginal": "Data e hora de geração de dados", @@ -3093,7 +3098,7 @@ "watchlistedit-raw-done": "A sua lista de páginas vigiadas foi atualizada.", "watchlistedit-raw-added": "{{PLURAL:$1|Foi adicionada uma página|Foram adicionadas $1 páginas}}:", "watchlistedit-raw-removed": "{{PLURAL:$1|Foi removida uma página|Foram removidas $1 páginas}}:", - "watchlistedit-clear-title": "Lista de páginas vigiadas limpa", + "watchlistedit-clear-title": "Limpar lista de páginas vigiadas", "watchlistedit-clear-legend": "Limpar lista de páginas vigiadas", "watchlistedit-clear-explain": "Todos os títulos serão removidos da sua lista de páginas vigiadas.", "watchlistedit-clear-titles": "Páginas:", @@ -3156,8 +3161,7 @@ "version-libraries-description": "Descrição", "version-libraries-authors": "Autores", "redirect": "Redirecionar por ficheiro, utilizador, página, revisão, ou ID de registo", - "redirect-legend": "Redirecionar para um ficheiro ou página", - "redirect-summary": "Esta página especial redireciona para um ficheiro (dado o nome do ficheiro), para uma página (dado um ID de revisão ou página) ou para uma página de utilizador (dado um ID numérico do utilizador), ou para uma entrada do registo (dado o ID do registo). Utilização: [[{{#Special:Redirect}}/file/Example.jpg]], \n[[{{#Special:Redirect}}/page/64308]], [{{#Special:Redirect}}/revision/328429]], [[{{#Special:Redirect}}/user/101]], ou [[{{#Special:Redirect}}/logid/186]].", + "redirect-summary": "Esta página especial redireciona para um ficheiro (dado o nome do ficheiro), para uma página (dado um ID de revisão ou página) ou para uma página de utilizador (dado um ID numérico do utilizador), ou para uma entrada do registo (dado o ID do registo). Utilização: [[{{#Special:Redirect}}/file/Example.jpg]], \n[[{{#Special:Redirect}}/page/64308]], [[{{#Special:Redirect}}/revision/328429]], [[{{#Special:Redirect}}/user/101]], ou [[{{#Special:Redirect}}/logid/186]].", "redirect-submit": "Ir", "redirect-lookup": "Pesquisa:", "redirect-value": "Valor:", @@ -3169,7 +3173,6 @@ "redirect-not-exists": "Valor não encontrado", "fileduplicatesearch": "Ficheiros duplicados", "fileduplicatesearch-summary": "Procure ficheiros duplicados tendo por base o seu resumo criptográfico.", - "fileduplicatesearch-legend": "Procurar duplicados", "fileduplicatesearch-filename": "Ficheiro:", "fileduplicatesearch-submit": "Pesquisar", "fileduplicatesearch-info": "$1 × $2 pixels
Tamanho: $3
tipo MIME: $4", @@ -3365,7 +3368,7 @@ "logentry-protect-protect-cascade": "$1 {{GENDER:$2|protegeu}} $3 $4 [em cascata]", "logentry-protect-modify": "$1 {{GENDER:$2|alterou}} o nível de proteção para $3 $4", "logentry-protect-modify-cascade": "$1 {{GENDER:$2|alterou}} o nível de proteção para $3 $4 [em cascata]", - "logentry-rights-rights": "$1 modificou os privilégios do utilizador $3 de $4 para $5", + "logentry-rights-rights": "$1 {{GENDER:$2|modificou}} os privilégios {{GENDER:$3|do utilizador $3|da utilizadora $3|do(a) utilizador(a) $3}} de $4 para $5", "logentry-rights-rights-legacy": "$1 alterou os grupos de $3", "logentry-rights-autopromote": "$1 foi automaticamente {{GENDER:$2|promovido|promovida}} de $4 a $5", "logentry-upload-upload": "$1 {{GENDER:$2|carregou}} $3", @@ -3378,6 +3381,7 @@ "logentry-managetags-activate": "$1 {{GENDER:$2|ativou}} a etiqueta \"$4\" para uso de utilizadores e robôs.", "logentry-managetags-deactivate": "$1 {{GENDER:$2|desativou}} a etiqueta \"$4\" para uso de utilizadores e robôs.", "log-name-tag": "Registo de etiquetas", + "log-description-tag": "Esta página mostra utilizadores adicionam ou removem [[Special:Tags|etiquetas]] a partir de revisões individuais ou entradas de registo. O registo não lista ações relacionadas com as etiquetas quando estas ocorrem como parte de uma edição, eliminação ou ação semelhante.", "logentry-tag-update-add-revision": "$1 {{GENDER:$2|adicionou}} {{PLURAL:$7|a etiqueta|as etiquetas}} $6 à revisão $4 da página $3", "logentry-tag-update-add-logentry": "$1 {{GENDER:$2|adicionou}} {{PLURAL:$7|a etiqueta|as etiquetas}} $6 à entrada de registo $5 da página $3", "logentry-tag-update-remove-revision": "$1 {{GENDER:$2|removeu}} {{PLURAL:$9|a etiqueta|as etiquetas}} $8 da revisão $4 da página $3", @@ -3457,6 +3461,7 @@ "api-error-unknownerror": "Erro desconhecido: \"$1\".", "api-error-uploaddisabled": "Esta wiki não está configurada para poder receber ficheiros.", "api-error-verification-error": "Este ficheiro pode estar corrompido, ou ter a extensão errada.", + "api-error-was-deleted": "Um ficheiro com este nome foi carregado anteriormente e posteriormente eliminado.", "duration-seconds": "$1 {{PLURAL:$1|segundo|segundos}}", "duration-minutes": "$1 {{PLURAL:$1|minuto|minutos}}", "duration-hours": "$1 {{PLURAL:$1|hora|horas}}", @@ -3571,5 +3576,49 @@ "sessionprovider-generic": "Sessões $1", "sessionprovider-mediawiki-session-cookiesessionprovider": "sessões baseadas em cookie", "sessionprovider-nocookies": "Os cookies podem estar desativados. Certifique-se de que os cookies estão ativados e inicie novamente.", - "randomrootpage": "Página raiz aleatória" + "randomrootpage": "Página raiz aleatória", + "log-action-filter-block": "Tipo de bloqueio:", + "log-action-filter-contentmodel": "Tipo de alteração de modelo de conteúdo:", + "log-action-filter-delete": "Tipo de eliminação:", + "log-action-filter-import": "Tipo de importação:", + "log-action-filter-managetags": "Tipo de ação de gestão de etiqueta:", + "log-action-filter-move": "Tipo do movimento:", + "log-action-filter-newusers": "Tipo de criação de conta:", + "log-action-filter-patrol": "Tipo de patrulha:", + "log-action-filter-protect": "Tipo de proteção:", + "log-action-filter-rights": "Tipo de alteração de privilégio", + "log-action-filter-suppress": "Tipo de supressão", + "log-action-filter-upload": "Tipo de carregamento:", + "log-action-filter-all": "Todas", + "log-action-filter-block-block": "Bloquear", + "log-action-filter-block-reblock": "Alteração de bloqueio", + "log-action-filter-block-unblock": "Desbloquear", + "log-action-filter-contentmodel-change": "Edição de modelo de conteúdo", + "log-action-filter-contentmodel-new": "Criação de página com modelo de conteúdo desconhecido", + "log-action-filter-delete-delete": "Eliminação de página", + "log-action-filter-delete-restore": "Restauro de página", + "log-action-filter-delete-event": "Eliminação de registo", + "log-action-filter-delete-revision": "Eliminação de revisão", + "log-action-filter-import-interwiki": "Importação de transwiki", + "log-action-filter-import-upload": "Importação por carregamento XML", + "log-action-filter-managetags-create": "Criação de etiqueta", + "log-action-filter-managetags-delete": "Eliminação de etiqueta", + "log-action-filter-managetags-activate": "Ativação de etiqueta", + "log-action-filter-managetags-deactivate": "Desativação de etiqueta", + "log-action-filter-newusers-create": "Criação por utilizador anónimo", + "log-action-filter-newusers-create2": "Criação por utilizador registado", + "log-action-filter-newusers-autocreate": "Criação automática", + "log-action-filter-newusers-byemail": "Criação com palavra-passe enviada por correio eletrónico", + "log-action-filter-patrol-patrol": "Patrulha manual", + "log-action-filter-patrol-autopatrol": "Patrulha automática", + "log-action-filter-protect-protect": "Proteção", + "log-action-filter-protect-modify": "Alteração da proteção", + "log-action-filter-protect-unprotect": "Desproteção", + "log-action-filter-protect-move_prot": "Proteção de movimentos", + "log-action-filter-rights-rights": "Alteração manual", + "log-action-filter-rights-autopromote": "Alteração automática", + "log-action-filter-suppress-event": "Supressão de registo", + "log-action-filter-suppress-delete": "Supressão de página", + "log-action-filter-upload-upload": "Novo carregamento", + "log-action-filter-upload-overwrite": "Recarregar" } diff --git a/languages/i18n/qqq.json b/languages/i18n/qqq.json index ae2eca4d75..ee3bd1ecb3 100644 --- a/languages/i18n/qqq.json +++ b/languages/i18n/qqq.json @@ -175,7 +175,8 @@ "Ciencia Al Poder", "Aursani", "Robin van der Vliet", - "Conquistador" + "Conquistador", + "Frigory" ] }, "sidebar": "{{notranslate}}", @@ -194,6 +195,7 @@ "tog-watchdefault": "[[Special:Preferences]], tab 'Watchlist'. Offers user to add edited pages to watchlist. {{Gender}}", "tog-watchmoves": "[[Special:Preferences]], tab 'Watchlist'. Offers user to add moved pages to watchlist. {{Gender}}", "tog-watchdeletion": "[[Special:Preferences]], tab 'Watchlist'. Offers user to add deleted pages to watchlist. {{Gender}}", + "tog-watchuploads": "[[Special:Preferences]], tab 'Watchlist'. Offers user to add their uploaded files to watchlist. {{Gender}}", "tog-watchrollback": "[[Special:Preferences]], tab 'Watchlist'. Offers user to add pages where the user has rollbacked an edit to watchlist. {{Gender}}\n\nSee also {{msg-mw|tog-watchdefault}}, {{msg-mw|tog-watchcreations}}.", "tog-minordefault": "[[Special:Preferences]], tab 'Edit'. Offers user to mark all edits minor by default. {{Gender}}", "tog-previewontop": "Toggle option used in [[Special:Preferences]]. {{Gender}}", @@ -307,7 +309,7 @@ "category-article-count-limited": "This message is displayed at the top of a category page showing the number of pages in the category when not all pages in a category are counted.\n\nParameters:\n* $1 - number of pages shown", "category-file-count": "This message is displayed at the top of a category page showing the number of pages in the category.\n\nParameters:\n* $1 – number of files shown\n* $2 – total number of files in category", "category-file-count-limited": "This message is displayed at the top of a category page showing the number of pages in the category when not all pages in a category are counted.\n\nParameters:\n* $1 - number of files shown", - "listingcontinuesabbrev": "Shown in contiuation of each first letter group. This message follows the first letter.\n\nSee http://test.wikipedia.org/wiki/Category:Test_ko?uselang={{SUBPAGENAME}}, for example.", + "listingcontinuesabbrev": "Shown in continuation of each first letter group. This message follows the first letter.\n\nSee http://test.wikipedia.org/wiki/Category:Test_ko?uselang={{SUBPAGENAME}}, for example.", "index-category": "Name of the [[mw:Special:MyLanguage/Help:Tracking categories|tracking category]] where pages with the __INDEX__ behavior switch are listed.\n\nFor description of this behavior switch see [[mw:Special:MyLanguage/Help:Magic_words#Behavior_switches|MediaWiki]].\n\nSee also:\n* {{msg-mw|Index-category-desc}}", "noindex-category": "Name of the [[mw:Special:MyLanguage/Help:Tracking categories|tracking category]] where pages with the __NOINDEX__ behavior switch are listed.\n\nFor description of this behavior switch see [[mw:Special:MyLanguage/Help:Magic_words#Behavior_switches|MediaWiki]].\n\nSee also:\n* {{msg-mw|Noindex-category-desc}}", "broken-file-category": "Name of [[mw:Special:MyLanguage/Help:Tracking categories|tracking category]] where pages that embed files that do not exist (\"broken images\") are listed.\n\nSee also:\n* {{msg-mw|Broken-file-category-desc}}", @@ -319,7 +321,6 @@ "moredotdotdot": "Used as \"More...\" link for {{msg-mw|pageinfo-transclusions}} field, in the \"templates used on this page\" list.\n\nSimilar to {{msg-mw|morenotlisted}}.\n{{Identical|More...}}", "morenotlisted": "An indication that more of a templates list is not shown.\n\nUsed as \"More...\" link for {{msg-mw|pageinfo-templates}} field.\n\nSimilar to {{msg-mw|moredotdotdot}}.", "mypage": "A text for the link to the user's user page in the links at the top of the page.\n{{Identical|Page}}", - "anonuserpage": "Same as {{msg-mw|mypage}} but used for non-logged-in users.\nA text for the link to the IP user page in the links at the top of the page.\n\nSee also:\n* {{msg-mw|Accesskey-pt-anonuserpage}}\n* {{msg-mw|Tooltip-pt-anonuserpage}}", "mytalk": "In the personal URLs page section - right upper corner.\n\nUsed as link title in your personal toolbox.\n\nSee also:\n* {{msg-mw|Mytalk}}\n* {{msg-mw|Accesskey-pt-mytalk}}\n* {{msg-mw|Tooltip-pt-mytalk}}\n{{Identical|Talk}}", "anontalk": "Same as {{msg-mw|mytalk}} but used for non-logged-in users.\n{{Identical|Talk}}\n\nSee also:\n* {{msg-mw|Accesskey-pt-anontalk}}\n* {{msg-mw|Tooltip-pt-anontalk}}", "navigation": "This is shown as a section header in the sidebar of most skins.\n\n{{Identical|Navigation}}", @@ -969,7 +970,7 @@ "undo-summary-username-hidden": "Edit summary for an undo action where the username of the old revision is hidden.\n\nParameters:\n* $1 - the revision ID being undone\nSee also:\n* {{msg-mw|Undo-summary}}", "cantcreateaccounttitle": "Used as title of the error message {{msg-mw|Cantcreateaccount-text}}.", "cantcreateaccount-text": "Used as error message, with the title {{msg-mw|Cantcreateaccounttitle}}.\n* $1 - target IP address\n* $2 - reason or {{msg-mw|Blockednoreason}}\n* $3 - username\nSee also:\n* {{msg-mw|Cantcreateaccount-range-text}}", - "cantcreateaccount-range-text": "Used as more detailed version of the {{msg-mw|Cantcreateaccount-text}} error message, with the title {{msg-mw|Cantcreateaccounttitle}}.\n* $1 - target IP range\n* $2 - reason or {{msg-mw|Blockednoreason}}\n* $3 - username\n* $4 - current user's IP address", + "cantcreateaccount-range-text": "Used as more detailed version of the {{msg-mw|Cantcreateaccount-text}} error message, with the title {{msg-mw|Cantcreateaccounttitle}}.\n* $1 - target IP address range\n* $2 - reason or {{msg-mw|Blockednoreason}}\n* $3 - username\n* $4 - current user's IP address", "createaccount-hook-aborted": "Placeholder message to return with API errors on account create; passes through the message from a hook {{notranslate}}", "viewpagelogs": "Link displayed in history of pages", "nohistory": "Message shown when there are no history to list. See [{{canonicalurl:x|action=history}} example history].\n----\nAlso used as title of error message when the feed is empty. See [{{canonicalurl:x|action=history&feed=atom}} example feed].\n\nSee the error message:\n* {{msg-mw|history-feed-empty}}", @@ -1406,11 +1407,11 @@ "grant-group-page-interaction": "{{Related|grant-group}}", "grant-group-file-interaction": "{{Related|grant-group}}", "grant-group-watchlist-interaction": "{{Related|grant-group}}", - "grant-group-email": "{{Related|grant-group}}\n{{Identical|E-mail}}", - "grant-group-high-volume": "{{Related|grant-group}}", - "grant-group-customization": "{{Related|grant-group}}", - "grant-group-administration": "{{Related|grant-group}}", - "grant-group-other": "{{Related|grant-group}}", + "grant-group-email": "{{Related|Grant-group}}\n{{Identical|E-mail}}", + "grant-group-high-volume": "{{Related|Grant-group}}", + "grant-group-customization": "{{Related|Grant-group}}", + "grant-group-administration": "{{Related|Grant-group}}", + "grant-group-other": "{{Related|Grant-group}}", "grant-blockusers": "Name for grant \"blockusers\".\n{{Related|grant}}", "grant-createaccount": "Name for grant \"createaccount\".\n{{Related|grant}}", "grant-createeditmovepage": "Name for grant \"createeditmovepage\".\n{{Related|grant}}", @@ -1554,9 +1555,9 @@ "recentchangeslinked-page": "{{Identical|Page name}}", "recentchangeslinked-to": "Checkbox in [[Special:RecentChangesLinked]].", "recentchanges-page-added-to-category": "Comment message for pages added to a category\n\nParameters:\n* $1 - name of the page being added", - "recentchanges-page-added-to-category-bundled": "Comment message for template embedded by other pages added to a category\n\nParameters:\n* $1 - name of the page being added\n* $2 - number of additional pages being affected", + "recentchanges-page-added-to-category-bundled": "Comment message for template embedded by other pages added to a category\n\nParameters:\n* $1 - name of the page being added", "recentchanges-page-removed-from-category": "Comment message for pages removed from a category\n\nParameters:\n* $1 - name of the page being removed", - "recentchanges-page-removed-from-category-bundled": "Comment message for templates embeddedby other pages removed from a category\n\nParameters:\n* $1 - name of the page being added\n* $2 - number of additional pages being affected", + "recentchanges-page-removed-from-category-bundled": "Comment message for templates embedded by other pages removed from a category\n\nParameters:\n* $1 - name of the page being added", "autochange-username": "Used as bot / unknown username.", "upload": "Display name for link to [[Special:Upload]] for uploading files to the wiki.\n\nSee also:\n* {{msg-mw|Upload}}\n* {{msg-mw|Accesskey-t-upload}}\n* {{msg-mw|Tooltip-t-upload}}\n{{Identical|Upload file}}", "uploadbtn": "Button name in [[Special:Upload]].\n\nSee also:\n* {{msg-mw|Uploadbtn}}\n* {{msg-mw|Accesskey-upload}}\n* {{msg-mw|Tooltip-upload}}\n{{Identical|Upload file}}", @@ -1741,6 +1742,7 @@ "uploadstash-badtoken": "Used as error message in [[Special:UploadStash]].", "uploadstash-errclear": "Used as error message in [[Special:UploadStash]].", "uploadstash-refresh": "Used as link text in [[Special:UploadStash]].", + "uploadstash-thumbnail": "Used as link text in [[Special:UploadStash]].", "invalid-chunk-offset": "Error that can happen if chunks get uploaded out of order.\nAs a result of this error, clients can continue from an offset provided or restart the upload.\nUsed on [[Special:UploadWizard]].", "img-auth-accessdenied": "[[mw:Manual:Image Authorization|Manual:Image Authorization]]: Access Denied\n{{Identical|Access denied}}", "img-auth-nopathinfo": "[[mw:Manual:Image Authorization|Manual:Image Authorization]]: Missing PATH_INFO - see english description\n{{Doc-important|This is plain text. Do not use any wiki syntax.}}", @@ -2108,8 +2110,6 @@ "categories-submit": "Submit button on [[Special:Categories]]\n{{Identical|Show}}", "categoriespagetext": "{{doc-important|Do not translate or change links.}}\nText displayed in [[Special:Categories]].\n\nIn order to translate \"Unused categories\" and \"wanted categories\" see {{msg-mw|Unusedcategories}} and {{msg-mw|Wantedcategories}}.\n\nParameters:\n* $1 - number of categories", "categoriesfrom": "Used as label for the input box in [[Special:Categories]].\n\nThis message follows the fieldset label {{msg-mw|categories}}, and is followed by the input box.", - "special-categories-sort-count": "Commented out at this time.\n\nThis message is used on [[Special:Categories]] to sort the list by the number of members in the categories.\n\nSee also:\n* {{msg-mw|Special-categories-sort-abc}}", - "special-categories-sort-abc": "Commented out at this time.\n\nThis message is used on [[Special:Categories]] to sort the list by the category name.\n\nSee also:\n* {{msg-mw|Special-categories-sort-count}}\n{{Identical|Sort alphabetically}}", "deletedcontributions": "The message is shown as a link on [[Special:SpecialPages]] to [[Special:DeletedContributions]].\n\n{{Identical|Deleted user contributions}}", "deletedcontributions-summary": "{{doc-specialpagesummary|deletedcontributions}}", "deletedcontributions-title": "Title of [[Special:DeletedContributions]] (extension), a special page with a list of edits to pages which were deleted. Only viewable by sysops.\n\n{{Identical|Deleted user contributions}}", @@ -2504,6 +2504,7 @@ "ipb-unblock": "Used as page title in [[Special:Block]], if the target user is not specified.\n\nSee also:\n* {{msg-mw|Ipb-unblock-addr}}", "ipb-blocklist": "Used as link text in [[Special:Block]].\n\nThe link points to Specil:BlockList.", "ipb-blocklist-contribs": "Used in [[Special:Block]].\n* $1 - target username", + "ipb-blocklist-duration-left": "Used on [[Special:BlockList]] to show the remaining time (years, months, days, hours, minutes) until the block expires.\n$1 - The duration left", "unblockip": "Used as legend for the form in [[Special:Unblock]].", "unblockiptext": "Used in the {{msg-mw|Unblockip}} form on [[Special:Unblock]].", "ipusubmit": "Used as button text on [{{canonicalurl:Special:BlockList|action=unblock}} Special:BlockList?action=unblock]. To see the message:\n* Go to [[Special:BlockList]]\n* Click \"unblock\" for any block (but you can only see \"unblock\" if you have administrator rights)\n* It is now the button below the form", @@ -2563,11 +2564,11 @@ "ipb_expiry_temp": "Warning message displayed on [[Special:BlockIP]] if the option \"hide username\" is selected but the expiry time is not infinite.", "ipb_hide_invalid": "Used as error message in [[Special:Block]].\n* $1 - Number of edits (Value of [[mw:Manual:$wgHideUserContribLimit]])", "ipb_already_blocked": "{{Identical|$1 is already blocked}}", - "ipb-needreblock": "Used in [[Special:Block]].\n* $1 - target username", + "ipb-needreblock": "Used in [[Special:Block]].\n* $1 - target username, can be used for GENDER support", "ipb-otherblocks-header": "[[File:Special.Block with other blocks from GlobalBlocking and TorBlocks.png|thumb|Example]]\nUsed on [[Special:Block]] as header for other blocks, i.e. from GlobalBlocking or TorBlocks\n\nParameters:\n* $1 - number of blocks\nSee also:\n* {{msg-mw|Ipblocklist-otherblocks}}", "unblock-hideuser": "{{doc-singularthey}}", "ipb_cant_unblock": "Used as error message in [[Special:Unblock]]. Parameters:\n* $1 - block ID", - "ipb_blocked_as_range": "Used when unblock of a single IP fails. Parameters:\n* $1 - IP address\n* $2 - IP range", + "ipb_blocked_as_range": "Used when unblock of a single IP fails. Parameters:\n* $1 - IP address\n* $2 - IP address range", "ip_range_invalid": "Used as error message in [[Special:Block]].\n\nSee also:\n* {{msg-mw|Range block disabled}}\n* {{msg-mw|Ip range invalid}}\n* {{msg-mw|Ip range toolarge}}", "ip_range_toolarge": "Used as error message in [[Special:Block]]. Parameters:\n* $1 - a number from 0 to 32 for IPv4 (from 0 to 128 for IPv6); a part of CIDR (Classless Inter-Domain Routing) notation.\nSee also:\n* {{msg-mw|Range block disabled}}\n* {{msg-mw|Ip range invalid}}\n* {{msg-mw|Ip range toolarge}}", "proxyblocker": "Used in [[Special:BlockMe]].\n\nSee also:\n* {{msg-mw|proxyblocker-disabled}}\n* {{msg-mw|proxyblockreason}}\n* {{msg-mw|proxyblocksuccess}}", @@ -2755,14 +2756,7 @@ "import-logentry-interwiki": "{{ignored}}This is a ''logentry'' message only used on IRC. Parameters:\n* $1 - page title", "import-logentry-interwiki-detail": "Used as success message and log entry. Parameters:\n* $1 - number of succeeded revisions\n* $2 - interwiki name\nSee also:\n* {{msg-mw|Import-logentry-upload-detail}}", "javascripttest": "Title of the special page [[Special:JavaScriptTest]].\n\nSee also:\n* {{msg-mw|Javascripttest|title}}\n* {{msg-mw|Javascripttest-pagetext-noframework|summary}}\n* {{msg-mw|Javascripttest-pagetext-unknownframework|error message}}", - "javascripttest-backlink": "{{optional}}\nUsed as subtitle in [[Special:JavaScriptTest]]. Parameters:\n* $1 - page title", - "javascripttest-title": "{{Ignore}}", - "javascripttest-pagetext-noframework": "Used as summary when no framework specified.\n\nSee also:\n* {{msg-mw|Javascripttest|title}}\n* {{msg-mw|Javascripttest-pagetext-noframework|summary}}\n* {{msg-mw|Javascripttest-pagetext-unknownframework|error message}}", - "javascripttest-pagetext-unknownframework": "Error message when given framework ID is not found. Parameters:\n* $1 - the ID of the framework\nSee also:\n* {{msg-mw|Javascripttest|title}}\n* {{msg-mw|Javascripttest-pagetext-noframework|summary}}\n* {{msg-mw|Javascripttest-pagetext-unknownframework|error message}}", "javascripttest-pagetext-unknownaction": "Error message when url specifies an unknown action. Parameters:\n* $1 - the action specified in the url.", - "javascripttest-pagetext-frameworks": "Parameters:\n* $1 - frameworks list which contain a link text {{msg-mw|Javascripttest-qunit-name}}", - "javascripttest-pagetext-skins": "Used as label in [[Special:JavaScriptTest]].", - "javascripttest-qunit-name": "{{Ignore}}", "javascripttest-qunit-intro": "Used as summary. Parameters:\n* $1 - the configured URL to the documentation\nSee also:\n* {{msg-mw|Javascripttest-qunit-heading}}", "accesskey-pt-userpage": "{{doc-accesskey}}\nSee also:\n\n* {{msg-mw|Accesskey-pt-userpage}}\n* {{msg-mw|Tooltip-pt-userpage}}", "accesskey-pt-anonuserpage": "{{doc-accesskey}}", @@ -3155,8 +3149,8 @@ "exif-colorspace": "Exif is a format for storing metadata in image files. See this [[w:Exchangeable_image_file_format|Wikipedia article]] and the example at the bottom of [[commons:File:Phalacrocorax-auritus-020.jpg|this page on Commons]]. The tags are explained [http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/exif.html briefly] and [http://www.kodak.com/global/plugins/acrobat/en/service/digCam/exifStandard2.pdf in further detail].\n\nThe colorspace of the photo. This tells the computer how to make the colours in the photo be more true to the original photo. Typical values for this are sRGB or uncalibrated. This only gives information on colour information given in the exif-colorspace property. However, colour information is often stored elsewhere in the photo.\n\nSee also:\n* {{msg-mw|Exif-colorspace}}\n* {{msg-mw|Exif-colorspace-1|optional}}\n* {{msg-mw|Exif-colorspace-65535}}", "exif-componentsconfiguration": "Exif is a format for storing metadata in image files. See this [[w:Exchangeable_image_file_format|Wikipedia article]] and the example at the bottom of [[commons:File:Phalacrocorax-auritus-020.jpg|this page on Commons]]. The tags are explained [http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/exif.html briefly] and [http://www.kodak.com/global/plugins/acrobat/en/service/digCam/exifStandard2.pdf in further detail].\n\nThis contains how the information in the picture is stored. This is most commonly Y, Cr, Cb to specify luma, red, blue. RGB is also possible to specify Red, Green, Blue.\n{{Related|Exif-componentsconfiguration}}", "exif-compressedbitsperpixel": "Exif is a format for storing metadata in image files. See this [[w:Exchangeable_image_file_format|Wikipedia article]] and the example at the bottom of [[commons:File:Phalacrocorax-auritus-020.jpg|this page on Commons]]. The tags are explained [http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/exif.html briefly] and [http://www.kodak.com/global/plugins/acrobat/en/service/digCam/exifStandard2.pdf in further detail].", - "exif-pixelydimension": "Exif is a format for storing metadata in image files. See this [[w:Exchangeable_image_file_format|Wikipedia article]] and the example at the bottom of [[commons:File:Phalacrocorax-auritus-020.jpg|this page on Commons]]. The tags are explained [http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/exif.html briefly] and [http://www.kodak.com/global/plugins/acrobat/en/service/digCam/exifStandard2.pdf in further detail].\n{{Identical|Image width}}", - "exif-pixelxdimension": "Exif is a format for storing metadata in image files. See this [[w:Exchangeable_image_file_format|Wikipedia article]] and the example at the bottom of [[commons:File:Phalacrocorax-auritus-020.jpg|this page on Commons]]. The tags are explained [http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/exif.html briefly] and [http://www.kodak.com/global/plugins/acrobat/en/service/digCam/exifStandard2.pdf in further detail].\n{{Identical|Image height}}", + "exif-pixelxdimension": "Exif is a format for storing metadata in image files. See this [[w:Exchangeable_image_file_format|Wikipedia article]] and the example at the bottom of [[commons:File:Phalacrocorax-auritus-020.jpg|this page on Commons]]. The tags are explained [http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/exif.html briefly] and [http://www.kodak.com/global/plugins/acrobat/en/service/digCam/exifStandard2.pdf in further detail].\n{{Identical|Image width}}", + "exif-pixelydimension": "Exif is a format for storing metadata in image files. See this [[w:Exchangeable_image_file_format|Wikipedia article]] and the example at the bottom of [[commons:File:Phalacrocorax-auritus-020.jpg|this page on Commons]]. The tags are explained [http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/exif.html briefly] and [http://www.kodak.com/global/plugins/acrobat/en/service/digCam/exifStandard2.pdf in further detail].\n{{Identical|Image height}}", "exif-usercomment": "Exif is a format for storing metadata in image files. See this [[w:Exchangeable_image_file_format|Wikipedia article]] and the example at the bottom of [[commons:File:Phalacrocorax-auritus-020.jpg|this page on Commons]]. The tags are explained [http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/exif.html briefly] and [http://www.kodak.com/global/plugins/acrobat/en/service/digCam/exifStandard2.pdf in further detail].\n\nComments by user. Sometimes used like ImageDescription when the ImageDescription contained non-ascii characters. (Technically ImageDescription is supposed to contain ascii characters. In practice utf-8 is used in ImageDescription, so this field isn't used too much.)", "exif-relatedsoundfile": "Exif is a format for storing metadata in image files. See this [[w:Exchangeable_image_file_format|Wikipedia article]] and the example at the bottom of [[commons:File:Phalacrocorax-auritus-020.jpg|this page on Commons]]. The tags are explained [http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/exif.html briefly] and [http://www.kodak.com/global/plugins/acrobat/en/service/digCam/exifStandard2.pdf in further detail].\n\nSome cameras offer the option to record an audio \"memo\" for the photo they just took. If the user did that, the name of the file is labelled with this message.", "exif-datetimeoriginal": "Exif is a format for storing metadata in image files. See this [[w:Exchangeable_image_file_format|Wikipedia article]] and the example at the bottom of [[commons:File:Phalacrocorax-auritus-020.jpg|this page on Commons]]. The tags are explained [http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/exif.html briefly] and [http://www.kodak.com/global/plugins/acrobat/en/service/digCam/exifStandard2.pdf in further detail].\n\nThe date and time when the original image data was generated. For example if it was a painting from 1773, scanned in to a computer in 2007, the datetimeoriginal would be 1773 and {{msg-mw|exif-datetimedigitized}} would have the 2007 date.", @@ -3522,6 +3516,10 @@ "confirmemail_body_set": "This is used in a confirmation email sent when a contact email address is set.\n\nSee also [[MediaWiki:Confirmemail body changed]].\n\nParameters:\n* $1 - the IP address of the user that set the email address\n* $2 - the name of the user\n* $3 - a URL to [[Special:ConfirmEmail]]\n* $4 - a time and date (duplicated by $6 and $7)\n* $5 - a URL to [[Special:InvalidateEmail]]\n* $6 - (Optional) a date\n* $7 - (Optional) a time\n{{Related|Confirmemail body}}", "confirmemail_invalidated": "This is the text of the special page [[Special:InvalidateEmail|InvalidateEmail]] (with the title in {{msg-mw|Invalidateemail}}) where user goes if he chooses the cancel e-mail confirmation link from the confirmation e-mail.", "invalidateemail": "This is the '''name of the special page''' where user goes if he chooses the cancel e-mail confirmation link from the confirmation e-mail.", + "notificationemail_subject_changed": "Subject of the email sent on the previously registered email address notifying them about the change in the registered email address.", + "notificationemail_subject_removed": "Subject of the email sent on the previously registered email address notifying them about the removal of the registered email address.", + "notificationemail_body_changed": "Body of the email sent on the previously registered email address notifying them about the change in the registered email address.", + "notificationemail_body_removed": "Body of the email sent on the previously registered email address notifying them about the removal of the registered email address.", "scarytranscludedisabled": "Shown when scary transclusion is disabled.", "scarytranscludefailed": "Shown when the HTTP request for the template failed. Identical to {{msg-mw|Scarytranscludefailed-httpstatus}}, but does not show the HTTP error which was received. This will not be parsed as wikitext and will appear as is. Parameters:\n* $1 - URL which points to interwiki template", "scarytranscludefailed-httpstatus": "Identical to {{msg-mw|Scarytranscludefailed}}, but shows the HTTP error which was received. This will not be parsed as wikitext and will appear as is. Parameters:\n* $1 - URL which points to interwiki template\n* $2 - HTTP status, integer (other than 200)", @@ -3747,7 +3745,6 @@ "version-libraries-description": "Column header for the library's description\n{{Identical|Description}}", "version-libraries-authors": "Column header for the library's authors\n{{Identical|Author}}", "redirect": "{{doc-special|Redirect}}\nThis means \"Redirect by file '''name''', user '''ID''', page '''ID''', revision '''ID''', or log '''ID'''\".", - "redirect-legend": "Legend of fieldset around input box in [[Special:Redirect]]", "redirect-text": "Inside fieldset for [[Special:Redirect]]", "redirect-summary": "Shown at top of [[Special:Redirect]]", "redirect-submit": "Button label in [[Special:Redirect]].\n{{Identical|Go}}", @@ -3761,7 +3758,6 @@ "redirect-not-exists": "Used as error message in [[Special:Redirect]]", "fileduplicatesearch": "Name of special page [[Special:FileDuplicateSearch]].", "fileduplicatesearch-summary": "Summary of [[Special:FileDuplicateSearch]]", - "fileduplicatesearch-legend": "Legend of the fieldset around the input form of [[Special:FileDuplicateSearch]]", "fileduplicatesearch-filename": "Input form of [[Special:FileDuplicateSearch]]:\n\n{{Identical|Filename}}", "fileduplicatesearch-submit": "Button label on [[Special:FileDuplicateSearch]].\n\n{{Identical|Search}}", "fileduplicatesearch-info": "Information beneath the thumbnail on the right side shown after a successful search via [[Special:FileDuplicateSearch]].\n\nParameters:\n* $1 - width of the file\n* $2 - height of the file\n* $3 - File size\n* $4 - MIME type", @@ -3968,7 +3964,7 @@ "logentry-protect-protect-cascade": "{{Logentry|[[Special:Log/protect]]}}\n\n* $4 - protect expiry (formatted with {{msg-mw|protect-summary-desc}}, multiple possible)\nFor word \"cascading\" see {{msg-mw|protect-summary-cascade}}", "logentry-protect-modify": "{{Logentry|[[Special:Log/protect]]}}\n\n* $4 - protect expiry (formatted with {{msg-mw|protect-summary-desc}}, multiple possible)", "logentry-protect-modify-cascade": "{{Logentry|[[Special:Log/protect]]}}\n\n* $4 - protect expiry (formatted with {{msg-mw|protect-summary-desc}}, multiple possible)\nFor word \"cascading\" see {{msg-mw|protect-summary-cascade}}", - "logentry-rights-rights": "* $1 - username\n* $2 - (see below)\n* $3 - username\n* $4 - list of user groups or {{msg-mw|Rightsnone}}\n* $5 - list of user groups or {{msg-mw|Rightsnone}}\n----\n{{Logentry|[[Special:Log/rights]]}}", + "logentry-rights-rights": "* $1 - username\n* $2 - (see below)\n* $3 - username, also used for GENDER support\n* $4 - list of user groups or {{msg-mw|Rightsnone}}\n* $5 - list of user groups or {{msg-mw|Rightsnone}}\n----\n{{Logentry|[[Special:Log/rights]]}}", "logentry-rights-rights-legacy": "* $1 - username\n* $2 - (see below)\n* $3 - username\n----\n{{Logentry|[[Special:Log/rights]]}}", "logentry-rights-autopromote": "* $1 - username\n* $2 - (see below)\n* $3 - (see below)\n* $4 - comma separated list of old user groups or {{msg-mw|Rightsnone}}\n* $5 - comma separated list of new user groups\n----\n{{Logentry|[[Special:Log/rights]]}}", "logentry-upload-upload": "{{Logentry|[[Special:Log/upload]]}}", @@ -4083,6 +4079,7 @@ "api-error-unknownerror": "API error message that can be used for client side localisation of API errors.\n\nParameters:\n* $1 - an unknown error message\n{{Identical|Unknown error}}", "api-error-uploaddisabled": "API error message that can be used for client side localisation of API errors.", "api-error-verification-error": "The word \"extension\" refers to the part behind the last dot in a file name, that by convention gives a hint about the kind of data format which a files contents are in.", + "api-error-was-deleted": "API error message that can be used for client side localisation of API errors.", "duration-seconds": "Used as duration. Parameters:\n* $1 - number of seconds\n{{Related|Duration}}\n{{Identical|Second}}", "duration-minutes": "Used as duration. Parameters:\n* $1 - number of minutes\n{{Related|Duration}}\n{{Identical|Minute}}", "duration-hours": "Used as duration. Parameters:\n* $1 - number of hours\n{{Related|Duration}}", @@ -4178,6 +4175,7 @@ "special-characters-group-ipa": "IPA means a script: \"international phonetic alphabet\" here, and not \"international phonetic association\", the organization behind it.", "special-characters-group-symbols": "The section name for symbols\n\n{{Identical|Symbol}}", "special-characters-group-greek": "This is the name of a script, or alphabet, not a language.", + "special-characters-group-greekextended": "The name of the Greek Extended character set.", "special-characters-group-cyrillic": "This is the name of a script, or a group of alphabets, used mainly in Eastern Europe and North and Central Asia.\n{{related|Special-characters-group}}", "special-characters-group-arabic": "This is the name of a script, or alphabet, not a language.\n{{related|Special-characters-group}}", "special-characters-group-arabicextended": "This is a description of the additional group of Arabic script characters for languages such as a Persian, Urdu, Pashto and others. This message is supposed to be similar to {{msg-mw|special-characters-group-latinextended}}.\n{{related|Special-characters-group}}", @@ -4205,5 +4203,54 @@ "sessionprovider-generic": "Used to create a generic session type description when one isn't provided via the proper message. Should be phrased to make sense when added to a message such as {{msg-mw|cannotloginnow-text}}.\n\nParameters:\n* $1 - PHP classname.", "sessionprovider-mediawiki-session-cookiesessionprovider": "Description of the sessions provided by the CookieSessionProvider class, which use HTTP cookies. Should be phrased to make sense when added to a message such as {{msg-mw|cannotloginnow-text}}.", "sessionprovider-nocookies": "Used to inform the user that sessions may be missing due to lack of cookies.", - "randomrootpage": "{{doc-special|RandomRootPage}}" + "randomrootpage": "{{doc-special|RandomRootPage}}", + "log-action-filter-block": "{{doc-log-action-filter-type|block}}", + "log-action-filter-contentmodel": "{{doc-log-action-filter-type|contentmodel}}", + "log-action-filter-delete": "{{doc-log-action-filter-type|delete}}", + "log-action-filter-import": "{{doc-log-action-filter-type|import}}", + "log-action-filter-managetags": "{{doc-log-action-filter-type|managetags}}", + "log-action-filter-move": "{{doc-log-action-filter-type|move}}", + "log-action-filter-newusers": "{{doc-log-action-filter-type|newusers}}", + "log-action-filter-patrol": "{{doc-log-action-filter-type|patrol}}", + "log-action-filter-protect": "{{doc-log-action-filter-type|protect}}", + "log-action-filter-rights": "{{doc-log-action-filter-type|rights}}", + "log-action-filter-suppress": "{{doc-log-action-filter-type|suppress}}", + "log-action-filter-upload": "{{doc-log-action-filter-type|upload}}", + "log-action-filter-all": "{{doc-log-action-filter-type|all}}\n{{Identical|All}}", + "log-action-filter-block-block": "{{doc-log-action-filter-action|block|block}}\n{{Identical|Block}}", + "log-action-filter-block-reblock": "{{doc-log-action-filter-action|block|reblock}}", + "log-action-filter-block-unblock": "{{doc-log-action-filter-action|block|unblock}}\n{{Identical|Unblock}}", + "log-action-filter-contentmodel-change": "{{doc-log-action-filter-action|contentmodel|change}}", + "log-action-filter-contentmodel-new": "{{doc-log-action-filter-action|contentmodel|new}}", + "log-action-filter-delete-delete": "{{doc-log-action-filter-action|delete|delete}}", + "log-action-filter-delete-restore": "{{doc-log-action-filter-action|delete|restore}}", + "log-action-filter-delete-event": "{{doc-log-action-filter-action|delete|event}}", + "log-action-filter-delete-revision": "{{doc-log-action-filter-action|delete|revision}}", + "log-action-filter-import-interwiki": "{{doc-log-action-filter-action|import|interwiki}}", + "log-action-filter-import-upload": "{{doc-log-action-filter-action|import|upload}}", + "log-action-filter-managetags-create": "{{doc-log-action-filter-action|managetags|create}}", + "log-action-filter-managetags-delete": "{{doc-log-action-filter-action|managetags|delete}}", + "log-action-filter-managetags-activate": "{{doc-log-action-filter-action|managetags|activate}}", + "log-action-filter-managetags-deactivate": "{{doc-log-action-filter-action|managetags|deactivate}}", + "log-action-filter-move-move": "{{doc-log-action-filter-action|move|move}}", + "log-action-filter-move-move_redir": "{{doc-log-action-filter-action|move|move_redir}}", + "log-action-filter-newusers-create": "{{doc-log-action-filter-action|newusers|create}}", + "log-action-filter-newusers-create2": "{{doc-log-action-filter-action|newusers|create2}}", + "log-action-filter-newusers-autocreate": "{{doc-log-action-filter-action|newusers|autocreate}}", + "log-action-filter-newusers-byemail": "{{doc-log-action-filter-action|newusers|byemail}}", + "log-action-filter-patrol-patrol": "{{doc-log-action-filter-action|patrol|patrol}}", + "log-action-filter-patrol-autopatrol": "{{doc-log-action-filter-action|patrol|autopatrol}}", + "log-action-filter-protect-protect": "{{doc-log-action-filter-action|protect|protect}}", + "log-action-filter-protect-modify": "{{doc-log-action-filter-action|protect|modify}}", + "log-action-filter-protect-unprotect": "{{doc-log-action-filter-action|protect|unprotect}}", + "log-action-filter-protect-move_prot": "{{doc-log-action-filter-action|protect|move_prot}}", + "log-action-filter-rights-rights": "{{doc-log-action-filter-action|rights|rights}}", + "log-action-filter-rights-autopromote": "{{doc-log-action-filter-action|rights|autopromote}}", + "log-action-filter-suppress-event": "{{doc-log-action-filter-action|suppress|event}}", + "log-action-filter-suppress-revision": "{{doc-log-action-filter-action|suppress|revision}}", + "log-action-filter-suppress-delete": "{{doc-log-action-filter-action|suppress|delete}}", + "log-action-filter-suppress-block": "{{doc-log-action-filter-action|suppress|block}}", + "log-action-filter-suppress-reblock": "{{doc-log-action-filter-action|suppress|reblock}}", + "log-action-filter-upload-upload": "{{doc-log-action-filter-action|upload|upload}}", + "log-action-filter-upload-overwrite": "{{doc-log-action-filter-action|upload|overwrite}}" } diff --git a/languages/i18n/qu.json b/languages/i18n/qu.json index 134328ab1f..65d39e50c3 100644 --- a/languages/i18n/qu.json +++ b/languages/i18n/qu.json @@ -1538,8 +1538,6 @@ "categories": "Katiguriyakuna", "categoriespagetext": "Kay qatiq {{PLURAL:$1|katiguriyaqa|katiguriyakunaqa}} p'anqayuqmi icha midyayuqmi.\n[[Special:UnusedCategories|Ch'usaq katiguriyakunataqa]] kaypi manam rikunkichu.\n[[Special:WantedCategories|Muchusqa katiguriyakunatapas]] qhaway.", "categoriesfrom": "Katiguriyakunata rikuchiy kaywan qallarispa:", - "special-categories-sort-count": "yupaykama allichay", - "special-categories-sort-abc": "qallarina sanampakama allichay", "deletedcontributions": "Qullusqa ruraqpa hukchasqankuna", "deletedcontributions-title": "Qullusqa ruraqpa hukchasqankuna", "sp-deletedcontributions-contribs": "llamk'apusqakuna", @@ -2090,10 +2088,6 @@ "import-logentry-upload-detail": "$1 {{PLURAL:$1|hukchasqa|hukchasqakuna}}", "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|hukchasqa|hukchasqakuna}} $2-manta", "javascripttest": "JavaScript llanchiy", - "javascripttest-pagetext-noframework": "Kay p'anqaqa JavaScript llanchina purichinallapaqmi kachun.", - "javascripttest-pagetext-unknownframework": "Mana riqsisqa \"$1\" nisqa llanchina inchu ruray", - "javascripttest-pagetext-frameworks": "Ama hina kaspa, kay qatiq llanchina inchu ruraykunamanta hukta akllay: $1", - "javascripttest-pagetext-skins": "Qarata akllay llanchiykunata paywan purichinaykipaq:", "javascripttest-qunit-intro": "Qhaway [$1 llanchina yachachinapi], mediawiki.org nisqapi kaq.", "tooltip-pt-userpage": "Qampa ruraqpa p'anqayki", "tooltip-pt-anonuserpage": "IP huchhaykipaq ruraqpa p'anqan", @@ -2339,8 +2333,8 @@ "exif-colorspace": "Llimphi suyu", "exif-componentsconfiguration": "Sapa ñawpariqninpa sut'in", "exif-compressedbitsperpixel": "Rikchap mat'isqa kaynin laya", - "exif-pixelydimension": "Rikchap suni kaynin", - "exif-pixelxdimension": "Rikchap hanaq kaynin", + "exif-pixelxdimension": "Rikchap suni kaynin", + "exif-pixelydimension": "Rikchap hanaq kaynin", "exif-usercomment": "Llamk'achiqpa willayninkuna", "exif-relatedsoundfile": "Ninachiq ruqyay willañiqi", "exif-datetimeoriginal": "Willakunap kamaynin p'unchaw, pacha", @@ -2766,7 +2760,6 @@ "version-entrypoints-header-entrypoint": "Yaykuna t'uksi", "version-entrypoints-header-url": "URL tiyay", "redirect": "Willañiqikama, ruraqkama icha musuqchay ID-kama pusapuy", - "redirect-legend": "Willañiqiman icha p'anqaman pusapuy", "redirect-submit": "Riy", "redirect-lookup": "Maskay:", "redirect-value": "Chani:", @@ -2777,7 +2770,6 @@ "redirect-not-exists": "Chaniqa manam tarisqachu", "fileduplicatesearch": "Iskaychasqa willañiqikunata maskay", "fileduplicatesearch-summary": "Iskaychasqa willañiqikunata maskay ''hash'' chaninpi tiksispa.", - "fileduplicatesearch-legend": "Iskaychasqata maskay", "fileduplicatesearch-filename": "Willañiqip sutin:", "fileduplicatesearch-submit": "Maskay", "fileduplicatesearch-info": "$1 × $2 iñu
Willañiqip chhikan kaynin: $3
MIME laya: $4", diff --git a/languages/i18n/rm.json b/languages/i18n/rm.json index be52e1538c..73f33af98b 100644 --- a/languages/i18n/rm.json +++ b/languages/i18n/rm.json @@ -1416,8 +1416,6 @@ "categories": "Categorias", "categoriespagetext": "{{PLURAL:$1|Suandanta categoria cuntegna|Suandantas categorias cuntegnan}} paginas u multimedia.\n[[Special:UnusedCategories|Categorias betg utilisadas]] na vegnan betg mussadas qua.\nGuarda era las [[Special:WantedCategories|categorias giavischadas]].", "categoriesfrom": "Mussar las categorias davent da:", - "special-categories-sort-count": "zavrar tenor dumber", - "special-categories-sort-abc": "zavrar alfabeticamain", "deletedcontributions": "Contribuziuns d'utilisaders stidadas", "deletedcontributions-title": "Contribuziuns dad utilisaders stizzadas", "sp-deletedcontributions-contribs": "contribuziuns", @@ -1955,10 +1953,6 @@ "import-logentry-upload-detail": "{{PLURAL:$1|Ina versiun|$1 versiuns}}", "import-logentry-interwiki-detail": "{{PLURAL:$1|Ina versiun|$1 versiuns}} da $2", "javascripttest": "Test da JavaScript", - "javascripttest-pagetext-noframework": "Questa pagina è reservada per exequir tests da JavaScript.", - "javascripttest-pagetext-unknownframework": "Framework da test nunenconuschent \"$1\".", - "javascripttest-pagetext-frameworks": "Tscherna per plaschair in dals suandantas frameworks da test: $1", - "javascripttest-pagetext-skins": "Tscherna in skin che duai vegnir utilisà per ils tests:", "javascripttest-qunit-intro": "Legia la [$1 documentaziun da tests] sin mediawiki.org.", "tooltip-pt-userpage": "Mussar tia pagina d'utilisader", "tooltip-pt-anonuserpage": "La pagina d'utilisader per l'adressa IP cun la quala che ti fas modificaziuns", @@ -2180,8 +2174,8 @@ "exif-colorspace": "Spazi da colurs", "exif-componentsconfiguration": "Significaziun da las singulas cumponentas", "exif-compressedbitsperpixel": "Modus da cumprimer", - "exif-pixelydimension": "Ladezza dal maletg", - "exif-pixelxdimension": "Autezza dal maletg", + "exif-pixelxdimension": "Ladezza dal maletg", + "exif-pixelydimension": "Autezza dal maletg", "exif-usercomment": "Commentari da l'utilisader", "exif-relatedsoundfile": "Datoteca d'audio appartegnenta", "exif-datetimeoriginal": "Data e temp da la generaziun", @@ -2586,7 +2580,6 @@ "version-entrypoints-header-url": "URL", "fileduplicatesearch": "Tschertgar datotecas dublas", "fileduplicatesearch-summary": "Tschertgar datotecas dublas a basa da valurs da hash.", - "fileduplicatesearch-legend": "Tschertgar duplicats", "fileduplicatesearch-filename": "Num da datoteca:", "fileduplicatesearch-submit": "Tschertgar", "fileduplicatesearch-info": "$1 x $2 pixels
Grondezza da datoteca: $3
Tip da MIME: $4", diff --git a/languages/i18n/ro.json b/languages/i18n/ro.json index c1137ba393..af03e7f03b 100644 --- a/languages/i18n/ro.json +++ b/languages/i18n/ro.json @@ -28,7 +28,8 @@ "Macofe", "ImGelu", "Wintereu", - "Rsocol" + "Rsocol", + "Nemo bis" ] }, "tog-underline": "Sublinierea legăturilor:", @@ -467,7 +468,7 @@ "nocookieslogin": "{{SITENAME}} folosește module cookie pentru a autentifica utilizatorii. Browser-ul dvs. are cookie-urile dezactivate. Vă rugăm să le activați și să incercați din nou.", "nocookiesfornew": "Contul de utilizator nu a fost creat, deoarece nu am putut confirma sursa.\nAsigurați-vă că aveți cookie-urile activate, reîncărcați pagina și încercați din nou.", "noname": "Numele de utilizator pe care l-ați introdus nu este valid.", - "loginsuccesstitle": "Autentificare reușită", + "loginsuccesstitle": "Autentificat(ă)", "loginsuccess": "'''Ați fost autentificat la {{SITENAME}} ca „$1”.'''", "nosuchuser": "Nu există nici un utilizator cu numele „$1”.\nNumele de utilizatori sunt sensibile la majuscule.\nVerifică dacă ai scris corect sau [[Special:UserLogin/signup|creează un nou cont de utilizator]].", "nosuchusershort": "Nu există niciun utilizator cu numele „$1”.\nVerificați ortografierea.", @@ -503,7 +504,7 @@ "createaccount-title": "Creare de cont la {{SITENAME}}", "createaccount-text": "Cineva a creat un cont asociat adresei dumneavoastră de e-mail pe {{SITENAME}} ($4) numit „$2” și având parola „$3”.\nEste de dorit să vă autentificați și să schimbați parola cât mai repede.\n\nIgnorați acest mesaj dacă crearea contului s-a produs în urma unei greșeli.", "login-throttled": "Ați avut prea multe încercări recente de a vă autentifica.\nVă rugăm să așteptați $1 până să reîncercați.", - "login-abort-generic": "Procesul de autentificare a eșuat și a fost abandonat", + "login-abort-generic": "Procesul de autentificare a eșuat - Abandonat", "login-migrated-generic": "Contul dumneavoastră a fost migrat, iar numele de utilizator nu mai există pe acest wiki.", "loginlanguagelabel": "Limba: $1", "suspicious-userlogout": "Cererea dumneavoastră de a închide sesiunea a fost refuzată întrucât pare că a fost trimisă printr-o eroare a navigatorului sau de un proxy memorat în cache.", @@ -523,11 +524,12 @@ "newpassword": "Parola nouă:", "retypenew": "Reintroduceți noua parolă:", "resetpass_submit": "Setează parola și autentifică", - "changepassword-success": "Parola dumneavoastră a fost schimbată cu succes!", + "changepassword-success": "Parola dumneavoastră a fost schimbată!", "changepassword-throttled": "Ați avut prea multe încercări recente de a vă autentifica.\nVă rugăm să așteptați $1 până să reîncercați.", "botpasswords": "Parole roboți", "botpasswords-summary": "Parolele de roboți permit accesul la un cont de utilizator prin intermediul API-ului fără utilizarea identificatorilor de conectare principali ai contului. Este posibil ca drepturile de utilizator disponibile după conectarea cu parole de roboți să fie restricționate.\n\nDacă nu știți exact de ce ați recurge la această metodă, probabil ar trebui să nu o faceți. Nimeni nu ar trebui să vă ceară vreodată să generați acest tip de parolă și să le-o furnizați.", "botpasswords-disabled": "Parolele de roboți sunt dezactivate.", + "botpasswords-no-central-id": "Pentru a folosi parole pentru roboți, trebuie să fiți logat într-un cont centralizat.", "botpasswords-existing": "Parole de robot existente", "botpasswords-label-appid": "Numele robotului:", "botpasswords-label-create": "Creare", @@ -1278,7 +1280,7 @@ "recentchangeslinked-page": "Numele paginii:", "recentchangeslinked-to": "Arată în schimb modificările asupra paginilor care se leagă de pagina indicată", "recentchanges-page-added-to-category": "[[:$1]] a fost adăugată în categorii", - "recentchanges-page-added-to-category-bundled": "[[:$1]] și încă {{PLURAL:$2|o pagină|$2 pagini|$2 de pagini}} au fost adăugate în categorii", + "recentchanges-page-added-to-category-bundled": "[[:$1]] și încă [[Special:WhatLinksHere/$1|{{PLURAL:$2|o pagină|$2 pagini|$2 de pagini}}]] au fost adăugate în categorii", "recentchanges-page-removed-from-category": "[[:$1]] eliminată din categorii", "recentchanges-page-removed-from-category-bundled": "[[:$1]] și încă {{PLURAL:$2|o pagină|$2 pagini|$2 de pagini}} au fost eliminate din categorii", "autochange-username": "Modificare automată a MediaWiki", @@ -1772,8 +1774,6 @@ "categories-submit": "Afișează", "categoriespagetext": "{{PLURAL:$1|Următoarea categorie conține|Următoarele categorii conțin}} pagini sau fișiere.\n[[Special:UnusedCategories|Categoriile neutilizate]] nu apar aici.\nVedeți și [[Special:WantedCategories|categoriile dorite]].", "categoriesfrom": "Arată categoriile pornind de la:", - "special-categories-sort-count": "ordonează după număr", - "special-categories-sort-abc": "sortează alfabetic", "deletedcontributions": "Contribuții șterse", "deletedcontributions-title": "Contribuții șterse", "sp-deletedcontributions-contribs": "contribuții", @@ -2388,11 +2388,7 @@ "import-logentry-upload-detail": "$1 {{PLURAL:$1|versiune importată|versiuni importate|de versiuni importate}}", "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|versiune|versiuni|de versiuni}} importate de la $2", "javascripttest": "Testare JavaScript", - "javascripttest-pagetext-noframework": "Această pagină este rezervată rulării testelor JavaScript.", - "javascripttest-pagetext-unknownframework": "Cadru de testare „$1” necunoscut.", "javascripttest-pagetext-unknownaction": "Acțiunea „$1” necunoscută.", - "javascripttest-pagetext-frameworks": "Alegeți unul din următoarele cadre de testare: $1", - "javascripttest-pagetext-skins": "Alegeți un aspect pentru care să rulați teste:", "javascripttest-qunit-intro": "A se vedea [$1 documentația de testare] pe mediawiki.org.", "tooltip-pt-userpage": "Pagina {{GENDER:|dumneavoastră}} de utilizator", "tooltip-pt-anonuserpage": "Pagina de utilizator pentru adresa IP curentă", @@ -2652,8 +2648,8 @@ "exif-colorspace": "Spațiu de culoare", "exif-componentsconfiguration": "Semnificația fiecărei componente", "exif-compressedbitsperpixel": "Mod de comprimare a imaginii", - "exif-pixelydimension": "Lățimea imaginii", - "exif-pixelxdimension": "Înălțimea imaginii", + "exif-pixelxdimension": "Lățimea imaginii", + "exif-pixelydimension": "Înălțimea imaginii", "exif-usercomment": "Comentariile utilizatorilor", "exif-relatedsoundfile": "Fișierul audio asemănător", "exif-datetimeoriginal": "Data și ora producerii imaginii", @@ -3100,7 +3096,6 @@ "version-libraries-description": "Descriere", "version-libraries-authors": "Autori", "redirect": "Redirecționare după fișier, utilizator, ID-ul paginii, al versiunii sau al jurnalului", - "redirect-legend": "Redirecționare către un fișier sau o pagină", "redirect-summary": "Această pagină specială vă redirecționează către un fișier (dat fiind un nume de fișier), o pagină (dat fiind ID-ul unei versiuni sau ID-ul unei pagini) sau o pagină de utilizator (dat fiind un ID numeric al utilizatorului). Utilizare: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/page/64308]], [[{{#Special:Redirect}}/revision/328429]] sau [[{{#Special:Redirect}}/user/101]].", "redirect-submit": "Du-te", "redirect-lookup": "Căutare:", @@ -3113,7 +3108,6 @@ "redirect-not-exists": "Valoarea nu a fot găsită", "fileduplicatesearch": "Căutare fișiere duplicate", "fileduplicatesearch-summary": "Căutarea fișierelor duplicate bazată pe valorile hash.", - "fileduplicatesearch-legend": "Căutare duplicat", "fileduplicatesearch-filename": "Nume fișier:", "fileduplicatesearch-submit": "Caută", "fileduplicatesearch-info": "$1 × $2 pixeli
Mărime fișier: $3
Tip MIME: $4", @@ -3524,5 +3518,39 @@ "sessionprovider-generic": "sesiuni $1", "sessionprovider-mediawiki-session-cookiesessionprovider": "sesiuni pe bază de module cookie.", "sessionprovider-nocookies": "Modulele cookie par dezactivate. Asigurați-vă că ați activat modulele cookie și începeți din nou.", - "randomrootpage": "Pagină-rădăcină aleatorie" + "randomrootpage": "Pagină-rădăcină aleatorie", + "log-action-filter-block": "Tip de blocare:", + "log-action-filter-contentmodel": "Tip de modificare a modelului de conținut:", + "log-action-filter-delete": "Tip de ștergere:", + "log-action-filter-import": "Tip de import:", + "log-action-filter-move": "Tip de mutare:", + "log-action-filter-newusers": "Tip de creare de cont:", + "log-action-filter-patrol": "Tip de patrulare:", + "log-action-filter-protect": "Tip de protecție:", + "log-action-filter-rights": "Tip de schimbare de drepturi", + "log-action-filter-upload": "Tip de încărcare:", + "log-action-filter-all": "Toate", + "log-action-filter-block-block": "Blocare", + "log-action-filter-block-reblock": "Modificare a unei blocări", + "log-action-filter-block-unblock": "Deblocare", + "log-action-filter-delete-delete": "Ștergere a paginii", + "log-action-filter-delete-restore": "Recuperare a paginii", + "log-action-filter-delete-event": "Ștergere a logului", + "log-action-filter-delete-revision": "Ștergere a reviziei", + "log-action-filter-import-interwiki": "Import transwiki", + "log-action-filter-import-upload": "Import prin încărcare de XML", + "log-action-filter-managetags-create": "Creare tag", + "log-action-filter-managetags-delete": "Ștergere tag", + "log-action-filter-managetags-activate": "Activare tag", + "log-action-filter-managetags-deactivate": "Dezactivare tag", + "log-action-filter-patrol-patrol": "Patrulă manuală", + "log-action-filter-patrol-autopatrol": "Patrulă automată", + "log-action-filter-protect-protect": "Protecție", + "log-action-filter-protect-modify": "Modificarea protecției", + "log-action-filter-protect-unprotect": "Deprotejare", + "log-action-filter-protect-move_prot": "Mutarea protecției", + "log-action-filter-rights-rights": "Modificare manuală", + "log-action-filter-rights-autopromote": "Schimbare automată", + "log-action-filter-upload-upload": "Încărcare nouă", + "log-action-filter-upload-overwrite": "Reîncărcare" } diff --git a/languages/i18n/roa-tara.json b/languages/i18n/roa-tara.json index 5e2559e19a..f9515d4949 100644 --- a/languages/i18n/roa-tara.json +++ b/languages/i18n/roa-tara.json @@ -1228,6 +1228,7 @@ "recentchangeslinked-page": "Nome d'a vôsce:", "recentchangeslinked-to": "Fa vedè le cangiaminde de le pàggene colleghete a 'na certa pàgene", "recentchanges-page-added-to-category": "[[:$1]] aggiunde a categorije", + "recentchanges-page-removed-from-category-bundled": "[[:$1]] luate da 'a categorije, [[Special:WhatLinksHere/$1|sta vôsce ste sckaffate jndr'à otre pàggene]]", "upload": "Careche 'u file", "uploadbtn": "Careche 'nu fail", "reuploaddesc": "Scangille 'u carecamende e tuerne a 'a schermete de le carecaminde", @@ -1670,8 +1671,6 @@ "categories": "Le Categorije", "categoriespagetext": "{{PLURAL:$1|'A seguende categorije tène|Le seguende categorije tènene}} pàggene o media.\n[[Special:UnusedCategories|Categorije non ausate]] non ge se vèdene aqquà.\nVide pure [[Special:WantedCategories|Categorije cercate]].", "categoriesfrom": "Fà vedè le categorije partenne da:", - "special-categories-sort-count": "ordere pe condegge", - "special-categories-sort-abc": "ordere alfabbeticamende", "deletedcontributions": "Condrebbute de l'utende scangellete", "deletedcontributions-title": "Condrebbute de l'utende scangellate", "sp-deletedcontributions-contribs": "condrebbute", @@ -2267,11 +2266,7 @@ "import-logentry-upload-detail": "$1 {{PLURAL:$1|revisione|revisiune}} 'mbortate", "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|revisione|revisiune}} 'mbortate da $2", "javascripttest": "Test de JavaScript", - "javascripttest-pagetext-noframework": "Sta pàgene jè riservate pe le esecuziune de le test de Javascript.", - "javascripttest-pagetext-unknownframework": "Ambiende de teste scanusciute \"$1\".", "javascripttest-pagetext-unknownaction": "Aziona scanusciute \"$1\"", - "javascripttest-pagetext-frameworks": "Pe piacere scacchie une de le seguende ambiende de test: $1", - "javascripttest-pagetext-skins": "Scacchie 'n'aspette pe eseguì le test cu:", "javascripttest-qunit-intro": "Vide 'a [$1 documendazione d'u test] sus a mediawiki.org.", "tooltip-pt-userpage": "'A pàgene utende meje", "tooltip-pt-anonuserpage": "'A pàgene utende pe l'IP ca tu ste cange cumme", @@ -2577,8 +2572,8 @@ "exif-colorspace": "Spazie d'u culore", "exif-componentsconfiguration": "Significate de ogne combonende", "exif-compressedbitsperpixel": "Mode de combressione de l'immaggine", - "exif-pixelydimension": "Larghezze de l'immaggine", - "exif-pixelxdimension": "Altezze de l'immaggine", + "exif-pixelxdimension": "Larghezze de l'immaggine", + "exif-pixelydimension": "Altezze de l'immaggine", "exif-usercomment": "Commende de l'utende", "exif-relatedsoundfile": "File audio collegate", "exif-datetimeoriginal": "Date e ore d'a generazione de le date", @@ -3127,7 +3122,6 @@ "version-libraries-description": "Descrizione", "version-libraries-authors": "Auture", "redirect": "Redirette da 'u file, utende o ID d'a revisione", - "redirect-legend": "Redirette a 'nu file o 'na pàgene", "redirect-summary": "Sta pàgena speciale redirezione a 'nu file (date 'u nome d'u file), 'na pàgene (date 'n'ID de revisione), o 'na pàgene utende (date 'n'ID numeriche de l'utende). Ause: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/revision/328429]], o [[{{#Special:Redirect}}/user/101]].", "redirect-submit": "Véje", "redirect-lookup": "Mappature:", @@ -3139,7 +3133,6 @@ "redirect-not-exists": "Valore non acchiate", "fileduplicatesearch": "Cirche pe le file duplichete", "fileduplicatesearch-summary": "Cirche pe file duplichete sus a base d'u valore hash.", - "fileduplicatesearch-legend": "Cirche pe 'nu duplichete", "fileduplicatesearch-filename": "Nome d'u faile:", "fileduplicatesearch-submit": "Cirche", "fileduplicatesearch-info": "$1 × $2 pixel
Dimenzione d'u file: $3
Tipe de MIME: $4", diff --git a/languages/i18n/ru.json b/languages/i18n/ru.json index 95f4999561..012ee841d8 100644 --- a/languages/i18n/ru.json +++ b/languages/i18n/ru.json @@ -88,7 +88,9 @@ "Краснорядцева Елена", "Frhdkazan", "Ядерный Трамвай", - "Исмаил Садуев" + "Исмаил Садуев", + "Lemondoge", + "SamGold" ] }, "tog-underline": "Подчёркивание ссылок:", @@ -106,6 +108,7 @@ "tog-watchdefault": "Добавлять в список наблюдения изменённые мной страницы и описания файлов", "tog-watchmoves": "Добавлять в список наблюдения переименованные мной страницы и файлы", "tog-watchdeletion": "Добавлять в список наблюдения удалённые мной страницы и файлы", + "tog-watchuploads": "Добавлять закачанные мною файлы в список наблюдения", "tog-watchrollback": "Добавлять страницы, где я выполнил откат, в мой список наблюдения", "tog-minordefault": "Помечать по умолчанию правки как малозначимые", "tog-previewontop": "Помещать предпросмотр перед окном редактирования", @@ -229,7 +232,6 @@ "moredotdotdot": "Далее…", "morenotlisted": "Этот список неполон.", "mypage": "Страница", - "anonuserpage": "Неизвестный участник", "mytalk": "Обсуждение", "anontalk": "Обсуждение", "navigation": "Навигация", @@ -366,6 +368,7 @@ "site-atom-feed": "$1 — Atom-лента", "page-rss-feed": "«$1» — RSS-лента", "page-atom-feed": "«$1» — Atom-лента", + "feed-atom": "Атом", "red-link-title": "$1 (страница не существует)", "sort-descending": "Упорядочить по убыванию", "sort-ascending": "Упорядочить по возрастанию", @@ -548,7 +551,7 @@ "noemail": "Для участника с именем $1 электронный адрес указан не был.", "noemailcreate": "Вам необходимо указать корректный адрес электронной почты", "passwordsent": "Новый пароль был выслан на адрес электронной почты, указанный для участника $1.\n\nПожалуйста, представьтесь системе заново после получения пароля.", - "blocked-mailpassword": "Редактирование с вашего IP-адреса запрещено, поэтому заблокирована и функция восстановления пароля.", + "blocked-mailpassword": "Редактирование с вашего IP-адреса запрещено. Для предотвращения злоупотреблений для этого IP-адреса заблокирована и функция восстановления пароля.", "eauthentsent": "На указанный адрес электронной почты отправлено письмо. \nЧтобы получать письма в дальнейшем, следуйте изложенным там инструкциям для подтверждения, что этот адрес действительно принадлежит вам.", "throttled-mailpassword": "Функция напоминания пароля уже использовалась в течение {{PLURAL:$1|1=последнего часа|последних $1 часов}}.\nДля предотвращения злоупотреблений, разрешено запрашивать не более одного напоминания {{PLURAL:$1|за $1 час|за $1 часов|за $1 часа|1=в час}}.", "mailerror": "Ошибка при отправке почты: $1", @@ -1337,7 +1340,7 @@ "recentchanges-label-bot": "Эта правка сделана ботом", "recentchanges-label-unpatrolled": "Эта правка ещё никем не патрулировалась", "recentchanges-label-plusminus": "изменение размера в байтах", - "recentchanges-legend-heading": "Легенда:", + "recentchanges-legend-heading": "Легенда: ", "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (см. также [[Special:NewPages|список новых страниц]])", "recentchanges-legend-plusminus": "(''±123'')", "recentchanges-submit": "Показать", @@ -1389,9 +1392,9 @@ "recentchangeslinked-page": "Название страницы:", "recentchangeslinked-to": "Наоборот, показать изменения на страницах, которые ссылаются на указанную страницу", "recentchanges-page-added-to-category": "[[:$1]] добавлена в категорию", - "recentchanges-page-added-to-category-bundled": "[[:$1]] и {{PLURAL:$2|одна страница|$2 страниц}} добавлены в категорию", + "recentchanges-page-added-to-category-bundled": "[[:$1]] добавлена в категорию, [[Special:WhatLinksHere/$1|эта страница включена в другие страницы]]", "recentchanges-page-removed-from-category": "[[:$1]] убрана из категории", - "recentchanges-page-removed-from-category-bundled": "[[:$1]] и {{PLURAL:$2|одна страница|$2 страниц}} убраны из категории", + "recentchanges-page-removed-from-category-bundled": "[[:$1]] удалена из категории, [[Special:WhatLinksHere/$1|эта страница включена в другие страницы]]", "autochange-username": "Автоматическое изменение MediaWiki", "upload": "Загрузить файл", "uploadbtn": "Загрузить файл", @@ -1571,6 +1574,7 @@ "uploadstash-badtoken": "Не удалось выполнить указанные действия. Возможно, истёк срок действия ваших учётных данных. Пожалуйста, пробуйте ещё раз.", "uploadstash-errclear": "Очистка файлов не удалась.", "uploadstash-refresh": "Обновить список файлов", + "uploadstash-thumbnail": "показать миниатюру", "invalid-chunk-offset": "Недопустимое смещение фрагмента", "img-auth-accessdenied": "Доступ запрещён", "img-auth-nopathinfo": "Отсутствует PATH_INFO.\nВаш сервер не настроен для передачи этих сведений.\nВозможно, он работает на основе CGI и не поддерживает img_auth.\nСм. https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Image_Authorization.", @@ -1650,6 +1654,7 @@ "shared-repo-from": "из $1", "shared-repo": "общего хранилища", "shared-repo-name-wikimediacommons": "Викисклада", + "filepage.css": "/* CSS и помещены сюда входит на странице описания файла, также на зарубежного заказчика Вики */", "upload-disallowed-here": "Вы не можете перезаписать этот файл.", "filerevert": "Возврат к старой версии $1", "filerevert-legend": "Возвратить версию файла", @@ -1891,8 +1896,6 @@ "categories-submit": "Показать", "categoriespagetext": "{{PLURAL:$1|1=Следующая категория содержит|Следующие категории содержат}} страницы или медиафайлы.\nЗдесь не показаны [[Special:UnusedCategories|неиспользуемые категории]].\nСм. также [[Special:WantedCategories|список требуемых категорий]].", "categoriesfrom": "Показать категории, начинающиеся с:", - "special-categories-sort-count": "упорядочить по количеству", - "special-categories-sort-abc": "упорядочить по алфавиту", "deletedcontributions": "Удалённый вклад участника", "deletedcontributions-title": "Удалённый вклад", "sp-deletedcontributions-contribs": "вклад", @@ -2271,6 +2274,7 @@ "ipb-unblock": "Разблокировать участника или IP-адрес", "ipb-blocklist": "Показать действующие блокировки", "ipb-blocklist-contribs": "Вклад {{GENDER:$1|$1}}", + "ipb-blocklist-duration-left": "осталось $1", "unblockip": "Разблокировать участника", "unblockiptext": "Используйте форму ниже, чтобы восстановить возможность редактирования с ранее заблокированного IP-адреса или учётной записи.", "ipusubmit": "Снять эту блокировку", @@ -2512,11 +2516,7 @@ "import-logentry-upload-detail": "$1 {{PLURAL:$1|версия импортирована|версии импортировано|версий импортировано}}", "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|версия импортирована|версии импортировано|версий импортировано}} из $2", "javascripttest": "Проверка JavaScript", - "javascripttest-pagetext-noframework": "Эта страница зарезервирована для запуска JavaScript-тестов.", - "javascripttest-pagetext-unknownframework": "Неизвестная среда тестирования «$1».", "javascripttest-pagetext-unknownaction": "Неизвестное действие «$1».", - "javascripttest-pagetext-frameworks": "Пожалуйста, выберите одну из следующих сред тестирования: $1", - "javascripttest-pagetext-skins": "Выберите тему оформления для запуска тестов:", "javascripttest-qunit-intro": "См. [$1 документацию по тестированию] на mediawiki.org.", "tooltip-pt-userpage": "{{GENDER:|Ваша}} страница участника", "tooltip-pt-anonuserpage": "Страница участника для моего IP", @@ -2592,11 +2592,13 @@ "print.css": "/* Размещённый здесь CSS будет применяться к версии для печати */", "noscript.css": "/* Размещённый здесь CSS будет применяться для участников с отключенным JavaScript */", "group-autoconfirmed.css": "/* Размещённый здесь CSS будет применяться для автоподтверждённых участников */", + "group-user.css": "/* CSS для размещен здесь затронут только для зарегистрированных пользователей */", "group-bot.css": "/* Размещённый здесь CSS будет применяться только для ботов */", "group-sysop.css": "/* Размещённый здесь CSS будет применяться только для администраторов */", "group-bureaucrat.css": "/* Размещённый здесь CSS будет применяться только для бюрократов */", "common.js": "/* Размещённый здесь код JavaScript будет загружаться пользователям при обращении к каждой странице */", "group-autoconfirmed.js": "/* Размещённый здесь код JavaScript будет загружаться только участникам, имеющим статус автоподтверждённых (autoconfirmed) */", + "group-user.js": "/* Здесь любой JavaScript будет загружаться только для зарегистрированных пользователей */", "group-bot.js": "/* Размещённый здесь код JavaScript будет загружаться только участникам, имеющим статус ботов (bots) */", "group-sysop.js": "/* Размещённый здесь код JavaScript будет загружаться только участникам, имеющим статус администраторов (sysops) */", "group-bureaucrat.js": "/* Размещённый здесь код JavaScript будет загружаться только участникам, имеющим статус бюрократов (bureaucrats) */", @@ -2752,6 +2754,7 @@ "sunday-at": "в воскресенье в $1", "yesterday-at": "Вчера в $1", "bad_image_list": "Формат должен быть следующим:\n\nБудут учитываться только элементы списка (строки, начинающиеся на символ *).\nПервая ссылка строки должна быть ссылкой на запрещённое для вставки изображение.\nПоследующие ссылки в той же строке будут рассматриваться как исключения, то есть статьи, куда изображение может быть включено.", + "variantname-zh-hans": "его", "metadata": "Метаданные", "metadata-help": "Файл содержит дополнительные данные, обычно добавляемые цифровыми камерами или сканерами. Если файл после создания редактировался, то некоторые параметры могут не соответствовать текущему изображению.", "metadata-expand": "Показать дополнительные данные", @@ -2790,8 +2793,8 @@ "exif-colorspace": "Цветовое пространство", "exif-componentsconfiguration": "Конфигурация цветовых компонентов", "exif-compressedbitsperpixel": "Глубина цвета после сжатия", - "exif-pixelydimension": "Ширина изображения", - "exif-pixelxdimension": "Высота изображения", + "exif-pixelxdimension": "Ширина изображения", + "exif-pixelydimension": "Высота изображения", "exif-usercomment": "Дополнительный комментарий", "exif-relatedsoundfile": "Файл звукового комментария", "exif-datetimeoriginal": "Оригинальные дата и время", @@ -2941,6 +2944,8 @@ "exif-copyrighted-true": "Охраняется авторским правом", "exif-copyrighted-false": "Авторско-правовой статус не задан", "exif-photometricinterpretation-1": "Чёрный и белый (чёрный — 0)", + "exif-photometricinterpretation-4": "Маска прозрачности", + "exif-photometricinterpretation-5": "Разделены (видимо в CMYK)", "exif-unknowndate": "Неизвестная дата", "exif-orientation-1": "Нормальная", "exif-orientation-2": "Отражено по горизонтали", @@ -3119,6 +3124,7 @@ "confirmemail_body_set": "Кто-то (возможно вы) с IP-адресом $1\nуказал данный адрес электронной почты для учётной записи «$2» в проекте «{{SITENAME}}».\n\nЧтобы подтвердить, что эта учётная запись действительно принадлежит вам,\nи включить возможность отправки писем с сайта «{{SITENAME}}», откройте в браузере приведённую ниже ссылку:\n\n$3\n\nЕсли данная учётная запись *не* относится к вам, то перейдите по следующей ссылке,\nчтобы отменить подтверждение адреса электронной почты:\n\n$5\n\nКод подтверждения действителен до $4.", "confirmemail_invalidated": "Подтверждение адреса электронной почты отменено.", "invalidateemail": "Отмена подтверждения адреса электронной почты", + "notificationemail_subject_changed": "{{SITENAME}} зарегистрированный адрес электронной почты был изменен", "scarytranscludedisabled": "[Интервики-включение отключено]", "scarytranscludefailed": "[Ошибка обращения к шаблону $1]", "scarytranscludefailed-httpstatus": "[Не удалось загрузить шаблон для $1: HTTP $2]", @@ -3303,7 +3309,6 @@ "version-libraries-description": "Описание", "version-libraries-authors": "Авторы", "redirect": "Перенаправление с идентификатора файла, участника, страницы, версии или журнала", - "redirect-legend": "Перенаправление на файл или страницу", "redirect-summary": "Эта служебная страница перенаправляет на файл (с имени файла), страницу (с идентификатора версии или страницы), страницу участника (с числового идентификатора участника) или запись журнала (с идентификатора журнала). Использование: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/page/64308]], [[{{#Special:Redirect}}/revision/328429]], [[{{#Special:Redirect}}/user/101]] или [[{{#Special:Redirect}}/logid/186]].", "redirect-submit": "Перейти", "redirect-lookup": "Поиск:", @@ -3316,7 +3321,6 @@ "redirect-not-exists": "Значение не найдено", "fileduplicatesearch": "Поиск одинаковых файлов", "fileduplicatesearch-summary": "Поиск одинаковых файлов по хэш-коду.", - "fileduplicatesearch-legend": "Поиск дубликатов", "fileduplicatesearch-filename": "Имя файла:", "fileduplicatesearch-submit": "Найти", "fileduplicatesearch-info": "$1 × $2 {{PLURAL:$2|пиксель|пикселя|пикселей}}
Размер файла: $3
MIME-тип: $4", @@ -3517,7 +3521,7 @@ "logentry-protect-protect-cascade": "$1 защитил{{GENDER:$2||а}} $3 $4 [каскадно]", "logentry-protect-modify": "$1 изменил{{GENDER:$2||а}} уровень защиты $3 $4", "logentry-protect-modify-cascade": "$1 изменил{{GENDER:$2||а}} уровень защиты $3 $4 [каскадно]", - "logentry-rights-rights": "$1 {{GENDER:$2|изменил|изменила}} членство в группах для $3 с $4 на $5", + "logentry-rights-rights": "$1 {{GENDER:$2|изменил|изменила}} членство в группах для {{GENDER:$3|$3}} с $4 на $5", "logentry-rights-rights-legacy": "$1 {{GENDER:$2|изменил|изменила}} членство в группах для $3", "logentry-rights-autopromote": "$1 был{{GENDER:$2||а}} автоматически переведен{{GENDER:$2||а}} из $4 в $5", "logentry-upload-upload": "$1 загрузил{{GENDER:$2||а}} $3", @@ -3610,6 +3614,7 @@ "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|час|часа|часов}}", @@ -3700,6 +3705,7 @@ "special-characters-group-ipa": "МФА (IPA)", "special-characters-group-symbols": "Символы", "special-characters-group-greek": "Греческие", + "special-characters-group-greekextended": "Расширенный греческий", "special-characters-group-cyrillic": "Кириллица", "special-characters-group-arabic": "Арабские", "special-characters-group-arabicextended": "Арабские расширенные", @@ -3727,5 +3733,42 @@ "sessionprovider-generic": "$1 сессий", "sessionprovider-mediawiki-session-cookiesessionprovider": "сессий на основе куки", "sessionprovider-nocookies": "Могут быть отключены куки. Убедитесь, что у вас включены куки и начните заново.", - "randomrootpage": "Случайная корневая страница" + "randomrootpage": "Случайная корневая страница", + "log-action-filter-block": "Тип блокировки:", + "log-action-filter-delete": "Тип удаления:", + "log-action-filter-import": "Тип импорта:", + "log-action-filter-managetags": "Тип тега управленческих действий:", + "log-action-filter-move": "Тип переименования:", + "log-action-filter-newusers": "Тип создания учётной записи:", + "log-action-filter-patrol": "Тип патрулирования:", + "log-action-filter-protect": "Тип защиты:", + "log-action-filter-rights": "Тип изменения прав", + "log-action-filter-suppress": "Тип сокрытия", + "log-action-filter-upload": "Тип загрузки:", + "log-action-filter-all": "Все", + "log-action-filter-block-block": "Блокировка", + "log-action-filter-block-reblock": "Изменение блокировки", + "log-action-filter-block-unblock": "Разблокировка", + "log-action-filter-contentmodel-change": "Изменение модели содержимого", + "log-action-filter-delete-delete": "Удаления страницы", + "log-action-filter-delete-restore": "Восстановление страницы", + "log-action-filter-delete-event": "Удаление журнала", + "log-action-filter-delete-revision": "Удаление версии", + "log-action-filter-managetags-deactivate": "Отключение тега", + "log-action-filter-move-move": "Двигаться без перезаписи переадресаций", + "log-action-filter-move-move_redir": "Переместить с заменой переадресаций", + "log-action-filter-newusers-create": "Создание анонимным участником", + "log-action-filter-newusers-create2": "Создание зарегистрированным участником", + "log-action-filter-newusers-autocreate": "Автоматическое создание", + "log-action-filter-patrol-patrol": "Ручное патрулирование", + "log-action-filter-patrol-autopatrol": "Автоматическое патрулирование", + "log-action-filter-protect-protect": "Защита", + "log-action-filter-protect-modify": "Изменение защиты", + "log-action-filter-protect-unprotect": "Снятие защиты", + "log-action-filter-rights-rights": "Ручное изменение", + "log-action-filter-rights-autopromote": "Автоматическое изменение", + "log-action-filter-suppress-revision": "Сокрытие версии", + "log-action-filter-suppress-delete": "Сокрытие страницы", + "log-action-filter-upload-upload": "Новая загрузка", + "log-action-filter-upload-overwrite": "Повторно загрузить" } diff --git a/languages/i18n/rue.json b/languages/i18n/rue.json index 1c1c7cee1d..60b29929fb 100644 --- a/languages/i18n/rue.json +++ b/languages/i18n/rue.json @@ -1507,8 +1507,6 @@ "categories": "Катеґорії", "categoriespagetext": "{{PLURAL:$1|Наслїдуюча катеґорія|Наслїдуючі катеґорії}} {{PLURAL:$1|обсягує|обсягують}} сторінкы або файлы.\nНевказаны суть то [[Special:UnusedCategories|нехоснованы катеґорії]].\nПосмотьте ся тыж на [[Special:WantedCategories|жаданы катеґорії]].", "categoriesfrom": "Вказати сторінкы, што ся зачінають на:", - "special-categories-sort-count": "упорядковати за кількостёв", - "special-categories-sort-abc": "упорядковати за алфавітом", "deletedcontributions": "Вымазаны приспевкы хоснователя", "deletedcontributions-title": "Вымазаны приспевкы хоснователя", "sp-deletedcontributions-contribs": "приспевкы", @@ -2053,10 +2051,6 @@ "import-logentry-upload-detail": "$1 {{PLURAL:$1|ревізія|ревізії|ревізій}}", "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|ревізія|ревізії|ревізій}} з $2", "javascripttest": "Тестованя JavaScript", - "javascripttest-pagetext-noframework": "Тота сторінка є резервована про тестованя JavaScript.", - "javascripttest-pagetext-unknownframework": "Незнаный фреймворк тестованя „$1“.", - "javascripttest-pagetext-frameworks": "Просиме, звольте єден з наступных фреймворків тестованя : $1", - "javascripttest-pagetext-skins": "Звольте взгляд під котрым ся мають тесты спустити:", "javascripttest-qunit-intro": "Смотьте [$1 документацію тестованя] на mediawiki.org", "tooltip-pt-userpage": "Ваша сторінка хоснователя", "tooltip-pt-anonuserpage": "Сторінка хоснователя про IP-адресу, з котрой едітуєте", @@ -2298,8 +2292,8 @@ "exif-colorspace": "Фаребный простор", "exif-componentsconfiguration": "Конфіґурація компонентів фарбы", "exif-compressedbitsperpixel": "Компрімачный режім", - "exif-pixelydimension": "Шырка образчіка", - "exif-pixelxdimension": "Вышка образчіка", + "exif-pixelxdimension": "Шырка образчіка", + "exif-pixelydimension": "Вышка образчіка", "exif-usercomment": "Додатковый коментарь", "exif-relatedsoundfile": "Звязаный звуковый файл", "exif-datetimeoriginal": "Оріґіналный датум і час", @@ -2710,7 +2704,6 @@ "version-entrypoints-header-entrypoint": "Вступный пункт", "version-entrypoints-header-url": "URL", "redirect": "Напрямлїня за файлом, хоснователям або ID ревізії", - "redirect-legend": "Напрямити на файл або сторінку", "redirect-summary": "Тота шпеціална сторінка напрямує на файл (по назві), сторінку (по ID ревізії) або хоснователя (по чіселнім хоснователёвім ID).", "redirect-submit": "Перейти", "redirect-lookup": "Найти:", @@ -2722,7 +2715,6 @@ "redirect-not-exists": "Значіня ся не нашло", "fileduplicatesearch": "Гляданя дуплікатных файлів", "fileduplicatesearch-summary": "Гляданя дупліцітных файлів ся базує на їх геш функції.", - "fileduplicatesearch-legend": "Гляданя дуплікатів", "fileduplicatesearch-filename": "Назва файлу:", "fileduplicatesearch-submit": "Глядати", "fileduplicatesearch-info": "$1 × $2 пікселів
Розмір файлу: $3
MIME-тіп: $4", diff --git a/languages/i18n/sa.json b/languages/i18n/sa.json index 1c1d53445d..52c19c7dd3 100644 --- a/languages/i18n/sa.json +++ b/languages/i18n/sa.json @@ -1394,9 +1394,9 @@ "listfiles-delete": "अपाक्रियताम्", "listfiles-summary": "एतद्विशेषपुटम् उत्तारितसञ्चिकाः प्रदर्शयति । \nयोजकेन शुद्धाः अतिनूतनं सञ्चिकाः केवलम् अत्र प्रदर्शयति ।", "listfiles_search_for": "माध्यमनामधेयार्थम् अन्विषतु ।", - "listfiles-userdoesnotexist": "\"$1\" इत्यषा सदस्यलेखा पञ्जीकृतं नास्ति ।", + "listfiles-userdoesnotexist": "\"$1\" इत्यषा सदस्यलेखा पञ्जीकृता नास्ति ।", "imgfile": "संचिका", - "listfiles": "सञ्चिकावली ।", + "listfiles": "सञ्चिकावली", "listfiles_thumb": "अंगुष्ठनखाकारम् ।", "listfiles_date": "दिनाङ्क", "listfiles_name": "नाम", @@ -1640,8 +1640,6 @@ "categories": "वर्गाः", "categoriespagetext": "निम्नोक्ताः {{PLURAL:$1|श्रेणी|श्रेणयः}} पुटानि माध्यमान् वा युक्ताः ।\nयस्याः श्रेण्याः [[Special:UnusedCategories|अप्रयुक्तश्रेण्यः]] अत्र न सन्ति ।\n[[Special:WantedCategories|अपेक्षितश्रेण्यः]] अपि पश्यतु ।", "categoriesfrom": "इत्यस्मात् आरभ्यमाणानि पृष्ठानि दर्श्यन्ताम्:", - "special-categories-sort-count": "गणनानुगुणं वर्गीकरोतु ।", - "special-categories-sort-abc": "अकारदिक्रमेण वर्गीकरोतु ।", "deletedcontributions": "अपमर्जितानि योजकयोगदानानि ।", "deletedcontributions-title": "अपमर्जितानि योजकयोगदानानि ।", "sp-deletedcontributions-contribs": "योगदानानि ।", @@ -1914,7 +1912,7 @@ "mycontris": "योगदानानि", "anoncontribs": "अंशदाता", "contribsub2": "($2) कृते {{GENDER:$3|$1}}", - "contributions-userdoesnotexist": "\"$1\" इत्यषा सदस्यलेखा पञ्जीकृतं नास्ति ।", + "contributions-userdoesnotexist": "\"$1\" इत्यषा सदस्यलेखा पञ्जीकृता नास्ति ।", "nocontribs": "एतादृशयोग्यताभिः समं परिवर्तनानि न दृष्टानि ।", "uctop": "वर्तमानः", "month": "अस्मात् मासात् (प्राक्तनानि च):", @@ -2225,11 +2223,7 @@ "import-logentry-upload-detail": "$1 {{PLURAL:$1|संस्करणस्य|संस्करणानाम्}} आयातः अभवत्", "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|संस्करणस्य|संस्करणानाम्}} आयातः अभवत् $2", "javascripttest": "जावालिपिपरीक्षणम् ।", - "javascripttest-pagetext-noframework": "जावलिपिचालनपरीक्षार्थम् एतत्पुटम् आरक्षितम् ।", - "javascripttest-pagetext-unknownframework": "अज्ञातपरीक्षाप्रक्रिया $1", "javascripttest-pagetext-unknownaction": "\"$1\" अज्ञातक्रिया ।", - "javascripttest-pagetext-frameworks": "अधो दत्तेषु कञ्चिदेकां परीक्षाप्रक्रियां चिनोतु : $1", - "javascripttest-pagetext-skins": "अनेन सह परीक्षां सञ्चालयितुं काचित् त्वक् चिनोतु ।", "javascripttest-qunit-intro": "mediawiki.org. [$1 अभिलेखपरीक्षा] इत्यत्र पश्यतु ।", "tooltip-pt-userpage": "{{GENDER:|भवतः/भवत्याः सदस्यपृष्ठम्}}", "tooltip-pt-anonuserpage": "ऐपिसङ्केतार्थं योजकपुटं भवान् सम्पादयति एवम्..", @@ -2477,8 +2471,8 @@ "exif-colorspace": "वर्णावकाशः", "exif-componentsconfiguration": "प्रत्येकं भागस्य अर्थः ।", "exif-compressedbitsperpixel": "चित्रसङ्कोचविधानम् ।", - "exif-pixelydimension": "चित्रपार्थवम् (width)", - "exif-pixelxdimension": "चित्रैन्नत्यम् ।", + "exif-pixelxdimension": "चित्रपार्थवम् (width)", + "exif-pixelydimension": "चित्रैन्नत्यम् ।", "exif-usercomment": "योजकाभिप्रायः ।", "exif-relatedsoundfile": "सम्बद्धश्रवणसञ्चिका ।", "exif-datetimeoriginal": "दत्तांशसर्जनस्य दिनाङ्कः समयः च ।", @@ -2914,7 +2908,6 @@ "version-libraries-library": "ग्रन्थालयः", "version-libraries-version": "संस्करणम्", "redirect": "सञ्चिका-सदस्य-पृष्ठेभ्यः उत संस्करणात् पुनर्निर्दिष्टम्", - "redirect-legend": "सञ्चिकायाः, पृष्ठात् वा पुनर्निर्दिष्टम्", "redirect-summary": "एतत् विशिष्टपृष्ठं सञ्चिकां (सञ्चिकायाः नाम प्रदत्तम्) प्रति पुनर्निर्दिष्टम् अस्ति । पृष्ठं (अभिज्ञापकस्य संस्करणम् उत पृष्ठाभिज्ञापकं प्रदत्तम्), उत सदस्यपृष्ठम् (सङ्ख्यात्मकं सदस्याभिज्ञापकं प्रदत्तम्) । उपयोगः : [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/page/64308]], [[{{#Special:Redirect}}/revision/328429]], उत [[{{#Special:Redirect}}/user/101]].", "redirect-submit": "गम्यताम्", "redirect-lookup": "अन्विष्याम् :", @@ -2926,7 +2919,6 @@ "redirect-not-exists": "मूल्यं न प्राप्तम्", "fileduplicatesearch": "प्रतिकृतिसञ्चिकार्थम् अन्विषतु ।", "fileduplicatesearch-summary": "सम्मिश्रमौल्यामूलयुतर्थं प्रतिकृतिसञ्चिकार्थम् अन्विषतु ।", - "fileduplicatesearch-legend": "प्रतिकृत्यर्थम् अन्विषतु ।", "fileduplicatesearch-filename": "सञ्चिकानाम:", "fileduplicatesearch-submit": "अन्वेषणम्", "fileduplicatesearch-info": "$1 × $2 पिक्सेलानि, संचिकायाः आकारः: $3, MIME-प्रकारः: $4", diff --git a/languages/i18n/sah.json b/languages/i18n/sah.json index ffbdea6726..6a155bbcb1 100644 --- a/languages/i18n/sah.json +++ b/languages/i18n/sah.json @@ -1314,7 +1314,7 @@ "recentchangeslinked-page": "Сирэй аата:", "recentchangeslinked-to": "Төттөрүтүн, ыйыллыбыт сирэйгэ сигэнэр сирэйдэри көрдөр", "recentchanges-page-added-to-category": "[[:$1]] категорияҕа эбилиннэ", - "recentchanges-page-added-to-category-bundled": "[[:$1]] уонна {{PLURAL:$2|биир сирэй|$2 сирэй}} категорияҕа эбилиннэ", + "recentchanges-page-added-to-category-bundled": "[[:$1]] уонна [[Special:WhatLinksHere/$1|{{PLURAL:$2|биир сирэй|$2 сирэй}}]] категорияҕа эбилиннэ", "recentchanges-page-removed-from-category": "[[:$1]] категорияттан сотулунна", "recentchanges-page-removed-from-category-bundled": "[[:$1]] уонна {{PLURAL:$2|биир сирэй|$2 сирэй}} категорияттан сотулунна", "autochange-username": "MediaWiki аптамаатынан уларыйыыта", @@ -1802,8 +1802,6 @@ "categories-submit": "Көрдөр", "categoriespagetext": "Бу {{PLURAL:$1|категория иһигэр|категориялар истэригэр}} сирэйдэр эбэтэр медиа-билэлэр бааллар.\n[[Special:UnusedCategories|Туттуллубат категориялар]] манна көстүбэттэр.\nӨссө маны көр: [[Special:WantedCategories|Баар буолуохтаах категориялар тиһиктэрэ]].", "categoriesfrom": "Мантан саҕаланар категориялары көрдөр:", - "special-categories-sort-count": "ахсаанынан бэрээдэктээһин", - "special-categories-sort-abc": "алпабыытынан бэрээдэктээһин", "deletedcontributions": "Сотуллубут көннөрүү", "deletedcontributions-title": "Сотуллубут көннөрүү", "sp-deletedcontributions-contribs": "киллэриитэ (суруйуута)", @@ -2417,11 +2415,7 @@ "import-logentry-upload-detail": "$1 {{PLURAL:$1|барыл угулунна|барылы уктубут}}", "import-logentry-interwiki-detail": "Барыта $2 барылтан $1 барыл угулунна", "javascripttest": "JavaScript тургутуу", - "javascripttest-pagetext-noframework": "Бу сирэй JavaScript тургутууларга анаммыт.", - "javascripttest-pagetext-unknownframework": "\"$1\" тургутуу биллибэт эйгэтэ.", "javascripttest-pagetext-unknownaction": "Биллибэт дьайыы «$1».", - "javascripttest-pagetext-frameworks": "Бука диэн, бу тургуутуу эйгэлэриттэн биирин тал: $1", - "javascripttest-pagetext-skins": "Тургутууну ыытарга тас көрүҥүн бастаан тал:", "javascripttest-qunit-intro": "[$1 тургутуу документациятын] манна mediawiki.org көр.", "tooltip-pt-userpage": "{{GENDER:|Кыттааччы}} быһыытынан тус сириҥ", "tooltip-pt-anonuserpage": "Билигин киирбит IP-м сирэйэ", @@ -2679,8 +2673,8 @@ "exif-colorspace": "Өҥ куйаара (пространство, space)", "exif-componentsconfiguration": "Хас биирдии компонент суолтата", "exif-compressedbitsperpixel": "Ойууну хам тутуу ньымата", - "exif-pixelydimension": "Ойуу кэтитэ", - "exif-pixelxdimension": "Ойуу үрдүгэ", + "exif-pixelxdimension": "Ойуу кэтитэ", + "exif-pixelydimension": "Ойуу үрдүгэ", "exif-usercomment": "Кыттааччы хос быһаарыыта", "exif-relatedsoundfile": "Аудио-билэҕэ сыһыаннаах", "exif-datetimeoriginal": "Оҥоһуллубут кэмэ", @@ -3123,7 +3117,6 @@ "version-libraries-description": "Ойуулааһын", "version-libraries-authors": "Ааптар", "redirect": "Билэттэн, кыттааччыттан, сирэйтэн эбэтэр барыл идентификаторыттан утаарыы", - "redirect-legend": "Билэҕэ эбэтэр сирэйгэ утаарыы", "redirect-summary": "Бу аналлаах сирэй билэҕэ (билэ аатыттан), сирэйгэ (барыл эбэтэр сирэй идентификааторыттан) эбэтэр кыттааччы сирэйигэр (кыттааччы идентификаторыттан) утаарар. Туһаныы: \n[[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/page/64308]], \n[[{{#Special:Redirect}}/revision/328429]] эбэтэр\n[[{{#Special:Redirect}}/user/101]].", "redirect-submit": "Толор", "redirect-lookup": "Көрдөт:", @@ -3136,7 +3129,6 @@ "redirect-not-exists": "Суолта көстүбэтэ", "fileduplicatesearch": "Хос билэлэри көрдөөһүн", "fileduplicatesearch-summary": "Тэҥ билэлэри хэш-куодтарынан көрдөөһүн.", - "fileduplicatesearch-legend": "Хатылааһыннары көрдөөһүн", "fileduplicatesearch-filename": "Билэ аата:", "fileduplicatesearch-submit": "Бул", "fileduplicatesearch-info": "$1 × $2 пииксэл
Билэ кээмэйэ: $3
MIME-тиип: $4", diff --git a/languages/i18n/scn.json b/languages/i18n/scn.json index e7363e1928..b50b5b1bce 100644 --- a/languages/i18n/scn.json +++ b/languages/i18n/scn.json @@ -1657,8 +1657,6 @@ "categories": "Catigurìi", "categoriespagetext": "{{PLURAL:$1|La catigurìa ccassutta cunteni|Li catigurìi ccassutta cuntèninu}} pàggini o file multimidiali.\nLi [[Special:UnusedCategories|catigurìi vacanti]] nun sunnu ammustrati ccà.\nTalìa macari li [[Special:WantedCategories|catigurìi addumannati]].", "categoriesfrom": "Ammustra li catigurìi a pàrtiri di:", - "special-categories-sort-count": "òrdina pi cuntiggiu", - "special-categories-sort-abc": "ordina alfabbeticamenti", "deletedcontributions": "Cuntribbuti di l'utenti cancillati", "deletedcontributions-title": "Cuntribbuti di l'utenti cancillati", "sp-deletedcontributions-contribs": "cuntribbuti", @@ -2254,11 +2252,7 @@ "import-logentry-upload-detail": "{{PLURAL:$1|na virsioni mpurtata|$1 virsioni mpurtati}}", "import-logentry-interwiki-detail": "{{PLURAL:$1|na virsioni mpurtata|$1 virsioni mpurtati}} di $2", "javascripttest": "Virìfichi JavaScript", - "javascripttest-pagetext-noframework": "Sta pàggina è risirvata pi l'esicuzzioni dî virìfichi JavaScript.", - "javascripttest-pagetext-unknownframework": "Framework di virìfica \"$1\" scanusciutu.", "javascripttest-pagetext-unknownaction": "Azzioni scanusciuta \"$1\".", - "javascripttest-pagetext-frameworks": "Pi favuri scegghi unu dî framework siguenti di virìfica: $1", - "javascripttest-pagetext-skins": "Scegghi na peddi câ quali esiguiri li virìfichi:", "javascripttest-qunit-intro": "Talìa [$1 la ducumintazzioni a prupositu dî virìfichi] supra a mediawiki.org.", "tooltip-pt-userpage": "La tò pàggina utenti", "tooltip-pt-anonuserpage": "La pàggina utenti di stu ndirizzu IP", @@ -2510,8 +2504,8 @@ "exif-colorspace": "Spazziu dî culuri", "exif-componentsconfiguration": "Significatu d'ognuna cumpunenti", "exif-compressedbitsperpixel": "Mudalitati di cumprissioni dâ mmàggini", - "exif-pixelydimension": "Larghizza dâ mmàggini", - "exif-pixelxdimension": "Autizza dâ mmàggini", + "exif-pixelxdimension": "Larghizza dâ mmàggini", + "exif-pixelydimension": "Autizza dâ mmàggini", "exif-usercomment": "Noti di l'utenti", "exif-relatedsoundfile": "File audiu culligatu", "exif-datetimeoriginal": "Data e ura di criazzioni dî dati", @@ -2960,7 +2954,6 @@ "version-libraries-description": "Discrizzioni", "version-libraries-authors": "Autura", "redirect": "Rimannu pi nomu di file o còdici di utenti, di pàggina o di virsioni", - "redirect-legend": "Rimannari a nu file o na pàggina", "redirect-summary": "Sta pàggina spiciali rimanna a nu file (datu lu nomu dû file), a na pàggina (datu n'ID di virsioni o n'ID di pàggina), o puru â pàggina di n'utenti (datu n'ID nummèricu d'utenti). Esempî d'usu: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/page/64308]], [[{{#Special:Redirect}}/revision/328429]], o [[{{#Special:Redirect}}/user/101]].", "redirect-submit": "Vai", "redirect-lookup": "Arricerca:", @@ -2972,7 +2965,6 @@ "redirect-not-exists": "Valuri nun attruvatu", "fileduplicatesearch": "Arricerca dê file duppiuni", "fileduplicatesearch-summary": "Circata di pussìbbili dupppiuni dû file 'n basi ô valuri di ''hash''.", - "fileduplicatesearch-legend": "Circata di nu duppiuni", "fileduplicatesearch-filename": "Nomu dû file:", "fileduplicatesearch-submit": "Circata", "fileduplicatesearch-info": "$1 × $2 pixel
Diminzioni: $3
Tipu MIME: $4", diff --git a/languages/i18n/sco.json b/languages/i18n/sco.json index bcba1a5490..4b69dfe365 100644 --- a/languages/i18n/sco.json +++ b/languages/i18n/sco.json @@ -1597,8 +1597,6 @@ "categories": "Categeries", "categoriespagetext": "The follaein {{PLURAL:$1|categerie contains|categeries contain}} pages or media.\n[[Special:UnusedCategories|Onuised categeries]] arna shawn here.\nSee [[Special:WantedCategories|wanted categeries]] ava.", "categoriesfrom": "Displey categeries stairtin at:", - "special-categories-sort-count": "sairt bi coont", - "special-categories-sort-abc": "sairt bi the alphabet", "deletedcontributions": "Delytit uiser contreebutions", "deletedcontributions-title": "Delytit uiser contreebutions", "sp-deletedcontributions-contribs": "contreebutions", @@ -2175,10 +2173,6 @@ "import-logentry-upload-detail": "$1 {{PLURAL:$1|reveesion|reveesions}} importit", "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|reveesion|reveesions}} importit fae $2", "javascripttest": "JavaScript testin", - "javascripttest-pagetext-noframework": "This page is reserved fer rinnin JavaScript tests.", - "javascripttest-pagetext-unknownframework": "Onkent testin framewairk \"$1\".", - "javascripttest-pagetext-frameworks": "Please chuise yin o the follaein testin framewairks: $1", - "javascripttest-pagetext-skins": "Chuise ae skin tae rin the tests wi:", "javascripttest-qunit-intro": "See [$1 testin documentation] oan mediawiki.org.", "tooltip-pt-userpage": "Yer uiser page", "tooltip-pt-anonuserpage": "The uiser page fer the IP address that ye'r eeditin aes", @@ -2424,8 +2418,8 @@ "exif-colorspace": "Colour space", "exif-componentsconfiguration": "Meanin o ilka component", "exif-compressedbitsperpixel": "Eemage compression mode", - "exif-pixelydimension": "Eemage width", - "exif-pixelxdimension": "Eemage heicht", + "exif-pixelxdimension": "Eemage width", + "exif-pixelydimension": "Eemage heicht", "exif-usercomment": "Uiser comments", "exif-relatedsoundfile": "Relatit audío file", "exif-datetimeoriginal": "Date n time o data generation", @@ -2857,7 +2851,6 @@ "version-entrypoints-header-entrypoint": "Entrie point", "version-entrypoints-header-url": "URL", "redirect": "Reguidal bi file, uiser, page or reveesion ID", - "redirect-legend": "Reguidal til ae file or page", "redirect-summary": "This byordiair page reguides til ae file (gien the file name), ae page (gien ae reveesion ID or page ID), or ae uiser page (gien ae numereec uiser ID). Uissage: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/page/64308]], [[{{#Special:Redirect}}/reveesion/328429]], or [[{{#Special:Redirect}}/uiser/101]].", "redirect-submit": "Gang", "redirect-lookup": "Luikup:", @@ -2869,7 +2862,6 @@ "redirect-not-exists": "Value na foond", "fileduplicatesearch": "Rake fer dupleecate files", "fileduplicatesearch-summary": "Rake fer dupleecate files based oan hash values.", - "fileduplicatesearch-legend": "Rake fer ae dupleecate", "fileduplicatesearch-filename": "Filename:", "fileduplicatesearch-submit": "Rake", "fileduplicatesearch-info": "$1 × $2 pixel
File size: $3
MIME type: $4", diff --git a/languages/i18n/sd.json b/languages/i18n/sd.json index c6e6e6ddf2..23ddbe9b1a 100644 --- a/languages/i18n/sd.json +++ b/languages/i18n/sd.json @@ -47,6 +47,7 @@ "underline-always": "هميشہ", "underline-never": "ڪڏهن بہ نہ", "editfont-style": "ايراضي جو فونٽ اسٽائيل سنواريو:", + "editfont-serif": "سيرِف اِنڊو", "sunday": "آچر", "monday": "سومر", "tuesday": "اڱارو", @@ -429,6 +430,11 @@ "resetpass_submit": "ڳجھو لفظ طَي ڪريو ۽ لاگ اِن ٿيو", "changepassword-success": "توهان جو ڳجھو لفظ ڪاميابيءَ سان بدلايو ويو!", "changepassword-throttled": "توهان تازو ئي لاگ اِن ٿيڻ جون هيڪانديون گھڻيون ڪوششون ڪيون آهن. مهرباني ڪري $1 لاءِ ترسي پوءِ وري ڪوشش ڪريو.", + "botpasswords-label-create": "سرجيو", + "botpasswords-label-update": "تجديد", + "botpasswords-label-cancel": "رد", + "botpasswords-label-delete": "ڊاهيو", + "botpasswords-label-resetpassword": "ڳجھو لفظ نئين سِر مقرر ڪريو", "resetpass_forbidden": "ڳجھو لفظ بدلائي نہ ٿو سگھجي.", "resetpass-no-info": "هيءُ صفحو پڙهڻ لاءِ لاگ اِن ٿيڻ ضروري آهي.", "resetpass-submit-loggedin": "ڳجھو لفظ بدلايو", @@ -446,6 +452,7 @@ "passwordreset-emaildisabled": "هن وڪيءَ تي برق‌ٽپال واريون خصوصيتون غير فعال بڻايون ويون آهن.", "passwordreset-username": "يُوزرنانءُ:", "passwordreset-domain": "ميدان:", + "passwordreset-capture": "برق ٽپال ڏسڻ چاهيندا؟", "passwordreset-email": "برق ٽپال پتو:", "passwordreset-emailtitle": "{{SITENAME}} واري کاتي جا تفصيل", "passwordreset-emailelement": "يُوزر نانءُ: \n$1\n\nعارضي ڳجھو لفظ:\n$2", @@ -530,6 +537,8 @@ "hiddencategories": "هيءُ صفحو {{PLURAL:$1|1 لڪل زمري|$1 لڪل زمرن}}: جو رڪن آهي:", "nocreatetext": "{{SITENAME}} نوان صفحا سرجڻ جي روڪَ ڪئي آهي.\nتوهان اڳي ئي موجود صفحن کي سنواري سگھو ٿا، يا [[Special:UserLogin|لاگ اِن ٿي يا نئون کاتو کولي سگھو ٿا]].", "nocreate-loggedin": "توهان کي نوان صفحا سرجڻ جي اجازت حاصل ڪانهي.", + "sectioneditnotsupported-title": "سيڪشن جي سنوار ممڪن نہ آهي", + "sectioneditnotsupported-text": "هن صفحي تي سيڪشن کي سنوارڻ ممڪن نہ آهي.", "permissionserrors": "اجازتنامي جي چُڪَ", "permissionserrorstext": "هيٺين {{PLURAL:$1|سبب|سببن}} ڪري، توهان کي اهو ڪرڻ جي اجازت حاصل ڪانهي.", "permissionserrorstext-withaction": "هيٺين {{PLURAL:$1|سبب|سببن}} ڪري، توهان کي $2 جي اجازت ڪانهي.", @@ -710,6 +719,7 @@ "timezonelegend": "اوقاتي زون:", "localtime": "مقامي وقت:", "timezoneuseserverdefault": "وڪي عدم پيروي استعمال ڪريو ($1)", + "timezoneuseoffset": "ٻيو (ڄاڻايو)", "servertime": "سَروَر پٽاندر وقت:", "guesstimezone": "جھانگُوءَ مان ڀريو", "timezoneregion-africa": "آفريڪا", @@ -796,6 +806,7 @@ "right-move-categorypages": "زمراتي صفحا چوريو", "right-movefile": "فائيل چوريو", "right-upload": "فائيل چاڙهيو", + "right-reupload": "موجوده فائيلن مٿان", "right-upload_by_url": "ڪنهن يُوآرايل تان فائيل چاڙهيو", "right-writeapi": "اي پر آءِ لکڻ جو استعمال", "right-delete": "صفحا ڊاهيو", @@ -807,6 +818,7 @@ "right-viewmywatchlist": "پنهنجي ٽيٽ لسٽ ڏسو", "right-editmyoptions": "پنهنجون ترجيحات سنواريو", "right-import": "ٻين وڪيز کان صفحا درآمديو", + "right-importupload": "ڪو فائيل چاڙهي صفحا درآمديو", "right-mergehistory": "صفحن جي سوانح سنواريو", "right-userrights": "سڀ يوزر حق ترميم ڪريو", "right-userrights-interwiki": "هن وڪي جي يوزرس جا حق ترميم ڪريو", @@ -815,6 +827,18 @@ "right-sendemail": "ٻين يوزرس ڏانهن ايميل موڪليو", "right-passwordreset": "ڳجھو لفظ مقرري برق ٽپالون ڏسو", "right-managechangetags": "اعدادخاني ۾ [[Special:Tags|ٽيگس]] سرجيو ۽ ڊاهيو.", + "grant-group-email": "برق ٽپال اماڻيو", + "grant-blockusers": "يُوزرس کي بندشيو ۽ اڻبندشيو", + "grant-createaccount": "نئون کاتو کوليو", + "grant-editmywatchlist": "پنهنجي ٽيٽ فهرست سنواريو", + "grant-editprotected": "تحفظيل صفحا سنواريو", + "grant-rollback": "صفحن ۾ ڪيل تبديليون واپس ورايو", + "grant-sendemail": "ٻين يوزرس ڏانهن ايميل موڪليو", + "grant-uploadeditmovefile": "فائيل چاڙهيو، مَٽايو، ۽ ڊاهيو", + "grant-uploadfile": "نئون فائيل چاڙهيو", + "grant-basic": "بنيادي حقَ", + "grant-viewdeleted": "ڊَٺَلَ فائيلَ ۽ صفحا ڏسو", + "grant-viewmywatchlist": "پنهنجي ٽيٽ فهرست ڏسو", "newuserlogpage": "يوزر کاتن جو لاگ", "rightslog": "يُوزر حق لاگ", "action-read": "هي صفحو پڙهو", @@ -896,7 +920,9 @@ "newpageletter": "ن", "boteditletter": "گ", "number_of_watching_users_pageview": "[$1، {{PLURAL:$1|يُوزر|يُوزرس}} کي ٽيٽيندي]", + "rc_categories_any": "چونڊيلن مان ڪو بہ", "rc-change-size-new": "$1 {{PLURAL:$1|بائيٽ|بائيٽس}} تبديليءَ کان پوءِ", + "newsectionsummary": "/* $1 */ نئون سيڪشن", "rc-enhanced-expand": "تفصيل ڏيکاريو", "rc-enhanced-hide": "تفصيل لڪايو", "recentchangeslinked": "لاڳاپيل تبديليون", @@ -916,6 +942,9 @@ "fileuploadsummary": "خلاصو:", "filereuploadsummary": "فائيل تبديليون:", "filesource": "ذريعو:", + "ignorewarnings": "وارنڱس کي نظرانداز ڪريو", + "badfilename": "فائيل‌نانءُ بدلائي \"$1\" رکيو ويو آهي.", + "empty-file": "توهان جو جمع ڪرايل فائيل خالي آهي.", "filename-tooshort": "فائيل نانءَُ هيڪاندو ننڍو آهي.", "filetype-banned": "فائيل جو هيءُ قسم بندشيل آهي.", "verification-error": "هن فائيل جي تصديق ٿي نہ سگھي.", @@ -944,6 +973,7 @@ "upload-options": "چاڙھ جا چارا", "watchthisupload": "هيءُ فائيل ٽيٽيو", "upload-file-error": "اندروني چُڪَ", + "upload-http-error": "ايڇ ٽي ٽي پي جي چُڪَ ٿي آهي: $1", "upload-dialog-title": "فائيل چاڙهيو", "upload-dialog-button-cancel": "رد", "upload-dialog-button-done": "ٿي ويو", @@ -964,10 +994,14 @@ "backend-fail-move": "فائيل \"$1\" کي \"$2\" ڏانهن چوري نه سگھيو.", "backend-fail-opentemp": "عارضي فائيئ کولي نه سگھيو.", "backend-fail-read": "فائيل \"$1\" کي پڙهي نه سگھيو.", + "uploadstash-thumbnail": "ٽِڪِلي ڏسو", + "img-auth-accessdenied": "دسترس کان جواب", "license-header": "لائيسنسڪاري", + "nolicense": "چونڊ اڻموجود", "listfiles-delete": "ڊاهيو", "imgfile": "فائيل", "listfiles": "فائيل فهرست", + "listfiles_thumb": "ٽِڪِلِي", "listfiles_date": "تاريخ", "listfiles_name": "نالو", "listfiles_user": "يُوزر", @@ -987,6 +1021,7 @@ "filehist-datetime": "تاريخ/وقت", "filehist-thumb": "آڱوٺي ننهن", "filehist-thumbtext": "$1 جي نظرثاني لاءِ تصويري نشان", + "filehist-nothumb": "ٽِڪِلِي اڻموجود", "filehist-user": "يُوزر", "filehist-dimensions": "ماپَ", "filehist-filesize": "فائيل سائيز", @@ -1015,7 +1050,9 @@ "unusedtemplates": "اڻ استعماليل سانچا", "unusedtemplateswlh": "ٻيا ڳنڍڻا", "randompage": "بلاترتيب صفحو", + "randomincategory": "زمري مان ڪو بلاترتيب صفحو", "randomincategory-category": "زمرو:", + "randomincategory-legend": "زمري مان ڪو بلاترتيب صفحو", "randomincategory-submit": "هلو", "randomredirect": "بلا ترتيب چورڻو", "statistics": "انگ اکر", @@ -1030,6 +1067,7 @@ "statistics-users": "کاتيدار [[Special:ListUsers|يُوزرس]]", "statistics-users-active": "سرگرم يُوزرس", "statistics-users-active-desc": "اهي يُوزرس جن پوين {{PLURAL:$1|ڏينهن|$1 ڏينهن}} ۾ ڪا سرگرمي ڏيکاري آهي.", + "pageswithprop-prop": "خصوصيت نانءُ:", "pageswithprop-submit": "ھلو", "doubleredirects": "ٻٽا چورڻا", "double-redirect-fixed-move": "[[$1]] چورجي چڪو آهي. ان کي خودڪاراً تجديديو ويو ۽ هاڻي اهو [[$2]] ڏانهن وٺي وڃي ٿو.", @@ -1073,7 +1111,9 @@ "deadendpages": "اڻ ڳنڍيندڙ صفحا", "protectedpages": "تحفظيل صفحا", "protectedpages-noredirect": "چورڻا لڪايو", + "protectedpages-timestamp": "اوقاتي مُهُرَ", "protectedpages-page": "صفحو", + "protectedpages-params": "تحفظ جا نميپيما", "protectedpages-reason": "سبب", "protectedpages-submit": "صفحا ڏيکاريو", "protectedpages-unknown-timestamp": "اڻڄاتل", @@ -1082,28 +1122,42 @@ "protectedtitles-submit": "عنوان ڏيکاريو", "listusers": "يُوزر فهرست", "newpages": "نوان صفحا", + "newpages-submit": "ڏيکاريو", "newpages-username": "يُوزرنانءُ:", "ancientpages": "قديم ترين صفحا", "move": "چوريو", "movethispage": "هيءُ صفحو چوريو", "notargettitle": "بنان هدف", + "nopagetitle": "اهدافي صفحو اڻموجود", "pager-older-n": "{{PLURAL:$1|پراڻو 1|پراڻا $1}}", + "apisandbox-retry": "ٻيهر ڪوشش ڪريو", + "apisandbox-helpurls": "امدادي ڳنڍڻا", + "apisandbox-examples": "مثال", + "apisandbox-dynamic-parameters-add-label": "نيمپيما شامل ڪريو", + "apisandbox-dynamic-parameters-add-placeholder": "نيمپيما نانءُ", + "apisandbox-results": "نتيجا", "booksources": "ڪتابي وسيلا", "booksources-search-legend": "ڪتابي ذريعن جي ڳولا ڪريو", "booksources-search": "ڳوليو", "specialloguserlabel": "پيش ڪندڙ:", "speciallogtitlelabel": "نشانو (عنوان يا {{ns:user}}:يا يوزنانءُ يور جي لاءِ):", "log": "لاگس", + "logeventslist-submit": "ڏيکاريو", "all-logs-page": "سڀ عوامي لاگس", + "checkbox-none": "ڪو بہ نہ", + "checkbox-invert": "ابتيو", "allpages": "سڀ صفحا", "nextpage": "اڳيون صفحو ($1)", "prevpage": "پويون صفحو ($1)", "allpagesfrom": "ھتان شروع ٿيندڙ صفحا نمايو", + "allpagesto": "ان تي ختم ٿيندڙ صفحا نُمايو:", "allarticles": "سمورا مضمون", "allinnamespace": "سمورا صفحا ($1 نانءُپولار)", "allpagessubmit": "ھلو", "allpagesprefix": "صفحا نمايو بمع اڳياڙي:", + "allpagesbadtitle": "صفحي جو گھربل عنوان ڪار ڪونهي، يا خالي آهي، يا وري غيردرست طريقي سان ڳنڍيل بين‌الزباني يا بين‌الوڪي عنوان آهي. \nان ۾ هڪ يا هڪ کان وڌيڪ اهڙا اکر موجود ٿي سگھن ٿا، جيڪي عنوان ۾ استعمال ڪري نہ ٿا سگھجن.", "categories": "زمرا", + "categories-submit": "ڏيکاريو", "deletedcontributions": "يُوزر جون ڊاٺل ڀاڱيداريون", "deletedcontributions-title": "يُوزر جون ڊاٺل ڀاڱيداريون", "sp-deletedcontributions-contribs": "ڀاڱيداريون", @@ -1124,6 +1178,7 @@ "listgrouprights-addgroup-all": "سڀ گروپَ شامل ڪريو", "listgrouprights-removegroup-all": "سڀ گروپ هٽايو", "listgrouprights-namespaceprotection-namespace": "نانءُ پولار:", + "listgrants-rights": "حق", "trackingcategories-name": "پيغام جو نالو", "trackingcategories-nodesc": "ڪا به تشريح موجود نه آهي.", "trackingcategories-disabled": "زمرو ناقابلِ ڪار بڻايل آهي.", @@ -1147,6 +1202,7 @@ "mywatchlist": "ٽيٽ فهرست", "addwatch": "ٽيٽ فهرست ۾ شامل ڪريو", "addedwatchtext": "صفحو\"[[:$1]]\" ان جي بحث وارو صفحو اوهان جي [[Special:Watchlist|ٽيٽ فهرست]] ۾ شامل ڪيو ويو آهي.", + "removewatch": "ٽيٽ فهرست مان خارج ڪريو", "removedwatchtext": "صفحو بعنوان \"[[:$1]]\" توهان جي [[Special:Watchlist|ٽيٽ فهرست]] مان هٽي چڪو آهي.", "removedwatchtext-short": "\"صفحو بعنوان \"$1\" توهان جي ٽيٽ فهرست مان هٽي چڪو آهي.\"", "watch": "ٽيٽيو", @@ -1473,8 +1529,8 @@ "exif-artist": "ليکڪ", "exif-copyright": "حق ۽ واسطا رکندڙ", "exif-colorspace": "رنگ پولار", - "exif-pixelydimension": "عڪس جي ويڪر", - "exif-pixelxdimension": "عڪس جي اوچائي", + "exif-pixelxdimension": "عڪس جي ويڪر", + "exif-pixelydimension": "عڪس جي اوچائي", "exif-usercomment": "يُوزر جا تاثرات", "exif-relatedsoundfile": "لاڳاپيل آوازي فائيل", "exif-datetimeoriginal": "اعداد جي جڙڻ جي تاريخ ۽ وقت", diff --git a/languages/i18n/sdh.json b/languages/i18n/sdh.json index 015e408d06..cf0dcd399d 100644 --- a/languages/i18n/sdh.json +++ b/languages/i18n/sdh.json @@ -557,7 +557,7 @@ "metadata-help": "ئەی پەڕگە زانیاری فرەێگ لەتێیە، ک گەھا دۊردۊن (camera) یا ئسکەنێر (scanner) خستۊە سەری. ئەگەر پەڕگەگە لە حاڵەتە سەرەتاییەگەیەو دەسکاری کریاۊد، گاھەس بڕێگ لە وردەکاریەیل، زانیارەگان وێنە گووڕیاێەگە وە تەواوی نیشان نەدەن.", "metadata-fields": "کاڵگەگان (fields) میتادەیتاێ وێنە ک لە ئەی پەیامە وەڕزارەو کریانە، کاتێگ جەدوەل میتادەیتا کووکریاێ بوود لە پەڕەی وێنە نیشان دەریەن.\nکاڵگەگان تر لە حاڵەتی بنەڕەتی شاریاێن.\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-imagedescription": "ناونیشان وێنە", - "exif-pixelxdimension": "بەرزی وێنە", + "exif-pixelydimension": "بەرزی وێنە", "exif-flash": "فلەش", "exif-keywords": "کلیل‌وشەیل", "exif-writer": "نۊسەر", diff --git a/languages/i18n/ses.json b/languages/i18n/ses.json index 2c92aaba96..2488e06be3 100644 --- a/languages/i18n/ses.json +++ b/languages/i18n/ses.json @@ -1594,8 +1594,6 @@ "categories": "Dumey", "categoriespagetext": "Ne {{PLURAL:$1|dumoo goo nda|dumey goo nda}} mooyaŋ wala hẽenandi haya.\n[[Special:UnusedCategories|Dumey kaŋ ši goy]] ga cebandi ne.\nDii da [[Special:WantedCategories|dumey kaŋ ga ceecandi]].", "categoriesfrom": "Dumey cebe kaŋ ga šintin ne:", - "special-categories-sort-count": "fay kabu bande \\", - "special-categories-sort-abc": "fay abaca bande", "deletedcontributions": "Goykaw kanbuzaama tuusantey", "deletedcontributions-title": "Goykaw kanbuzaama tuusantey", "sp-deletedcontributions-contribs": "kanbuzaamawey", @@ -2177,10 +2175,6 @@ "import-logentry-upload-detail": "{{PLURAL:$1|Filla}} $1 ka huru", "import-logentry-interwiki-detail": "{{PLURAL:$1|Filla}} $1 huru ka hun $2 ga", "javascripttest": "JavaScript šiiyan", - "javascripttest-pagetext-noframework": "Moɲoo woo n' ka lanbandi ka JavaScript šiiyaney tee.", - "javascripttest-pagetext-unknownframework": "Kungagoy \"$1\" šiiyan ši bayandi.", - "javascripttest-pagetext-frameworks": "Šiiyan kungagoy šiiyaney wey affoo suuba: $1", - "javascripttest-pagetext-skins": "Kuuru foo suuba ka šiiyaney tee nd'a:", "javascripttest-qunit-intro": "Guna [$1 šiiyan fahamandi tiira] mediawiki.org ga.", "tooltip-pt-userpage": "War goykaw moɲoo", "tooltip-pt-anonuserpage": "Goykaw moo IP aderesoo kaŋ war goo m'a fasal sanda", @@ -2488,8 +2482,8 @@ "exif-colorspace": "Noone farru", "exif-componentsconfiguration": "Jere-ize foo kul maana", "exif-compressedbitsperpixel": "Bii kankamandiyan yaayi", - "exif-pixelydimension": "Bii hayri", - "exif-pixelxdimension": "Bii kayyan", + "exif-pixelxdimension": "Bii hayri", + "exif-pixelydimension": "Bii kayyan", "exif-usercomment": "Goykaw daarawey", "exif-relatedsoundfile": "Jinde tuku hangante", "exif-datetimeoriginal": "Han nda waati bayhaya teeyan se", @@ -3035,7 +3029,6 @@ "version-entrypoints-articlepath": "[https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgArticlePath Article path]", "version-entrypoints-scriptpath": "[https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgScriptPath Script path]", "redirect": "Tuku, goykaw, moo wala boŋtammaasa filla n'a kuubi", - "redirect-legend": "Kuubi tuku wala moo ga", "redirect-summary": "Moo cerecerante ga kuubi tuku ga (tuku maa bande), moo (sanda boŋtammaasa wala boŋtammaasa moo), wala goykaw moo (sanda hinna goykaw boŋtammaasa). Goyyan: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/moo/64308]], [[{{#Special:Redirect}}/filla/328429]], wala [[{{#Special:Redirect}}/goykaw/101]].", "redirect-submit": "Koy", "redirect-lookup": "Guna:", @@ -3047,7 +3040,6 @@ "redirect-not-exists": "Hinna mana duwandi", "fileduplicatesearch": "Tuku fillantey ceeci", "fileduplicatesearch-summary": "Tuku fillantey kaŋ ga hanga hanga hinnawey ceeci.", - "fileduplicatesearch-legend": "Ize fillante ceeci", "fileduplicatesearch-filename": "Tukumaa:", "fileduplicatesearch-submit": "Ceeci", "fileduplicatesearch-info": "biitonbi $1 × $2
Tuku azzaati: $3
MIME dumi: $4", diff --git a/languages/i18n/sgs.json b/languages/i18n/sgs.json index ec538b1411..b994d2637c 100644 --- a/languages/i18n/sgs.json +++ b/languages/i18n/sgs.json @@ -1636,8 +1636,8 @@ "exif-exifversion": "Exif atmains", "exif-colorspace": "Spalvū lauks", "exif-compressedbitsperpixel": "Abruozdielė sospaudėma rėžėms", - "exif-pixelydimension": "Abruozdielė platoms", - "exif-pixelxdimension": "Abruozdielė augoms", + "exif-pixelxdimension": "Abruozdielė platoms", + "exif-pixelydimension": "Abruozdielė augoms", "exif-usercomment": "Pāiškėnėmā", "exif-relatedsoundfile": "Prėgolons garsos", "exif-datetimeoriginal": "Žėnės paderbėma čiesos", @@ -1761,7 +1761,6 @@ "redirect-revision": "Poslapė versėjė", "redirect-file": "Abruozdėlė vards", "fileduplicatesearch": "Ėiškuotė doblikoutu failu", - "fileduplicatesearch-legend": "Ėiškuotė doblėkatu", "fileduplicatesearch-filename": "Faila vards:", "fileduplicatesearch-submit": "Ėiškuotė", "fileduplicatesearch-info": "$1 × $2 pėkseliu
Faila dėdoms: $3
MIME tėps: $4", diff --git a/languages/i18n/sh.json b/languages/i18n/sh.json index 754df9718f..26fea824c0 100644 --- a/languages/i18n/sh.json +++ b/languages/i18n/sh.json @@ -1227,7 +1227,7 @@ "recentchangeslinked-page": "Naslov stranice:", "recentchangeslinked-to": "Pokaži promjene stranica koji su povezane sa datom stranicom", "recentchanges-page-added-to-category": "[[:$1]] pridodano kategoriji", - "recentchanges-page-added-to-category-bundled": "[[:$1]] i {{PLURAL:$2|stranica|$2 stranica}} {{PLURAL:$2|pridodana|pridodane}} kategoriji", + "recentchanges-page-added-to-category-bundled": "[[:$1]] i [[Special:WhatLinksHere/$1|{{PLURAL:$2|stranica|$2 stranica}} {{PLURAL:$2|pridodana|pridodane}}]] kategoriji", "recentchanges-page-removed-from-category": "[[:$1]] uklonjeno iz kategorije", "recentchanges-page-removed-from-category-bundled": "[[:$1]] i {{PLURAL:$2|stranica|$2 stranica}} {{PLURAL:$2|uklonjena|uklonjenne}} iz kategorije", "autochange-username": "MediaWiki automatska promjena", @@ -1678,8 +1678,6 @@ "categories": "Kategorije", "categoriespagetext": "{{PLURAL:$1|Slijedeća kategorija sadrži|Slijedeće kategorije sadrže}} stranice ili multimedijalne datoteke.\n[[Special:UnusedCategories|Nekorištene kategorije]] nisu prikazane ovdje.\nVidi također [[Special:WantedCategories|zatražene kategorije]].", "categoriesfrom": "Prikaži kategorije počev od:", - "special-categories-sort-count": "sortiranje po broju", - "special-categories-sort-abc": "sortiraj po abecedi", "deletedcontributions": "Obrisani doprinosi korisnika", "deletedcontributions-title": "Obrisani doprinosi korisnika", "sp-deletedcontributions-contribs": "doprinosi", @@ -2272,10 +2270,6 @@ "import-logentry-upload-detail": "$1 {{PLURAL:$1|revizija|revizije|revizija}}", "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|revizija|revizije|revizija}} sa $2", "javascripttest": "Javaskript test", - "javascripttest-pagetext-noframework": "Ova stranica je rezervisana za izvršavanje javaskript testova.", - "javascripttest-pagetext-unknownframework": "Nepoznati radni okvir „$1“.", - "javascripttest-pagetext-frameworks": "Izaberite jedan od sledećih radnih okvira: $1", - "javascripttest-pagetext-skins": "Izaberite s kojim skinom (interfejsom) želite da pokrenete probu:", "javascripttest-qunit-intro": "Pogledajte [$1 dokumentaciju za testiranje] na mediawiki.org.", "tooltip-pt-userpage": "{{GENDER:|Vaša korisnička}} stranica", "tooltip-pt-anonuserpage": "Korisnička stranica za ip koju Vi uređujete kao", @@ -2519,8 +2513,8 @@ "exif-colorspace": "Prostor boje", "exif-componentsconfiguration": "Značenje pojedine komponente", "exif-compressedbitsperpixel": "Dubina boje poslije sažimanja", - "exif-pixelydimension": "Širina slike", - "exif-pixelxdimension": "Visina slike", + "exif-pixelxdimension": "Širina slike", + "exif-pixelydimension": "Visina slike", "exif-usercomment": "Korisnički komentari", "exif-relatedsoundfile": "Povezana zvučna datoteka", "exif-datetimeoriginal": "Datum i vrijeme generisanja podataka", @@ -2932,7 +2926,6 @@ "version-entrypoints-header-entrypoint": "Ulazna tačka", "version-entrypoints-header-url": "URL", "redirect": "Preusmjeravanje preko datoteke, korisnika ili ID-a izmjene", - "redirect-legend": "Preusmjeravanje na datoteku ili stranicu", "redirect-summary": "Ova posebna stranica preusmjerava na datoteku (ako je navedeno ime datoteke), stranicu (ako postoji ID revizije) ili korisničku stranicu (ako postoji brojčani ID korisnika).", "redirect-submit": "Idi", "redirect-lookup": "Pregled:", @@ -2943,7 +2936,6 @@ "redirect-not-exists": "Vrijednost nije pronađena", "fileduplicatesearch": "Potraga za duplim datotekama", "fileduplicatesearch-summary": "Pretraga duplih datoteka na bazi njihove haš vrijednosti.", - "fileduplicatesearch-legend": "Pretraga dvojnika", "fileduplicatesearch-filename": "Ime datoteke:", "fileduplicatesearch-submit": "Traži", "fileduplicatesearch-info": "$1 × $2 piksel
Veličina datoteke: $3
MIME vrsta: $4", diff --git a/languages/i18n/si.json b/languages/i18n/si.json index 087407028b..e4c3484f43 100644 --- a/languages/i18n/si.json +++ b/languages/i18n/si.json @@ -1689,8 +1689,6 @@ "categories-submit": "පෙන්වන්න", "categoriespagetext": "පහත {{PLURAL:$1|ප්‍රවර්ගයෙහි අන්තර්ගතය |ප්‍රවර්ගයන්හි අන්තර්ගතයන්}} වනුයේ පිටු හෝ මාධ්‍යයන්ය.\n[[Special:UnusedCategories|භාවිතනොවූ ප්‍රවර්ගයන්]] මෙහි පෙන්වා දක්වා නොමැත.\n [[Special:WantedCategories|අවශ්‍ය ප්‍රවර්ගයන්]]ද බලන්න.", "categoriesfrom": "මෙහිදී ඇරඹෙන ප්‍රවර්ග පෙන්වන්න:", - "special-categories-sort-count": "ගණණය පරිදි සුබෙදුම", - "special-categories-sort-abc": "අකාරාදියේ පිළිවෙලට සකසන්න", "deletedcontributions": "මකාදැමූ පරිශීලක දායකත්වයන්", "deletedcontributions-title": "මකාදැමූ පරිශීලක දායකත්වයන්", "sp-deletedcontributions-contribs": "දායකත්වයන්", @@ -2256,7 +2254,6 @@ "import-logentry-upload-detail": " {{PLURAL:$1|සංශෝධනය|සංශෝධන $1 ක්}}", "import-logentry-interwiki-detail": "$2 වෙතින් {{PLURAL:$1|එක් සංශෝධනයක්|සංශෝධන $1 ක්}}", "javascripttest": "ජාවාස්ක්‍රිප්ට් පරික්ෂාකරමින්", - "javascripttest-pagetext-noframework": "මෙම පිටුව ජාවාස්ක්‍රිප්ට් පරික්ෂණ සිදුකිරීම සඳහා වෙන්කර ඇත.", "tooltip-pt-userpage": "ඔබගේ පරිශීලක පිටුව", "tooltip-pt-anonuserpage": "සංස්කරණයට ඔබ භාවිතා කරමින් පවතින අන්තර්ජාල ලිපිනය සඳහා පරිශීලක පිටුව", "tooltip-pt-mytalk": "ඔබගේ සංවාද පිටුව", @@ -2506,8 +2503,8 @@ "exif-colorspace": "වර්ණ අවකාශය", "exif-componentsconfiguration": "එක් එක් සංරචකයේ අර්ථය", "exif-compressedbitsperpixel": "රූප සම්පීඩන මාදිලිය", - "exif-pixelydimension": "ප්‍රතිබිම්බයෙහි පළල", - "exif-pixelxdimension": "ප්‍රතිබිම්බයෙහි උස", + "exif-pixelxdimension": "ප්‍රතිබිම්බයෙහි පළල", + "exif-pixelydimension": "ප්‍රතිබිම්බයෙහි උස", "exif-usercomment": "පරිශීලක පරිකථනයන්", "exif-relatedsoundfile": "සහසම්බන්ධිත ශ්‍රව්‍ය ගොනුව", "exif-datetimeoriginal": "දත්ත ජනන දිනය හා වේලාව", @@ -2998,7 +2995,6 @@ "redirect-not-exists": "අගය හමු නොවුණි", "fileduplicatesearch": "අනුපිටපත් ගොනු සඳහා ගවේෂණය කරන්න", "fileduplicatesearch-summary": "එහි පූරක අගය පාදක කර ගෙන අනුපිටපත් ගොනු සඳහා ගවේෂණය කරන්න.", - "fileduplicatesearch-legend": "අනුපිටපතක් සඳහා ගවේෂණය කරන්න", "fileduplicatesearch-filename": "ගොනු-නාමය:", "fileduplicatesearch-submit": "ගවේෂණය", "fileduplicatesearch-info": "$1 × $2 පික්සල
ගොනු විශාලත්වය: $3
MIME ශෛලිය: $4", diff --git a/languages/i18n/sk.json b/languages/i18n/sk.json index 9b85e15cbe..1fcafaa2f0 100644 --- a/languages/i18n/sk.json +++ b/languages/i18n/sk.json @@ -616,7 +616,7 @@ "newarticle": "(Nový)", "newarticletext": "Sledovali ste odkaz na stránku, ktorá zatiaľ neexistuje.\nStránku vytvoríte tak, že začnete písať do poľa nižšie (viac informácií nájdete na stránkach [$1 nápovedy]).\nAk ste sa sem dostali nechtiac, kliknite na tlačidlo späť vo svojom prehliadači.", "anontalkpagetext": "----''Toto je diskusná stránka anonymného používateľa, ktorý nemá vytvorené svoje konto alebo ho nepoužíva.\nPreto musíme na jeho identifikáciu použiť numerickú IP adresu. Je možné, že takúto IP adresu používajú viacerí používatelia.\nAk ste anonymný používateľ a máte pocit, že vám boli adresované irelevantné diskusné príspevky, [[Special:UserLogin/signup|vytvorte si konto]] alebo sa [[Special:UserLogin|prihláste]], aby sa zamedzilo budúcim zámenám s inými anonymnými používateľmi.''", - "noarticletext": "Na tejto stránke sa momentálne nenachádza žiadny text.\nMôžete [[Special:Search/{{PAGENAME}}|vyhľadávať názov tejto stránky]] v obsahu iných stránok,\n[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} vyhľadávať v súvisiacich záznamoch] alebo [{{fullurl:{{FULLPAGENAME}}|action=edit}} upravovať túto stránku].", + "noarticletext": "Na tejto stránke sa momentálne nenachádza žiadny text.\nMôžete [[Special:Search/{{PAGENAME}}|vyhľadávať názov tejto stránky]] v obsahu iných stránok,\n[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} vyhľadávať v súvisiacich záznamoch] alebo [{{fullurl:{{FULLPAGENAME}}|action=edit}} vytvoriť túto stránku].", "noarticletext-nopermission": "Táto stránka momentálne neobsahuje žiadny text.\nMôžete [[Special:Search/{{PAGENAME}}|hľadať názov tejto stránky]] v texte iných stránok\nalebo [{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} hľadať v súvisiacich záznamoch], ale nemáte oprávnenie túto stránku vytvoriť.", "missing-revision": "Revízia #$1 stránky s názvom „{{FULLPAGENAME}}“ neexistuje.\n\nPravdepodobne ste nasledovali zastaraný odkaz na historickú verziu stránky, ktorá bola medzičasom odstránená.\nPodrobnosti nájdete v [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} zázname zmazaní].", "userpage-userdoesnotexist": "Používateľský účet „$1“ nie je registrovaný. Prosím, skontrolujte, či naozaj chcete vytvoriť/upravovať túto stránku.", @@ -1237,7 +1237,7 @@ "recentchangeslinked-page": "Názov stránky:", "recentchangeslinked-to": "Zobraziť zmeny na stránkach, ''ktoré odkazujú na'' zadanú stránku", "recentchanges-page-added-to-category": "[[:$1]] zaradená do kategórie", - "recentchanges-page-added-to-category-bundled": "[[:$1]] a {{PLURAL:$2|jedna ďalšia zaradené|$2 ďalšie zaradené|$2 ďalších zaradených}} do kategórie", + "recentchanges-page-added-to-category-bundled": "[[:$1]] a [[Special:WhatLinksHere/$1|{{PLURAL:$2|jedna ďalšia zaradené|$2 ďalšie zaradené|$2 ďalších zaradených}}]] do kategórie", "recentchanges-page-removed-from-category": "[[:$1]] vyradená z kategórie", "recentchanges-page-removed-from-category-bundled": "[[:$1]] a {{PLURAL:$2|jedna ďalšia vyradené|$2 ďalšie vyradené|$2 ďalších vyradených}} z kategórie", "autochange-username": "Automatická úprava MediaWiki", @@ -1651,7 +1651,7 @@ "log-edit-tags": "Editovať značky zvolených položiek záznamu", "checkbox-select": "Zvoliť: $1", "checkbox-all": "Všetky", - "checkbox-none": "Ždiadne", + "checkbox-none": "Žiadne", "checkbox-invert": "Invertovať", "allpages": "Všetky stránky", "nextpage": "Ďalšia stránka ($1)", @@ -1672,8 +1672,6 @@ "categories-submit": "Zobraziť", "categoriespagetext": "{{PLURAL:$1|Nasledovná kategória obsahuje|Nasledovné kategórie obsahujú}} stránky alebo multimediálne súbory.\nNie sú tu zobrazené [[Special:UnusedCategories|nepoužité kategórie]].\nPozri aj [[Special:WantedCategories|žiadané kategórie]].", "categoriesfrom": "Zobraziť kategórie počnúc:", - "special-categories-sort-count": "zoradiť podľa počtu", - "special-categories-sort-abc": "zoradiť podľa abecedy", "deletedcontributions": "Zmazané príspevky používateľa", "deletedcontributions-title": "Zmazané príspevky používateľa", "sp-deletedcontributions-contribs": "príspevky", @@ -2268,11 +2266,7 @@ "import-logentry-upload-detail": "$1 {{PLURAL:$1|revízia|revízie|revízií}}", "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|revízia|revízie|revízií}} z $2", "javascripttest": "Testovanie JavaScriptu", - "javascripttest-pagetext-noframework": "Táto stránka je vyhradená pre testy JavaScriptu.", - "javascripttest-pagetext-unknownframework": "Neznáma testovacia platfoma „$1“.", "javascripttest-pagetext-unknownaction": "Neznáma akcia: „$1“.", - "javascripttest-pagetext-frameworks": "Prosím vyberte jednu z nasledovných testovacích platforiem: $1", - "javascripttest-pagetext-skins": "Vyberte tému vzhľadu, na ktorej chcete spustiť testy:", "javascripttest-qunit-intro": "Pozri [$1 dokumentácia testovania] na mediawiki.org.", "tooltip-pt-userpage": "Vaša používateľská stránka", "tooltip-pt-anonuserpage": "Používateľská stránka pre ip adresu, ktorú upravujete ako", @@ -2536,8 +2530,8 @@ "exif-colorspace": "Farebný priestor", "exif-componentsconfiguration": "Význam jednotlivých zložiek", "exif-compressedbitsperpixel": "Komprimované bity na pixel", - "exif-pixelydimension": "Šírka obrázka", - "exif-pixelxdimension": "Výška obrázka", + "exif-pixelxdimension": "Šírka obrázka", + "exif-pixelydimension": "Výška obrázka", "exif-usercomment": "Komentár používateľa", "exif-relatedsoundfile": "Súvisiaci zvukový súbor", "exif-datetimeoriginal": "Dátum a čas vytvorenia dát", @@ -2975,7 +2969,6 @@ "version-libraries-description": "Popis", "version-libraries-authors": "Autori", "redirect": "Presmerovanie podľa súboru, používateľa alebo ID revízie", - "redirect-legend": "Presmerovanie na súbor alebo stránku", "redirect-summary": "Táto špeciálna stránka presmerováva na súbor (podľa názvu), stránku (podľa ID stránky alebo revízie) alebo používateľa (podľa číselného ID). Použitie: [[{{#Special:Redirect}}/file/Test.jpg]], [[{{#Special:Redirect}}/revision/328429]], resp. [[{{#Special:Redirect}}/user/101]].", "redirect-submit": "Ísť", "redirect-lookup": "Vyhľadať:", @@ -2987,7 +2980,6 @@ "redirect-not-exists": "Hodnota nebola nájdená", "fileduplicatesearch": "Hľadať duplicitné súbory", "fileduplicatesearch-summary": "Hľadanie duplicitných súborov na základe ich haš hodnôt.", - "fileduplicatesearch-legend": "Hľadať duplicity", "fileduplicatesearch-filename": "Názov súboru:", "fileduplicatesearch-submit": "Hľadať", "fileduplicatesearch-info": "$1 × $2 pixelov
Veľkosť súboru: $3
Typ MIME: $4", diff --git a/languages/i18n/sl.json b/languages/i18n/sl.json index 226ec886bb..531eb67684 100644 --- a/languages/i18n/sl.json +++ b/languages/i18n/sl.json @@ -29,6 +29,7 @@ "tog-watchdefault": "Na spisek nadzorov dodaj vse članke in datoteke, ki sem jih spremenil/-a", "tog-watchmoves": "Dodaj strani in datoteke, ki jih premaknem, na moj spisek nadzorov", "tog-watchdeletion": "Dodaj strani in datoteke, ki jih izbrišem, na moj spisek nadzorov", + "tog-watchuploads": "Dodaj nove datoteke, ki jih naložim, na moj spisek nadzorov", "tog-watchrollback": "Dodaj strani, na katerih sem izvedel vrnitev, na moj spisek nadzorov", "tog-minordefault": "Vsa urejanja označi kot manjša", "tog-previewontop": "Prikaži predogled pred urejevalnim poljem", @@ -152,7 +153,6 @@ "moredotdotdot": "Več ...", "morenotlisted": "Seznam ni popoln.", "mypage": "Stran", - "anonuserpage": "Neznani uporabnik", "mytalk": "Pogovor", "anontalk": "Pogovorna stran", "navigation": "Navigacija", @@ -471,7 +471,7 @@ "noemail": "Elektronska pošta uporabnika »$1« ni zapisana.", "noemailcreate": "Vnesti morate veljaven e-poštni naslov", "passwordsent": "Na naslov elektronske pošte, vpisanega za »$1«, smo poslali novo geslo.\nKo ga boste prejeli, se ponovno prijavite.", - "blocked-mailpassword": "Urejanje z vašega IP-naslova je blokirano. Da bi preprečili zlorabe, vam ni dovoljeno tudi uporabljati funkcije za povrnitev pozabljenega gesla.", + "blocked-mailpassword": "Urejanje z vašega IP-naslova je blokirano. Da bi preprečili zlorabe, vam s tega IP-naslova ni dovoljeno uporabljati funkcije za obnovitev pozabljenega gesla.", "eauthentsent": "E-sporočilo je bilo poslano na navedeni e-naslov.\nČe želite tja poslati še katero, sledite navodilom v e-sporočilu, da potrdite lastništvo računa.", "throttled-mailpassword": "E-pošto za ponastavitev gesla smo v {{PLURAL:$1|zadnji uri|zadnjih $1 urah}} že poslali.\nZa preprečevanje zlorab lahko na {{PLURAL:$1|uro|$1 uri|$1 ure|$1 ur}} pošljemo samo eno sporočilo za ponastavitev gesla.", "mailerror": "Napaka pri pošiljanju pošte: $1", @@ -1313,9 +1313,9 @@ "recentchangeslinked-page": "Naslov strani:", "recentchangeslinked-to": "Prikaži spremembe na določeno stran povezanih strani", "recentchanges-page-added-to-category": "[[:$1]] dodano v kategorijo", - "recentchanges-page-added-to-category-bundled": "[[:$1]] in $2 {{PLURAL:$2|stran dodana|strani dodani|strani dodane|strani dodanih}} v kategorijo", + "recentchanges-page-added-to-category-bundled": "[[:$1]] dodana v kategorijo; [[Special:WhatLinksHere/$1|stran je vključena v druge strani]]", "recentchanges-page-removed-from-category": "[[:$1]] odstranjeno iz kategorije", - "recentchanges-page-removed-from-category-bundled": "[[:$1]] in $2 {{PLURAL:$2|stran odstranjena|strani odstranjeni|strani odstranjene|strani odstranjenih}} iz kategorije", + "recentchanges-page-removed-from-category-bundled": "[[:$1]] odstranjena iz kategorije; [[Special:WhatLinksHere/$1|stran je vključena v druge strani]]", "autochange-username": "Samodejna sprememba MediaWiki", "upload": "Naloži datoteko", "uploadbtn": "Naloži datoteko", @@ -1495,6 +1495,7 @@ "uploadstash-badtoken": "Izvedba dejanja je spodletela. Morda zaradi izteklih poverilnic za urejanje. Prosimo, poskusite znova.", "uploadstash-errclear": "Čiščenje datotek je spodletelo.", "uploadstash-refresh": "Osveži seznam datotek", + "uploadstash-thumbnail": "ogled sličice", "invalid-chunk-offset": "Neveljaven odmik delčka", "img-auth-accessdenied": "Dostop zavrnjen", "img-auth-nopathinfo": "Manjka PATH_INFO.\nVaš strežnik ne poda te informacije.\nMorda temelji na CGI in ne more podpirati img_auth.\nOglejte si https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Image_Authorization.", @@ -1814,8 +1815,6 @@ "categories-submit": "Prikaži", "categoriespagetext": "{{PLURAL:$1|Naslednja $1 kategorija vsebuje|Naslednji $1 kategoriji vsebujeta|Naslednje $1 kategorije vsebujejo|Naslednjih $1 kategorij vsebuje}} strani ali datoteke.\n[[Special:UnusedCategories|Neuporabljene kategorije]] niso prikazane.\nGlej tudi [[Special:WantedCategories|želene kategorije]].", "categoriesfrom": "Prikaži kategorije, ki se začnejo na:", - "special-categories-sort-count": "razvrsti po številu", - "special-categories-sort-abc": "razvrsti po abecedi", "deletedcontributions": "Izbrisani uporabnikovi prispevki", "deletedcontributions-title": "Izbrisani uporabnikovi prispevki", "sp-deletedcontributions-contribs": "prispevki", @@ -2192,6 +2191,7 @@ "ipb-unblock": "Odblokirajte uporabniško ime ali IP-naslov", "ipb-blocklist": "Ogled obstoječih blokad", "ipb-blocklist-contribs": "Prispevki za {{GENDER:$1|$1}}", + "ipb-blocklist-duration-left": "še $1", "unblockip": "Deblokirajte uporabnika", "unblockiptext": "Z naslednjim obrazcem obnovite možnost urejanja z blokiranega IP-naslova ali uporabniškega računa.", "ipusubmit": "Odstrani blokado", @@ -2433,11 +2433,7 @@ "import-logentry-upload-detail": "{{PLURAL:$1|Uvožena $1 redakcija|Uvoženi $1 redakciji|Uvožene $1 redakcije|Uvoženih $1 redakcij}}", "import-logentry-interwiki-detail": "{{PLURAL:$1|Uvožena $1 redakcija|Uvoženi $1 redakciji|Uvožene $1 redakcije|Uvoženih $1 redakcij}} z $2", "javascripttest": "Preizkušanje JavaScripta", - "javascripttest-pagetext-noframework": "Stran je rezervirana za poganjanje preizkusov JavaScript.", - "javascripttest-pagetext-unknownframework": "Neznano ogrodje za preizkušanje »$1«.", "javascripttest-pagetext-unknownaction": "Neznano dejanje »$1«.", - "javascripttest-pagetext-frameworks": "Prosimo, izberite enega od naslednjih ogrodjev za preizkušanje: $1", - "javascripttest-pagetext-skins": "Izberite kožo, v kateri želite pognati preizkuse:", "javascripttest-qunit-intro": "Oglejte si [$1 dokumentacijo o preizkušanju] na mediawiki.org.", "tooltip-pt-userpage": "{{GENDER:|Vaša}} uporabniška stran", "tooltip-pt-anonuserpage": "Uporabniška stran IP-naslova, ki ga uporabljate", @@ -2698,8 +2694,8 @@ "exif-colorspace": "Barvni prostor", "exif-componentsconfiguration": "Pomen posameznih gradnikov", "exif-compressedbitsperpixel": "Velikost točke po stiskanju (v bitih)", - "exif-pixelydimension": "Širina slike", - "exif-pixelxdimension": "Višina slike", + "exif-pixelxdimension": "Širina slike", + "exif-pixelydimension": "Višina slike", "exif-usercomment": "Uporabniške pripombe", "exif-relatedsoundfile": "Pripadajoča zvočna datoteka", "exif-datetimeoriginal": "Datum in čas ustvaritve podatkov", @@ -2859,8 +2855,8 @@ "exif-orientation-8": "Zasukano za 90° v desno", "exif-planarconfiguration-1": "grudast format", "exif-planarconfiguration-2": "ravninski format", - "exif-xyresolution-i": "$1 dpi ({{PLURAL:$1|točka/palec|točki/palec|točke/palec|točk/palec|točk/palec}})", - "exif-xyresolution-c": "$1 dpc ({{PLURAL:$1|točka/centimeter|točki/centimeter|točke/centimeter|točk/centimeter|točk/centimeter}})", + "exif-xyresolution-i": "$1 dpi ({{PLURAL:$1|točka/palec|točki/palec|točke/palec|točk/palec}})", + "exif-xyresolution-c": "$1 dpc ({{PLURAL:$1|točka/centimeter|točki/centimeter|točke/centimeter|točk/centimeter}})", "exif-colorspace-65535": "Neumerjeno", "exif-componentsconfiguration-0": "ne obstaja", "exif-exposureprogram-0": "Ni določen", @@ -3026,6 +3022,10 @@ "confirmemail_body_set": "Nekdo, najverjetneje vi, je z IP-naslova $1\nna strani {{SITENAME}} nastavil e-poštni naslov računa »$2« na ta naslov.\n\nDa potrdite lastništvo tega računa in aktivirate\ne-poštne funkcije na {{GRAMMAR:dajalnik|{{SITENAME}}}}, odprite to povezavo v vašem brskalniku:\n\n$3\n\nČe omenjeni račun *ni* vaš, sledite spodnji povezavi za preklic\npotrditve e-poštnega naslova:\n\n$5\n\nPotrditvena koda poteče $4.", "confirmemail_invalidated": "Potrditev e-poštnega naslova preklicana", "invalidateemail": "Prekliči potrditev e-poštnega naslova", + "notificationemail_subject_changed": "Spremenjen e-poštni naslov, registriran na {{SITENAME}}", + "notificationemail_subject_removed": "Odstranjen e-poštni naslov, registriran na {{SITENAME}}", + "notificationemail_body_changed": "Nekdo, najverjetneje vi, je z IP-naslova $1 spremenil e-poštni naslov računa »$2« na »$3« na strani {{SITENAME}}.\n\nČe to niste bili vi, takoj stopite v stik s skrbnikom strani.", + "notificationemail_body_removed": "Nekdo, najverjetneje vi, je z IP-naslova $1 odstranil e-poštni naslov računa »$2« na strani {{SITENAME}}.\n\nČe to niste bili vi, takoj stopite v stik s skrbnikom strani.", "scarytranscludedisabled": "[Prevključevanje med wikiji je onemogočeno]", "scarytranscludefailed": "[Pridobivanje predloge za $1 ni uspelo]", "scarytranscludefailed-httpstatus": "[Pridobivanje predloge za $1 ni uspelo: HTTP $2]", @@ -3081,7 +3081,7 @@ "watchlistedit-raw-done": "Vaš spisek nadzorov je bil posodobljen.", "watchlistedit-raw-added": "{{PLURAL:$1|Dodana je bila $1 stran|Dodani sta bili $1 strani|Dodane so bile $1 strani|Dodanih je bilo $1 strani}}:", "watchlistedit-raw-removed": "{{PLURAL:$1|Odstranjena je bila $1 stran|Odstranjeni sta bili 2 strani|Odstranjene so bile $1 strani|Odstranjenih je bilo $1 strani}}:", - "watchlistedit-clear-title": "Čiščenje spiska nadzorov", + "watchlistedit-clear-title": "Počisti spisek nadzorov", "watchlistedit-clear-legend": "Počistite spisek nadzorov", "watchlistedit-clear-explain": "Vse naslove bomo odstranili z vašega spiska nadzorov", "watchlistedit-clear-titles": "Naslovi:", @@ -3146,7 +3146,6 @@ "version-libraries-description": "Opis", "version-libraries-authors": "Avtorji", "redirect": "Preusmeri po datoteki ali ID-ju uporabnika, strani, redakcije ali dnevnika", - "redirect-legend": "Preusmeritev na datoteko ali stran", "redirect-summary": "Posebna stran preusmeri na datoteko (če podate ime datoteke), stran (če podate ID redakcije ali ID strani), uporabniško stran (če podate številski ID uporabnika) ali dnevniški vnos (če podate ID dnevnika). Uporaba: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/page/64308]], [[{{#Special:Redirect}}/revision/328429]][[{{#Special:Redirect}}/user/101]] ali [[{{#Special:Redirect}}/logid/186]].", "redirect-submit": "Pojdi", "redirect-lookup": "Iskanje:", @@ -3159,7 +3158,6 @@ "redirect-not-exists": "Vrednosti ni mogoče najti", "fileduplicatesearch": "Iskanje podvojenih datotek", "fileduplicatesearch-summary": "Iskanje podvojenih datotek, ki temelji na podlagi njenih hashvrednosti.", - "fileduplicatesearch-legend": "Poišči dvojnik", "fileduplicatesearch-filename": "Ime datoteke:", "fileduplicatesearch-submit": "Iskanje", "fileduplicatesearch-info": "$1 × $2 pik
Velikost datoteke: $3
Vrsta MIME: $4", @@ -3360,7 +3358,7 @@ "logentry-protect-protect-cascade": "$1 je {{GENDER:$2|zaščitil|zaščitila|zaščitil(-a)}} $3 $4 [kaskadno]", "logentry-protect-modify": "$1 je {{GENDER:$2|spremenil|spremenila|spremenil(-a)}} stopnjo zaščite $3 $4", "logentry-protect-modify-cascade": "$1 je {{GENDER:$2|spremenil|spremenila|spremenil(-a)}} stopnjo zaščite $3 $4 [kaskadno]", - "logentry-rights-rights": "$1 je {{GENDER:$2|spremenil|spremenila|spremenil(-a)}} uporabniške pravice uporabnika $3 z $4 na $5", + "logentry-rights-rights": "$1 je {{GENDER:$2|spremenil|spremenila|spremenil(-a)}} uporabniške pravice {{GENDER:$3|uporabnika|uporabnice}} $3 z $4 na $5", "logentry-rights-rights-legacy": "$1 je {{GENDER:$2|spremenil|spremenila|spremenil(-a)}} uporabniške pravice uporabnika $3", "logentry-rights-autopromote": "$1 je {{GENDER:$2|bil samodejno povišan|bila samodejno povišana|bil(-a) samodejno povišan(-a)}} z $4 na $5", "logentry-upload-upload": "$1 je {{GENDER:$2|naložil|naložila|naložil(-a)}} $3", @@ -3453,6 +3451,7 @@ "api-error-unknownerror": "Neznana napaka: »$1«.", "api-error-uploaddisabled": "Nalaganje je onemogočeno na tem wikiju.", "api-error-verification-error": "Ta datoteka je morda poškodovana ali ima napačno končnico.", + "api-error-was-deleted": "Datoteko s tem imenom je v preteklosti nekdo že naložil, ampak je bila nato izbrisana.", "duration-seconds": "$1 {{PLURAL:$1|sekunda|sekundi|sekunde|sekund}}", "duration-minutes": "$1 {{PLURAL:$1|minuta|minuti|minute|minut}}", "duration-hours": "$1 {{PLURAL:$1|ura|uri|ure|ur}}", @@ -3543,6 +3542,7 @@ "special-characters-group-ipa": "Mednarodna fonetična abeceda (IPA)", "special-characters-group-symbols": "Simboli", "special-characters-group-greek": "Grški", + "special-characters-group-greekextended": "Grščina, razširjeno", "special-characters-group-cyrillic": "Cirilica", "special-characters-group-arabic": "Arabski", "special-characters-group-arabicextended": "Razširjena arabščina", @@ -3570,5 +3570,54 @@ "sessionprovider-generic": "sej $1", "sessionprovider-mediawiki-session-cookiesessionprovider": "sej, ki temeljijo na piškotkih", "sessionprovider-nocookies": "Piškotki so morda onemogočeni. Prepričaje se, da imate piškotke omogočene, in začnite znova.", - "randomrootpage": "Naključna korenska stran" + "randomrootpage": "Naključna korenska stran", + "log-action-filter-block": "Vrsta blokade:", + "log-action-filter-contentmodel": "Vrsta spremembe modelastrani:", + "log-action-filter-delete": "Vrsta izbrisa:", + "log-action-filter-import": "Vrsta uvoza:", + "log-action-filter-managetags": "Vrsta dejanja upravljanja oznak:", + "log-action-filter-move": "Vrsta premika:", + "log-action-filter-newusers": "Vrsta ustvarjanja računa:", + "log-action-filter-patrol": "Vrsta nadzora:", + "log-action-filter-protect": "Vrsta zaščite:", + "log-action-filter-rights": "Vrsta spremembe pravic", + "log-action-filter-suppress": "Vrsta zatrtja", + "log-action-filter-upload": "Vrsta nalaganja:", + "log-action-filter-all": "Vse", + "log-action-filter-block-block": "Blokada", + "log-action-filter-block-reblock": "Sprememba blokade", + "log-action-filter-block-unblock": "Odstranitev blokade", + "log-action-filter-contentmodel-change": "Sprememba Modelastrani", + "log-action-filter-contentmodel-new": "Ustvarjanje strani z nestandardnim Modelomstrani", + "log-action-filter-delete-delete": "Izbris strani", + "log-action-filter-delete-restore": "Obnovitev strani", + "log-action-filter-delete-event": "Dnevnik brisanja", + "log-action-filter-delete-revision": "Izbris redakcije", + "log-action-filter-import-interwiki": "Uvoz med wikiji", + "log-action-filter-import-upload": "Uvoz z nalaganjem XML", + "log-action-filter-managetags-create": "Ustvarjanje oznake", + "log-action-filter-managetags-delete": "Izbris oznake", + "log-action-filter-managetags-activate": "Aktivacija oznake", + "log-action-filter-managetags-deactivate": "Dezaktivacija oznake", + "log-action-filter-move-move": "Premik brez prepisa preusmeritev", + "log-action-filter-move-move_redir": "Premik s prepisom preusmeritev", + "log-action-filter-newusers-create": "Ustvaril brezimni uporabnik", + "log-action-filter-newusers-create2": "Ustvaril registriran uporabnik", + "log-action-filter-newusers-autocreate": "Samodejno ustvarjeno", + "log-action-filter-newusers-byemail": "Ustvarjeno z geslom, poslanim po e-pošti", + "log-action-filter-patrol-patrol": "Ročni nadzor", + "log-action-filter-patrol-autopatrol": "Samodejni nadzor", + "log-action-filter-protect-protect": "Zaščita", + "log-action-filter-protect-modify": "Sprememba zaščite", + "log-action-filter-protect-unprotect": "Odstranitev zaščite", + "log-action-filter-protect-move_prot": "Prestavljena zaščita", + "log-action-filter-rights-rights": "Ročna sprememba", + "log-action-filter-rights-autopromote": "Samodejna sprememba", + "log-action-filter-suppress-event": "Zatrtje dnevnika", + "log-action-filter-suppress-revision": "Zatrtje redakcije", + "log-action-filter-suppress-delete": "Zatrtje strani", + "log-action-filter-suppress-block": "Zatrtje uporabnika z blokado", + "log-action-filter-suppress-reblock": "Zatrtje uporabnika s ponovno blokado", + "log-action-filter-upload-upload": "Novo nalaganje", + "log-action-filter-upload-overwrite": "Ponovno nalaganje" } diff --git a/languages/i18n/sli.json b/languages/i18n/sli.json index 05dd4553cc..25e16488c8 100644 --- a/languages/i18n/sli.json +++ b/languages/i18n/sli.json @@ -981,8 +981,6 @@ "categories": "Kategoria", "categoriespagetext": "Fulgende {{PLURAL:$1|Kategorie enthält|Kategorien enthaaln}} Seita oder Dateien.\n[[Special:UnusedCategories|Unbenutzte Kategorien]] waan hier nee uffgefiehrt.\nSiehe au de Liste der [[Special:WantedCategories|gewinschta Kategorien]].", "categoriesfrom": "Zeige Kategorien ob:", - "special-categories-sort-count": "Sortierung noach Oazoahl", - "special-categories-sort-abc": "Sortierung noach Alphabet", "deletedcontributions": "Geläschte Beiträge", "deletedcontributions-title": "Geläschte Beiträge", "linksearch-ns": "Noamensraum:", @@ -1488,8 +1486,8 @@ "exif-artist": "Fotogroaf", "exif-flashpixversion": "understitzte Flashpix-Version", "exif-colorspace": "Forbraum", - "exif-pixelydimension": "Giltige Bildbreite", - "exif-pixelxdimension": "Giltige Bildhiehe", + "exif-pixelxdimension": "Giltige Bildbreite", + "exif-pixelydimension": "Giltige Bildhiehe", "exif-usercomment": "Nutzerkommentare", "exif-relatedsoundfile": "Zugehierige Tondatei", "exif-exposuretime-format": "$1 Sekunda ($2)", @@ -1636,7 +1634,6 @@ "version-hook-name": "Schnittstallanoame", "version-hook-subscribedby": "Uffruff vu", "fileduplicatesearch-summary": "Suche noach Dateiduplikaten uff Basis ihres Hashwertes.", - "fileduplicatesearch-legend": "Suche noach Duplikata", "fileduplicatesearch-filename": "Dateinoame:", "fileduplicatesearch-submit": "Sucha", "fileduplicatesearch-info": "$1 × $2 Pixel
Dateigreeße: $3
MIME-Typ: $4", diff --git a/languages/i18n/sq.json b/languages/i18n/sq.json index 552431f0ee..d17130eff1 100644 --- a/languages/i18n/sq.json +++ b/languages/i18n/sq.json @@ -1548,8 +1548,6 @@ "categories": "Kategori", "categoriespagetext": "{{PLURAL:$1|kategoria në vijim përmban|kategoritë në vikim përmbajnë}} faqe ose media.\n[[Special:UnusedCategories|Kategoritë e pa përdorura]] nuk janë të paraqitura këtu.\nShikoni edhe [[Special:WantedCategories|kategoritë e dëshiruara]].", "categoriesfrom": "Paraqit kategoritë duke filluar në:", - "special-categories-sort-count": "radhit sipas numrit", - "special-categories-sort-abc": "radhiti sipas alfabetit", "deletedcontributions": "Kontribute të grisura", "deletedcontributions-title": "Kontribute të grisura", "sp-deletedcontributions-contribs": "kontributet", @@ -2080,10 +2078,6 @@ "import-logentry-upload-detail": "$1 {{PLURAL:$1|version|versione}}", "import-logentry-interwiki-detail": "$1 {{PLURAL:$!1|version|versione}} nga $2", "javascripttest": "Duke testuar JavaScript", - "javascripttest-pagetext-noframework": "Kjo faqe është rezervuar për kryerjen e testimeve JavaScript.", - "javascripttest-pagetext-unknownframework": "Kornizë pune e panjohur testuese \"$1\".", - "javascripttest-pagetext-frameworks": "Ju lutemi zgjidhni njërën nga kornizat vijuese punuese të testimit: $1", - "javascripttest-pagetext-skins": "Zgjidhni një mostër për t'i kryer testimet:", "javascripttest-qunit-intro": "Shiko [$1 dokumentacionin e testimit] në mediawiki.org.", "tooltip-pt-userpage": "Faqja jote e përdoruesit", "tooltip-pt-anonuserpage": "Faqja e përdoruesve anonim nga kjo adresë IP", @@ -2302,8 +2296,8 @@ "exif-colorspace": "Hapësira e ngjyrave", "exif-componentsconfiguration": "Kuptimi i secilit komponent", "exif-compressedbitsperpixel": "Lloji i ngjeshjes së figurës", - "exif-pixelydimension": "Gjerësia Image", - "exif-pixelxdimension": "lartësi Image", + "exif-pixelxdimension": "Gjerësia Image", + "exif-pixelydimension": "lartësi Image", "exif-usercomment": "Komentet e përdoruesit", "exif-relatedsoundfile": "Skeda audio shoqëruese", "exif-datetimeoriginal": "Data dhe koha e prodhimit të të dhënave", @@ -2707,7 +2701,6 @@ "version-entrypoints-header-url": "URL", "fileduplicatesearch": "Kërkoni për skeda të dyfishta", "fileduplicatesearch-summary": "Kërkoni për dyfishime të skedave në bazë të vlerës përmbledhëse («hash»).", - "fileduplicatesearch-legend": "Kërko për dyfishime", "fileduplicatesearch-filename": "Emri i skedës:", "fileduplicatesearch-submit": "Kërko", "fileduplicatesearch-info": "$1 × $2 pixel
Madhësia e skedës: $3
Lloji MIME: $4", diff --git a/languages/i18n/sr-ec.json b/languages/i18n/sr-ec.json index 4596598297..49d865ab4e 100644 --- a/languages/i18n/sr-ec.json +++ b/languages/i18n/sr-ec.json @@ -48,6 +48,7 @@ "tog-watchdefault": "Додај странице и датотеке које изменим у списак надгледања", "tog-watchmoves": "Додај странице и датотеке које преместим у списак надгледања", "tog-watchdeletion": "Додај странице и датотеке које обришем у списак надгледања", + "tog-watchuploads": "Додај датотеке које отпремим у списак надгледања", "tog-watchrollback": "Додај странице на којима сам вратио измене у списак надгледања", "tog-minordefault": "Означавај све измене као мање", "tog-previewontop": "Прикажи преглед пре оквира за уређивање", @@ -1153,15 +1154,22 @@ "grant-group-file-interaction": "Уређивање датотека", "grant-group-watchlist-interaction": "Уређивање вашег списка надгледања", "grant-group-email": "Пошаљи имејл", + "grant-blockusers": "Блокирање и деблокирање корисника", "grant-createaccount": "Отварање налога", "grant-createeditmovepage": "Прављење, уређивање и премештање страница", "grant-delete": "Брисање страница, измена и уноса у дневницима", "grant-editinterface": "Уређивање Медијавики именског простора и корисничких CSS/JavaScript страница", + "grant-editmyoptions": "Уређивање ваших подешавања", "grant-editmywatchlist": "Уређивање вашег списка надгледања", "grant-editpage": "Уређивање постојећих страница", "grant-editprotected": "Уређивање заштићених страница", + "grant-protect": "Закључавање и откључавање страница", + "grant-rollback": "Враћање измена", "grant-uploadeditmovefile": "Отпремање, замена и премештање датотека", "grant-uploadfile": "Слање нових датотека", + "grant-basic": "Основна права", + "grant-viewdeleted": "Преглед обрисаних страница и датотека", + "grant-viewmywatchlist": "Преглед вашег списак надгледања", "newuserlogpage": "Дневник нових корисника", "newuserlogpagetext": "Ово је дневник нових корисника.", "rightslog": "Дневник корисничких права", @@ -1276,9 +1284,9 @@ "recentchangeslinked-page": "Назив странице:", "recentchangeslinked-to": "Прикажи измене страница које су повезане с датом страницом", "recentchanges-page-added-to-category": "[[:$1]] је додата у категорију", - "recentchanges-page-added-to-category-bundled": "[[:$1]] и још {{PLURAL:$2|једна страница|$2 странице}} су додате у категорију", + "recentchanges-page-added-to-category-bundled": "[[:$1]] и још [[Special:WhatLinksHere/$1|{{PLURAL:$2|једна страница|$2 странице}}]] су додате у категорију", "recentchanges-page-removed-from-category": "[[:$1]] је уклоњена из категорије", - "recentchanges-page-removed-from-category-bundled": "[[:$1]] и још {{PLURAL:$2|једна страница|$2 странице}} су уклоњене из категорије", + "recentchanges-page-removed-from-category-bundled": "[[:$1]] и још [[Special:WhatLinksHere/$1|{{PLURAL:$2|једна страница|$2 странице}}]] су уклоњене из категорије", "autochange-username": "Медијавики аутоматска измена", "upload": "Пошаљи датотеку", "uploadbtn": "Пошаљи датотеку", @@ -1406,7 +1414,7 @@ "backend-fail-read": "Не могу да прочитам датотеку $1.", "backend-fail-create": "Не могу да запишем датотеку $1.", "backend-fail-maxsize": "Не могу да запишем датотеку $1 јер је већа од {{PLURAL:$2|$2 бајта|$2 бајта|$2 бајтова}}.", - "backend-fail-readonly": "Складишна основа „$1“ тренутно не може да се записује. Наведени разлог гласи: „$2“", + "backend-fail-readonly": "Складишна основа „$1“ тренутно не може да се записује. Наведени разлог гласи: $2", "backend-fail-synced": "Датотека „$1“ је недоследна између унутрашњих складишних основа", "backend-fail-connect": "Не могу да се повежем са складишном основом „$1“.", "backend-fail-internal": "Дошло је до непознате грешке у складишној основи „$1“.", @@ -1726,8 +1734,6 @@ "categories-submit": "Прикажи", "categoriespagetext": "{{PLURAL:$1|1=Следећа категорија садржи|Следеће категорије садрже}} странице или датотеке.\n[[Special:UnusedCategories|Некоришћене категорије]] нису приказане овде.\nПогледајте и [[Special:WantedCategories|тражене категорије]].", "categoriesfrom": "Прикажи категорије почев од:", - "special-categories-sort-count": "поређај по броју", - "special-categories-sort-abc": "поређај по азбучном реду", "deletedcontributions": "Обрисани кориснички доприноси", "deletedcontributions-title": "Обрисани кориснички доприноси", "sp-deletedcontributions-contribs": "доприноси", @@ -1910,6 +1916,7 @@ "changecontentmodel-title-label": "Наслов странице", "changecontentmodel-model-label": "Нови модел садржаја", "changecontentmodel-reason-label": "Разлог:", + "changecontentmodel-submit": "Промени", "changecontentmodel-success-title": "Модел садржаја је промењен", "changecontentmodel-success-text": "Модел садржаја странице [[:$1]] је промењен.", "changecontentmodel-cannot-convert": "Модел садржаја странице [[:$1]] се не може претворити у врсту $2.", @@ -2068,7 +2075,7 @@ "unblock": "Деблокирање корисника", "blockip": "Блокирај {{GENDER:$1|корисника|корисницу}}", "blockip-legend": "Блокирај корисника", - "blockiptext": "Користите доњи образац да бисте забранили приступ за писање с одређене ИП адресе или корисничког имена.\nОво би требало да вршите само ради спречавања вандализма, у складу са [[{{MediaWiki:Policy-url}}|смерницама]].\nИзаберите конкретан разлог испод (пример: навођење конкретних страница које су вандализоване).", + "blockiptext": "Користите доњи образац да бисте забранили приступ за писање с одређене ИП адресе или корисничког имена.\nОво би требало да вршите само ради спречавања вандализма, у складу са [[{{MediaWiki:Policy-url}}|смерницама]].\nИзаберите конкретан разлог испод (пример: навођење конкретних страница које су вандализоване). Можете блокирати опсеге ИП адреса помоћу [https://en.wikipedia.org/wiki/Classless_Inter-Domain_Routing CIDR] синтаксе, највећи дозвољени опсег за IPv4 је /$1 односно /$2 за IPv6.", "ipaddressorusername": "ИП адреса или корисничко име:", "ipbexpiry": "Истиче:", "ipbreason": "Разлог:", @@ -2330,11 +2337,7 @@ "import-logentry-upload-detail": "$1 {{PLURAL:$1|измена увезена|измене увезене|измена увезено}}", "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|измена увезена|измене увезене|измена увезено}} из $2", "javascripttest": "Јаваскрипт тест", - "javascripttest-pagetext-noframework": "Ова страница је резервисана за извршавање јаваскрипт тестова.", - "javascripttest-pagetext-unknownframework": "Непознати радни оквир „$1“.", "javascripttest-pagetext-unknownaction": "Непозната радња „$1“.", - "javascripttest-pagetext-frameworks": "Изаберите један од следећих радних оквира: $1", - "javascripttest-pagetext-skins": "Изаберите с којом темом желите да покренете пробу:", "javascripttest-qunit-intro": "Погледајте [$1 документацију за тестирање] на mediawiki.org.", "tooltip-pt-userpage": "{{GENDER:|Ваша}} корисничка страница", "tooltip-pt-anonuserpage": "Корисничка страница за ИП адресу с које уређујете", @@ -2579,7 +2582,7 @@ "variantname-gan": "gan", "variantname-sr-ec": "Ћирилица", "variantname-sr-el": "Latinica", - "variantname-sr": "sr", + "variantname-sr": "ћир/lat", "variantname-kk-kz": "kk-kz", "variantname-kk-tr": "kk-tr", "variantname-kk-cn": "kk-cn", @@ -2639,8 +2642,8 @@ "exif-colorspace": "Простор боје", "exif-componentsconfiguration": "Значење сваког дела", "exif-compressedbitsperpixel": "Режим сажимања слике", - "exif-pixelydimension": "Ширина слике", - "exif-pixelxdimension": "Висина слике", + "exif-pixelxdimension": "Ширина слике", + "exif-pixelydimension": "Висина слике", "exif-usercomment": "Кориснички коментари", "exif-relatedsoundfile": "Повезани звучни запис", "exif-datetimeoriginal": "Датум и време сликања", @@ -3171,7 +3174,6 @@ "version-libraries-description": "Опис", "version-libraries-authors": "Аутори", "redirect": "Преусмерење на датотеку, корисника, страницу или измену", - "redirect-legend": "Преусмери на датотеку или страницу", "redirect-submit": "Иди", "redirect-lookup": "Тип вредности:", "redirect-value": "Вредност:", @@ -3182,7 +3184,6 @@ "redirect-not-exists": "Вредност није пронађена", "fileduplicatesearch": "Претрага дупликата", "fileduplicatesearch-summary": "Претрага дуплираних датотека према хеш вредности.", - "fileduplicatesearch-legend": "Претрага дупликата", "fileduplicatesearch-filename": "Назив датотеке:", "fileduplicatesearch-submit": "Претражи", "fileduplicatesearch-info": "$1 × $2 пиксела
Величина датотеке: $3
MIME тип: $4", @@ -3346,7 +3347,7 @@ "logentry-protect-protect-cascade": "$1 је {{GENDER:$2|заштитио|заштитила}} $3 $4 [преносива заштита]", "logentry-protect-modify": "$1 је {{GENDER:$2|променио|променила}} степен заштите за $3 $4", "logentry-protect-modify-cascade": "$1 је {{GENDER:$2|променио|променила}} степен заштите за $3 $4 [преносива заштита]", - "logentry-rights-rights": "$1 је {{GENDER:$2|променио|променила}} чланство групе за $3 из $4 у $5", + "logentry-rights-rights": "$1 је {{GENDER:$2|променио|променила}} чланство групе за {{GENDER:$3|$3}} из $4 у $5", "logentry-rights-rights-legacy": "$1 је {{GENDER:$2|променио|променила}} чланство групе за $3", "logentry-rights-autopromote": "$1 је аутоматски {{GENDER:$2|унапређен|унапређена}} из $4 у $5", "logentry-upload-upload": "$1 је {{GENDER:$2|послао|послала}} $3", @@ -3498,5 +3499,43 @@ "mw-widgets-titleinput-description-new-page": "страница још увек не постоји", "mw-widgets-titleinput-description-redirect": "преусмерава на $1", "api-error-blacklisted": "Изаберите другачији, описан назив.", - "randomrootpage": "Случајна коренска страница" + "randomrootpage": "Случајна коренска страница", + "log-action-filter-block": "Тип блокирања:", + "log-action-filter-contentmodel": "Тип промене модела садржаја:", + "log-action-filter-delete": "Тип брисања:", + "log-action-filter-import": "Тип увоза:", + "log-action-filter-managetags": "Тип уређивања ознака:", + "log-action-filter-move": "Тип премештања:", + "log-action-filter-newusers": "Тип новог налога:", + "log-action-filter-patrol": "Тип патролирања:", + "log-action-filter-protect": "Тип закључавања:", + "log-action-filter-rights": "Тип промене корисничких права:", + "log-action-filter-upload": "Тип отпремања:", + "log-action-filter-all": "све", + "log-action-filter-block-block": "блокирање", + "log-action-filter-block-reblock": "измена блокирања", + "log-action-filter-block-unblock": "деблокирање", + "log-action-filter-delete-delete": "брисање странице", + "log-action-filter-delete-restore": "враћање странице", + "log-action-filter-delete-event": "брисање уноса у дневницима", + "log-action-filter-delete-revision": "брисање измене", + "log-action-filter-managetags-create": "нова ознака", + "log-action-filter-managetags-delete": "брисање ознаке", + "log-action-filter-managetags-activate": "активирање ознаке", + "log-action-filter-managetags-deactivate": "деактивирање ознаке", + "log-action-filter-move-move": "премештање без преснимавања преусмерења", + "log-action-filter-move-move_redir": "премештање са преснимавањем преусмерења", + "log-action-filter-newusers-create": "отворио анониман корисник", + "log-action-filter-newusers-create2": "отворио регистрован корисник", + "log-action-filter-newusers-autocreate": "аутоматски отворен", + "log-action-filter-patrol-patrol": "ручно", + "log-action-filter-patrol-autopatrol": "аутоматско", + "log-action-filter-protect-protect": "закључавање", + "log-action-filter-protect-modify": "измена закључавања", + "log-action-filter-protect-unprotect": "уклањање закључавања", + "log-action-filter-protect-move_prot": "премештање заштите", + "log-action-filter-rights-rights": "ручно", + "log-action-filter-rights-autopromote": "аутоматски", + "log-action-filter-upload-upload": "ново", + "log-action-filter-upload-overwrite": "промена постојећег" } diff --git a/languages/i18n/sr-el.json b/languages/i18n/sr-el.json index 60e6c3a575..aa2c828bb4 100644 --- a/languages/i18n/sr-el.json +++ b/languages/i18n/sr-el.json @@ -1235,9 +1235,9 @@ "recentchangeslinked-page": "Naziv stranice:", "recentchangeslinked-to": "Prikaži izmene stranica koje su povezane s datom stranicom", "recentchanges-page-added-to-category": "[[:$1]] je dodata u kategoriju", - "recentchanges-page-added-to-category-bundled": "[[:$1]] i još {{PLURAL:$2|jedna stranica|$2 stranice}} su dodate u kategoriju", + "recentchanges-page-added-to-category-bundled": "[[:$1]] i još [[Special:WhatLinksHere/$1|{{PLURAL:$2|jedna stranica|$2 stranice}}]] su dodate u kategoriju", "recentchanges-page-removed-from-category": "[[:$1]] je uklonjena iz kategorije", - "recentchanges-page-removed-from-category-bundled": "[[:$1]] i još {{PLURAL:$2|jedna stranica|$2 stranice}} su uklonjene iz kategorije", + "recentchanges-page-removed-from-category-bundled": "[[:$1]] i još [[Special:WhatLinksHere/$1|{{PLURAL:$2|jedna stranica|$2 stranice}}]] su uklonjene iz kategorije", "autochange-username": "Medijaviki automatska izmena", "upload": "Pošalji datoteku", "uploadbtn": "Pošalji datoteku", @@ -1358,7 +1358,7 @@ "backend-fail-read": "Ne mogu da pročitam datoteku $1.", "backend-fail-create": "Ne mogu da zapišem datoteku $1.", "backend-fail-maxsize": "Ne mogu da zapišem datoteku $1 jer je veća od {{PLURAL:$2|$2 bajta|$2 bajta|$2 bajtova}}.", - "backend-fail-readonly": "Skladišna osnova „$1“ trenutno ne može da se zapisuje. Navedeni razlog glasi: „$2“", + "backend-fail-readonly": "Skladišna osnova „$1“ trenutno ne može da se zapisuje. Navedeni razlog glasi: $2", "backend-fail-synced": "Datoteka „$1“ je nedosledna između unutrašnjih skladišnih osnova", "backend-fail-connect": "Ne mogu da se povežem sa skladišnom osnovom „$1“.", "backend-fail-internal": "Došlo je do nepoznate greške u skladišnoj osnovi „$1“.", @@ -1677,8 +1677,6 @@ "categories-submit": "Prikaži", "categoriespagetext": "{{PLURAL:$1|1=Sledeća kategorija sadrži|Sledeće kategorije sadrže}} stranice ili datoteke.\n[[Special:UnusedCategories|Nekorišćene kategorije]] nisu prikazane ovde.\nPogledajte i [[Special:WantedCategories|tražene kategorije]].", "categoriesfrom": "Prikaži kategorije počev od:", - "special-categories-sort-count": "poređaj po broju", - "special-categories-sort-abc": "poređaj po azbučnom redu", "deletedcontributions": "Obrisani korisnički doprinosi", "deletedcontributions-title": "Obrisani korisnički doprinosi", "sp-deletedcontributions-contribs": "doprinosi", @@ -2019,7 +2017,7 @@ "unblock": "Deblokiraj korisnika", "blockip": "Blokiraj korisnika", "blockip-legend": "Blokiraj korisnika", - "blockiptext": "Koristite donji obrazac da biste zabranili pristup za pisanje s određene IP adrese ili korisničkog imena.\nOvo bi trebalo da vršite samo radi sprečavanja vandalizma, u skladu sa [[{{MediaWiki:Policy-url}}|smernicama]].\nIzaberite konkretan razlog ispod (primer: navođenje konkretnih stranica koje su vandalizovane).", + "blockiptext": "Koristite donji obrazac da biste zabranili pristup za pisanje s određene IP adrese ili korisničkog imena.\nOvo bi trebalo da vršite samo radi sprečavanja vandalizma, u skladu sa [[{{MediaWiki:Policy-url}}|smernicama]].\nIzaberite konkretan razlog ispod (primer: navođenje konkretnih stranica koje su vandalizovane). Možete blokirati opsege IP adresa pomoću [https://en.wikipedia.org/wiki/Classless_Inter-Domain_Routing CIDR] sintakse, najveći dozvoljeni opseg za IPv4 je /$1 odnosno /$2 za IPv6.", "ipaddressorusername": "IP adresa ili korisničko ime:", "ipbexpiry": "Ističe:", "ipbreason": "Razlog:", @@ -2281,10 +2279,6 @@ "import-logentry-upload-detail": "$1 {{PLURAL:$1|izmena uvezena|izmene uvezene|izmena uvezeno}}", "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|izmena uvezena|izmene uvezene|izmena uvezeno}} iz $2", "javascripttest": "Javaskript test", - "javascripttest-pagetext-noframework": "Ova stranica je rezervisana za izvršavanje javaskript testova.", - "javascripttest-pagetext-unknownframework": "Nepoznati radni okvir „$1“.", - "javascripttest-pagetext-frameworks": "Izaberite jedan od sledećih radnih okvira: $1", - "javascripttest-pagetext-skins": "Izaberite s kojom temom želite da pokrenete probu:", "javascripttest-qunit-intro": "Pogledajte [$1 dokumentaciju za testiranje] na mediawiki.org.", "tooltip-pt-userpage": "{{GENDER:|Vaša}} korisnička stranica", "tooltip-pt-anonuserpage": "Korisnička stranica za IP adresu s koje uređujete", @@ -2529,7 +2523,7 @@ "variantname-gan": "gan", "variantname-sr-ec": "Ćirilica", "variantname-sr-el": "Latinica", - "variantname-sr": "sr", + "variantname-sr": "ћир/lat", "variantname-kk-kz": "kk-kz", "variantname-kk-tr": "kk-tr", "variantname-kk-cn": "kk-cn", @@ -2589,8 +2583,8 @@ "exif-colorspace": "Prostor boje", "exif-componentsconfiguration": "Značenje svakog dela", "exif-compressedbitsperpixel": "Režim sažimanja slike", - "exif-pixelydimension": "Širina slike", - "exif-pixelxdimension": "Visina slike", + "exif-pixelxdimension": "Širina slike", + "exif-pixelydimension": "Visina slike", "exif-usercomment": "Korisnički komentari", "exif-relatedsoundfile": "Povezani zvučni zapis", "exif-datetimeoriginal": "Datum i vreme slikanja", @@ -3120,7 +3114,6 @@ "version-libraries-description": "Opis", "version-libraries-authors": "Autori", "redirect": "Preusmerenje na datoteku, korisnika, stranicu ili izmenu", - "redirect-legend": "Preusmeri na datoteku ili stranicu", "redirect-submit": "Idi", "redirect-lookup": "Tip vrednosti:", "redirect-value": "Vrednost:", @@ -3131,7 +3124,6 @@ "redirect-not-exists": "Vrednost nije pronađen", "fileduplicatesearch": "Pretraga duplikata", "fileduplicatesearch-summary": "Pretraga dupliranih datoteka prema heš vrednosti.", - "fileduplicatesearch-legend": "Pretraga duplikata", "fileduplicatesearch-filename": "Naziv datoteke:", "fileduplicatesearch-submit": "Pretraži", "fileduplicatesearch-info": "$1 × $2 piksela
Veličina datoteke: $3
MIME tip: $4", @@ -3295,7 +3287,7 @@ "logentry-protect-protect-cascade": "$1 je {{GENDER:$2|zaštitio|zaštitila}} $3 $4 [prenosiva zaštita]", "logentry-protect-modify": "$1 je {{GENDER:$2|promenio|promenila}} stepen zaštite za $3 $4", "logentry-protect-modify-cascade": "$1 je {{GENDER:$2|promenio|promenila}} stepen zaštite za $3 $4 [prenosiva zaštita]", - "logentry-rights-rights": "$1 je {{GENDER:$2|promenio|promenila}} članstvo grupe za $3 iz $4 u $5", + "logentry-rights-rights": "$1 je {{GENDER:$2|promenio|promenila}} članstvo grupe za {{GENDER:$3|$3}} iz $4 u $5", "logentry-rights-rights-legacy": "$1 je {{GENDER:$2|promenio|promenila}} čalnstvo grupe za $3", "logentry-rights-autopromote": "$1 je automatski {{GENDER:$1|unapređen|unapređena}} iz $4 u $5", "logentry-upload-upload": "$1 je {{GENDER:$2|poslao|poslala}} $3", diff --git a/languages/i18n/stq.json b/languages/i18n/stq.json index 9f38a0a8f4..0df794d3fb 100644 --- a/languages/i18n/stq.json +++ b/languages/i18n/stq.json @@ -1273,8 +1273,6 @@ "categories": "Kategorien", "categoriespagetext": "Foulgjende {{PLURAL:$1|Kategorie änthoalt|Kategorien änthoolde}} Sieden of Doatäie.\n[[Special:UnusedCategories|Nit benutsede Kategorien]] wäide hier nit apfierd.\nSjuch uk ju Lieste fon do [[Special:WantedCategories|wonskede Kategorien]].", "categoriesfrom": "Wies Kategorien siet:", - "special-categories-sort-count": "Sortierenge ätter Antaal", - "special-categories-sort-abc": "Sortierenge ätter Alphabet", "deletedcontributions": "Läskede Benutserbiedraage", "deletedcontributions-title": "Läskede Benutserbiedraage", "sp-deletedcontributions-contribs": "Benutserbiedraage", @@ -1951,8 +1949,8 @@ "exif-colorspace": "Faawenruum", "exif-componentsconfiguration": "Betjuudenge fon älke Komponente", "exif-compressedbitsperpixel": "Komprimierde Bits pro Pixel", - "exif-pixelydimension": "Bieldebratte", - "exif-pixelxdimension": "Bieldehöchte", + "exif-pixelxdimension": "Bieldebratte", + "exif-pixelydimension": "Bieldehöchte", "exif-usercomment": "Benutserkommentoare", "exif-relatedsoundfile": "Touheerige Toondoatäi", "exif-datetimeoriginal": "Ärfoatengstiedpunkt", @@ -2275,7 +2273,6 @@ "version-software-version": "Version", "fileduplicatesearch": "Doatäi-Duplikoat-Säike", "fileduplicatesearch-summary": "Säike ätter Doatäi-Duplikoate ap Basis fon hieren Hash-Wäid.", - "fileduplicatesearch-legend": "Säike ätter Duplikoate", "fileduplicatesearch-filename": "Doatäinoome:", "fileduplicatesearch-submit": "Säike (016)", "fileduplicatesearch-info": "$1 × $2 Pixel
Doatäigrööte: $3
MIME-Typ: $4", diff --git a/languages/i18n/su.json b/languages/i18n/su.json index 520f3b3d7c..ce6ca9d428 100644 --- a/languages/i18n/su.json +++ b/languages/i18n/su.json @@ -592,7 +592,7 @@ "newarticle": "(anyar)", "newarticletext": "Anjeun geus nuturkeun tutumbu ka kaca nu can aya.\nPikeun nyieun kaca, mimitian ku ngetik jeroeun kotak di handap\n(tempo [$1 kaca pitulung] pikeun leuwih écés).\nMun anjeun ka dieu teu ngahaja, klik baé tombol '''back''' na panyungsi anjeun.", "anontalkpagetext": "----\nIeu mangrupa kaca sawala pikeun pamaké anonim anu can nyieun akun, atawa anu henteu maké.\nKu kituna kapaksa make alamat IP pikeun nyirikeun anjeunna. Alamat IP ieu bisa dipaké ku sababaraha jalma. Lamun anjeun salasahiji pamaké anonim sarta ngarasa aya koméntar nu teu pakait geus ditujukeun ka anjeun, mangga [[Special:UserLogin/signup|nyieun akun]] atawa [[Special:UserLogin|asup log]] sangkan teu pacorok jeung pamaké anonim lianna.", - "noarticletext": "Kiwari can aya téks dina ieu kaca.\nAnjeun bisa [[Special:Search/{{PAGENAME}}|nyusud judul ieu kaca]] dina kaca séjén,\n[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} nyusud log nu tumali],\natawa [{{fullurl:{{FULLPAGENAME}}|action=edit}} ngédit ieu kaca].", + "noarticletext": "Kiwari can aya téks dina ieu kaca.\nAnjeun bisa [[Special:Search/{{PAGENAME}}|nyusud judul ieu kaca]] dina kaca séjén,\n[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} nyusud log nu tumali],\natawa [{{fullurl:{{FULLPAGENAME}}|action=edit}} nyieun ieu kaca].", "noarticletext-nopermission": "Kiwari can aya téks dina ieu kaca.\nAnjeun bisa [[Special:Search/{{PAGENAME}}|nyusud judul ieu kaca]] dina kaca séjén,atawa [{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} nyusud log nu tumali], tapi teu wenang pikeun nyieun ieu kaca.", "missing-revision": "Révisi #$1 kaca \"{{FULLPAGENAME}}\" teu aya.\n\nKajadian ieu biasana kusabab nuturkeun tutumbu jujutan kaca anu geus dihapus.\nWincikanana bisa ditempo di [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} log hapusan].", "userpage-userdoesnotexist": "Rekening pamaké \"$1\" tacan kadaptar. Mangga tilikan lamun anjeun hoyong ngadamel/ngédit kaca ieu.", @@ -1452,8 +1452,6 @@ "categories": "Kategori", "categoriespagetext": "{{PLURAL:$1|Kategori|Kategori}} ngandung kaca atawa média.\n[[Special:UnusedCategories|Kategori nu teu kapaké]] henteu ditémbongkeun di dieu.\nBaca ogé [[Special:WantedCategories|kategori nu dipikabutuh]].", "categoriesfrom": "Tembongkeun kategori-kategori dimimitian ku:", - "special-categories-sort-count": "ngurut numutkeun jumlah", - "special-categories-sort-abc": "runtuykeun dumasar abjad", "deletedcontributions": "Kontribusi nu dihapus", "deletedcontributions-title": "Kontribusi nu dihapus", "sp-deletedcontributions-contribs": "kontribusi", @@ -1662,6 +1660,7 @@ "undelete-show-file-submit": "Enya", "namespace": "Ngaranspasi:", "invert": "Balikkeun pilihan", + "tooltip-invert": "Contang ieu kotak pikeun nyumputkeun parobahan kaca-kaca dina ruang nama anu dipilih (jeung ruang nama anu tumali, lamun dicontang)", "blanknamespace": "(Utama)", "contributions": "Kontribusi {{GENDER:$1|pamaké}}", "contributions-title": "Sumbangan tulisan ti $1", @@ -2059,8 +2058,8 @@ "exif-colorspace": "Rohangan warna", "exif-componentsconfiguration": "Harti unggak komponén", "exif-compressedbitsperpixel": "Mode komprési gambar", - "exif-pixelydimension": "Lébar gambar", - "exif-pixelxdimension": "Jangkung gambar", + "exif-pixelxdimension": "Lébar gambar", + "exif-pixelydimension": "Jangkung gambar", "exif-usercomment": "Koméntar pamaké", "exif-datetimeoriginal": "Titimangsa jeung wanci dijieunna data", "exif-datetimedigitized": "Titimangsa jeung wanci digitisasi", @@ -2348,7 +2347,6 @@ "version-software-product": "Produk", "version-software-version": "Vérsi", "fileduplicatesearch": "Sungsi gambar duplikat", - "fileduplicatesearch-legend": "Sungsi duplikat", "fileduplicatesearch-filename": "Ngaran koropak:", "fileduplicatesearch-submit": "Sungsi", "fileduplicatesearch-info": "$1 × $2 piksel
Ukuran koropak: $3
Tipeu MIME: $4", diff --git a/languages/i18n/sv.json b/languages/i18n/sv.json index e3a6a1ea58..48b450006e 100644 --- a/languages/i18n/sv.json +++ b/languages/i18n/sv.json @@ -210,7 +210,6 @@ "moredotdotdot": "Mer...", "morenotlisted": "Denna lista är inte fullständig.", "mypage": "Sida", - "anonuserpage": "Okänd användare", "mytalk": "Diskussion", "anontalk": "Diskussion", "navigation": "Navigering", @@ -340,7 +339,7 @@ "viewdeleted": "Visa $1?", "restorelink": "{{PLURAL:$1|en raderad version|$1 raderade versioner}}", "feedlinks": "Flöde:", - "feed-invalid": "Ogiltig flödestyp.", + "feed-invalid": "Ogiltig flödestyp för prenumeration.", "feed-unavailable": "Syndikerade flöden är inte tillgängliga", "site-rss-feed": "$1 RSS-flöde", "site-atom-feed": "$1 Atom-flöde", @@ -528,7 +527,7 @@ "noemail": "Användaren \"$1\" har inte registrerat någon e-postadress.", "noemailcreate": "Du måste ange en giltig e-postadress", "passwordsent": "Ett nytt lösenord har skickats till den e-postadress som användaren \"$1\" har registrerat. När du får meddelandet, var god logga in igen.", - "blocked-mailpassword": "Din IP-adress är blockerad, därför kan den inte användas för att få ett nytt lösenord.", + "blocked-mailpassword": "Din IP-adress har blockerats från att redigera. För att förhindra missbruk kan den inte användas för att få ett nytt lösenord.", "eauthentsent": "Ett e-postmeddelande för bekräftelse har skickats till den angivna e-postadressen.\nInnan någon annan e-post kan skickas till kontot, måste du följa instruktionerna i e-postmeddelandet för att bekräfta att kontot verkligen är ditt.", "throttled-mailpassword": "En lösenordsåterställning har redan skickats för mindre än {{PLURAL:$1|en timme|$1 timmar}} sedan.\nFör att förhindra missbruk skickas bara en lösenordsåterställning per {{PLURAL:$1|timme|$1-timmarsperiod}}.", "mailerror": "Fel vid skickande av e-post: $1", @@ -1371,9 +1370,9 @@ "recentchangeslinked-page": "Sidnamn:", "recentchangeslinked-to": "Visa ändringar på sidor med länkar till den givna sidan istället", "recentchanges-page-added-to-category": "[[:$1]] lades till i kategorin", - "recentchanges-page-added-to-category-bundled": "[[:$1]] och {{PLURAL:$2|en sida|$2 sidor}} lades till i kategorin", + "recentchanges-page-added-to-category-bundled": "[[:$1]] och [[Special:WhatLinksHere/$1|{{PLURAL:$2|en sida|$2 sidor}}]] lades till i kategorin", "recentchanges-page-removed-from-category": "[[:$1]] togs bort från kategorin", - "recentchanges-page-removed-from-category-bundled": "[[:$1]] och {{PLURAL:$2|en sida|$2 sidor}} togs bort från kategorin", + "recentchanges-page-removed-from-category-bundled": "[[:$1]] och [[Special:WhatLinksHere/$1|{{PLURAL:$2|en sida|$2 sidor}}]] togs bort från kategorin", "autochange-username": "Automatisk MediaWiki-ändring", "upload": "Ladda upp fil", "uploadbtn": "Ladda upp fil", @@ -1553,6 +1552,7 @@ "uploadstash-badtoken": "Misslyckades att utföra åtgärden. Dina redigeringsrättigheter har kanske löpt ut. Försök igen.", "uploadstash-errclear": "Rensning av filerna misslyckades.", "uploadstash-refresh": "Uppdatera listan över filer", + "uploadstash-thumbnail": "visa miniatyr", "invalid-chunk-offset": "Ogiltig segmentsförskjutning", "img-auth-accessdenied": "Åtkomst nekad", "img-auth-nopathinfo": "PATH_INFO saknas.\nDin server är inte inställd för att ge denna information.\nDen kan vara CGI-baserad och stöder inte img_auth.\n[https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Image_Authorization Se bildbehörighet.]", @@ -1872,8 +1872,6 @@ "categories-submit": "Visa", "categoriespagetext": "Följande {{PLURAL:$1|kategori|kategorier}} innehåller sidor eller media.\n[[Special:UnusedCategories|Oanvända kategorier]] visas inte här.\nSe även [[Special:WantedCategories|önskade kategorier]].", "categoriesfrom": "Visa kategorier från och med:", - "special-categories-sort-count": "sortera efter storlek", - "special-categories-sort-abc": "sortera alfabetiskt", "deletedcontributions": "Raderade användarbidrag", "deletedcontributions-title": "Raderade användarbidrag", "sp-deletedcontributions-contribs": "bidrag", @@ -2250,6 +2248,7 @@ "ipb-unblock": "Ta bort blockering av en användare eller IP-adress", "ipb-blocklist": "Visa gällande blockeringar", "ipb-blocklist-contribs": "Bidrag från {{GENDER:$1|$1}}", + "ipb-blocklist-duration-left": "$1 kvar", "unblockip": "Ta bort blockering av användare/IP-adress", "unblockiptext": "Använd formuläret nedan för att ta bort blockeringen av en IP-adress.", "ipusubmit": "Upphäv denna blockering", @@ -2491,11 +2490,7 @@ "import-logentry-upload-detail": "$1 {{PLURAL:$1|version|versioner}} importerades", "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|version|versioner}} importerades från $2", "javascripttest": "JavaScript-testning", - "javascripttest-pagetext-noframework": "Denna sida är reserverat för att köra JavaScript-tester.", - "javascripttest-pagetext-unknownframework": "Okänd testmiljö \"$1\".", "javascripttest-pagetext-unknownaction": "Okänd handling \"$1\".", - "javascripttest-pagetext-frameworks": "Välj en av följande testmiljöer: $1", - "javascripttest-pagetext-skins": "Välj ett utseende att köra tester med:", "javascripttest-qunit-intro": "Se [$1 testningsdokumentationen] på mediawiki.org.", "tooltip-pt-userpage": "{{GENDER:|Din användarsida}}", "tooltip-pt-anonuserpage": "Användarsida för ip-numret du redigerar från", @@ -2765,8 +2760,8 @@ "exif-colorspace": "Färgrymd", "exif-componentsconfiguration": "Komponentanalys", "exif-compressedbitsperpixel": "Bildkomprimeringsläge", - "exif-pixelydimension": "Bildbredd", - "exif-pixelxdimension": "Bildhöjd", + "exif-pixelxdimension": "Bildbredd", + "exif-pixelydimension": "Bildhöjd", "exif-usercomment": "Kommentarer", "exif-relatedsoundfile": "Relaterad ljudfil", "exif-datetimeoriginal": "Exponeringstidpunkt", @@ -3092,6 +3087,10 @@ "confirmemail_body_set": "Någon, förmodligen du, från IP-adressen $1,\nhar angivit e-postadressen till kontot \"$2\" till den här adressen på {{SITENAME}}.\n\nFör att bekräfta att kontot verkligen tillhör dig, bör du aktivera e-postfunktionerna på {{SITENAME}}, öppna denna länk i din webbläsare:\n\n$3\n\nOm kontot *inte* tillhör dig, följ den här länken för att avbryta bekräftelsen av e-postadressen:\n\n$5\n\nDenna bekräftelsekod kommer att sluta fungera efter $4.", "confirmemail_invalidated": "Bekräftelsen av e-postadressen har ogiltigförklarats", "invalidateemail": "Avbryt bekräftelse av e-postadress", + "notificationemail_subject_changed": "Registrerad e-postadress på {{SITENAME}} har ändrats", + "notificationemail_subject_removed": "Registrerad e-postadress på {{SITENAME}} har tagits bort", + "notificationemail_body_changed": "Någon, förmodligen du, har ändrat e-postadressen\nför kontot \"$2\" till \"$3\" på {{SITENAME}} från IP-adressen $1.\n\nOm det inte var du bör du kontakta en webbplatsadministratör genast.", + "notificationemail_body_removed": "Någon, förmodligen du, har tagit bort e-postadressen\nför kontot \"$2\" på {{SITENAME}} från IP-adressen $1.\n\nOm det inte var du bör du kontakta en webbplatsadministratör genast.", "scarytranscludedisabled": "[Interwiki-inklusion är inte aktiverad]", "scarytranscludefailed": "[Hämtning av mall för $1 misslyckades]", "scarytranscludefailed-httpstatus": "[Hämtning av mall för $1 misslyckades: HTTP $2]", @@ -3212,7 +3211,6 @@ "version-libraries-description": "Beskrivning", "version-libraries-authors": "Författare", "redirect": "Omdirigering efter filnamn, användar-ID, sida, versions-ID eller logg-ID", - "redirect-legend": "Omdirigera till en fil eller sida", "redirect-summary": "Den här specialsidan omdirigerar till en fil (efter filnamn), en sida (efter en versions eller sidas ID), en användarsida (efter användar-ID) eller en loggpost (efter logg-ID). Användning: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/page/64308]], [[{{#Special:Redirect}}/revision/328429]], [[{{#Special:Redirect}}/user/101]] eller [[{{#Special:Redirect}}/logid/186]].", "redirect-submit": "Kör", "redirect-lookup": "Slå upp:", @@ -3225,7 +3223,6 @@ "redirect-not-exists": "Värdet hittades inte", "fileduplicatesearch": "Sök efter dubblettfiler", "fileduplicatesearch-summary": "Sök efter dubblettfiler baserat på filernas hash-värden.", - "fileduplicatesearch-legend": "Sök efter en dubblettfil", "fileduplicatesearch-filename": "Filnamn:", "fileduplicatesearch-submit": "Sök", "fileduplicatesearch-info": "$1 × $2 pixlar
Filstorlek: $3
MIME-typ: $4", @@ -3426,7 +3423,7 @@ "logentry-protect-protect-cascade": "$1 {{GENDER:$2|skyddade}} $3 $4 [kaskaderande]", "logentry-protect-modify": "$1 {{GENDER:$2|ändrade}} skyddsnivån för $3 $4", "logentry-protect-modify-cascade": "$1 {{GENDER:$2|ändrade}} skyddsnivån för $3 $4 [kaskaderande]", - "logentry-rights-rights": "$1 {{GENDER:$2|ändrade}} gruppmedlemskapet för $3 från $4 till $5", + "logentry-rights-rights": "$1 {{GENDER:$2|ändrade}} gruppmedlemskapet för {{GENDER:$3|$3}} från $4 till $5", "logentry-rights-rights-legacy": "$1 {{GENDER:$2|ändrade}} gruppmedlemskapet för $3", "logentry-rights-autopromote": "$1 {{GENDER:$2|befordrades}} automatiskt från $4 till $5", "logentry-upload-upload": "$1 {{GENDER:$2|laddade upp}} $3", @@ -3519,6 +3516,7 @@ "api-error-unknownerror": "Okänt fel: \"$1\".", "api-error-uploaddisabled": "Uppladdning är inaktiverad på denna wiki.", "api-error-verification-error": "Denna fil kan vara skadad eller har fel filändelse.", + "api-error-was-deleted": "En fil med detta namn har tidigare laddats upp och sedan raderats.", "duration-seconds": "$1 {{PLURAL:$1|sekund|sekunder}}", "duration-minutes": "$1 {{PLURAL:$1|minut|minuter}}", "duration-hours": "$1 {{PLURAL:$1|timme|timmar}}", @@ -3609,6 +3607,7 @@ "special-characters-group-ipa": "IPA", "special-characters-group-symbols": "Symboler", "special-characters-group-greek": "Grekiska", + "special-characters-group-greekextended": "Grekiska utvidgad", "special-characters-group-cyrillic": "Kyrilliskt", "special-characters-group-arabic": "Arabiska", "special-characters-group-arabicextended": "Arabiska utökade", @@ -3636,5 +3635,38 @@ "sessionprovider-generic": "$1-sessioner", "sessionprovider-mediawiki-session-cookiesessionprovider": "cookiebaserade sessioner", "sessionprovider-nocookies": "Cookies kan vara inaktiverade. Se till att du har cookies aktiverat och försök igen.", - "randomrootpage": "Slumprotsida" + "randomrootpage": "Slumprotsida", + "log-action-filter-block": "Typ av blockering:", + "log-action-filter-delete": "Typ av radering:", + "log-action-filter-import": "Importeringstyp:", + "log-action-filter-move": "Flyttningstyp:", + "log-action-filter-newusers": "Typ av kontoskapande:", + "log-action-filter-patrol": "Typ av patrullering:", + "log-action-filter-protect": "Typ av skydd:", + "log-action-filter-suppress": "Censurtyp", + "log-action-filter-upload": "Typ av uppladdning:", + "log-action-filter-all": "Alla", + "log-action-filter-block-block": "Blockering", + "log-action-filter-block-reblock": "Blockeringsändring", + "log-action-filter-block-unblock": "Tog bort blockering", + "log-action-filter-contentmodel-change": "Ändring av innehållsmodell", + "log-action-filter-delete-delete": "Radering av sida", + "log-action-filter-delete-restore": "Återställde sida", + "log-action-filter-delete-event": "Radering av logg", + "log-action-filter-delete-revision": "Radering av sidversion", + "log-action-filter-move-move": "Flyttning utan att skriva över omdirigeringar", + "log-action-filter-move-move_redir": "Flyttning med att skriva över omdirigeringar", + "log-action-filter-newusers-create": "Skapade av anonyma användare", + "log-action-filter-newusers-create2": "Skapade av registrerade användare", + "log-action-filter-newusers-autocreate": "Skapades automatiskt", + "log-action-filter-patrol-patrol": "Manuell patrullering", + "log-action-filter-patrol-autopatrol": "Automatisk patrullering", + "log-action-filter-protect-protect": "Skydd", + "log-action-filter-protect-modify": "Ändring av skydd", + "log-action-filter-protect-unprotect": "Tog bort skydd", + "log-action-filter-protect-move_prot": "Flyttade skydd", + "log-action-filter-rights-rights": "Manuell ändring", + "log-action-filter-rights-autopromote": "Automatisk ändring", + "log-action-filter-upload-upload": "Ny uppladdning", + "log-action-filter-upload-overwrite": "Återuppladdning" } diff --git a/languages/i18n/sw.json b/languages/i18n/sw.json index 532f1abb64..c39fa4e0ac 100644 --- a/languages/i18n/sw.json +++ b/languages/i18n/sw.json @@ -1550,8 +1550,6 @@ "categories": "Jamii", "categoriespagetext": "Jamii {{PLURAL:$1|inayofuata ina|zinazofuata zina}} kurasa au mafaili ya picha au sauti.\n[[Special:UnusedCategories|Jamii zisizotumiwa]] hazitandazwi hapa.\nTazama pia [[Special:WantedCategories|jamii zinazohitajika]].", "categoriesfrom": "Tandaza jamii kuanzia na:", - "special-categories-sort-count": "panga kwa idadi", - "special-categories-sort-abc": "panga kwa herufi", "deletedcontributions": "Michango ya mtumiaji aliyefutwa", "deletedcontributions-title": "Michango ya mtumiaji aliyefutwa", "sp-deletedcontributions-contribs": "michango", @@ -2134,8 +2132,8 @@ "exif-copyright": "Mwenye hatimiliki", "exif-exifversion": "Mtindo wa Exif", "exif-componentsconfiguration": "Maana ya kila kijenzi", - "exif-pixelydimension": "Upana wa picha", - "exif-pixelxdimension": "Urefu wa picha", + "exif-pixelxdimension": "Upana wa picha", + "exif-pixelydimension": "Urefu wa picha", "exif-usercomment": "Maoni ya mtumiaji", "exif-relatedsoundfile": "Faili la sauti linalohusika", "exif-lightsource": "Mwanga", @@ -2366,7 +2364,6 @@ "redirect-submit": "Nenda", "fileduplicatesearch": "Tafuta mafaili ya nakili", "fileduplicatesearch-summary": "Kutafuta mafaili ya nakili kwa kuzingatia thamani za reli.", - "fileduplicatesearch-legend": "Kutafuta kifani", "fileduplicatesearch-filename": "Jina la faili:", "fileduplicatesearch-submit": "Tafuta", "fileduplicatesearch-info": "Piseli $1 × $2
Ukubwa wa faili: $3
Aina ya MIME: $4", diff --git a/languages/i18n/szl.json b/languages/i18n/szl.json index ee91968fe3..589adc00fa 100644 --- a/languages/i18n/szl.json +++ b/languages/i18n/szl.json @@ -1273,8 +1273,6 @@ "categories": "Kategoryje", "categoriespagetext": "Zajta przedstowjo lista katygoryji s zajtůma a plikůma.\n[[Special:UnusedCategories|Ńyużywane kategoryj]] ńy zostoły tukej pokozane.\nKukńij tyż [[Special:WantedCategories|ńyistńyjůnce kategoryje]].", "categoriesfrom": "Pokož kategoryje začynajůnc uod:", - "special-categories-sort-count": "sortowanie wedle ličby", - "special-categories-sort-abc": "sortowanie wedle alfabyta", "deletedcontributions": "Wyćepane sprowjyńa użytkowńika", "deletedcontributions-title": "Wyćepane sprowjyńa użytkowńika", "linksearch": "Necowe uodwołańa", @@ -1853,8 +1851,8 @@ "exif-colorspace": "Přestřyń kolorůw", "exif-componentsconfiguration": "Značyńy skuadowych", "exif-compressedbitsperpixel": "Skůmpresowanych bitůw na piksel", - "exif-pixelydimension": "Prawidłowa szyrzka uobrozu", - "exif-pixelxdimension": "Prawidłowo wyżka uobrozu", + "exif-pixelxdimension": "Prawidłowa szyrzka uobrozu", + "exif-pixelydimension": "Prawidłowo wyżka uobrozu", "exif-usercomment": "Kůmyntoř užytkowńika", "exif-relatedsoundfile": "Powjůnzany plik audjo", "exif-datetimeoriginal": "Data i čas utwořyńo uoryginouu", @@ -2124,7 +2122,6 @@ "version-software-version": "Wersjo", "fileduplicatesearch": "Šnupej za duplikatym plika", "fileduplicatesearch-summary": "Šnupej za duplikatůma plika na podstawje wartośći fůnkcyji skrůtu.", - "fileduplicatesearch-legend": "Šnupej za duplikatůma plika", "fileduplicatesearch-filename": "Mjano pliku:", "fileduplicatesearch-submit": "Šnupej", "fileduplicatesearch-info": "$1 × $2 pikseli
Wjelgość plika: $3
Typ MIME: $4", diff --git a/languages/i18n/ta.json b/languages/i18n/ta.json index 37ab024417..ddb657183d 100644 --- a/languages/i18n/ta.json +++ b/languages/i18n/ta.json @@ -46,7 +46,9 @@ "Dineshkumar Ponnusamy", "Sharanrajindia", "Maathavan", - "தமிழ்க்குரிசில்" + "தமிழ்க்குரிசில்", + "Nemo bis", + "JAaron95" ] }, "tog-underline": "இணைப்புகளுக்கு அடிக்கோடிடு", @@ -388,7 +390,7 @@ "perfcachedts": "பின்வரும் தரவுகள் இடைமாற்றைக் கொண்டுள்ளன, தரவுகள் கடைசியாக $1 இல் புதுபிக்கப்பட்டுள்ளன.அதிகபட்சமாக {{PLURAL:$4|ஒரு முடிவு|$4 முடிவுகள்}} இடைமாற்றில் இருக்கலாம்.", "querypage-no-updates": "இப்பக்கத்துக்கான இற்றைப்படுத்தல்கள் செயலிழக்கச் செய்யப்பட்டுள்ளன. இங்கே உள்ளத் தரவுகள் தற்சமயம் இற்றைப்படுத்தப்படமாட்டாது.", "viewsource": "மூலத்தைப் பார்", - "viewsource-title": "$1க்கான மூலத்தைப் பார்", + "viewsource-title": "$1 என்பதற்கான மூலத்தைப் பார்", "actionthrottled": "செயற்பாடு கட்டுப்படுத்தப்பட்டது", "actionthrottledtext": "எரிதக் காப்பு நடவடிக்கையாகப் பயனொருவர் குறித்த சிறு கால இடைவெளியில் இச்செயற்பாட்டை அதிகளவில் செய்வது தடுக்கப்பட்டுள்ளது. நீர் அவ்வெல்லையைத் தாண்டிவிட்டீர். அருள் கூர்ந்து சில நிமிடங்களில் முயலவும்.", "protectedpagetext": "இப்பக்கம் தொகுக்கப்படுவதையோ அல்லது பிற செயல்களைத் தவிர்ப்பதற்காகவோ பூட்டப்பட்டுள்ளது.", @@ -484,7 +486,7 @@ "nocookieslogin": "{{SITENAME}} தளம் பயனர்களைப் புகுபதிகை செய்வதற்கு ஞாபகிகளைப் (குக்கிகள்) பயன்படுத்துகிறது. நீங்கள் ஞாபகிகளைச் செயலிழக்கச் செய்துள்ளீர்கள். தயவுசெய்து அவற்றைச் செயற்பாடுள்ளதாக்கித் திரும்பவும் முயலுங்கள்.", "nocookiesfornew": "பயனர் கணக்கு உருவாக்கப்படவில்லை, அதே போல அதன் மூலத்தை எங்களால் உறுதிசெய்ய இயலவில்லை.நீங்கள் குக்கிகள் (cookies) இயங்கச்செய்யப்பட்டிருப்பதை உறுதிசெய்யவும்,இப்பக்கத்தை reload செய்யவும் மற்றும் மீண்டும் முயற்சிக்கவும்.", "noname": "நீங்கள் கொடுத்த பயனர் பெயர் செல்லுபடியற்றது.", - "loginsuccesstitle": "புகுபதிகை வெற்றி", + "loginsuccesstitle": "புகுபதிகையில் உள்ளீர்கள்.", "loginsuccess": "நீங்கள் தற்பொழுது {{SITENAME}} தளத்தில் \"$1\" கணக்கினூடாக புகுபதிகை செய்துள்ளீர்கள்.", "nosuchuser": "\"$1\" என்ற பெயரில் பயனர் எவருமில்லை.\n\nபயனர் பெயர், பெரிய எழுத்து, சிறிய எழுத்து என்ற வித்தியாசத்திற்குட்பட்டது.\n\nஎழுத்துப் பிழைகளைச் சரி பார்க்கவும், அல்லது [[Special:UserLogin/signup|புதிய பயனர் கணக்கொன்றை உருவாக்கவும்]].", "nosuchusershort": "\"$1\" என்ற பெயரில் பயனர் யாரும் இல்லை. நீங்கள் உள்ளிட்ட பெயரைச் சரி பார்க்கவும்.", @@ -503,7 +505,7 @@ "noemail": "\"$1\" பயனருக்கு மின்னஞ்சல் முகவரி எதுவும் பதியப்பட்டிருக்கவில்லை.", "noemailcreate": "ஒரு செல்லத்தக்க மின்னஞ்சல் முகவரியை நீங்கள் தரவேண்டும்.", "passwordsent": "\"$1\" பயனருக்கான மின்னஞ்சல் முகவரிக்கு ஒரு புதிய கடவுச்சொல் அனுப்பப்பட்டுள்ளது. பெற்றுக்கொண்டதும் தயவுசெய்து மீண்டும் புகுபதிகை செய்யவும்.", - "blocked-mailpassword": "உங்கள் ஐ.பி. முகவரி தடுக்கப்பட்டுள்ளது, விசம செயற்பாடுகளைத் தவிர்க்க கடவுச்சொல் மீட்புச் செயலியை நீங்கள் பயன்படுத்து அனுமதிக்கப்படவில்லை.", + "blocked-mailpassword": "உங்கள் ஐ.பி. முகவரி தொகுப்பதிலிருந்து தடை செய்யப்பட்டுள்ளது. விசம செயற்பாடுகளைத் தவிர்க்க கடவுச்சொல் மீட்புச் செயலியை நீங்கள் பயன்படுத்து அனுமதிக்கப்படவில்லை.", "eauthentsent": "உறுதிப்படுத்தல் மின்னஞ்சலொன்று நீங்கள் கொடுத்த மின்னஞ்சல் முகவரிக்கு அனுப்பப் பட்டுள்ளது.\nமேலும் மின்னஞ்சல்கள் இந்த முகவரிக்கு அனுப்பப்படும் முன்னர், மின்னஞ்சலில் கொடுக்கப்பட்டுள்ள வழிமுறைகளை பின்பற்றி, இம்மின்னஞ்சல் முகவரி உங்களுடையது தான் என்பதை உறுதிப்படுத்தவும்.", "throttled-mailpassword": "கடந்த {{PLURAL:$1|மணிநேரத்துக்குள்|$1 மணிநேரங்களுக்குள்}} ஒரு கடவுச்சொல் நினைவூட்டல் மின்னஞ்சல் ஏற்கனவே அனுப்பப்பட்டுவிட்டது. விசமப் பயன்பாடுகளைத் தவிர்ப்பதற்காக {{PLURAL:$1|மணிநேரத்திற்கு|$1 மணிநேரங்களுக்கு}} ஒரு கடவுச்சொல் நினைவூட்டல் மின்னஞ்சல் மட்டுமே அனுப்பப்படும்.", "mailerror": "மின்னஞ்சல் அனுப்புவதில் தவறு: $1", @@ -520,7 +522,7 @@ "createaccount-title": "{{SITENAME}} தளத்துக்கான கணக்கு தொடக்கம்", "createaccount-text": "யாரோ ஒருவர் உங்கள் மின்னஞ்சல் முவரிக்காக {{SITENAME}} ($4) தளத்தில் கணக்கொண்றை தொடங்கியுள்ளார். கணக்கின் பெயர் \"$2\", கடவுச்சொல் \"$3\". நீங்கள் இப்போது புகுபதிகைச் செய்து கடவுச்சொல்லை மாற்ற வேண்டும்.\n\nஇக்கணக்கு தவறுதலாக தொடங்கப்பட்டிருந்தால், இத்தகவலைப் புறக்கணிக்கலாம்.", "login-throttled": "தாங்கள் மிக அண்மையில் பலமுறை புகுபதிகை செய்ய முயற்சி செய்துள்ளீர்கள்.\n\nமீண்டும் முயற்சிக்கும் முன் $1 காத்திருக்கவும்.", - "login-abort-generic": "உங்கள் உள்நுழைவு தோல்வியுற்றது - Aborted", + "login-abort-generic": "உங்கள் உள்நுழைவு தோல்வியுற்றது - ரத்து செய்யபட்டது", "login-migrated-generic": "உங்கள் கணக்கு நகர்த்தப்பட்டுள்ளது, மேலும் உங்கள் பயனர்பெயரில் இந்த விக்கியில் இல்லை.", "loginlanguagelabel": "மொழி: $1", "suspicious-userlogout": "உங்கள் விடுபதிகை கோரிக்கை மறுக்கப்பட்டது ஏனென்றால் அது அறுபட்ட உலாவி அல்லது மாற்று இடைக்கிடங்கியால் அனுப்பப்பட்டுள்ளது.", @@ -725,7 +727,7 @@ "sectioneditnotsupported-text": "இப்பக்கத்தில் உட்பிரிவை தொகுக்க தேவையான ஆதரவில்லை.", "permissionserrors": "அனுமதி தவறுகள்", "permissionserrorstext": "பின்வரும் {{PLURAL:$1|காரணத்துக்காக|காரணங்களுக்காக}} நீங்கள் அதைச் செய்ய முடியாது:", - "permissionserrorstext-withaction": "$2-க்கு தங்களுக்கு அனுமதி இல்லை. அதற்கான {{PLURAL:$1|காரணம்|காரணங்கள்}}:", + "permissionserrorstext-withaction": "$2- இதற்கு தங்களுக்கு அனுமதி இல்லை. அதற்கான {{PLURAL:$1|காரணம்|காரணங்கள்}}:", "recreate-moveddeleted-warn": "'''எச்சரிக்கை: தாங்கள் ஏற்கனவே நீக்கப்பட்ட பக்கமொன்றை மீண்டும் தொடங்க விழைகிறீர்கள்.'''\n\nஇப்பக்கத்தைத் தொடர்ந்து தொகுப்பது சரியானதா என்று எண்ணிப்பார்க்கவும்.\n\nதங்களின் வசதிக்காக இப்பக்கத்தின் நீக்கல் மற்றும் நகர்த்தல் குறிப்புகள் கொடுக்கப்பட்டுள்ளது:", "moveddeleted-notice": "இது ஒரு நீக்கப்பட்ட பக்கமாகும்.\n\nதங்களின் வசதிக்காக இப்பக்கத்தின் நீக்கல் மற்றும் நகர்த்தல் குறிப்புகள் கொடுக்கப்பட்டுள்ளது.", "moveddeleted-notice-recent": "மன்னிக்கவும், இந்தப் பக்கம் அண்மையில் நீக்கப்பட்டுள்ளது (24 மணித்தியாலத்திற்குள்). இப்பக்கத்திற்கான நீக்கல் மற்றும் நகர்த்தல் பதிவு கீழே மேற்கோளுக்காக தரப்பட்டுள்ளது.", @@ -739,7 +741,7 @@ "postedit-confirmation-saved": "உங்களது தொகுப்பு சேமிக்கப்பட்டது.", "edit-already-exists": "புதிய பக்கமொன்றை உருவாக்க முடியாது.\nஇப்பக்கம் ஏற்கனவே உள்ளது.", "defaultmessagetext": "இயல்பிருப்பு தகவல் உரை", - "content-failed-to-parse": "உள்ளடக்கம் $2 வகை $1 க்காக பாகுபடுத்தல் தோல்வி: $3", + "content-failed-to-parse": "உள்ளடக்கம் $2 வகை $1 இற்காக பாகுபடுத்தல் தோல்வி: $3", "invalid-content-data": "செல்லாத உள்ளடக்கத் தரவு", "content-not-allowed-here": "\"$1\" உள்ளடக்கம் [[$2]] பக்கத்தில் அனுமதிக்கப்படவில்லை.", "editwarning-warning": "இந்த பக்கத்தை விட்டு செல்வது நீங்கள் ஏற்படுத்திய மாற்றங்களை இழக்க வழிவகுக்கும்.\nநீங்கள் புகுபதிந்திருந்தால், இந்த எச்சரிக்கையை உங்கள் விருப்பத்தேர்வில் உள்ள \"{{int:prefs-editing}}\" பகுதி மூலம் நீக்கலாம்.", @@ -1278,7 +1280,7 @@ "recentchanges-label-newpage": "இந்தத் தொகுப்பு ஒரு புதிய பக்கத்தை உருவாக்கியுள்ளது", "recentchanges-label-minor": "இது ஒரு சிறு தொகுப்பு", "recentchanges-label-bot": "இந்த தொகுப்பானது ஒரு தானியங்கியால் செய்யப்பட்டதாகும்", - "recentchanges-label-unpatrolled": "இந்த தொகுப்பு இன்னும் ரோந்திடப்படவில்லை", + "recentchanges-label-unpatrolled": "இத்தொகுப்பு இன்னும் சுற்றுக்காவலுக்கு உள்ளாகவில்லை", "recentchanges-label-plusminus": "இத்தனை பைட்டுகளுக்கு பக்கத்தின் அளவு மாற்றப்பட்டுள்ளது", "recentchanges-legend-heading": "குறியீட்டு விளக்கம்:", "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} ([[Special:NewPages|புதிய பக்கங்கள் பட்டியலையும்]] காணவும்)", @@ -1330,7 +1332,7 @@ "recentchangeslinked-page": "பக்கப் பெயர்:", "recentchangeslinked-to": "இதற்குப் பதிலாக இப்பக்கத்தினை இணைத்த பக்கங்களின் மாற்றங்களைக் காட்டவும்", "recentchanges-page-added-to-category": "[[:$1]] பகுப்பில் சேர்க்கப்பட்டது", - "recentchanges-page-added-to-category-bundled": "[[:$1]] மற்றும் {{PLURAL:$2|ஒரு பக்கம்|$2 பக்கங்கள்}} பகுப்பில் சேர்க்கப்பட்டது", + "recentchanges-page-added-to-category-bundled": "[[:$1]] மற்றும் [[Special:WhatLinksHere/$1|{{PLURAL:$2|ஒரு பக்கம்|$2 பக்கங்கள்}}]] பகுப்பில் சேர்க்கப்பட்டது", "recentchanges-page-removed-from-category": "[[:$1]] பகுப்பில் இருந்து நீக்கப்பட்டது", "recentchanges-page-removed-from-category-bundled": "[[:$1]] மற்றும் {{PLURAL:$2|ஒரு பக்கம்|$2 பக்கங்கள்}} பகுப்பிலிருந்து நீக்கப்பட்டது", "autochange-username": "மீடியாவிக்கி தானியக்க மாற்றம்", @@ -1777,8 +1779,6 @@ "categories-submit": "காட்டு", "categoriespagetext": "கீழே கொடுத்துள்ள பக்கங்கள் அல்லது ஊடகங்கள் இந்த {{PLURAL:$1|பகுப்பை|பகுப்புக்களை}} கொண்டுள்ளது.\n[[Special:UnusedCategories|உபயோகப்படுத்தப்படாத பகுப்புகள்]] இங்கே காண்பிக்கப்படவில்லை.\nஇத்துடன் [[Special:WantedCategories|தேவைப்படும் பகுப்புகளையும்]] பார்க்கவும்.", "categoriesfrom": "இதில் தொடங்கும் பகுப்புக்களைக் காட்டவும்:", - "special-categories-sort-count": "எண்ணிக்கையின் படி ஒழுங்குப் படுத்துக", - "special-categories-sort-abc": "அகரவரிசைப்படி ஒழுங்குப் படுத்துக", "deletedcontributions": "பயனரின் நீக்கப்பட்ட பங்களிப்புகள்", "deletedcontributions-title": "பயனரின நீக்கப்பட்ட பங்களிப்புக்கள்", "sp-deletedcontributions-contribs": "பங்களிப்புக்கள்", @@ -1983,7 +1983,7 @@ "protect-summary-cascade": "படிநிலை", "protect-expiring": "$1 (UTC) மணிக்கு காலாவதியாகிறது", "protect-expiring-local": "காலாவதியாகும்$1", - "protect-expiry-indefinite": "காலவரையறையற்ற", + "protect-expiry-indefinite": "காலவரையறையற்று", "protect-cascade": "இப்பக்கத்தில் இணைக்கப்பட்ட பக்கங்களைக் காப்புச் செய் (படிநிலைக் காப்பு)", "protect-cantedit": "இப்பக்கத்தின் காப்பு நிலையை நீங்கள் மாற்ற முடியாது. உங்களுக்கு காப்பு நிலையை தொகுப்பதற்கான அனுமதி கிடையாது.", "protect-othertime": "வேறு நேரம்:", @@ -2000,8 +2000,8 @@ "minimum-size": "குறைந்த அளவு", "maximum-size": "கூடிய அளவு:", "pagesize": "(பைட்டுகள்)", - "restriction-edit": "தொகு", - "restriction-move": "நகர்த்தவும்", + "restriction-edit": "தொகுத்தல்", + "restriction-move": "நகர்த்தல்", "restriction-create": "உருவாக்கு", "restriction-upload": "பதிவேற்றம்", "restriction-level-sysop": "முழுமையாக காக்கப்பட்டது", @@ -2056,7 +2056,7 @@ "contributions-title": "$1 இற்கான பயனர் பங்களிப்புகள்", "mycontris": "பங்களிப்புக்கள்", "anoncontribs": "பங்களிப்புக்கள்", - "contribsub2": "{{GENDER:$3|$1}} க்காக ($2)", + "contribsub2": "{{GENDER:$3|$1}} இற்காக ($2)", "contributions-userdoesnotexist": "பயனர் கணக்கு \"$1\" ஆனது பதியப்படவில்லை.", "nocontribs": "இந்த நிபந்தனையுடன் ஒத்துப்போகும் வகையில் மாற்றங்களெதுவும் காணப்படவில்லை.", "uctop": "(தற்போதைய)", @@ -2153,7 +2153,7 @@ "ipblocklist-submit": "தேடுக", "ipblocklist-localblock": "உள் தடுப்பு", "ipblocklist-otherblocks": "மற்ற {{PLURAL:$1|தடுப்பு|தடுப்புகள்}}", - "infiniteblock": "காலவரையறையற்ற", + "infiniteblock": "காலவரையறையற்று", "expiringblock": "$1-தேதியில், $2-மணிக்கு இது காலாவதியாகிறது", "anononlyblock": "அடையாளம் காட்டாத பயனர் மட்டும்", "noautoblockblock": "தானியக்கமான தடை முடக்கப்பட்டுள்ளது", @@ -2361,11 +2361,7 @@ "import-logentry-upload-detail": "$1 {{PLURAL:$1|திருத்தம்|திருத்தங்கள்}} இறக்குமதி செய்யப்பட்டன", "import-logentry-interwiki-detail": "$2 இலிருந்து {{PLURAL:$1|திருத்தம்|திருத்தங்கள்}} இறக்குமதி செய்யப்பட்டன", "javascripttest": "சாவாநிரல் சோதனை நடக்கின்றது", - "javascripttest-pagetext-noframework": "இந்த பக்கம் JavaScript பரிசோதனை ஓட்டத்திற்காக ஒதுக்கப்பட்டுள்ளது", - "javascripttest-pagetext-unknownframework": "அறியப்படாத சோதனை பணிச்சட்டம் \"$1\".", "javascripttest-pagetext-unknownaction": "அறியப்படாத செயல் \"$1\".", - "javascripttest-pagetext-frameworks": "தயவு செய்து பின்வரும் சோதனை பணிச் சட்டங்களில் இருந்து ஒன்றைத் தேர்ந்தெடு: $1", - "javascripttest-pagetext-skins": "சோதனைகளை நடத்த முகப்புறை ஒன்றைத் தேர்வுசெய்:", "javascripttest-qunit-intro": "mediawiki.org இல் [$1 சோதனை கோப்புகளைப்] பார்க்க.", "tooltip-pt-userpage": "{{GENDER:|உங்கள் பயனர்}} பக்கம்", "tooltip-pt-anonuserpage": "நீங்கள் தொகுத்துக் கொண்டிருக்கும் ஐ.பி. முகவரிக்கான பயனர் பக்கம்", @@ -2501,7 +2497,7 @@ "pageinfo-category-subcats": "துணைபகுப்புகளின் எண்ணிக்கை", "pageinfo-category-files": "கோப்புகளின் எண்ணிக்கை", "markaspatrolleddiff": "ரோந்திட்டதாக குறி", - "markaspatrolledtext": "இப்பக்கத்தை ரோந்திட்டதாகக் குறி", + "markaspatrolledtext": "இதனை சுற்றுக்காவல் செய்ததாகக் குறி", "markaspatrolledtext-file": "இக்கோப்பு பதிப்பினை ரோந்திட்டதாக குறி", "markedaspatrolled": "ரோந்திட்டதாக குறிக்கப்பட்டது", "markedaspatrolledtext": "தெரிவு செய்யப்பட்டத் திருத்தம் [[:$1]] பார்வையிட்டதாக குறிக்கப்பட்டுள்ளது.", @@ -2512,7 +2508,7 @@ "markedaspatrollederror-noautopatrol": "உமது மாற்றங்களை நீரே ரோந்திட்டதாக குறிக்க அனுமதி கிடையாது.", "markedaspatrollednotify": "$1 இல் மேற்கொள்ளப்பட்ட இம்மாற்றம் கண்காணிக்கப்பட்டதாய்க் குறிக்கப்பட்டது.", "markedaspatrollederrornotify": "சுற்றுக்காவல் தோல்வியடைந்ததாக குறிக்கப்பட்டது.", - "patrol-log-page": "ரோந்துப் பதிகை", + "patrol-log-page": "சுற்றுக்காவல் பதிகை", "patrol-log-header": "இது ரோந்து செய்யப்பட்ட பரிசீலனைகளுக்கான குறிப்பேடு.", "log-show-hide-patrol": "$1 ரோந்து குறிப்பேடு", "log-show-hide-tag": "$1 அடையாள பதிவு", @@ -2616,8 +2612,8 @@ "exif-colorspace": "நிற வெளி", "exif-componentsconfiguration": "ஒவ்வெரு அங்கத்தினதும் பொருள்", "exif-compressedbitsperpixel": "படிம சுறுக்க முறை", - "exif-pixelydimension": "பட அகலம்", - "exif-pixelxdimension": "பட உயரம்", + "exif-pixelxdimension": "பட அகலம்", + "exif-pixelydimension": "பட உயரம்", "exif-usercomment": "பயனர் கருத்துக்கள்", "exif-relatedsoundfile": "தொடர்புள்ள ஒலிக்கோப்பு", "exif-datetimeoriginal": "தரவு உருவாக்க நாள் நேரம்", @@ -3056,7 +3052,6 @@ "version-libraries-description": "விளக்கம்", "version-libraries-authors": "ஆசிரியர்கள்", "redirect": "கோப்பு, பயனர், பக்கம் அல்லது திருத்த ID ஆன வழிமாற்று", - "redirect-legend": "கோப்பு அல்லது பக்கத்துக்கு வழிமாற்று", "redirect-submit": "செல்க", "redirect-lookup": "கவனிக்கவும்:", "redirect-value": "மதிப்பு:", @@ -3068,7 +3063,6 @@ "redirect-not-exists": "மதிப்பு காணப்பெறவில்லை", "fileduplicatesearch": "நகல் கோப்புகளைத் தேடுக", "fileduplicatesearch-summary": "நகல் கோப்புகளை ஹாஷ் மதிப்புகள் அடிப்படையில் தேடு.", - "fileduplicatesearch-legend": "நகல்களைத் தேடுக", "fileduplicatesearch-filename": "கோப்பின் பெயர்:", "fileduplicatesearch-submit": "தேடுக", "fileduplicatesearch-info": "$1 × $2 பிக்சல்
கோப்பின் அளவு: $3
MIME வகை: $4", @@ -3223,12 +3217,12 @@ "logentry-import-interwiki": "$1 $3-ஐ வேறு விக்கியிலிருந்து {{GENDER:$2|இறக்குமதி செய்தார்}}", "logentry-import-interwiki-details": "$1 $3-ஐ $5-இலிருந்து {{GENDER:$2|இறக்குமதி செய்தார்}} ($4 {{PLURAL:$4|மாற்றம்|மாற்றங்கள்}})", "logentry-merge-merge": "$1 $3-இனை $4-இனுள் {{GENDER:$2|இணைத்தார்}}", - "logentry-move-move": "$1 பக்கம் $3-ஐ $4க்கு {{GENDER:$2|நகர்த்தினார்}}", + "logentry-move-move": "$1 பக்கம் $3 என்பதை $4 என்பதற்கு {{GENDER:$2|நகர்த்தினார்}}", "logentry-move-move-noredirect": "$1, $3 பக்கத்தை $4 என்ற தலைப்புக்கு வழிமாற்று இன்றி நகர்த்தியுள்ளார்", "logentry-move-move_redir": "$1 பக்கம் $3 ஐ $4 க்கு முன்னிருந்த வழிமாற்றின் மேலாக நகர்த்தியுள்ளார்", "logentry-move-move_redir-noredirect": "$1 பக்கம் $3 ஐ $4 க்கு முன்னிருந்த வழிமாற்றின் மேலாக, இன்னொரு வழிமாற்றின்றி நகர்த்தியுள்ளார்", "logentry-patrol-patrol": "பக்கம் $3 இன் திருத்தம் $4 ஐ $1 பார்வையிட்டுக் குறிக்கப்பட்டது. .", - "logentry-patrol-patrol-auto": "தானாக பக்கம் $3-ன் பரிசீலனை $4 ஆனது ரோந்து செய்யப்பட்டது என $1 குறியிடப்பட்டது.", + "logentry-patrol-patrol-auto": "தானாக பக்கம் $3 இன் பரிசீலனை $4 என்பது சுற்றுக்காவல் செய்யப்பட்டது என $1 பயனரால் குறியிடப்பட்டது.", "logentry-newusers-newusers": "பயனர் கணக்கு $1 {{GENDER:$2|உருவாக்கப்பட்டது}}", "logentry-newusers-create": "$1 புதிய பயனர் கணக்கு உருவாக்கப்பட்டுள்ளது.", "logentry-newusers-create2": "$3 பயனர் கணக்கினை $1 {{GENDER:$2|உருவாக்கினார்}}", @@ -3236,8 +3230,8 @@ "logentry-newusers-autocreate": "பயனர் கணக்கு $1 தானாக உருவாக்கப்பட்டது", "logentry-protect-move_prot": "$1 காப்பு அமைப்பை $4-இலிருந்து $3-இற்கு {{GENDER:$2|நகர்த்தினார்}}", "logentry-protect-unprotect": "$1 $3-இலிருந்து காப்பை {{GENDER:$2|நீக்கினார்}}", - "logentry-protect-protect": "$1 $3-இனை $4-இற்கு {{GENDER:$2|காப்பச் செய்தார்}}", - "logentry-protect-protect-cascade": "$1 $3-இனை $4-இற்கு {{GENDER:$2|காப்பச் செய்தார்}} [விழுத்தொடர்]", + "logentry-protect-protect": "$1 $3 என்பதனை $4 என்பதற்கு {{GENDER:$2|காப்பச் செய்தார்}}", + "logentry-protect-protect-cascade": "$1 $3 என்பதனை $4 என்பதற்கு {{GENDER:$2|காப்பச் செய்தார்}} [விழுத்தொடர்]", "logentry-protect-modify": "$1 $3-க்கான காப்பு நிலையை $4 நேரத்திற்கு {{GENDER:$2|மாற்றினார்}}", "logentry-protect-modify-cascade": "$1 $3-க்கான காப்பு நிலையை $4 நேரத்திற்கு {{GENDER:$2|மாற்றினார்}} [விழுத்தொடர்]", "logentry-rights-rights": "$1 $3-இற்கான குழு அங்கத்துவத்தை $4-இலிருந்து $5-இற்கு {{GENDER:$2|மாற்றினார்}}", @@ -3408,5 +3402,6 @@ "sessionprovider-generic": "$1 பகுதி", "sessionprovider-mediawiki-session-cookiesessionprovider": "குக்கீயை அடிபடையாக்கக் கொண்ட பகுதிகள்", "sessionprovider-nocookies": "குக்கீசு செயலற்று இருக்கலாம். உங்களது குக்கீசு செயலில் உள்ளது என உறுதிப்படுத்திவிட்டு மீண்டும் முயல்க.", - "randomrootpage": "தற்போக்கு வேர்ப் பக்கம்" + "randomrootpage": "தற்போக்கு வேர்ப் பக்கம்", + "log-action-filter-protect": "பாதுகாப்பு வகை" } diff --git a/languages/i18n/te.json b/languages/i18n/te.json index 5c3ad1c271..4f5de01468 100644 --- a/languages/i18n/te.json +++ b/languages/i18n/te.json @@ -1193,6 +1193,7 @@ "rcshowhidemine": "నా మార్పులను $1", "rcshowhidemine-show": "చూపించు", "rcshowhidemine-hide": "దాచు", + "rcshowhidecategorization": "పేజి వర్గీకరణ $1", "rcshowhidecategorization-show": "చూపించు", "rcshowhidecategorization-hide": "దాచు", "rclinks": "గత $2 రోజుల లోని చివరి $1 మార్పులను చూపించు
$3", @@ -1653,8 +1654,6 @@ "categories-submit": "చూపించు", "categoriespagetext": "ఈ క్రింది {{PLURAL:$1|వర్గం పేజీలను లేదా మాధ్యమాలను కలిగివుంది|వర్గాలు పేజీలను లేదా మాధ్యమాలను కలిగివున్నాయి}}.\n[[Special:UnusedCategories|వాడుకలో లేని వర్గాలని]] ఇక్కడ చూపించట్లేదు.\n[[Special:WantedCategories|కోరుతున్న వర్గాలను]] కూడా చూడండి.", "categoriesfrom": "ఇక్కడనుండి మొదలుకొని వర్గాలు చూపించు:", - "special-categories-sort-count": "సంఖ్యల ప్రకారం క్రమపరచు", - "special-categories-sort-abc": "అకారాది క్రమంలో అమర్చు", "deletedcontributions": "తొలగించబడిన వాడుకరి రచనలు", "deletedcontributions-title": "తొలగించబడిన వాడుకరి రచనలు", "sp-deletedcontributions-contribs": "మార్పుచేర్పులు", @@ -1757,9 +1756,11 @@ "watchlist-submit": "చూపించు", "wlshowtime": "చూపించాల్సిన కాలం:", "wlshowhideminor": "చిన్న మార్పులు", + "wlshowhidebots": "బాట్లు", "wlshowhideliu": "నమోదైన వాడుకరులు", "wlshowhideanons": "అజ్ఞాత వాడుకరులు", "wlshowhidemine": "నా మార్పులు", + "wlshowhidecategorization": "పేజీ వర్గీకరణ", "watchlist-options": "వీక్షణ జాబితా ఎంపికలు", "watching": "గమనిస్తున్నారు...", "unwatching": "గమనించడం లేదు...", @@ -2233,11 +2234,7 @@ "import-logentry-upload-detail": "$1 {{PLURAL:$1|కూర్పు|కూర్పులు}}", "import-logentry-interwiki-detail": "$2 నుండి {{PLURAL:$1|ఒక కూర్పు|$1 కూర్పులు}}", "javascripttest": "జావాస్క్రిప్ట్ పరీక్ష", - "javascripttest-pagetext-noframework": "ఈ పేజీ JavaScript పరీక్షల కోసం ఉద్దేశించబడింది.", - "javascripttest-pagetext-unknownframework": "తెలియని పరీక్షా ఫ్రేమ్‍వర్కు \"$1\".", "javascripttest-pagetext-unknownaction": "తెలియని చర్య \"$1\".", - "javascripttest-pagetext-frameworks": "కింది పరీక్షా ఫ్రేమ్‍వర్కులలో ఒకదాన్ని ఎంచుకోండి: $1", - "javascripttest-pagetext-skins": "పరీక్షలు నడిపేందుకు ఓ రూపును ఎంచుకోండి:", "javascripttest-qunit-intro": "mediawiki.org లోని [$1 పరీక్షా డాక్యుమెంటేషన్] చూడండి.", "tooltip-pt-userpage": "మీ వాడుకరి పేజీ", "tooltip-pt-anonuserpage": "మీ ఐపీ చిరునామాకి సంబంధించిన వాడుకరి పేజీ", @@ -2485,8 +2482,8 @@ "exif-colorspace": "వర్ణస్థలం", "exif-componentsconfiguration": "ప్రతీ అంగం యొక్క అర్థం", "exif-compressedbitsperpixel": "బొమ్మ కుదింపు పద్ధతి", - "exif-pixelydimension": "బొమ్మ వెడల్పు", - "exif-pixelxdimension": "బొమ్మ ఎత్తు", + "exif-pixelxdimension": "బొమ్మ వెడల్పు", + "exif-pixelydimension": "బొమ్మ ఎత్తు", "exif-usercomment": "వాడుకరి వ్యాఖ్యలు", "exif-relatedsoundfile": "సంబంధిత శబ్ద ఫైలు", "exif-datetimeoriginal": "డేటా తయారైన తేదీ, సమయం", @@ -2911,7 +2908,6 @@ "version-libraries-description": "వివరణ", "version-libraries-authors": "రచయితలు", "redirect": "ఫైలు, వాడుకరి, పేజీ లేదా కూర్పు ఐడీ ప్రకారం దారిమార్పు", - "redirect-legend": "ఫైలు లేదా పేజీకి దారిమార్పు", "redirect-submit": "వెళ్ళు", "redirect-lookup": "చూడు:", "redirect-value": "విలువ:", @@ -2922,7 +2918,6 @@ "redirect-not-exists": "విలువ కనబడలేదు", "fileduplicatesearch": "ఫైళ్ల మారుప్రతుల కోసం వెతుకు", "fileduplicatesearch-summary": "మారుప్రతుల కోసం ఫైళ్ల హాష్ విలువ ఆధారంగా వెతుకు.", - "fileduplicatesearch-legend": "మారుప్రతి కొరకు వెతుకు", "fileduplicatesearch-filename": "ఫైలు పేరు:", "fileduplicatesearch-submit": "వెతుకు", "fileduplicatesearch-info": "$1 × $2 పిక్సెళ్లు
దస్త్రపు పరిమాణం: $3
MIME రకం: $4", diff --git a/languages/i18n/tg-cyrl.json b/languages/i18n/tg-cyrl.json index 7a0fc8178d..70b9b62499 100644 --- a/languages/i18n/tg-cyrl.json +++ b/languages/i18n/tg-cyrl.json @@ -1210,8 +1210,6 @@ "categories": "Гурӯҳҳо", "categoriespagetext": "Гурӯҳҳои зерин дар вики вуҷуд доранд.\n[[Special:UnusedCategories|Unused categories]] are not shown here.\nAlso see [[Special:WantedCategories|wanted categories]].", "categoriesfrom": "Намоиши гурӯҳҳо бо шурӯъ аз:", - "special-categories-sort-count": "муратаб кардан бар асоси теъдод", - "special-categories-sort-abc": "муратаб кардани алифбоӣ", "deletedcontributions": "Ҳиссагузориҳои ҳазфшудаи корбар", "deletedcontributions-title": "Ҳиссагузориҳои ҳазфшудаи корбар", "linksearch": "Ҷустуҷӯи пайвандҳои беруна", @@ -1771,8 +1769,8 @@ "exif-colorspace": "Фазои ранг", "exif-componentsconfiguration": "Маънии ҳар як аз қисмҳо", "exif-compressedbitsperpixel": "Ҳолати фишурдасозии акс", - "exif-pixelydimension": "Арзи акс", - "exif-pixelxdimension": "Тӯли акс", + "exif-pixelxdimension": "Арзи акс", + "exif-pixelydimension": "Тӯли акс", "exif-usercomment": "Тавзеҳоти корбар", "exif-relatedsoundfile": "Парвандаи сабти алоқаманд", "exif-datetimeoriginal": "Таърих ва вақти тавлиди додаҳо", @@ -2052,7 +2050,6 @@ "version-software-version": "Нусха", "fileduplicatesearch": "Ҷустуҷӯ барои парвандаҳои такрорӣ", "fileduplicatesearch-summary": "Ҷустуҷӯ барои парвандаҳои такрорӣ бар асоси миқдори дар ҳам шудаи онҳо сурат мегирад.", - "fileduplicatesearch-legend": "Ҷустуҷӯи мавориди такрорӣ", "fileduplicatesearch-filename": "Номи парванда:", "fileduplicatesearch-submit": "Ҷустуҷӯ", "fileduplicatesearch-info": "$1 × $2 пиксел
Андозаи парванда: $3
Навъи MIME: $4", diff --git a/languages/i18n/tg-latn.json b/languages/i18n/tg-latn.json index f6e9a95f04..981c7ca3ab 100644 --- a/languages/i18n/tg-latn.json +++ b/languages/i18n/tg-latn.json @@ -909,8 +909,6 @@ "allpages-bad-ns": "{{SITENAME}} doroi fazoinom \"$1\" nest.", "categories": "Gurūhho", "categoriesfrom": "Namoişi gurūhho bo şurū' az:", - "special-categories-sort-count": "muratab kardan bar asosi te'dod", - "special-categories-sort-abc": "muratab kardani alifboī", "deletedcontributions": "Hissaguzorihoi hazfşudai korbar", "deletedcontributions-title": "Hissaguzorihoi hazfşudai korbar", "linksearch": "Pajvandhoi beruna", @@ -1418,8 +1416,8 @@ "exif-colorspace": "Fazoi rang", "exif-componentsconfiguration": "Ma'niji har jak az qismho", "exif-compressedbitsperpixel": "Holati fişurdasoziji aks", - "exif-pixelydimension": "Arzi aksi mū'tabar", - "exif-pixelxdimension": "Tūli aksi mū'tabar", + "exif-pixelxdimension": "Arzi aksi mū'tabar", + "exif-pixelydimension": "Tūli aksi mū'tabar", "exif-usercomment": "Tavzehoti korbar", "exif-relatedsoundfile": "Parvandai sabti aloqamand", "exif-datetimeoriginal": "Ta'rix va vaqti tavlidi dodaho", @@ -1684,7 +1682,6 @@ "version-software-version": "Nusxa", "fileduplicatesearch": "Çustuçū baroi parvandahoi takrorī", "fileduplicatesearch-summary": "Çustuçū baroi parvandahoi takrorī bar asosi miqdori dar ham şudai onho surat megirad.", - "fileduplicatesearch-legend": "Çustuçūi mavoridi takrorī", "fileduplicatesearch-filename": "Nomi parvanda:", "fileduplicatesearch-submit": "Çustuçū", "fileduplicatesearch-info": "$1 × $2 piksel
Andozai parvanda: $3
Nav'i MIME: $4", diff --git a/languages/i18n/th.json b/languages/i18n/th.json index 453be28df6..c81200a8b8 100644 --- a/languages/i18n/th.json +++ b/languages/i18n/th.json @@ -1634,8 +1634,6 @@ "categories-submit": "แสดง", "categoriespagetext": "{{PLURAL:$1|หมวดหมู่นี้|หมวดหมู่ต่อไปนี้}}มีหน้าหรือสื่อต่าง ๆ\n[[Special:UnusedCategories|หมวดหมู่ที่ไม่ได้ใช้]]จะไม่แสดงในที่นี้\nดูเพิ่มที่ [[Special:WantedCategories|หมวดหมู่ที่ต้องการ]]", "categoriesfrom": "แสดงหมวดหมู่เริ่มจาก:", - "special-categories-sort-count": "เรียงตามจำนวน", - "special-categories-sort-abc": "เรียงตามตัวอักษร", "deletedcontributions": "เรื่องที่เขียนของผู้ใช้ที่ถูกลบ", "deletedcontributions-title": "เรื่องที่เขียนของผู้ใช้ที่ถูกลบ", "sp-deletedcontributions-contribs": "เรื่องที่เขียน", @@ -2213,8 +2211,6 @@ "import-logentry-upload-detail": "นำเข้า $1 {{PLURAL:$1|รุ่นการแก้ไข|รุ่นการแก้ไข}}", "import-logentry-interwiki-detail": "นำเข้า $1 {{PLURAL:$1|รุ่นการแก้ไข|รุ่นการแก้ไข}}จาก $2", "javascripttest": "การทดสอบจาวาสคริปต์", - "javascripttest-pagetext-noframework": "หน้านี้สงวนไว้สำหรับดำเนินงานการทดสอบจาวาสคริปต์", - "javascripttest-pagetext-skins": "เลือกสกินที่จะดำเนินงานการทดสอบ:", "javascripttest-qunit-intro": "ดู[$1 เอกสารกำกับการทดสอบ]บน mediawiki.org", "tooltip-pt-userpage": "หน้าผู้ใช้ของคุณ", "tooltip-pt-anonuserpage": "หน้าผู้ใช้ของเลขที่อยู่ไอพีที่คุณกำลังใช้แก้ไข", @@ -2479,8 +2475,8 @@ "exif-colorspace": "สเปซสี", "exif-componentsconfiguration": "ความหมายของแต่ละคอมโพเนนต์", "exif-compressedbitsperpixel": "โหมดการบีบอัดภาพ", - "exif-pixelydimension": "ความกว้างของภาพ", - "exif-pixelxdimension": "ความสูงของภาพ", + "exif-pixelxdimension": "ความกว้างของภาพ", + "exif-pixelydimension": "ความสูงของภาพ", "exif-usercomment": "ความเห็นผู้ใช้", "exif-relatedsoundfile": "ไฟล์เสียงที่เกี่ยวข้อง", "exif-datetimeoriginal": "วันที่และเวลาการก่อกำเนิดข้อมูล", @@ -2822,7 +2818,6 @@ "version-entrypoints-articlepath": "[https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgArticlePath เส้นทางบทความ]", "version-entrypoints-scriptpath": "[https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgScriptPath เส้นทางสคริปต์]", "redirect": "การเปลี่ยนทางตามชื่อไฟล์ รหัสประจำผู้ใช้ หน้า รุ่นหรือปูม", - "redirect-legend": "การเปลี่ยนทางไปยังไฟล์หรือหน้า", "redirect-summary": "หน้าพิเศษนี้เปลี่ยนทางไปยังไฟล์ (ระบุเป็นชื่อไฟล์) หน้า (ระบุเป็นรหัสรุ่นหรือรหัสหน้า) หรือหน้าผู้ใช้ (ระบุเป็นรหัสผู้ใช้ตัวเลข) การใช้งาน: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/page/64308]], [[{{#Special:Redirect}}/revision/328429]] หรือ [[{{#Special:Redirect}}/user/101]]", "redirect-submit": "ไป", "redirect-lookup": "ค้นดู:", @@ -2834,7 +2829,6 @@ "redirect-not-exists": "ไม่พบค่า", "fileduplicatesearch": "ค้นหาไฟล์ซ้ำซ้อน", "fileduplicatesearch-summary": "ค้นหาไฟล์ซ้ำกันตามค่าแฮช", - "fileduplicatesearch-legend": "ค้นหาไฟล์ที่ซ้ำกัน", "fileduplicatesearch-filename": "ชื่อไฟล์:", "fileduplicatesearch-submit": "ค้นหา", "fileduplicatesearch-info": "$1 × $2 พิกเซล
ขนาดไฟล์: $3
ชนิดของไมม์: $4", diff --git a/languages/i18n/tk.json b/languages/i18n/tk.json index 7e088736bb..590dbe2670 100644 --- a/languages/i18n/tk.json +++ b/languages/i18n/tk.json @@ -1223,8 +1223,6 @@ "categories": "Kategoriýalar", "categoriespagetext": "Aşakdaky {{PLURAL:$1|kategoriýada|kategoriýalarda}} sahypa ýa-da media faýllary bardyr.\n[[Special:UnusedCategories|Ulanylmaýan kategoriýalar]] şu ýerde görkezilmeýär.\nŞeýle-de [[Special:WantedCategories|Talap edilýän kategoriýalara]] serediň.", "categoriesfrom": "Şunuň bilen başlaýan kategoriýalary görkez:", - "special-categories-sort-count": "mukdar boýunça tertiple", - "special-categories-sort-abc": "elipbiý boýunça tertiple", "deletedcontributions": "Öçürilen ulanyjy goşantlary", "deletedcontributions-title": "Öçürilen ulanyjy goşantlary", "sp-deletedcontributions-contribs": "goşantlar", @@ -1857,8 +1855,8 @@ "exif-colorspace": "Reňk giňişligi", "exif-componentsconfiguration": "Her komponentiň manysy", "exif-compressedbitsperpixel": "Surat gysyş režimi", - "exif-pixelydimension": "Dogry surat ini", - "exif-pixelxdimension": "Dogry surat beýikligi", + "exif-pixelxdimension": "Dogry surat ini", + "exif-pixelydimension": "Dogry surat beýikligi", "exif-usercomment": "Ulanyjy teswirleri", "exif-relatedsoundfile": "Degişli audio faýl", "exif-datetimeoriginal": "Asyl sene we wagt", @@ -2136,7 +2134,6 @@ "version-software-version": "Wersiýa", "fileduplicatesearch": "Dublikat faýllaryň gözlegi", "fileduplicatesearch-summary": "Heş kodlary boýunça meňzeş faýllary gözle.", - "fileduplicatesearch-legend": "Dublikatyny gözle", "fileduplicatesearch-filename": "Faýlyň ady:", "fileduplicatesearch-submit": "Gözle", "fileduplicatesearch-info": "$1 × $2 piksel
Faýlyň ölçegi: $3
MIME tipi: $4", diff --git a/languages/i18n/tl.json b/languages/i18n/tl.json index 44ff623d7a..ca3e47b618 100644 --- a/languages/i18n/tl.json +++ b/languages/i18n/tl.json @@ -154,7 +154,7 @@ "categoryviewer-pagedlinks": "($1) ($2)", "about": "Patungkol", "article": "Pahina ng nilalaman", - "newwindow": "(magbubukas sa bagong bintana)", + "newwindow": "(magbubukas sa bagong window)", "cancel": "Kanselahin", "moredotdotdot": "Damihan pa...", "morenotlisted": "Hindi kumpleto ang talang ito.", @@ -181,12 +181,12 @@ "search": "Paghahanap", "searchbutton": "Maghanap", "go": "Gawin", - "searcharticle": "Gawin", + "searcharticle": "Pumunta", "history": "Kasaysayan ng pahina", "history_short": "Kasaysayan", "updatedmarker": "isinapanahon mula noong huli kong pagdalaw", "printableversion": "Bersiyong maililimbag", - "permalink": "Palagiang kawing", + "permalink": "Palagiang link", "print": "Ilimbag", "view": "Tingnan", "view-foreign": "Tingnan sa $1", @@ -224,7 +224,7 @@ "categorypage": "Tingnan ang pahina ng kategorya", "viewtalkpage": "Tingnan ang usapan", "otherlanguages": "Sa ibang wika", - "redirectedfrom": "(Ikinarga mula sa $1)", + "redirectedfrom": "(Nakaturo mula sa $1)", "redirectpagesub": "Pahina ng pagkarga", "redirectto": "Papuntahin sa:", "lastmodifiedat": "Huling binago ang pahinang ito noong $2, noong $1.", @@ -307,7 +307,7 @@ "nstab-media": "Pahina ng midya", "nstab-special": "Natatanging pahina", "nstab-project": "Pahina ng proyekto", - "nstab-image": "Talaksan", + "nstab-image": "File", "nstab-mediawiki": "Mensahe", "nstab-template": "Padron", "nstab-help": "Pahina ng tulong", @@ -544,16 +544,16 @@ "italic_tip": "Nakahilig na panitik", "link_sample": "Pamagat ng kawing", "link_tip": "Panloob na kawing", - "extlink_sample": "http://www.example.com na kawing ng pamagat", - "extlink_tip": "Panlabas na kawing (tandaan ang unlaping http://)", - "headline_sample": "Paulong teksto", - "headline_tip": "Paulong antas 2", + "extlink_sample": "http://www.example.com na link ng pamagat", + "extlink_tip": "Panlabas na link (tandaan ang unlaping http://)", + "headline_sample": "Teksto ng ulong pambungad", + "headline_tip": "Antas 2 na ulong pambungad", "nowiki_sample": "Isingit ang hindi nakapormat na teksto dito", "nowiki_tip": "Balewalain ang pormat na pangwiki", "image_sample": "Halimbawa.jpg", - "image_tip": "Nakabaong talaksan", + "image_tip": "File na naka-embed", "media_sample": "Halimbawa.ogg", - "media_tip": "Kawing sa talaksan", + "media_tip": "Link ng file", "sig_tip": "Lagda mo na may tatak ng oras", "hr_tip": "Pahalagang na guhit (gamitin nang madalang)", "summary": "Buod:", @@ -562,9 +562,9 @@ "watchthis": "Bantayan ang pahinang ito", "savearticle": "Itala ang pahina", "preview": "Paunang tingin", - "showpreview": "Ipakita ang paunang tingin", + "showpreview": "Paunang tingin", "showdiff": "Ipakita ang mga pagbabago", - "anoneditwarning": "'''Babala:''' Hindi ka nakalagda.\nMatatala ang iyong direksiyong IP sa kasaysayan ng pagbabago ng pahinang ito.", + "anoneditwarning": "Babala: Hindi ka nakalagda.\nMakikita ng publiko ang iyong IP address kung gagawa ka ng mga pagbabago. Kung [$1 mag-login] ka o [$2 lumikha ng account], maiuugnay ang iyong mga pagbabago sa iyong account, kasama ang ibang pakinabang.", "anonpreviewwarning": "''Hindi ka nakalagda. Itatala sa inyong pagtatala ang inyong direksiyong IP sa kasaysayan ng pagbabago ng pahinang ito.''", "missingsummary": "'''Paalala:''' Hindi ka nagbigay ng buod ng pagbabago.\nKapag pinindot mo uli ang Sagip, masasagip ang pagbabago mo na wala nito.", "missingcommenttext": "Magbigay ng isang kumento/puna sa ibaba.", @@ -896,7 +896,7 @@ "prefs-searchoptions": "Paghahanap", "prefs-namespaces": "Mga espasyo ng pangalan", "default": "Likas na pagtatakda", - "prefs-files": "Mga talaksan", + "prefs-files": "Mga file", "prefs-custom-css": "Pasadyang CSS", "prefs-custom-js": "Pasadyang JS", "prefs-common-css-js": "Naibahaging CSS/JS para sa lahat ng pabalat:", @@ -988,9 +988,9 @@ "right-move": "Ilipat ang mga pahina", "right-move-subpages": "Ilipat ang mga pahina kasama ang pahinang nasa ilalim nito", "right-move-rootuserpages": "Ilipat ang pinagugatang mga pahina ng tagagamit", - "right-movefile": "Ilipat ang mga talaksan", + "right-movefile": "Ilipat ang mga file", "right-suppressredirect": "Hindi nilikha sa isang pagkarga mula sa lumang pangalan kapag naglipat ng isang pahina", - "right-upload": "Magkarga ng mga talaksan", + "right-upload": "Mag-upload ng mga file", "right-reupload": "Patungan ang mayroon nang mga talaksan", "right-reupload-own": "Patungan ang talaksang kinarga ng sarili", "right-reupload-shared": "Patungan ang mga talaksan sa binabahaging repositoryo midya sa lokal", @@ -1087,8 +1087,9 @@ "recentchanges-label-minor": "Isa itong munting pagbabago", "recentchanges-label-bot": "Gawa ng isang bot ang pagbabagong ito", "recentchanges-label-unpatrolled": "Hindi pa napapatrulyahan ang pagbabagong ito", + "recentchanges-label-plusminus": "Nagbago ang laki ng pahina sa ganitong bilang ng mga byte", "recentchanges-legend-heading": "Gabay:", - "recentchanges-legend-newpage": "$1 - bagong pahina", + "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (tingnan din [[Special:NewPages|ang talaan ng mga bagong pahina]])", "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", @@ -1131,11 +1132,11 @@ "recentchangeslinked-feed": "Kaugnay na mga pagbabago", "recentchangeslinked-toolbox": "Kaugnay na mga pagbabago", "recentchangeslinked-title": "Mga pagbabagong may kaugnayan sa \"$1\"", - "recentchangeslinked-summary": "Nililista ng natatanging pahina na ito ang huling mga pagbabago na nakaugnay. Naka '''matapang na teksto''' ang iyong mga binabantayan.", + "recentchangeslinked-summary": "Ito ang tala ng mga pagbabagong ginawa kamakailan sa mga pahinang naka-link mula sa isang tinukoy na pahina (o sa mga kasapi ng isang tinukoy na kategorya). Makapal na teksto ang mga pahinang [[Special:Watchlist|iyong mga binabantayan]].", "recentchangeslinked-page": "Pangalan ng pahina:", "recentchangeslinked-to": "Ipakita ang mga pagbabago sa mga pahinang nakaugnay sa isang binigay na pahina sa halip", - "upload": "Magkarga ng talaksan", - "uploadbtn": "Magkarga ng talaksan", + "upload": "Mag-upload ng file", + "uploadbtn": "Mag-upload ng file", "reuploaddesc": "Kanselahin/Iurong ang pagkarga at magbalik sa pormularyo ng pagkakarga", "upload-tryagain": "Ipasa ang binagong paglalarawan ng talaksan", "uploadnologin": "Hindi nakalagda", @@ -1150,7 +1151,7 @@ "upload-prohibited": "Ipinagbabawal na mga uri ng talaksan: $1.", "uploadlogpage": "Tala ng pagkarga", "uploadlogpagetext": "Nasa ibaba ang tala ng pinakahuling mga karga ng talaksan.", - "filename": "Pangalan ng talaksan", + "filename": "Pangalan ng file", "filedesc": "Buod", "fileuploadsummary": "Buod:", "filereuploadsummary": "Mga pagbabago sa talaksan:", @@ -1202,12 +1203,12 @@ "uploadscripted": "Naglalaman ang talaksan na ito ng HTML o kodigong script na maaaring mali ang pagkaintindi ng isang web browser.", "uploadvirus": "Naglalaman ng virus ang talaksan! Mga detalye: $1", "uploadjava": "Ang talaksan ay isang talaksang ZIP na naglalaman ng isang .klase ng talaksan. na Java. Hindi pinapayagan ang pagkakarga ng mga talaksang Java, dahil nakasasanhi sila ng mga paglilimita ng kaligtasan na kailangang lampasan.", - "upload-source": "Batayang talaksan", - "sourcefilename": "Pangalan ng panggagalingang talaksan:", + "upload-source": "Batayang file", + "sourcefilename": "Pangalan ng panggagalingang file:", "sourceurl": "Batayang URL:", - "destfilename": "Pangalan ng patutunguhang talaksan:", + "destfilename": "Pangalan ng patutunguhang file:", "upload-maxfilesize": "Pinakamataas na sukat ng talaksan: $1", - "upload-description": "Paglalarawan ng talaksan", + "upload-description": "Paglalarawan ng file", "upload-options": "Ikargang pataas ang mga pagpipilian", "watchthisupload": "Bantayan ang talaksang ito", "filewasdeleted": "Isang talaksan na may ganitong pangalan ay naikarga dati at nabura. Kailangan mong tingnan ang $1 bago magpatuloy sa pagkarga nito muli.", @@ -1300,8 +1301,8 @@ "upload_source_file": " (isang talaksan sa iyong kompyuter)", "listfiles-summary": "Ipinapakita ng natatanging pahinang ito ang lahat ng naikargang mga talaksan.\nKapag sinala ng tagagamit, tanging mga talaksan lang kung saan nagkarga ang tagagamit na iyan ng pinaka kamakailang bersiyon ng talaksan ang ipinapakita.", "listfiles_search_for": "Hanapin ang pangalan ng midya:", - "imgfile": "talaksan", - "listfiles": "Talaan ng talaksan", + "imgfile": "file", + "listfiles": "Talaan ng file", "listfiles_thumb": "Kagyat", "listfiles_date": "Petsa", "listfiles_name": "Pangalan", @@ -1311,22 +1312,22 @@ "listfiles_count": "Mga bersiyon", "listfiles-latestversion-yes": "Oo", "listfiles-latestversion-no": "Hindi", - "file-anchor-link": "Talaksan", - "filehist": "Kasaysayan ng talaksan", + "file-anchor-link": "File", + "filehist": "Kasaysayan ng file", "filehist-help": "Pindutin ang isang petsa/oras para makita ang anyo ng talaksan noong panahong iyon.", "filehist-deleteall": "burahin lahat", "filehist-deleteone": "burahin", "filehist-revert": "ibalik", "filehist-current": "kasalukuyan", "filehist-datetime": "Petsa/Oras", - "filehist-thumb": "Kagyat (''thumbnail'')", + "filehist-thumb": "Thumbnail", "filehist-thumbtext": "Kagyat (''thumbnail'') para sa bersyon mula noong $1", "filehist-nothumb": "Walang kagyat (''thumbnail'')", "filehist-user": "Tagagamit", "filehist-dimensions": "Mga sukat", "filehist-filesize": "Sukat ng talaksan", "filehist-comment": "Komento", - "imagelinks": "Paggamit ng talaksan", + "imagelinks": "Paggamit ng file", "linkstoimage": "Nakakawing ang sumusunod na {{PLURAL:$1|pahina|$1 pahina}} sa talaksang ito:", "linkstoimage-more": "Mahigit sa $1 {{PLURAL:$1|pahina|mga pahina}} ang nakakawing sa talaksang ito.\nIpinapakita sa sumusunod na talaan ang {{PLURAL:$1|unang pahina lamang|unang $1 mga pahina lamang}} na nakakawing sa talaksang ito.\nMayroong makukuhang [[Special:WhatLinksHere/$2|buong talaan]].", "nolinkstoimage": "Walang pahinang nakakawing sa talaksang ito.", @@ -1369,7 +1370,7 @@ "filedelete-reason-dropdown": "*Karaniwang mga dahilan ng pagbubura\n** Paglabag sa karapatang-ari\n** Nagkadalawang talaksan", "filedelete-edit-reasonlist": "Baguhin ang mga dahilan ng pagbura", "filedelete-maintenance": "Pansamantalang hindi pinagana ang pagbura at pagpapnumbalik ng mga talaksan habang nagpapanatili ng kaayusan.", - "filedelete-maintenance-title": "Hindi mabura ang talaksan", + "filedelete-maintenance-title": "Hindi mabura ang file", "mimesearch": "Maghanap ng MIME", "mimesearch-summary": "Pinapagana ng pahinang ito ang pagsasala ng mga talaksan para sa kanyang uri ng MIME. Pagpapasok: uringnilalaman/mababangkabahaginguri, hal. image/jpeg.", "mimetype": "Uri ng MIME:", @@ -1432,7 +1433,7 @@ "wantedcategories": "Kinakailangang mga kategorya", "wantedpages": "Kinakailangang mga pahina", "wantedpages-badtitle": "Hindi tanggap na pamagat sa loob ng pangkat ng kinalabasan: $1", - "wantedfiles": "Ninanais na mga talaksan", + "wantedfiles": "Ninanais na mga file", "wantedfiletext-cat": "Ang sumusunod na mga talaksan ay ginagamit ngunit hindi naman umiiral. Ang mga talaksang nagmumula sa mga repositoryong dayuhan ay maaariing nakalista kahit na umiiral. Ang anumang ganyang mga kamalian sa pagiging positibo ay aalisin. Bilang karagdagan, ang mga pahinang may nakabaon na mga talaksang hindi umiiral ay nakatala sa [[:$1]]", "wantedfiletext-nocat": "Ginagamit ang sumusunod na mga talaksan ngunit hindi naman umiiral. Ang mga talaksan mula sa mga repositoryong dayuhan ay maaaring nakalista kahit na umiiral. Ang ganyang mga kamalian sa pagiging positibo ay aalisin.", "wantedtemplates": "Ninanais na mga suleras", @@ -1509,7 +1510,7 @@ "allpagesto": "Ipakita ang mga pahinang nagtatapos sa:", "allarticles": "Lahat ng mga pahina", "allinnamespace": "Lahat ng mga pahina ($1 espasyo ng pangalan)", - "allpagessubmit": "Gawin", + "allpagessubmit": "Ipadala", "allpagesprefix": "Ipakita ang mga pahinang may unlaping:", "allpagesbadtitle": "Ang binagay na pamagat ng pahina ay hindi tinatanggap o may unlapi na tumuturo sa ibang wika o wiki. Maaaring naglalaman ito ng isa o higit pa na mga karakter na hindi ginagamit bilang pamagat.", "allpages-bad-ns": "Wala sa {{SITENAME}} ang espasyo ng pangalang \"$1\".", @@ -1520,8 +1521,6 @@ "categories": "Mga kategorya", "categoriespagetext": "Naglalaman ang sumusunod na {{PLURAL:$1|kategorya|mga kategorya}} ng mga pahina o midya.\nHindi ipinapakita rito ang [[Special:UnusedCategories|mga kategoryang hindi ginagamit]].\nTingnan din ang [[Special:WantedCategories|ninanais na mga kategorya]].", "categoriesfrom": "Ipakita ang mga kategoryang nagsisimula sa:", - "special-categories-sort-count": "ayusin sa pamamagitan ng bilang", - "special-categories-sort-abc": "ayusin sa pamamagitan ng alpabeto", "deletedcontributions": "Naburang ambag ng tagagamit", "deletedcontributions-title": "Naburang ambag ng tagagamit", "sp-deletedcontributions-contribs": "mga ambag", @@ -1654,7 +1653,7 @@ "delete-toobig": "May isang malaking kasaysayan ng pagbabago ang pahinang ito, mahigit sa $1 {{PLURAL:$1|pagbabago|mga pagbabago}}.\nIpanagbabawal ang pagbura ng ganyang mga pahina upang maiwasan ang hindi sinasadyang pagantala/paggambala sa {{SITENAME}}.", "delete-warning-toobig": "May malaking kasaysayan ng pagbabago ang pahinang ito, mahigit sa $1 {{PLURAL:$1|pagbabago|mga pagbabago}}.\nMaaaring makagambala/makaabala sa pagpapatakbo sa kalipunan ng dato ng {{SITENAME}};\nmagpatuloy na may pagiingat.", "rollback": "Mga pagbabagong may kaugnayan sa pagpapagulong na pabalik sa (mas) dati", - "rollbacklink": "pagulunging pabalik sa (mas) dati", + "rollbacklink": "pagulunging pabalik sa dati", "rollbacklinkcount": "pagulunging pabalik ang $1 {{PLURAL:$1|pagbabago|mga pagbabago}}", "rollbacklinkcount-morethan": "pagulunging pabalik ang mahigit sa $1 {{PLURAL:$1|pagbabago|mga pagbabago}}", "rollbackfailed": "Nabigo ang pagpapagulong na pabalik sa (mas) dati", @@ -1767,6 +1766,7 @@ "contributions": "Mga ambag ng {{GENDER:$1|tagagamit}}", "contributions-title": "Mga ambag ng tagagamit na si $1", "mycontris": "Mga ambag", + "anoncontribs": "Mga inambag", "contribsub2": "Para kay $1 ($2)", "nocontribs": "Walang pagbabagong nakita sa binigay na kondisyon.", "uctop": "(kasalukuyan)", @@ -1796,7 +1796,7 @@ "nolinkshere-ns": "Walang pahinang nakakawing sa '''[[:$1]]''' mula sa loob ng napiling espasyo ng pangalan.", "isredirect": "pahinang panturo/panuto", "istemplate": "pagsasali", - "isimage": "kawing sa talaksan", + "isimage": "link ng file", "whatlinkshere-prev": "{{PLURAL:$1|nakaraang|nakaraang $1}}", "whatlinkshere-next": "{{PLURAL:$1|susunod|susunod na $1}}", "whatlinkshere-links": "← mga kawing", @@ -1988,7 +1988,7 @@ "export-addcat": "Magdagdag", "export-addnstext": "Magdagdag ng mga pahina mula sa espasyo ng pangalan:", "export-addns": "Idagdag", - "export-download": "Itala bilang talaksan", + "export-download": "Itala bilang file", "export-templates": "Kabilang ang mga suleras", "export-pagelinks": "Isama ang nakakawing na mga pahina magpahanggang sa isang lalim na:", "allmessages": "Mga mensaheng pansistema", @@ -2007,7 +2007,7 @@ "allmessages-filter-submit": "Gawin", "allmessages-filter-translate": "Isalin", "thumbnail-more": "Palakihin", - "filemissing": "Nawawala ang talaksan", + "filemissing": "Nawawala ang file", "thumbnail_error": "May kamalian sa paglikha ng kagyat (''thumbnail''): $1", "djvu_page_error": "Wala sa nasasakupan ang pahinang DjVu", "djvu_no_xml": "Hindi makuha ang XML para sa talaksang DjVu", @@ -2024,7 +2024,7 @@ "import-interwiki-history": "Kopyahin ang lahat ng mga bersyon ng kasaysayan para sa pahinang ito", "import-interwiki-templates": "Isama ang lahat ng mga suleras", "import-interwiki-submit": "Mag-angkat", - "import-upload-filename": "Pangalan ng talaksan:", + "import-upload-filename": "Pangalan ng file:", "import-comment": "Komento:", "importtext": "Pakiluwas ang talaksan magmula sa pinagmulang wiki na ginagamit ang [[Special:Export|kasangkapang pangluwas]]. \nSagipin mo ito sa iyong kompyuter at papaitaas na ikarga ito rito.", "importstart": "Inaangkat na ang mga pahina...", @@ -2061,10 +2061,6 @@ "import-logentry-upload-detail": "$1 {{PLURAL:$1|pagbabago|mga pagbabago}}", "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|pagbabago|mga pagbabago}} mula sa $2", "javascripttest": "Pagsubok sa JavaScript", - "javascripttest-pagetext-noframework": "Nakalaan ang pahinang ito para sa pagpapatakbo ng mga pagsubok ng JavaScript.", - "javascripttest-pagetext-unknownframework": "Hindi napag-aalamang balangkas ng pagsubok na \"$1\".", - "javascripttest-pagetext-frameworks": "Mangyaring pumili ng isa sa sumusunod na mga balangkas na pangsubok: $1", - "javascripttest-pagetext-skins": "Pumili ng isang pabalat na patatakbuhan ng mga pagsubok:", "javascripttest-qunit-intro": "Tingnan ang [$1 dokumentasyon ng pagsubok] sa mediawiki.org.", "tooltip-pt-userpage": "Ang iyong pahina ng tagagamit", "tooltip-pt-anonuserpage": "Ang pahina ng tagagamit para sa IP na iyong binabago bilang", @@ -2073,6 +2069,7 @@ "tooltip-pt-preferences": "Mga nais ko", "tooltip-pt-watchlist": "Ang talaan ng mga pagbabago sa mga pahinang binabantayan mo", "tooltip-pt-mycontris": "Talaan ng mga ambag mo", + "tooltip-pt-anoncontribs": "Mga tala ng binago ng IP address na ito", "tooltip-pt-login": "Hinihikayat kang lumagda; gayunpaman, hindi ito kinakailangan.", "tooltip-pt-logout": "Umalis sa pagkaka-login", "tooltip-pt-createaccount": "Hinihikayat kang lumikha ng kuwenta at lumigda; gayunpaman, hindi ito kinakailangan", @@ -2105,10 +2102,10 @@ "tooltip-feed-atom": "Sindikasyong Atom para sa pahinang ito", "tooltip-t-contributions": "Tunghayan ang tala ng mga ambag ng tagagamit na ito", "tooltip-t-emailuser": "Magpadala ng isang e-liham sa tagagamit na ito", - "tooltip-t-upload": "Magkarga ng mga talaksan", + "tooltip-t-upload": "Mag-upload ng mga file", "tooltip-t-specialpages": "Tala ng lahat ng mga natatanging pahina", "tooltip-t-print": "Bersiyong maililimbag ng pahinang ito", - "tooltip-t-permalink": "Palagiang kawing sa bersyong ito ng pahina", + "tooltip-t-permalink": "Palagiang link sa bersyong ito ng pahina", "tooltip-ca-nstab-main": "Tingnan ang pahina ng nilalaman", "tooltip-ca-nstab-user": "Tingnan ang pahina ng tagagamit", "tooltip-ca-nstab-media": "Tingnan ang pahina ng midya", @@ -2162,7 +2159,7 @@ "spam_reverting": "Ibinabalik sa huling bersyon na 'di-naglalaman ng mga kawing sa $1", "spam_blanking": "Lahat ng mga pagbabago ay naglalaman ng mga kawing sa $1, pagpapatlang", "spam_deleting": "Lahat ng mga pagbabago ay naglalaman ng mga kawing sa $1, binubura", - "simpleantispam-label": "Pagsusuring panlaban sa \"manlulusob\" (''spam'').\n'''HUWAG''' itong lagyan ng laman!", + "simpleantispam-label": "Pagsusuring laban sa spam.\nHUWAG itong lagyan ng laman!", "pageinfo-title": "Kabatiran para sa \"$1\"", "pageinfo-not-current": "Maaari lamang ipakita ang impormasyon para sa kasalukuyang rebisyon.", "pageinfo-header-basic": "Saligang kabatiran", @@ -2225,7 +2222,7 @@ "file-nohires": "Walang makuhang mas mataas na resolusyon (kalinawan).", "svg-long-desc": "Talaksang SVG, nasa mga bilang na $1 × $2 mga piksel, sukat ng talaksan: $3", "svg-long-desc-animated": "Animadong talaksang SVG, nasa mga bilang na $1 × $2 mga piksel, sukat ng talaksan: $3", - "show-big-image": "Orihinal na talaksan", + "show-big-image": "Orihinal na file", "show-big-image-preview": "Sukat ng paunang-tingin na ito: $1.", "show-big-image-other": "Ibang {{PLURAL:$2|resolusyon|mga resolusyon}}: $1.", "show-big-image-size": "$1 x $2 mga piksel", @@ -2330,8 +2327,8 @@ "exif-colorspace": "Espasyo ng kulay", "exif-componentsconfiguration": "Kahulugan ng bawat komponente", "exif-compressedbitsperpixel": "Modalidad (paraan) ng pagsisiksik ng larawan", - "exif-pixelydimension": "Lapad ng larawan", - "exif-pixelxdimension": "Taas ng larawan", + "exif-pixelxdimension": "Lapad ng larawan", + "exif-pixelydimension": "Taas ng larawan", "exif-usercomment": "Mga kumento ng tagagamit", "exif-relatedsoundfile": "Kaugnay na talaksang nadidinig (audio)", "exif-datetimeoriginal": "Petsa at oras ng paglikha ng mga dato", @@ -2365,7 +2362,7 @@ "exif-subjectlocation": "Lokasyon ng paksa", "exif-exposureindex": "Pang-antas o indeks ng pagkakalantad", "exif-sensingmethod": "Paraang pandama", - "exif-filesource": "Pinagmulang talaksan", + "exif-filesource": "Pinagmulang file", "exif-scenetype": "Uri ng tagpuan", "exif-customrendered": "Pagpoproseso ng pinasadyang larawan", "exif-exposuremode": "Modalidad ng paglalantad", @@ -2846,8 +2843,7 @@ "version-entrypoints-scriptpath": "[https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgScriptPath Landas ng panitik]", "fileduplicatesearch": "Maghanap ng kaparehong mga talaksan", "fileduplicatesearch-summary": "Maghanap ng mga kaparehong mga talaksan sa baba ng kanyang halaga ng ''hash''.", - "fileduplicatesearch-legend": "Maghanap ng mga kapareho", - "fileduplicatesearch-filename": "Pangalan ng talaksan:", + "fileduplicatesearch-filename": "Pangalan ng file:", "fileduplicatesearch-submit": "Hanapin", "fileduplicatesearch-info": "$1 × $2 pixel
Laki ng talaksan: $3
Uri ng MIME: $4", "fileduplicatesearch-result-1": "Walang katulad ang talaksan na \"$1\".", @@ -2874,6 +2870,7 @@ "tags": "Tanggap na mga tatak ng pagbabago", "tag-filter": "Pansala ng [[Special:Tags|tatak]]:", "tag-filter-submit": "Pansala", + "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Tatak|Mga tatak}}]]: $2)", "tags-title": "Mga tatak", "tags-intro": "Itinatala ng pahinang ito ang mga tatak na maaaring ipantatak ng sopwer sa isang pagbabago, at ang kanilang kahulugan.", "tags-tag": "Tatakan ang pangalan", diff --git a/languages/i18n/tr.json b/languages/i18n/tr.json index f214131722..9bc092e62c 100644 --- a/languages/i18n/tr.json +++ b/languages/i18n/tr.json @@ -83,7 +83,8 @@ "Matma Rex", "HakanIST", "Imabadplayer", - "İnternion" + "İnternion", + "Hbseren" ] }, "tog-underline": "Bağlantıların altını çiz:", @@ -181,7 +182,7 @@ "may": "May", "jun": "Haz", "jul": "Tem", - "aug": "Agu", + "aug": "Ağu", "sep": "Eyl", "oct": "Eki", "nov": "Kas", @@ -198,6 +199,8 @@ "october-date": "$1 Ekim", "november-date": "$1 Kasım", "december-date": "$1 Aralık", + "period-am": "ÖÖ", + "period-pm": "ÖS", "pagecategories": "{{PLURAL:$1|Kategori|Kategoriler}}", "category_header": "\"$1\" kategorisindeki sayfalar", "subcategories": "Alt kategoriler", @@ -512,7 +515,7 @@ "createacct-benefit-heading": "{{SITENAME}} sizin gibi insanlar tarafından geliştirilir.", "createacct-benefit-body1": "{{PLURAL:$1|düzenleme|düzenleme}}", "createacct-benefit-body2": "{{PLURAL:$1|madde|madde}}", - "createacct-benefit-body3": "en son {{PLURAL:$1|katkıda bulunan|katkıda bulunan}} kişi sayısı", + "createacct-benefit-body3": "yakın zamanda {{PLURAL:$1|katkı yapan|katkı yapan}} kişi", "badretype": "Girdiğiniz şifreler birbirleriyle uyuşmuyor.", "usernameinprogress": "Bu kullanıcı adı için bir hesap oluşturma zaten sürüyor. Lütfen bekleyin.", "userexists": "Girdiğiniz kullanıcı adı zaten kullanımda.\nLütfen farklı bir kullanıcı adı seçiniz.", @@ -705,7 +708,7 @@ "newarticle": "(Yeni)", "newarticletext": "Henüz varolmayan bir sayfaya konulmuş bir bağlantıya tıkladınız.\nSayfayı oluşturmak için aşağıdaki metin kutusunu kullanın. ([$1 yardım sayfasına] bakınız).\nBuraya yanlışlıkla geldiyseniz tarayıcınızın geri tuşuna tıklayın.", "anontalkpagetext": "----''Bu sayfa henüz bir kullanıcı hesabı oluşturmamış veya hesabını kullanmayan bir anonim kullanıcının mesaj sayfasıdır. Bu nedenle bu kişiyi belirtmek için rakamsal IP adresini kullanmak zorundayız. Bu gibi IP adresleri birçok kullanıcı tarafından paylaşılabilir. Eğer siz de bir anonim kullanıcıysanız ve size sizin ilginiz olmayan iletiler geliyorsa, lütfen diğer anonim kullanıcılarla olabilecek olan karmaşayı önlemek için [[Special:UserLogin/signup|bir hesap edinin]] veya [[Special:UserLogin|oturum açın]].''", - "noarticletext": "Bu sayfa şu anda boştur.\nBu başlığı [[Special:Search/{{PAGENAME}}|diğer sayfalarda arayabilir]],\n[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} ilgili kayıtları arayabilir],\nya da bu sayfayı [{{fullurl:{{FULLPAGENAME}}|action=edit}} değiştirebilirsiniz].", + "noarticletext": "Bu sayfa şu anda boştur.\nBu başlığı [[Special:Search/{{PAGENAME}}|diğer sayfalarda arayabilir]],\n[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} ilgili kayıtları arayabilir],\nya da bu sayfayı [{{fullurl:{{FULLPAGENAME}}|action=edit}} oluşturabilirsiniz].", "noarticletext-nopermission": "Bu sayfa şu anda boştur. \nBu başlığı [[Special:Search/{{PAGENAME}}|diğer sayfalarda arayabilir]] ya da [{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} ilgili kayıtları tarayabilirsiniz], fakat sayfayı oluşturma yetkiniz bulunmamaktadır.", "missing-revision": "\"{{FULLPAGENAME}}\" sayfasının #$1 sürümü yok.\n\nBu duruma genellikle silinmiş bir sayfaya eski tarihli bir bağlantının takip edilmesi neden olur.\n\nDaha fazla detaylı bilgi [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} sayfasında bulunabilir].", "userpage-userdoesnotexist": "\"$1\" kullanıcı hesabı kayıtlı değil. Bu sayfayı oluşturmak/değiştirmek istiyorsanız lütfen kontrol edin.", @@ -1335,8 +1338,8 @@ "newpageletter": "Y", "boteditletter": "b", "number_of_watching_users_pageview": "[$1 izlenilen {{PLURAL:$1|kullanıcı|kullanıcı}}]", - "rc_categories": "Kategorilere sınırla (\"|\" ile ayır)", - "rc_categories_any": "Herhangi", + "rc_categories": "Kategorileri sınırla (\"|\" ile ayır)", + "rc_categories_any": "Seçilen herhangi bir", "rc-change-size-new": "Değişiklikten sonraki boyut: $1 {{PLURAL:$1|bayt|bayt}}", "newsectionsummary": "/* $1 */ yeni başlık", "rc-enhanced-expand": "Ayrıntıları göster", @@ -1798,8 +1801,6 @@ "categories-submit": "Göster", "categoriespagetext": "Aşağıdaki {{PLURAL:$1|kategori|kategoriler}} sayfa veya ortam içerir.\n[[Special:UnusedCategories|Kullanılmayan kategoriler]] burada gösterilmemektedir.\nAyrıca [[Special:WantedCategories|İstenen kategoriler]]'e bakınız.", "categoriesfrom": "Şununla başlayan kategorileri görüntüle:", - "special-categories-sort-count": "sayılarına göre sırala", - "special-categories-sort-abc": "alfabetik olarak sırala", "deletedcontributions": "Kullanıcının silinen katkıları", "deletedcontributions-title": "Kullanıcının silinen katkıları", "sp-deletedcontributions-contribs": "katkılar", @@ -2175,10 +2176,10 @@ "blocklist-tempblocks": "Geçici engellemeleri gizle", "blocklist-addressblocks": "Tek IP engellemelerini gizle", "blocklist-rangeblocks": "Dizi bloklarını gizle", - "blocklist-timestamp": "Tarih damgası", + "blocklist-timestamp": "Tarih", "blocklist-target": "Hedef", "blocklist-expiry": "Bitiş tarihi", - "blocklist-by": "Engeli koyan hizmetli", + "blocklist-by": "Engeli veren hizmetli", "blocklist-params": "Engel parametreleri", "blocklist-reason": "Gerekçe", "ipblocklist-submit": "Ara", @@ -2190,7 +2191,7 @@ "noautoblockblock": "otomatik engelleme devre dışı bırakıldı", "createaccountblock": "hesap açımı engellendi", "emailblock": "e-posta engellendi", - "blocklist-nousertalk": "kendi tartışma sayfasını değiştiremez", + "blocklist-nousertalk": "kendi mesaj sayfasını değiştiremez", "ipblocklist-empty": "Engelleme listesi boş.", "ipblocklist-no-results": "İstenen IP adresi ya da kullanıcı adı engellenmedi.", "blocklink": "engelle", @@ -2210,7 +2211,7 @@ "block-log-flags-nocreate": "hesap yaratımı engellendi", "block-log-flags-noautoblock": "Otomatik engelleme iptal edildi", "block-log-flags-noemail": "e-posta engellendi", - "block-log-flags-nousertalk": "kendi tartışma sayfasını değiştiremez", + "block-log-flags-nousertalk": "kendi mesaj sayfasını değiştiremez", "block-log-flags-angry-autoblock": "gelişmiş oto-engelleme devrede", "block-log-flags-hiddenname": "kullanıcı adı gizli", "range_block_disabled": "Hizmetliler için aralık engellemesi oluşturma yeteneği devre dışı.", @@ -2400,11 +2401,7 @@ "import-logentry-upload-detail": "$1 {{PLURAL:$1|revizyon|revizyon}} içe aktarıldı", "import-logentry-interwiki-detail": "$2 sayfasından $1 {{PLURAL:$1|revizyon|revizyon}} içe aktarıldı", "javascripttest": "JavaScript denemesi", - "javascripttest-pagetext-noframework": "Bu sayfa JavaScript testleri çalıştırmak için ayrılmıştır.", - "javascripttest-pagetext-unknownframework": "Bilinmeyen test çerçevesi \"$1\".", "javascripttest-pagetext-unknownaction": "Bilinmeyen eylem \"$1\".", - "javascripttest-pagetext-frameworks": "Lütfen aşağıdaki test çerçevelerinden birini seçin: $1", - "javascripttest-pagetext-skins": "Testleri koşmak için bir tema seçin:", "javascripttest-qunit-intro": "mediawiki.org üzerinden [$1 deneme belgelerine] bakınız.", "tooltip-pt-userpage": "{{GENDER:|Kullanıcı}} sayfanız", "tooltip-pt-anonuserpage": "IP adresine ait bir kullanıcı sayfasını düzenliyorsunuz", @@ -2662,8 +2659,8 @@ "exif-colorspace": "Renk aralığı", "exif-componentsconfiguration": "Her bileşenin anlamı", "exif-compressedbitsperpixel": "Resim sıkıştırma biçimi", - "exif-pixelydimension": "Resim genişliği", - "exif-pixelxdimension": "Resim yüksekliği", + "exif-pixelxdimension": "Resim genişliği", + "exif-pixelydimension": "Resim yüksekliği", "exif-usercomment": "Kullanıcı yorumu", "exif-relatedsoundfile": "İlişkin ses dosyası", "exif-datetimeoriginal": "Verinin ilk yaratılma zamanı", @@ -3126,7 +3123,6 @@ "version-libraries-description": "Açıklama", "version-libraries-authors": "Yazarlar", "redirect": "Dosya, kullanıcı, sayfa ya da revizyon kimliği ile yönlendirme", - "redirect-legend": "Bir dosya veya sayfaya yönlendirme", "redirect-summary": "Bu özel sayfa sizi bir dosya (dosya adı verilen), bir sayfa (bir revizyon ya da sayfa ID'si verilen) veya bir kullanıcı sayfasının (sayısal kullanıcı kimliği verilen) adresine yönlendirir. Kullanım: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/page/64308]], [[{{#Special:Redirect}}/revision/328429]], ya da [[{{#Special:Redirect}}/user/101]].", "redirect-submit": "Git", "redirect-lookup": "Ara:", @@ -3138,7 +3134,6 @@ "redirect-not-exists": "Değer bulunamadı", "fileduplicatesearch": "Benzer dosyaları ara", "fileduplicatesearch-summary": "Sağlama değeri tabanında benzer dosyaları ara.", - "fileduplicatesearch-legend": "Bir benzerini ara", "fileduplicatesearch-filename": "Dosya adı:", "fileduplicatesearch-submit": "Ara", "fileduplicatesearch-info": "$1 × $2 piksel
Dosya boyutu: $3
MIME tipi: $4", @@ -3310,7 +3305,7 @@ "revdelete-unrestricted": "hizmetliler için kaldırılmış kısıtlamalar", "logentry-block-block": "$1 {{GENDER:$2|engelledi}} {{GENDER:$4|$3}} engelleme süresi: $5 $6", "logentry-block-unblock": "$1 kullanıcısının {{GENDER:$2|engeli kaldırıldı}} {{GENDER:$4|$3}}", - "logentry-block-reblock": "$1 {{GENDER:$2|changed}} block settings for {{GENDER:$4|$3}} engelleme süresi $5 $6", + "logentry-block-reblock": "$1, {{GENDER:$4|$3}} kullanıcısının engellenme süresini $5 $6 olarak {{GENDER:$2|değiştirdi}}", "logentry-suppress-block": "{{GENDER:$4|$3}} $1 tarafından {{GENDER:$2|engellendi}} Zamanaşımı: $5 $6", "logentry-suppress-reblock": "$1 {{GENDER:$2|changed}} block settings for {{GENDER:$4|$3}} engelleme süresi $5 $6", "logentry-import-upload": "$1 dosya yükleme ile {{GENDER:$2|içe aktardı}}: $3", @@ -3504,6 +3499,7 @@ "special-characters-group-ipa": "UFA", "special-characters-group-symbols": "Simgeler", "special-characters-group-greek": "Yunan", + "special-characters-group-greekextended": "Genişletilmiş Yunanca", "special-characters-group-cyrillic": "Kiril", "special-characters-group-arabic": "Arap", "special-characters-group-arabicextended": "Genişletilmiş Arapça", @@ -3526,5 +3522,25 @@ "mw-widgets-titleinput-description-redirect": "$1'e yönlendirildi", "sessionprovider-mediawiki-session-cookiesessionprovider": "çerez tabanlı oturumlar", "sessionprovider-nocookies": "Çerezler devre dışı olabilir. Çerkezlerin aktif olduğuna emin olun ve yeniden başlatin.", - "randomrootpage": "Rastgele kök sayfası" + "randomrootpage": "Rastgele kök sayfası", + "log-action-filter-block": "Blok türü:", + "log-action-filter-delete": "Silme türü:", + "log-action-filter-patrol": "Devriye türü:", + "log-action-filter-protect": "Koruma tipi:", + "log-action-filter-upload": "Yükleme türü:", + "log-action-filter-all": "Tümü", + "log-action-filter-block-block": "Blok", + "log-action-filter-block-reblock": "Blok değiştirme", + "log-action-filter-block-unblock": "Engeli kaldır", + "log-action-filter-delete-delete": "Sayfa silme", + "log-action-filter-delete-restore": "Sayfa silmeyi geri al", + "log-action-filter-delete-event": "Günlük silme", + "log-action-filter-delete-revision": "Gözden geçirmenin silinmesi", + "log-action-filter-patrol-patrol": "Manuel devriye", + "log-action-filter-patrol-autopatrol": "Otomatik devriye", + "log-action-filter-protect-protect": "Koruma", + "log-action-filter-protect-modify": "Koruma değişikliği", + "log-action-filter-protect-unprotect": "Korunmayan", + "log-action-filter-upload-upload": "Yeni yükleme", + "log-action-filter-upload-overwrite": "Yeniden yükle" } diff --git a/languages/i18n/tt-cyrl.json b/languages/i18n/tt-cyrl.json index 95c0f52077..3bf57f7e5e 100644 --- a/languages/i18n/tt-cyrl.json +++ b/languages/i18n/tt-cyrl.json @@ -454,7 +454,7 @@ "noemail": "$1 исемле кулланучы өчен электрон почта адресы язылмаган.", "noemailcreate": "Сез дөрес e-mail адресы күрсәтергә тиеш", "passwordsent": "Яңа серсүз $1 исемле кулланучының электрон почта адресына җибәрелде.\n\nЗинһар, серсүзне алгач, системага яңадан керегез.", - "blocked-mailpassword": "Сезнең IP адресыгыз белән битләр үзгәртеп һәм серсүзне яңартып булмый.", + "blocked-mailpassword": "Сезнең IP адресыгыздан төзәтмәләр кертү тыелган. Кирәксез эшләрдән саклау өчен бу IP адрес өчен шулай ук серсүзне кайтару мөмкинлеге дә ябылган.", "eauthentsent": "Күрсәтелгән электрон почта адресына үзгәртүләрне раслау өчен хат җибәрелде. Киләчәктәдә хатлар кабул итү өчен, раслауны үтегез.", "throttled-mailpassword": "Серсүзне электрон почтага җибәрү гамәлен сез {{PLURAL:$1|1=соңгы $1 сәгать}} эчендә кулландыгыз инде. Бу гамәлне явызларча куллануны кисәтү максатыннан аны $1 {{PLURAL:$1|сәгать}} аралыгында бер генә тапкыр башкарып була.", "mailerror": "Хат җибәрү хатасы: $1", @@ -1315,8 +1315,6 @@ "categories": "Төркемнәр", "categories-submit": "Күрсәт", "categoriespagetext": "{{PLURAL:$1|1=Әлеге төркем үз өченә|Әлеге төркемнәр үз өченә}} битләрне һәм медиа-файлларны ала.\nАста [[Special:UnusedCategories|кулланылмаган төркемнәр]] кәрсәтелгән.\nШулай ук [[Special:WantedCategories|кирәкле төркемнәр исемлегендә]] карагыз.", - "special-categories-sort-count": "исәп буенча тәртипләү", - "special-categories-sort-abc": "әлифба буенча тәртипләү", "deletedcontributions": "Кулланучының бетерелгән кертеме", "deletedcontributions-title": "Бетерелгән кертем", "sp-deletedcontributions-contribs": "кертем", @@ -1647,7 +1645,6 @@ "importnopages": "Импортлау өчен битләр юк.", "importlogpage": "Кертү көндәлеге", "javascripttest": "JavaScript тикшерү", - "javascripttest-pagetext-noframework": "Әлеге бит JavaScript тестларын ачу өчен ясалган.", "tooltip-pt-userpage": "{{GENDER:|Кулланучы}} битегез", "tooltip-pt-mytalk": "Бәхәс {{GENDER:|битегез}}", "tooltip-pt-preferences": "{{GENDER:|Көйләнмәләрегез}}", @@ -1718,6 +1715,7 @@ "creditspage": "Рәхмәтләр", "spamprotectiontitle": "Спам фильтры", "simpleantispam-label": "Анти-спам тикшерә.\nМоны ТУТЫРМАГЫЗ!", + "pageinfo-title": "«$1» буенча мәгълүмат", "pageinfo-header-basic": "Төп мәгълүмат", "pageinfo-header-edits": "Үзгәртүләр тарихы", "pageinfo-header-restrictions": "Битне яклау", @@ -1779,8 +1777,8 @@ "years": "{{PLURAL:$1|$1 ел}}", "ago": "$1 элек", "just-now": "яңа гына", - "hours-ago": "$1 cәгать элек", - "minutes-ago": "$1 минут элек", + "hours-ago": "$1 {{PLURAL:$1|cәгать}} элек", + "minutes-ago": "$1 {{PLURAL:$1|минут}} элек", "seconds-ago": "$1 {{PLURAL:$1|секунд}} элек", "monday-at": "дүшәмбе $1", "tuesday-at": "сишәмбе $1", @@ -1817,8 +1815,8 @@ "exif-colorspace": "Төсләр тирәлеге", "exif-componentsconfiguration": "Төсләр төзелешенең конфигурациясе", "exif-compressedbitsperpixel": "Кысылудан соң төснең тирәнлеге", - "exif-pixelydimension": "Рәсемнең киңлеге", - "exif-pixelxdimension": "Рәсемнең биеклеге", + "exif-pixelxdimension": "Рәсемнең киңлеге", + "exif-pixelydimension": "Рәсемнең биеклеге", "exif-usercomment": "Өстәмә җавап", "exif-relatedsoundfile": "Тавыш файлы җавабы", "exif-datetimeoriginal": "Чын вакыты", diff --git a/languages/i18n/tt-latn.json b/languages/i18n/tt-latn.json index a78db9e8a0..246140549c 100644 --- a/languages/i18n/tt-latn.json +++ b/languages/i18n/tt-latn.json @@ -1037,8 +1037,6 @@ "allpagesprefix": "Alquşımçalı bitlärne kürsätü:", "categories": "Törkemnär", "categoriespagetext": "{{PLURAL:$1|Älege törkem üz öçenä|Älege törkemnär üz öçenä}} bitlärne häm media-fayllarnı ala.\nAsta [[Special:UnusedCategories|qullanılmağan törkemnär]] kärsätelgän.\nŞulay uq [[Special:WantedCategories|kiräkle törkemnär isemlegendä]] qarağız.", - "special-categories-sort-count": "isäp buyınça tärtipläw", - "special-categories-sort-abc": "älifba buyınça tärtipläw", "sp-deletedcontributions-contribs": "kertem", "linksearch": "Tışqı sıltamalar", "linksearch-pat": "Ezläw öçen ürnäk:", @@ -1420,8 +1418,8 @@ "exif-colorspace": "Töslär tirälege", "exif-componentsconfiguration": "Töslär tözeleşeneñ konfiguratsiäse", "exif-compressedbitsperpixel": "Qısıludan soñ tösneñ tiränlege", - "exif-pixelydimension": "Räsemneñ tulı bieklege", - "exif-pixelxdimension": "Räsemneñ tulı kiñlege", + "exif-pixelxdimension": "Räsemneñ tulı bieklege", + "exif-pixelydimension": "Räsemneñ tulı kiñlege", "exif-usercomment": "Östämä cawap", "exif-relatedsoundfile": "Tawış faylı cawabı", "exif-datetimeoriginal": "Çın waqıtı", diff --git a/languages/i18n/ug-arab.json b/languages/i18n/ug-arab.json index 2612631a74..ae20f1dc18 100644 --- a/languages/i18n/ug-arab.json +++ b/languages/i18n/ug-arab.json @@ -1498,8 +1498,6 @@ "categories": "تۈرلەر", "categoriespagetext": "تۆۋەندىكى {{PLURAL:$1|كاتېگورىيە|كاتېگورىيە}}دە بەت ياكى ۋاسىتە بار.\n[[Special:UnusedCategories|ئىشلىتىلمىگەن كاتېگورىيە]] بۇ جايدا كۆرسىتىلمەيدۇ.\nشۇنىڭ بىلەن بىللە [[Special:WantedCategories|لازىملىق كاتېگورىيە]] نى كۆرۈڭ.", "categoriesfrom": "بۇ كاتېگورىيەدىن باشلانغاننى كۆرسەت:", - "special-categories-sort-count": "سانى بويىچە تەرتىپلە", - "special-categories-sort-abc": "ئېلىپبە بويىچە تەرتىپلە", "deletedcontributions": "ئۆچۈرۈلگەن ئىشلەتكۈچى تۆھپىسى", "deletedcontributions-title": "ئۆچۈرۈلگەن ئىشلەتكۈچى تۆھپىسى", "sp-deletedcontributions-contribs": "تۆھپە", @@ -2043,10 +2041,6 @@ "import-logentry-upload-detail": "$1 {{PLURAL:$1|تۈزىتىش|تۈزىتىش}}", "import-logentry-interwiki-detail": "$2 دىن كەلگەن $1 {{PLURAL:$1|تۈزىتىش|تۈزىتىش}}", "javascripttest": "JavaScript سىناش", - "javascripttest-pagetext-noframework": "بۇ بەت JavaScript ئىجرا قىلىپ سىناشقا قالدۇرۇلغان.", - "javascripttest-pagetext-unknownframework": "يوچۇن سىناق قۇرۇلما \"$1\".", - "javascripttest-pagetext-frameworks": "تۆۋەندىكى قۇرۇلمىدىن بىرنى تاللاڭ: $1", - "javascripttest-pagetext-skins": "بىر تېرە تاللاپ سىناقنى ئىجرا قىلىڭ:", "javascripttest-qunit-intro": "mediawiki.org دىكى [$1 سىناش قوللانمىسى]نى كۆرۈڭ.", "tooltip-pt-userpage": "ئىشلەتكۈچى بېتىڭىز", "tooltip-pt-anonuserpage": "بۇ بېكەتنى تەھرىرلىگەندە ئىشلەتكەن IP ماس كەلگەن ئىشلەتكۈچى بېتى", @@ -2323,8 +2317,8 @@ "exif-colorspace": "رەڭ بوشلۇقى", "exif-componentsconfiguration": "ھەر بىر تەركىپنىڭ سالمىقى", "exif-compressedbitsperpixel": "سۈرەت پرىسلاش شەكلى", - "exif-pixelydimension": "سۈرەت كەڭلىكى", - "exif-pixelxdimension": "سۈرەت ئېگىزلىكى", + "exif-pixelxdimension": "سۈرەت كەڭلىكى", + "exif-pixelydimension": "سۈرەت ئېگىزلىكى", "exif-usercomment": "ئىشلەتكۈچى ئىزاھاتى", "exif-relatedsoundfile": "مۇناسىۋەتلىك ئۈن ھۆججىتى", "exif-datetimeoriginal": "سانلىق مەلۇمات قۇرۇلغان چېسلا ۋە ۋاقىت", @@ -2733,7 +2727,6 @@ "redirect-not-exists": "قىممىتى تېپىلمىدى", "fileduplicatesearch": "تەكرار ھۆججەت ئىزدە", "fileduplicatesearch-summary": "چاچما (hash) قىممىتىگە ئاساسەن تەكرار ھۆججەت ئىزدە.", - "fileduplicatesearch-legend": "تەكرار ھۆججەت ئىزدە", "fileduplicatesearch-filename": ":ھۆججەت ئاتى", "fileduplicatesearch-submit": "ئىزدە", "fileduplicatesearch-info": "$1 × $2 نۇقتا
ھۆججەت چوڭلۇقى: $3
MIME تىپى: $4", diff --git a/languages/i18n/uk.json b/languages/i18n/uk.json index 4d6231b208..9e1f36cc44 100644 --- a/languages/i18n/uk.json +++ b/languages/i18n/uk.json @@ -64,7 +64,8 @@ "Translatemyname", "Dars", "Mix Gerder", - "E.belykh" + "E.belykh", + "Visem" ] }, "tog-underline": "Підкреслювання посилань:", @@ -82,12 +83,13 @@ "tog-watchdefault": "Додавати змінені мною сторінки та файли до мого списку спостереження", "tog-watchmoves": "Додавати перейменовані мною сторінки та файли до мого списку спостереження", "tog-watchdeletion": "Додавати вилучені мною сторінки та файли до мого списку спостереження", + "tog-watchuploads": "Додавати до мого списку спостереження нові файли, завантажені мною", "tog-watchrollback": "Додавати відкочені мною сторінки до мого списку спостереження", "tog-minordefault": "Позначати всі зміни як незначні за замовчуванням", "tog-previewontop": "Показувати попередній перегляд перед вікном редагування, а не після", "tog-previewonfirst": "Показувати попередній перегляд під час першого редагування", "tog-enotifwatchlistpages": "Повідомляти електронною поштою про зміну сторінки або файлу з мого списку спостереження", - "tog-enotifusertalkpages": "Повідомляти електронною поштою про зміни моєї сторінки обговорення", + "tog-enotifusertalkpages": "Повідомляти електронною поштою про зміни на моїй сторінці обговорення", "tog-enotifminoredits": "Надсилати мені електронного листа навіть при незначних редагуваннях сторінок та файлів", "tog-enotifrevealaddr": "Показувати мою поштову адресу в повідомленнях", "tog-shownumberswatching": "Показувати число користувачів, які додали сторінку до свого списку спостереження", @@ -179,8 +181,8 @@ "october-date": "$1 жовтня", "november-date": "$1 листопада", "december-date": "$1 грудня", - "period-am": "AM", - "period-pm": "PM", + "period-am": "ранку", + "period-pm": "пополудні", "pagecategories": "{{PLURAL:$1|1=Категорія|Категорії}}", "category_header": "Сторінки в категорії «$1»", "subcategories": "Підкатегорії", @@ -188,7 +190,7 @@ "category-empty": "''Ця категорія зараз порожня.''", "hidden-categories": "{{PLURAL:$1|1=Прихована категорія|Приховані категорії}}", "hidden-category-category": "Приховані категорії", - "category-subcat-count": "{{PLURAL:$2|Ця категорія має тільки таку підкатегорію.|Показано $1 {{PLURAL:$1|підкатегорію з|підкатегорії з|підкатегорій із}} $2.}}", + "category-subcat-count": "{{PLURAL:$2|Показано $1 {{PLURAL:$1|підкатегорію з|підкатегорії з|підкатегорій із}} $2.|1=Ця категорія має тільки таку підкатегорію.}}", "category-subcat-count-limited": "У цій категорії {{PLURAL:$1|$1 підкатегорія|$1 підкатегорії|$1 підкатегорій}}.", "category-article-count": "Показано $1 {{PLURAL:$1|сторінку|сторінки|сторінок}} цієї категорії (із $2).", "category-article-count-limited": "У цій категорії {{PLURAL:$1|$1 сторінка|$1 сторінки|$1 сторінок}}.", @@ -206,7 +208,6 @@ "moredotdotdot": "Більше…", "morenotlisted": "Цей список неповний.", "mypage": "Сторінка", - "anonuserpage": "Невідомий користувач", "mytalk": "Обговорення", "anontalk": "Обговорення", "navigation": "Навігація", @@ -529,7 +530,7 @@ "noemail": "Для користувача \"$1\" не вказано адреси електронної пошти.", "noemailcreate": "Вам треба вказати правильну адресу електронної пошти", "passwordsent": "Новий пароль був надісланий на адресу електронної пошти, зазначену для \"$1\".\nБудь ласка, ввійдіть до системи після отримання пароля.", - "blocked-mailpassword": "Редагування з вашої IP-адреси заборонено, заблокована також функція відновлення пароля, щоб запобігти зловживанням.", + "blocked-mailpassword": "Редагування з Вашої IP-адреси заборонено. Щоб запобігти зловживанням, заблокована також функція відновлення пароля з цієї IP-адреси.", "eauthentsent": "На вказану адресу електронної пошти відправлено лист підтвердження.\nЩоб отримувати надалі будь-які повідомлення, необхідно підтвердити, що обліковий запис належить справді Вам, за процедурою, описаною в листі.", "throttled-mailpassword": "Листа для оновлення пароля вже було надіслано електронною поштою протягом {{PLURAL:$1|1=останньої години|останніх $1 годин}}.\nДля попередження зловживань дозволено надсилати тільки одного листа оновлення пароля за {{PLURAL:$1|годину|$1 години|$1 годин}}.", "mailerror": "Помилка надсилання пошти: $1", @@ -1377,9 +1378,9 @@ "recentchangeslinked-page": "Назва сторінки:", "recentchangeslinked-to": "Показати зміни на сторінках, пов'язаних з даною", "recentchanges-page-added-to-category": "[[:$1]] Додано до категорії", - "recentchanges-page-added-to-category-bundled": "[[:$1]] та ще {{PLURAL:$2|$2 сторінку|$2 сторінки|$2 сторінок|1=одну сторінку}} було додано до категорії", + "recentchanges-page-added-to-category-bundled": "[[:$1]] додано до категорії, [[Special:WhatLinksHere/$1|ця сторінка включена в інші сторінки]]", "recentchanges-page-removed-from-category": "[[:$1]] було вилучено з категорії", - "recentchanges-page-removed-from-category-bundled": "[[:$1]] та ще {{PLURAL:$2|$2 сторінку|$2 сторінки|$2 сторінок|1=одну сторінку}} було вилучено з категорії", + "recentchanges-page-removed-from-category-bundled": "[[:$1]] вилучено з категорії, [[Special:WhatLinksHere/$1|ця сторінка включена в інші сторінки]]", "autochange-username": "Автоматичні редагування MediaWiki", "upload": "Завантажити файл", "uploadbtn": "Завантажити файл", @@ -1559,6 +1560,7 @@ "uploadstash-badtoken": "Не вдалося виконати вказану дію. Можливо, вичерпаний термін дії сесії редагування. Будь ласка, спробуйте ще раз.", "uploadstash-errclear": "Очищення файлів зазнало невдачі.", "uploadstash-refresh": "Оновити список файлів", + "uploadstash-thumbnail": "перегляд мініатюри", "invalid-chunk-offset": "Неприпустимий зсув фрагмента", "img-auth-accessdenied": "Відмовлено в доступі", "img-auth-nopathinfo": "Відсутній PATH_INFO.\nВаш сервер не налаштовано для передачі цих даних.\nМожливо, він працює на основі CGI та не підтримує img_auth.\nПерегляньте [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Image_Authorization Відкриття доступу до зображень]", @@ -1880,8 +1882,6 @@ "categories-submit": "Показати", "categoriespagetext": "{{PLURAL:$1|1=Наступна категорія містить|Наступні категорії містять}} сторінки або медіа-файли.\nТут не показані [[Special:UnusedCategories|категорії, що не використовуються]].\nДив. також [[Special:WantedCategories|список необхідних категорій]].", "categoriesfrom": "Показати категорії, що починаються з:", - "special-categories-sort-count": "упорядкувати за кількістю", - "special-categories-sort-abc": "упорядкувати за алфавітом", "deletedcontributions": "Вилучений внесок користувача", "deletedcontributions-title": "Вилучений внесок користувача", "sp-deletedcontributions-contribs": "внесок", @@ -2261,6 +2261,7 @@ "ipb-unblock": "Розблокувати користувача або IP-адресу", "ipb-blocklist": "Показати чинні блокування", "ipb-blocklist-contribs": "Внесок {{GENDER:$1|$1}}", + "ipb-blocklist-duration-left": "Залишилось $1", "unblockip": "Розблокувати IP-адресу", "unblockiptext": "Використовуйте подану нижче форму, щоб відновити можливість збереження з раніше заблокованої IP-адреси.", "ipusubmit": "Зняти це блокування", @@ -2503,11 +2504,7 @@ "import-logentry-upload-detail": "Імпортовано $1 {{PLURAL:$1|версія|версії|версій}}", "import-logentry-interwiki-detail": "Імпортовано $1 {{PLURAL:$1|версія|версії|версій}} з $2", "javascripttest": "Тестування JavaScript", - "javascripttest-pagetext-noframework": "Ця сторінка призначений для тестування JavaScript.", - "javascripttest-pagetext-unknownframework": "Невідоме середовище тестування \" $1 \".", "javascripttest-pagetext-unknownaction": "невідома дія \"$1\".", - "javascripttest-pagetext-frameworks": "Будь ласка, оберіть одне з наступних середовищ тестування: $1", - "javascripttest-pagetext-skins": "Виберіть оформлення сторінки запуску тесту:", "javascripttest-qunit-intro": "Переглянути [ $1 тестування документації] на mediawiki.org.", "tooltip-pt-userpage": "{{GENDER:|Ваша}} сторінка користувача", "tooltip-pt-anonuserpage": "Сторінка користувача для вашої IP-адреси", @@ -2813,8 +2810,8 @@ "exif-colorspace": "Колірний простір", "exif-componentsconfiguration": "Конфігурація кольорових компонентів", "exif-compressedbitsperpixel": "Глибина кольору після стиснення", - "exif-pixelydimension": "Ширина зображення", - "exif-pixelxdimension": "Висота зображення", + "exif-pixelxdimension": "Ширина зображення", + "exif-pixelydimension": "Висота зображення", "exif-usercomment": "Додатковий коментар", "exif-relatedsoundfile": "Файл звукового коментаря", "exif-datetimeoriginal": "Оригинальні дата й час", @@ -3353,7 +3350,6 @@ "version-libraries-description": "Опис", "version-libraries-authors": "Автори", "redirect": "Перенаправлення за файлом, користувачем, сторінкою, версією або ID журналу", - "redirect-legend": "Перенаправити на файл чи сторінку", "redirect-summary": "Ця спеціальна сторінка перенаправляє на файл (за поданою назвою файлу), сторінку (за поданим ID версії або сторінки), сторінку користувача (за поданим числовим ID користувача) або запис журлану (за поданим ID журналу). Використання: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/page/64308]],[[{{#Special:Redirect}}/revision/328429]], [[{{#Special:Redirect}}/user/101]] або [[{{#Special:Redirect}}/logid/186]].", "redirect-submit": "Перейти", "redirect-lookup": "Шукати:", @@ -3366,7 +3362,6 @@ "redirect-not-exists": "Значення не знайдено", "fileduplicatesearch": "Пошук файлів-дублікатів", "fileduplicatesearch-summary": "Пошук дублікатів файлів на основі хеш-значень.", - "fileduplicatesearch-legend": "Пошук дублікатів", "fileduplicatesearch-filename": "Назва файлу:", "fileduplicatesearch-submit": "Знайти", "fileduplicatesearch-info": "$1 × $2 пікселів
Розмір файлу: $3
MIME-тип: $4", @@ -3567,7 +3562,7 @@ "logentry-protect-protect-cascade": "$1 {{GENDER:$2|захистив|захистила}} $3 $4 [каскадно]", "logentry-protect-modify": "$1 {{GENDER:$2|змінив|змінила}} налаштування захисту $3 $4", "logentry-protect-modify-cascade": "$1 {{GENDER:$2|змінив|змінила}} налаштування захисту $3 $4 [каскадно]", - "logentry-rights-rights": "$1 {{GENDER:$2|змінив|змінила}} членство в групах для $3 із $4 на $5", + "logentry-rights-rights": "$1 {{GENDER:$2|змінив|змінила}} членство в групах для {{GENDER:$3|$3}} із $4 на $5", "logentry-rights-rights-legacy": "$1 {{GENDER:$2|змінив|змінила}} членство в групах для $3", "logentry-rights-autopromote": "$1 було автоматично переведено із $4 в $5", "logentry-upload-upload": "$1 {{GENDER:$2|завантажив|завантажила}} $3", @@ -3660,6 +3655,7 @@ "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|година|години|годин}}", @@ -3750,6 +3746,7 @@ "special-characters-group-ipa": "МФА (IPA)", "special-characters-group-symbols": "Символи", "special-characters-group-greek": "Грецькі", + "special-characters-group-greekextended": "Розширена грецька", "special-characters-group-cyrillic": "Кирилиця", "special-characters-group-arabic": "Арабські", "special-characters-group-arabicextended": "Арабська розширена", @@ -3777,5 +3774,54 @@ "sessionprovider-generic": "сесій $1", "sessionprovider-mediawiki-session-cookiesessionprovider": "сесій на основі кук", "sessionprovider-nocookies": "Куки можуть бути відключені. Переконайтеся, що у Вас включені cookies і почніть знову.", - "randomrootpage": "Випадкова коренева сторінка" + "randomrootpage": "Випадкова коренева сторінка", + "log-action-filter-block": "Тип блокування:", + "log-action-filter-contentmodel": "Тип модифікації contentmodel:", + "log-action-filter-delete": "Тип вилучення:", + "log-action-filter-import": "Тип імпорту:", + "log-action-filter-managetags": "Тип дії з управління тегами:", + "log-action-filter-move": "Тип перейменування:", + "log-action-filter-newusers": "Тип створення облікового запису:", + "log-action-filter-patrol": "Тип патрулювання:", + "log-action-filter-protect": "Тип захисту:", + "log-action-filter-rights": "Тип зміни прав", + "log-action-filter-suppress": "Тип приховування", + "log-action-filter-upload": "Тип завантаження:", + "log-action-filter-all": "Усі", + "log-action-filter-block-block": "Блокування", + "log-action-filter-block-reblock": "Зміна блокування", + "log-action-filter-block-unblock": "Розблокування", + "log-action-filter-contentmodel-change": "Зміна Contentmodel", + "log-action-filter-contentmodel-new": "Створення сторінки з нестандартною моделлю Contentmodel", + "log-action-filter-delete-delete": "Видалення сторінки", + "log-action-filter-delete-restore": "Відновлення сторінки", + "log-action-filter-delete-event": "Вилучення журналу", + "log-action-filter-delete-revision": "Вилучення версії", + "log-action-filter-import-interwiki": "Трансвікі-імпорт", + "log-action-filter-import-upload": "Імпорт через завантаження XML", + "log-action-filter-managetags-create": "Створення тегів", + "log-action-filter-managetags-delete": "Вилучення тегів", + "log-action-filter-managetags-activate": "Активація тегів", + "log-action-filter-managetags-deactivate": "Деактивація тегів", + "log-action-filter-move-move": "Перейменування без перезапису сторінок-перенаправлень", + "log-action-filter-move-move_redir": "Перейменування з перезаписом сторінок-перенаправлень", + "log-action-filter-newusers-create": "Створення анонімним користувачем", + "log-action-filter-newusers-create2": "Створення зареєстрованим користувачем", + "log-action-filter-newusers-autocreate": "Автоматичне створення", + "log-action-filter-newusers-byemail": "Створення з паролем, надісланим електронною поштою", + "log-action-filter-patrol-patrol": "Ручне патрулювання", + "log-action-filter-patrol-autopatrol": "Автоматичне патрулювання", + "log-action-filter-protect-protect": "Захист", + "log-action-filter-protect-modify": "Зміна захисту", + "log-action-filter-protect-unprotect": "Зняття захисту", + "log-action-filter-protect-move_prot": "Перенесення захисту", + "log-action-filter-rights-rights": "Ручна зміна", + "log-action-filter-rights-autopromote": "Автоматична зміна", + "log-action-filter-suppress-event": "Приховування журналу", + "log-action-filter-suppress-revision": "Приховування версії", + "log-action-filter-suppress-delete": "Приховування сторінки", + "log-action-filter-suppress-block": "Приховування користувача через блокування", + "log-action-filter-suppress-reblock": "Приховування користувача через повторне блокування", + "log-action-filter-upload-upload": "Нове завантаження", + "log-action-filter-upload-overwrite": "Повторне завантаження" } diff --git a/languages/i18n/uz.json b/languages/i18n/uz.json index 2a3c48fdf2..f890815547 100644 --- a/languages/i18n/uz.json +++ b/languages/i18n/uz.json @@ -11,7 +11,8 @@ "Xexdof", "Arystanbek", "6ahodir", - "Таржимон" + "Таржимон", + "Ximik1991" ] }, "tog-underline": "Havolalarning tagiga chizish:", @@ -149,7 +150,7 @@ "mytalk": "Munozara", "anontalk": "Ushbu IP-manzil munozarasi", "navigation": "Saytda harakatlanish", - "and": " va", + "and": " va", "qbfind": "Topish", "qbbrowse": "KoÊ»rib chiqish", "qbedit": "Tahrirlash", @@ -1238,6 +1239,7 @@ "pagemovedsub": "Sahifa qayta nomlandi", "movepage-moved": "'''Sahifa nomi «$1»dan «$2»ga koÊ»chirildi'''", "movepage-moved-redirect": "Qayta yo‘naltirish yaratildi.", + "articleexists": "Shunday nomli sahifa mavjud, yoki siz tanlagan nom mumkin emas. \nIltimos, boshqa nom tanlang.", "movetalk": "Mos munozara sahifasini qayta nomlash", "move-subpages": "Ostsahifalarni ham qayta nomlash ($1 tadan kam)", "move-talk-subpages": "Munozara sahifasining ostsahifalarini ham qayta nomlash ($1 tadan kam)", diff --git a/languages/i18n/vec.json b/languages/i18n/vec.json index 6358cec8a1..5bcc0526a3 100644 --- a/languages/i18n/vec.json +++ b/languages/i18n/vec.json @@ -1504,8 +1504,6 @@ "categories": "Categorie", "categoriespagetext": "{{PLURAL:$1|Sta categoria qua soto la|Ste categorie qua soto le}} gà drento pagine o file multimediài.\nLe [[Special:UnusedCategories|categorie mìa doparà]] no le vien mìa fate védar.\nVarda anca le [[Special:WantedCategories|categorie domandà]].", "categoriesfrom": "Mostra le categorie tacando da :", - "special-categories-sort-count": "ordina par nùmaro", - "special-categories-sort-abc": "ordina alfabeticamente", "deletedcontributions": "Contributi utente scancelà", "deletedcontributions-title": "Contributi utente scancelà", "sp-deletedcontributions-contribs": "contributi", @@ -2053,10 +2051,6 @@ "import-logentry-upload-detail": "{{PLURAL:$1|una revixion importà|$1 revixion importae}}", "import-logentry-interwiki-detail": "{{PLURAL:$1|una revixion importà|$1 revixion importae}} da $2", "javascripttest": "Sperimentasion JavaScript", - "javascripttest-pagetext-noframework": "Sta pàjina ła xe riservà a l'execusion de test de JavaScript.", - "javascripttest-pagetext-unknownframework": "Framework de test sconosùo \"$1\".", - "javascripttest-pagetext-frameworks": "Par piasere, siełi uno de i seguenti framework pa' i test: $1", - "javascripttest-pagetext-skins": "Siełi na skin có cui exeguir i test:", "javascripttest-qunit-intro": "Varda so mediawiki.org ła [$1 documentasion rivardante i test].", "tooltip-pt-userpage": "La {{GENDER:|to}} pagina utente", "tooltip-pt-anonuserpage": "La pàxena utente de sto indirizo IP", @@ -2299,8 +2293,8 @@ "exif-colorspace": "Spazio de i cołori", "exif-componentsconfiguration": "Significato de ciascuna componente", "exif-compressedbitsperpixel": "Modalità de compression imagine", - "exif-pixelydimension": "Larghesa imajine", - "exif-pixelxdimension": "Altesa imajine", + "exif-pixelxdimension": "Larghesa imajine", + "exif-pixelydimension": "Altesa imajine", "exif-usercomment": "Note de l'utente", "exif-relatedsoundfile": "File audio cołegà", "exif-datetimeoriginal": "Data e ora de creassion de i dati", @@ -2729,7 +2723,6 @@ "version-libraries-description": "Descrision", "version-libraries-authors": "Autori", "redirect": "Rimando par file, utente, pagina o ID de version.", - "redirect-legend": "Rimandar a un file o na pagina", "redirect-summary": "Sta pagina speciale la rimanda a un file (dato el nome del file), a na pagina (dato l'ID de la revision), o a na pagina utente (dato l'ID de l'utente).", "redirect-submit": "Và", "redirect-lookup": "Ciave de riserca:", @@ -2740,7 +2733,6 @@ "redirect-not-exists": "Valor mia catà", "fileduplicatesearch": "Riçerca dei file duplicà", "fileduplicatesearch-summary": "Riçerca de eventuali duplicati del file in base al valor de ''hash''.", - "fileduplicatesearch-legend": "Riçerca de un duplicato", "fileduplicatesearch-filename": "Nome del file:", "fileduplicatesearch-submit": "Riçerca", "fileduplicatesearch-info": "$1 × $2 pixel
Dimension: $3
Tipo MIME: $4", diff --git a/languages/i18n/vep.json b/languages/i18n/vep.json index c840b1bb52..2b1210191b 100644 --- a/languages/i18n/vep.json +++ b/languages/i18n/vep.json @@ -704,6 +704,7 @@ "powersearch-togglelabel": "Kodvda:", "powersearch-toggleall": "Kaik", "powersearch-togglenone": "Ei ole nimidä", + "powersearch-remember": "Panda valičend muštho tulebiden ecmižiden täht", "search-external": "Irdecind", "searchdisabled": "{{SITENAME}} ecind om saubatud.\nTö voit nügüd' ectä Google'n turbiš.\nOtkat sil'mnägubale üks-se, miše {{SITENAME}}-saitan sädäimišt voib olda vanhtunuden.", "preferences": "Järgendused", @@ -940,6 +941,7 @@ "recentchanges-label-bot": "Necen redakcijan tegi bot", "recentchanges-label-unpatrolled": "Necidä redakcijad ei völ patruliruinugoi", "recentchanges-label-plusminus": "Suruden toižetamine baitoiš", + "recentchanges-legend-heading": "Legend:", "recentchanges-legend-newpage": "$1 - uz' lehtpol'", "rcnotefrom": "Alemba oma anttud toižetused '''$2'''-späi ( '''$1'''-hesai).", "rclistfrom": "Ozutada uded toižetused dataspäi $3 $2 augotaden", @@ -1265,8 +1267,6 @@ "categories": "Kategorijad", "categoriespagetext": "{{PLURAL:$1|Neciš kategorijas|Neniš kategorijoiš }} om lehtpolid vai mediafailoid.\n[[Special:UnusedCategories|Kävumatomid kategorijoid]] ei ozutagoi naku.\nKc. mugažo [[Special:WantedCategories|ectud kategorijoiden nimikirjutez]].", "categoriesfrom": "Ozutada kategorijad, necišpäi augotaden:", - "special-categories-sort-count": "järgeta lugumäran mödhe", - "special-categories-sort-abc": "järgeta kirjamišton mödhe", "deletedcontributions": "Čutud tond", "deletedcontributions-title": "Čutud tond", "sp-deletedcontributions-contribs": "tond", @@ -1878,8 +1878,8 @@ "exif-colorspace": "Mujuavaruz", "exif-componentsconfiguration": "Mujukomponentoiden konfiguracii", "exif-compressedbitsperpixel": "Mujun süvuz ahtištusen jäl'ghe", - "exif-pixelydimension": "Kuvan leveduz", - "exif-pixelxdimension": "Kuvan korktuz", + "exif-pixelxdimension": "Kuvan leveduz", + "exif-pixelydimension": "Kuvan korktuz", "exif-usercomment": "Kävutajan homaičendad", "exif-relatedsoundfile": "Kulundkommentarijan fail", "exif-datetimeoriginal": "Todesine dat da aig", @@ -2221,7 +2221,6 @@ "version-entrypoints-header-url": "URL", "fileduplicatesearch": "Ectä kaksitadud failad", "fileduplicatesearch-summary": "Ühtejiččiden failoiden ecmine niiden heš-kodan mödhe.", - "fileduplicatesearch-legend": "Ectä dublikatoid", "fileduplicatesearch-filename": "Failannimi:", "fileduplicatesearch-submit": "Ectä", "fileduplicatesearch-info": "$1 × $2 pikselad
Failan suruz: $3
MIME-tip: $4", diff --git a/languages/i18n/vi.json b/languages/i18n/vi.json index 1d7515addb..d788a2fca7 100644 --- a/languages/i18n/vi.json +++ b/languages/i18n/vi.json @@ -175,7 +175,6 @@ "moredotdotdot": "Thêm nữa…", "morenotlisted": "Danh sách này không có đầy đủ.", "mypage": "Trang cá nhân", - "anonuserpage": "Người dùng không rõ", "mytalk": "Tin nhắn", "anontalk": "Thảo luận", "navigation": "Xem nhanh", @@ -240,7 +239,7 @@ "viewhelppage": "Xem trang trợ giúp", "categorypage": "Xem trang thể loại", "viewtalkpage": "Xem trang thảo luận", - "otherlanguages": "Trong các ngôn ngữ khác", + "otherlanguages": "Trong ngôn ngữ khác", "redirectedfrom": "(đổi hướng từ $1)", "redirectpagesub": "Trang đổi hướng", "redirectto": "Đổi hướng đến:", @@ -494,7 +493,7 @@ "noemail": "Thành viên “$1” không ghi thư điện tử.", "noemailcreate": "Bạn cần cung cấp một địa chỉ thư điện tử hợp lệ", "passwordsent": "Mật khẩu mới đã được gửi tới thư điện tử của thành viên “$1”. Xin đăng nhập lại sau khi nhận thư.", - "blocked-mailpassword": "Địa chỉ IP của bạn bị cấm không được sửa đổi, do đó cũng không được phép dùng chức năng phục hồi mật khẩu để tránh sai phạm.", + "blocked-mailpassword": "Địa chỉ IP của bạn bị cấm không được sửa đổi. Để ngăn ngừa việc lạm dụng, sẽ không được phép dùng chức năng phục hồi mật khẩu từ địa chỉ IP này.", "eauthentsent": "Thư xác nhận đã được gửi cho địa chỉ thư điện tử được chỉ định. Trước khi bạn có thể nhận thư, bạn cần thực hiện hướng dẫn trong thư để xác nhận tài khoản thuộc về bạn.", "throttled-mailpassword": "Mật khẩu đã được gửi đến cho bạn trong vòng {{PLURAL:$1|$1 giờ|$1 giờ}} đồng hồ trở lại. Để tránh lạm dụng, chỉ có thể gửi mật khẩu $1 giờ đồng hồ một lần.", "mailerror": "Lỗi gửi thư : $1", @@ -534,6 +533,7 @@ "changepassword-success": "Mật khẩu của bạn đã được thay đổi.", "changepassword-throttled": "Bạn đã thử đăng nhập gần đây nhiều lần quá. Xin chờ $1 trước khi bạn thử lần nữa.", "botpasswords": "Mật khẩu Bot", + "botpasswords-summary": "Mật khẩu bot cho phép truy cập một tài khoản người dùng qua API mà không sử dụng thông tin chứng nhận chính của tài khoản. Các quyền người dùng có thể bị hạn chế khi đăng nhập dùng mật khẩu bot.\n\nNếu bạn không hiểu tại sao cần sử dụng mật khẩu bot, có lẽ bạn không nên sử dụng nó. Không ai bao giờ có lý do chính đáng để yêu cầu bạn tạo ra một mật khẩu bot và cung cấp nó cho họ.", "botpasswords-disabled": "Mật khẩu Bot bị vô hiệu hoá.", "botpasswords-no-central-id": "Để sử dụng mật khẩu bot, bạn phải đăng nhập vào một tài khoản tập trung.", "botpasswords-existing": "Mật khẩu bot hiện tại", @@ -546,17 +546,19 @@ "botpasswords-label-delete": "Xoá", "botpasswords-label-resetpassword": "Đặt lại mật khẩu", "botpasswords-label-grants": "Các quyền có liên quan:", + "botpasswords-help-grants": "Các lượt cấp phép cho phép truy cập các quyền người dùng mà một tài khoản đã có sẵn. Xem thêm thông tin trong [[Special:ListGrants|bảng cấp phép]].", "botpasswords-label-restrictions": "Hạn chế sử dụng:", "botpasswords-label-grants-column": "Cấp quyền", "botpasswords-bad-appid": "Bot có tên \"$1\" không hợp lệ.", "botpasswords-insert-failed": "Không thể thêm tên bot \"$1\". Nó đã được thêm vào chưa?", "botpasswords-update-failed": "Thất bại khi cập nhật bot có tên \"$1\". Có phải nó đã bị xóa?", "botpasswords-created-title": "Mật khẩu bot đã được tạo", - "botpasswords-created-body": "Mật khẩu bot \"$1\" đã được tạo thành công.", + "botpasswords-created-body": "Đã tạo mật khẩu cho bot “$1” của người dùng “$2”.", "botpasswords-updated-title": "Mật khẩu Bot đã được cập nhật", - "botpasswords-updated-body": "Mật khẩu bot \"$1\" đã được cập nhật thành công.", + "botpasswords-updated-body": "Đã cập nhật mật khẩu cho bot “$1” của người dùng “$2”.", "botpasswords-deleted-title": "Bot mật khẩu đã bị xóa", - "botpasswords-deleted-body": "Mật khẩu bot \"$1\" đã bị xóa.", + "botpasswords-deleted-body": "Đã xóa mật khẩu cho bot “$1” của người dùng “$2”.", + "botpasswords-newpassword": "Mật khẩu mới để đăng nhập như $1 là $2. Xin hãy ghi lại mật khẩu này để mai mốt tham khảo.", "botpasswords-no-provider": "BotPasswordsSessionProvider không có sẵn.", "botpasswords-restriction-failed": "Mật khẩu bot giới hạn ngăn chặn đăng nhập này.", "botpasswords-invalid-name": "Tên người dùng đã chỉ định không chứa dấu tách mật khẩu bot (\"$1\").", @@ -565,7 +567,7 @@ "resetpass-no-info": "Bạn phải đăng nhập mới có thể truy cập trực tiếp trang này.", "resetpass-submit-loggedin": "Thay đổi mật khẩu", "resetpass-submit-cancel": "Hủy bỏ", - "resetpass-wrong-oldpass": "Mật khẩu tạm hoặc mật khẩu hiện thời không hợp lệ.\nCó thể bạn đã thay đổi thành công mật khẩu của mình hoặc đã yêu cầu cung cấp một mật khẩu tạm mới.", + "resetpass-wrong-oldpass": "Mật khẩu tạm hoặc mật khẩu hiện thời không hợp lệ.\nCó thể bạn đã thay đổi mật khẩu của mình hoặc đã yêu cầu cung cấp một mật khẩu tạm mới.", "resetpass-recycled": "Xin vui lòng chọn một mật khẩu khác với mật khẩu hiện tại.", "resetpass-temp-emailed": "Bạn đã đăng nhập bằng mật khẩu tạm gửi qua thư điện tử. Để hoàn tất việc đăng nhập, bạn phải tạo lại mật khẩu mới tại đây:", "resetpass-temp-password": "Mật khẩu tạm:", @@ -851,7 +853,7 @@ "revdelete-submit": "Áp dụng vào {{PLURAL:$1|phiên bản|các phiên bản}} được chọn", "revdelete-success": "Phiên bản Hiển thị đã cập nhật.", "revdelete-failure": "'''Không thể cập nhật khả năng hiển thị của phiên bản:'''\n$1", - "logdelete-success": "'''Khả năng nhìn thấy của sự kiện đã được thiết lập thành công.'''", + "logdelete-success": "Đã thiết lập khả năng nhìn thấy của nhật trình.", "logdelete-failure": "'''Không thể thiết lập khả năng hiện thị của nhật trình:'''\n$1", "revdel-restore": "đổi mức khả kiến", "pagehist": "Lịch sử trang", @@ -882,10 +884,13 @@ "mergehistory-empty": "Không thể trộn được sửa đổi nào.", "mergehistory-done": "$3 phiên bản của $1 đã được trộn vào [[:$2]].", "mergehistory-fail": "Không thể thực hiện được việc trộn lịch sử sửa đổi, vui lòng chọn lại trang cũng như thông số ngày giờ.", + "mergehistory-fail-bad-timestamp": "Dấu thời gian không hợp lệ.", "mergehistory-fail-invalid-source": "Trang nguồn không hợp lệ.", "mergehistory-fail-invalid-dest": "Trang đích không hợp lệ.", + "mergehistory-fail-no-change": "Kết hợp lịch sử đã không hợp nhất bất kỳ sửa đổi nào. Xin vui lòng kiểm tra lại trang và các thông số thời gian.", "mergehistory-fail-permission": "Không đủ quyền để hợp nhất lịch sử.", "mergehistory-fail-self-merge": "Trang nguồn và đích là giống nhau.", + "mergehistory-fail-timestamps-overlap": "Các phiên bản nguồn trùng với nhau hoặc dẫn sau các phiên bản đích.", "mergehistory-fail-toobig": "Không thể trộn lịch sử vì phải di chuyển $1 phiên bản và vượt quá giới hạn cho phép.", "mergehistory-no-source": "Trang nguồn $1 không tồn tại.", "mergehistory-no-destination": "Trang đích $1 không tồn tại.", @@ -1330,9 +1335,9 @@ "recentchangeslinked-page": "Tên trang:", "recentchangeslinked-to": "Hiện thay đổi tại những trang có liên kết đến trang này thay thế", "recentchanges-page-added-to-category": "[[:$1]] được xếp vào thể loại", - "recentchanges-page-added-to-category-bundled": "[[:$1]] và {{PLURAL:$2|một trang|$2 trang}} nữa được xếp vào thể loại", + "recentchanges-page-added-to-category-bundled": "[[:$1]] và [[Special:WhatLinksHere/$1|{{PLURAL:$2|một trang|$2 trang}} nữa]] được xếp vào thể loại", "recentchanges-page-removed-from-category": "[[:$1]] được gỡ khỏi thể loại", - "recentchanges-page-removed-from-category-bundled": "[[:$1]] và {{PLURAL:$2|một trang|$2 trang}} nữa được gỡ khỏi thể loại", + "recentchanges-page-removed-from-category-bundled": "[[:$1]] và [[Special:WhatLinksHere/$1|{{PLURAL:$2|một trang|$2 trang}} nữa]] được gỡ khỏi thể loại", "autochange-username": "MediaWiki thay đổi tự động", "upload": "Tải tập tin lên", "uploadbtn": "Tải tập tin lên", @@ -1405,6 +1410,7 @@ "uploaded-script-svg": "Tìm thấy phần tử “$1” có khả năng chạy kịch bản trong tập tin SVG được tải lên.", "uploaded-hostile-svg": "Tìm thấy CSS nguy hiểm trong phần tử style của tập tin SVG được tải lên.", "uploaded-event-handler-on-svg": "Không cho phép đặt thuộc tính xử lý sự kiện $1=\"$2\" trong tập tin SVG.", + "uploaded-href-attribute-svg": "Các đặc tính href trong tập tin SVG chỉ được phép dẫn đến các trang http:// hoặc https://, nhưng gặp phải <$1 $2=\"$3\">.", "uploaded-href-unsafe-target-svg": "Tìm thấy href đến đích URI data: không an toàn <$1 $2=\"$3\"> trong tập tin SVG được tải lên.", "uploaded-animate-svg": "Tìm thấy thẻ “animate” có thể thay đổi href qua thuộc tính “from” <$1 $2=\"$3\"> trong tập tin SVG được tải lên.", "uploaded-setting-event-handler-svg": "Đã ngăn cản việc đặt thuộc tính xử lý sự kiện khi tìm thấy <$1 $2=\"$3\"> trong tập tin SVG được tải lên.", @@ -1438,6 +1444,7 @@ "upload-too-many-redirects": "URL có quá nhiều đổi hướng", "upload-http-error": "Xảy ra lỗi HTTP: $1", "upload-copy-upload-invalid-domain": "Không có sẵn các bản sao tải lên tại tên miền này.", + "upload-foreign-cant-upload": "Wiki này không được thiết lập để tải tập tin lên kho tập tin chung bên ngoài được chỉ định.", "upload-dialog-title": "Tải tập tin lên", "upload-dialog-button-cancel": "Hủy bỏ", "upload-dialog-button-done": "Xong", @@ -1445,7 +1452,9 @@ "upload-dialog-button-upload": "Tải lên", "upload-form-label-infoform-title": "Chi tiết", "upload-form-label-infoform-name": "Tên", + "upload-form-label-infoform-name-tooltip": "Một tiêu đề mô tả duy nhất cho tập tin, mà sẽ được dùng để làm một tên file. Bạn có thể sử dụng ngôn ngữ đơn giản với các dấu cách. Không bao gồm phần mở rộng của file.", "upload-form-label-infoform-description": "Miêu tả", + "upload-form-label-infoform-description-tooltip": "Miêu tả một cách ngắn gọn mỗi điều đáng kể về tác phẩm này.\nNếu là hình chụp, hãy nói đến những vật thể chính, cũng như tình hình, sự kiện, hay địa điểm của hình chụp.", "upload-form-label-usage-title": "Sử dụng", "upload-form-label-usage-filename": "Tên tập tin", "foreign-structured-upload-form-label-own-work": "Đây là tác phẩm của chính tôi", @@ -1508,6 +1517,7 @@ "uploadstash-badtoken": "Tác vụ bị thất bại, có lẽ vì thông tin đăng nhập của bạn đã hết hạn. Hãy thử lại.", "uploadstash-errclear": "Việc dọn sạch các tập tin bị thất bại.", "uploadstash-refresh": "Làm mới danh sách tập tin", + "uploadstash-thumbnail": "xem hình thu nhỏ", "invalid-chunk-offset": "Khúc lệch (chunk offset) không hợp lệ", "img-auth-accessdenied": "Không cho phép truy cập", "img-auth-nopathinfo": "Thiếu PATH_INFO.\nMáy chủ của bạn không được thiết lập để truyền thông tin này.\nCó thể do nó dựa trên CGI và không hỗ trợ img_auth.\nXem [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Image_Authorization hướng dẫn điều khiển truy cập hình ảnh].", @@ -1775,6 +1785,7 @@ "apisandbox-dynamic-parameters-add-label": "Thêm tham số:", "apisandbox-dynamic-parameters-add-placeholder": "Tên tham số", "apisandbox-dynamic-error-exists": "Một tham số có tên \"$1\" đã tồn tại.", + "apisandbox-deprecated-parameters": "Tham số bị phản đối", "apisandbox-fetch-token": "Tự động điền token này", "apisandbox-submit-invalid-fields-title": "Một số field là không hợp lệ", "apisandbox-submit-invalid-fields-message": "Xin vui lòng sửa các miền được đánh dấu và thử lại.", @@ -1784,6 +1795,8 @@ "apisandbox-results-error": "Một lỗi xuất hiện khi tải các đáp ứng truy vấn API: $1.", "apisandbox-request-url-label": "URL của yêu cầu:", "apisandbox-request-time": "Thời gian yêu cầu: $1 ms", + "apisandbox-results-fixtoken": "Sửa lại dấu hiệu và gửi lại", + "apisandbox-results-fixtoken-fail": "Thất bại khi lấy dấu hiệu “$1”.", "apisandbox-alert-page": "Các miền trên Trang này là không hợp lệ.", "apisandbox-alert-field": "Giá trị của miền này là không hợp lệ.", "booksources": "Nguồn sách", @@ -1824,8 +1837,6 @@ "categories-submit": "Xem", "categoriespagetext": "{{PLURAL:$1|Thể loại|Các thể loại}} dưới đây có trang hoặc tập tin phương tiện.\nNhững [[Special:UnusedCategories|thể loại trống]] không được hiển thị tại đây.\nXem thêm [[Special:WantedCategories|thể loại cần thiết]].", "categoriesfrom": "Hiển thị thể loại bằng đầu từ:", - "special-categories-sort-count": "xếp theo số trang", - "special-categories-sort-abc": "xếp theo vần", "deletedcontributions": "Đóng góp đã bị xóa của thành viên", "deletedcontributions-title": "Đóng góp đã bị xóa của thành viên", "sp-deletedcontributions-contribs": "đóng góp", @@ -1866,6 +1877,8 @@ "listgrouprights-namespaceprotection-header": "Hạn chế không gian tên", "listgrouprights-namespaceprotection-namespace": "Không gian tên", "listgrouprights-namespaceprotection-restrictedto": "Quyền cho phép người dùng sửa đổi", + "listgrants": "Cấp phép", + "listgrants-summary": "Danh sách sau có các lượt cấp phép và thông tin về quyền truy cập quyền người dùng. Những người dùng có thể cho phép các ứng dụng sử dụng tài khoản của họ, các quyền được hạn chế tùy theo người dùng cấp phép cho ứng dụng. Một ứng dụng hoạt động nhân danh người dùng thực sự chỉ có thể sử dụng các quyền mà người dùng thật có.\nCó thể có [[{{MediaWiki:Listgrouprights-helppage}}|thêm thông tin]] về các quyền nói riêng.", "listgrants-grant": "Cấp phép", "listgrants-rights": "Quyền lợi", "trackingcategories": "Thể loại phần mềm", @@ -2010,12 +2023,14 @@ "changecontentmodel-title-label": "Tên trang", "changecontentmodel-model-label": "Kiểu nội dung mới", "changecontentmodel-reason-label": "Lý do:", + "changecontentmodel-submit": "Thay đổi", "changecontentmodel-success-title": "Kiểu nội dung đã thay đổi", "changecontentmodel-success-text": "Kiểu nội dung của [[:$1]] đã được thay đổi.", "changecontentmodel-cannot-convert": "Không thể chuyển đổi nội dung [[:$1]] thành nội dung dưới dạng $2.", "changecontentmodel-nodirectediting": "Kiểu nội dung $1 không hỗ trợ sửa đổi trực tiếp", "log-name-contentmodel": "Nhật trình thay đổi kiểu nội dung", "log-description-contentmodel": "Sự kiện có liên quan đến kiểu nội dung của trang.", + "logentry-contentmodel-new": "$1 {{GENDER:$2}}đã tạo trang $3 với mô hình nội dung không mặc định “$5”", "logentry-contentmodel-change": "$1 {{GENDER:$2}}đã thay đổi kiểu nội dung của trang $3 từ “$4” thành “$5”", "logentry-contentmodel-change-revertlink": "lùi lại", "logentry-contentmodel-change-revert": "lùi lại", @@ -2422,7 +2437,7 @@ "import-nonewrevisions": "Không nhập phiên bản nào (tất cả các phiên bản đều đã có sẵn hoặc bị bỏ qua do lỗi).", "xml-error-string": "$1 tại dòng $2, cột $3 (byte $4): $5", "import-upload": "Tải lên dữ liệu XML", - "import-token-mismatch": "Mất dữ liệu phiên làm việc. Xin hãy thử lại lần nữa.", + "import-token-mismatch": "Mất dữ liệu phiên làm việc.\n\nCó thể bạn đã được đăng xuất. Xin hãy xác nhận rằng bạn vẫn được đăng nhập và thử lại.\nNếu vẫn không được, hãy thử [[Special:UserLogout|đăng xuất]] rồi đăng nhập lại, và kiểm tra rằng trình duyệt của bạn cho phép các cookie của trang Web này.", "import-invalid-interwiki": "Không thể nhập trang từ wiki được chỉ định.", "import-error-edit": "Trang “$1” không được nhập tại vì bạn không được phép sửa đổi nó.", "import-error-create": "Trang “$1” không được nhập tại vì bạn không được phép tạo ra nó.", @@ -2439,11 +2454,7 @@ "import-logentry-upload-detail": "Đã nhập $1 phiên bản", "import-logentry-interwiki-detail": "Đã nhập $1 phiên bản từ $2", "javascripttest": "Kiểm thử JavaScript", - "javascripttest-pagetext-noframework": "Trang này dành cho việc chạy các ca kiểm thử JavaScript.", - "javascripttest-pagetext-unknownframework": "Nền tảng kiểm thử không rõ “$1”.", "javascripttest-pagetext-unknownaction": "Tác vụ không rõ “$1”.", - "javascripttest-pagetext-frameworks": "Hãy chọn một trong những nền tảng kiểm thử sau: $1", - "javascripttest-pagetext-skins": "Hãy chọn giao diện để sử dụng với các ca kiểm thử:", "javascripttest-qunit-intro": "Xem [$1 tài liệu kiểm thử] tại mediawiki.org.", "tooltip-pt-userpage": "Trang cá nhân của tôi", "tooltip-pt-anonuserpage": "Trang của IP bạn đang dùng", @@ -2484,7 +2495,7 @@ "tooltip-feed-rss": "Nguồn cấp RSS của trang này", "tooltip-feed-atom": "Nguồn cấp Atom của trang này", "tooltip-t-contributions": "Danh sách đóng góp của {{GENDER:$1|người này}}", - "tooltip-t-emailuser": "Gửi thư cho người này", + "tooltip-t-emailuser": "Gửi thư cho {{GENDER:$1|người dùng này}}", "tooltip-t-info": "Thêm chi tiết về trang này", "tooltip-t-upload": "Tải hình ảnh hoặc tập tin lên", "tooltip-t-specialpages": "Danh sách các trang đặc biệt", @@ -2535,7 +2546,7 @@ "lastmodifiedatby": "Trang này được $3 cập nhật lần cuối lúc $2 $1.", "othercontribs": "Dựa trên công trình của $1.", "others": "những người khác", - "siteusers": "{{PLURAL:$2|Thành viên|Các thành viên}} $1 của {{SITENAME}}", + "siteusers": "{{SITENAME}} {{PLURAL:$2|{{GENDER:$1|người dùng}}|users}} $1", "anonusers": "{{PLURAL:$2|người dùng|những người dùng}} vô danh $1 tại {{SITENAME}}", "creditspage": "Trang ghi nhận đóng góp", "nocredits": "Không có thông tin ghi nhận đóng góp cho trang này.", @@ -2597,6 +2608,7 @@ "pageinfo-category-files": "Số tập tin", "markaspatrolleddiff": "Đánh dấu tuần tra", "markaspatrolledtext": "Đánh dấu tuần tra trang này", + "markaspatrolledtext-file": "Đánh dấu phiên bản fiel này là đã kiểm tra", "markedaspatrolled": "Đã đánh dấu tuần tra", "markedaspatrolledtext": "Phiên bản được chọn của [[:$1]] đã được đánh dấu tuần tra.", "rcpatroldisabled": "“Thay đổi gần đây” của các trang tuần tra không bật", @@ -2649,6 +2661,7 @@ "newimages-legend": "Bộ lọc", "newimages-label": "Tên tập tin (hoặc một phần tên):", "newimages-showbots": "Xem các tập tin do bot tải lên", + "newimages-hidepatrolled": "Ẩn tập tin tải lên đã tuần tra", "noimages": "Chưa có hình.", "ilsubmit": "Tìm kiếm", "bydate": "theo ngày", @@ -2740,8 +2753,8 @@ "exif-colorspace": "Không gian màu", "exif-componentsconfiguration": "Ý nghĩa thành phần", "exif-compressedbitsperpixel": "Độ nén (bit/điểm)", - "exif-pixelydimension": "Chiều ngang hình", - "exif-pixelxdimension": "Chiều cao hình", + "exif-pixelxdimension": "Chiều ngang hình", + "exif-pixelydimension": "Chiều cao hình", "exif-usercomment": "Lời bình của tác giả", "exif-relatedsoundfile": "Tập tin âm thanh liên quan", "exif-datetimeoriginal": "Ngày giờ sinh dữ liệu", @@ -2893,8 +2906,16 @@ "exif-compression-34712": "JPEG 2000", "exif-copyrighted-true": "Dưới bản quyền", "exif-copyrighted-false": "Cờ bản quyền không được đặt", + "exif-photometricinterpretation-0": "Trắng đen (trắng là 0)", "exif-photometricinterpretation-1": "Trắng đen (đen là 0)", "exif-photometricinterpretation-2": "RGB", + "exif-photometricinterpretation-3": "Bảng màu", + "exif-photometricinterpretation-4": "Mặt nạ trong suốt", + "exif-photometricinterpretation-5": "Riêng rẽ (có lẽ CMYK)", + "exif-photometricinterpretation-9": "CIE L*a*b* (mã hóa Hiệp hội Màu sắc Quốc tế)", + "exif-photometricinterpretation-10": "CIE L*a*b* (mã hóa Liên minh Viễn thông Quốc tế)", + "exif-photometricinterpretation-32803": "Dãy bộ lọc màu sắc", + "exif-photometricinterpretation-34892": "Thô tuyến", "exif-unknowndate": "Không biết ngày", "exif-orientation-1": "Thường", "exif-orientation-2": "Lộn ngược theo phương ngang", @@ -2906,6 +2927,8 @@ "exif-orientation-8": "Quay 90° bên phải", "exif-planarconfiguration-1": "định dạng thấp", "exif-planarconfiguration-2": "định dạng phẳng", + "exif-xyresolution-i": "$1 điểm/inch", + "exif-xyresolution-c": "$1 điểm/cm", "exif-colorspace-65535": "Chưa hiệu chỉnh", "exif-componentsconfiguration-0": "không tồn tại", "exif-exposureprogram-0": "Không chỉ định", @@ -3076,9 +3099,10 @@ "scarytranscludefailed-httpstatus": "[Truy xuất bản mẫu $1 bị thất bại: HTTP $2]", "scarytranscludetoolong": "[Địa chỉ URL quá dài]", "deletedwhileediting": "'''Cảnh báo''': Trang này đã bị xóa sau khi bắt đầu sửa đổi!", - "confirmrecreate": "Thành viên [[User:$1|$1]] ([[User talk:$1|thảo luận]]) đã xóa trang này sau khi bạn bắt đầu sửa đổi trang với lý do:\n: ''$2''\nXin hãy xác nhận bạn thực sự muốn tạo lại trang này.", + "confirmrecreate": "Thành viên [[User:$1|$1]] ([[User talk:$1|thảo luận]]) đã xóa trang này sau khi bạn bắt đầu sửa đổi trang với lý do:\n: $2\nXin hãy xác nhận bạn thực sự muốn tạo lại trang này.", "confirmrecreate-noreason": "Người dùng [[User:$1|$1]] ([[User talk:$1|talk]]) xóa trang này sau khi bạn bắt đầu sửa đổi nó. Bạn có chắc chắn muốn tạo lại trang này không?", "recreate": "Tạo ra lại", + "unit-pixel": "điểm ảnh", "confirm_purge_button": "Làm tươi", "confirm-purge-top": "Làm sạch vùng nhớ đệm của trang này?", "confirm-purge-bottom": "Làm mới một trang sẽ giúp xóa bộ đệm và buộc hiển thị phiên bản gần nhất.", @@ -3241,8 +3265,7 @@ "version-libraries-description": "Miêu tả", "version-libraries-authors": "Tác giả", "redirect": "Đổi hướng đến tập tin, người dùng, trang, hoặc ID đăng nhập", - "redirect-legend": "Đổi hướng đến tập tin hoặc trang", - "redirect-summary": "Trang đặc biệt này đổi hướng đến một tập tin (theo tên tập tin được cho vào), trang (theo số phiên bản hoặc số trang được cho vào), hoặc trang cá nhân (theo số thành viên). Cách sử dụng: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/page/64308]], [[{{#Special:Redirect}}/revision/328429]], hoặc [[{{#Special:Redirect}}/user/101]].", + "redirect-summary": "Trang đặc biệt này đổi hướng đến một tập tin (theo tên tập tin được cho vào), trang (theo số phiên bản hoặc số trang được cho vào), trang cá nhân (theo số thành viên), hoặc mục nhật trình (theo số mục nhật trình). Cách sử dụng: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/page/64308]], [[{{#Special:Redirect}}/revision/328429]], [[{{#Special:Redirect}}/user/101]], hoặc [[{{#Special:Redirect}}/logid/186]].", "redirect-submit": "Đi", "redirect-lookup": "Tra cứu:", "redirect-value": "Giá trị:", @@ -3250,10 +3273,10 @@ "redirect-page": "Số trang", "redirect-revision": "Số phiên bản trang", "redirect-file": "Tên tập tin", + "redirect-logid": "Số mục nhật trình", "redirect-not-exists": "Không tìm thấy giá trị", "fileduplicatesearch": "Tìm kiếm các tập tin trùng lắp", "fileduplicatesearch-summary": "Tìm kiếm các bản sao y hệt với tập tin khác, theo giá trị băm của nó.", - "fileduplicatesearch-legend": "Tìm kiếm tập tin trùng lắp", "fileduplicatesearch-filename": "Tên tập tin:", "fileduplicatesearch-submit": "Tìm kiếm", "fileduplicatesearch-info": "$1×$2 điểm ảnh
Kích thước tập tin: $3
Kiểu MIME: $4", @@ -3325,7 +3348,7 @@ "tags-delete-not-allowed": "Thẻ được định nghĩa bởi một mở rộng không thể bị xóa trừ khi mở rộng đặc biệt cho phép điều đó xảy ra.", "tags-delete-not-found": "Thẻ “$1” không tồn tại.", "tags-delete-too-many-uses": "Thẻ “$1” được áp dụng cho hơn $2 phiên bản, có nghĩa là nó không thể bị xóa.", - "tags-delete-warnings-after-delete": "Thẻ “$1” bị xóa thành công, nhưng gặp {{PLURAL:$2|cảnh báo|các cảnh báo}} sau:", + "tags-delete-warnings-after-delete": "Thẻ “$1” đã được xóa thành công, nhưng gặp phải {{PLURAL:$2|cảnh báo|các cảnh báo}} sau:", "tags-activate-title": "Kích hoạt thẻ", "tags-activate-question": "Bạn sắp sửa kích hoạt thẻ “$1”.", "tags-activate-reason": "Lý do:", @@ -3583,8 +3606,9 @@ "expand_templates_generate_xml": "Xem cây phân tích XML", "expand_templates_generate_rawhtml": "Hiển thị HTML thô", "expand_templates_preview": "Xem trước", - "expand_templates_preview_fail_html": "{{SITENAME}} cho phép mã nguồn HTML thô và dữ liệu phiên bị mất, nên bản xem trước bị ẩn để tránh tấn công JavaScript.\n\nNếu bạn thực sự muốn xem trước mã nguồn này, xin hãy thử lại nữa.\nNếu vẫn không được, hãy thử [[Special:UserLogout|đăng xuất]] rồi đăng nhập lại.", + "expand_templates_preview_fail_html": "{{SITENAME}} cho phép mã nguồn HTML thô và dữ liệu phiên bị mất, nên bản xem trước bị ẩn để tránh tấn công JavaScript.\n\nNếu bạn thực sự muốn xem trước mã nguồn này, xin hãy thử lại nữa.\nNếu vẫn không được, hãy thử [[Special:UserLogout|đăng xuất]] rồi đăng nhập lại, và kiểm tra rằng trình duyệt của bạn cho phép các cookie của trang Web này.", "expand_templates_preview_fail_html_anon": "{{SITENAME}} cho phép mã nguồn HTML thô và dữ liệu phiên bị mất, nên bản xem trước bị ẩn để tránh tấn công JavaScript.\n\nNếu bạn thực sự muốn xem trước mã nguồn này, xin hãy thử lại nữa.\nNếu vẫn không được, hãy [[Special:UserLogin|đăng nhập]] và thử lại lần nữa.", + "expand_templates_input_missing": "Bạn phải cung cấp văn bản nhập.", "pagelanguage": "Thay đổi ngôn ngữ của trang", "pagelang-name": "Trang", "pagelang-language": "Ngôn ngữ", @@ -3603,8 +3627,8 @@ "mediastatistics": "Thống kê phương tiện", "mediastatistics-summary": "Thống kê về các kiểu tập tin đã tải lên. Bảng này chỉ liệt kê phiên bản mới nhất của các tập tin. Các phiên bản cũ hoặc các phiên bản bị xóa được bỏ qua.", "mediastatistics-nbytes": "$1 byte ($2; $3%)", - "mediastatistics-bytespertype": "Tổng kích thước tập tin của phần này: $1 byte.", - "mediastatistics-allbytes": "Tổng kích thước của tất cả các tập tin: $1 byte.", + "mediastatistics-bytespertype": "Tổng kích thước tập tin của phần này: $1 byte ($2; $3%).", + "mediastatistics-allbytes": "Tổng kích thước của tất cả các tập tin: $1 byte ($2).", "mediastatistics-table-mimetype": "Kiểu MIME", "mediastatistics-table-extensions": "Phần mở rộng có thể", "mediastatistics-table-count": "Số tập tin", @@ -3660,6 +3684,20 @@ "mw-widgets-titleinput-description-redirect": "đổi hướng đến $1", "api-error-blacklisted": "Xin vui lòng chọn một tên khác miêu tả đầy đủ.", "sessionmanager-tie": "Không thể kết hợp nhiều yêu cầu xác thực loại: $1.", + "sessionprovider-generic": "phiên $1", + "sessionprovider-mediawiki-session-cookiesessionprovider": "phiên dựa trên cookie", "sessionprovider-nocookies": "Cookie có thể bị vô hiệu hóa. Đảm bảo bạn đã bật cookie và bắt đầu một lần nữa.", - "randomrootpage": "Trang gốc ngẫu nhiên" + "randomrootpage": "Trang gốc ngẫu nhiên", + "log-action-filter-protect": "Loại bảo vệ:", + "log-action-filter-upload": "Loại tải lên:", + "log-action-filter-all": "Tất cả", + "log-action-filter-block-block": "Khối", + "log-action-filter-import-upload": "Nhập bằng cách tải lên XML", + "log-action-filter-newusers-create": "Tạo bởi người dùng vô danh", + "log-action-filter-newusers-create2": "Tạo bởi người dùng đã đăng ký", + "log-action-filter-newusers-byemail": "Tạo với mật khẩu được gửi qua thư điện tử", + "log-action-filter-protect-protect": "Bảo vệ", + "log-action-filter-rights-autopromote": "Tự động thay đổi", + "log-action-filter-upload-upload": "Tải lên mới", + "log-action-filter-upload-overwrite": "Tải lên lại" } diff --git a/languages/i18n/vo.json b/languages/i18n/vo.json index b98b3a53cb..998e2c50ee 100644 --- a/languages/i18n/vo.json +++ b/languages/i18n/vo.json @@ -1205,8 +1205,6 @@ "categories": "Klads", "categoriespagetext": "Klads sököl labons padis u ragivis.\n[[Special:UnusedCategories|Klads no pageböls]] no pajonons is.\nLogolös i [[Special:WantedCategories|klads pevilöl]].", "categoriesfrom": "Jonön padis primölo de:", - "special-categories-sort-count": "leodükön ma num", - "special-categories-sort-abc": "leodükön ma lafab", "deletedcontributions": "Gebanakeblünots pemoüköl", "deletedcontributions-title": "Gebanakeblünots pemoüköl", "sp-deletedcontributions-contribs": "keblünots", @@ -1828,8 +1826,8 @@ "exif-colorspace": "Kölaspad", "exif-componentsconfiguration": "Sinif komponena alik", "exif-compressedbitsperpixel": "Mod kobopedama magoda", - "exif-pixelydimension": "Magodavidot", - "exif-pixelxdimension": "Magodageilot", + "exif-pixelxdimension": "Magodavidot", + "exif-pixelydimension": "Magodageilot", "exif-usercomment": "Küpets gebana", "exif-relatedsoundfile": "Tonaragiv tefik", "exif-datetimeoriginal": "Dät e tim jafama nünodas", @@ -2076,7 +2074,6 @@ "redirect-file": "Ragivanem", "fileduplicatesearch": "Sukön ragivis petelüköl", "fileduplicatesearch-summary": "Sukön ragivis petelüköl stabü völad kontrolasaedota onsik.", - "fileduplicatesearch-legend": "Sukön telükoti", "fileduplicatesearch-filename": "Ragivanem:", "fileduplicatesearch-submit": "Sukön", "fileduplicatesearch-info": "pixels $1 × $2
Ragivagretot: $3
MIME-sot: $4", diff --git a/languages/i18n/vro.json b/languages/i18n/vro.json index afd8d8d996..3e1403c9e9 100644 --- a/languages/i18n/vro.json +++ b/languages/i18n/vro.json @@ -1517,8 +1517,8 @@ "exif-colorspace": "Värmiruum", "exif-componentsconfiguration": "Egä osa tähendüs", "exif-compressedbitsperpixel": "Pildi kokkopakmismuud", - "exif-pixelydimension": "Kõlbolinõ pildi lakjus", - "exif-pixelxdimension": "Kõlbolinõ pildi korgus", + "exif-pixelxdimension": "Kõlbolinõ pildi lakjus", + "exif-pixelydimension": "Kõlbolinõ pildi korgus", "exif-usercomment": "Pruukja kommõntaariq", "exif-relatedsoundfile": "Manopant helüteedüstü", "exif-datetimeoriginal": "Luumisaig", diff --git a/languages/i18n/wa.json b/languages/i18n/wa.json index 20ee5aa000..898a3df063 100644 --- a/languages/i18n/wa.json +++ b/languages/i18n/wa.json @@ -14,6 +14,7 @@ "tog-hideminor": "Èn nén mostrer les dierins candjmints mineurs", "tog-hidepatrolled": "Èn nén mostrer les candjmints ddja patrouyîs", "tog-newpageshidepatrolled": "Èn nén mostrer el djivêye des novelès pådjes les cenes dedja patrouyeyes", + "tog-hidecategorization": "Èn nén mostrer les categorijhaedjes des pådjes", "tog-extendwatchlist": "Ragrandi l' djivêye po mostrer tos les candjmints, nén seulmint les dierins", "tog-usenewrc": "Relére par pådje dins les dierins candjmints et l' djivêye des shuvous (i fåt JavaScript)", "tog-numberheadings": "Limerotaedje otomatike des tites", @@ -34,7 +35,7 @@ "tog-shownumberswatching": "Mostrer l' nombe d' uzeus ki shuvèt l' pådje", "tog-oldsig": "Siné pol moumint:", "tog-fancysig": "Sinateure avou do tecse wiki (sins loyén otomatike)", - "tog-uselivepreview": "Eployî l' prévoeyaedje abeye (JavaScript) (Esperimintå)", + "tog-uselivepreview": "Eployî l' préveyaedje abeye", "tog-forceeditsummary": "M' advierti cwand dji lai vude on rascourti", "tog-watchlisthideown": "Èn nén mostrer les candjmints da minne", "tog-watchlisthidebots": "Èn nén mostrer les candjmints des robots", @@ -45,6 +46,7 @@ "tog-ccmeonemails": "M' evoyî ene copeye des emiles ki dj' evoye ås ôtes", "tog-diffonly": "Èn nén håyner l' contnou del pådje pa dzo l' pådje des diferinces", "tog-showhiddencats": "Mostrer les categoreyes mucheyes", + "tog-norollbackdiff": "Èn nén håyner les diferinces après on disfijhaedje", "tog-useeditwarning": "M' advierti cwand dji cwite ene pådje k' a des candjmints nén schapés", "underline-always": "Tofer", "underline-never": "Måy", @@ -101,6 +103,18 @@ "oct": "oct", "nov": "nôv", "dec": "dec", + "january-date": "$1 di djanvî", + "february-date": "$1 di fevrî", + "march-date": "$1 di måss", + "april-date": "$1 d' avri", + "may-date": "$1 di may", + "june-date": "$1 di djun", + "july-date": "$1 di djulete", + "august-date": "$1 d' awousse", + "september-date": "$1 di setimbe", + "october-date": "$1 d' octôbe", + "november-date": "$1 di nôvimbe", + "december-date": "$1 di decimbe", "pagecategories": "{{PLURAL:$1|Categoreye|Categoreyes}}", "category_header": "Årtikes el categoreye «$1»", "subcategories": "Dizo-categoreyes", @@ -120,9 +134,9 @@ "newwindow": "(drovant en on novea purnea)", "cancel": "Rinoncî", "moredotdotdot": "Co dpus...", - "mypage": "Mi pådje", + "mypage": "Pådje", "mytalk": "Mi copinaedje", - "anontalk": "Pådje di copene po ciste adresse IP", + "anontalk": "Copinaedje", "navigation": "Naiviaedje", "and": " eyet", "qbfind": "Trover", @@ -133,6 +147,7 @@ "actions": "Accions", "namespaces": "Espåces di lomaedje", "variants": "Variantes", + "navigation-heading": "Menu d' naiviaedje", "errorpagetitle": "Aroke", "returnto": "Rivni al pådje «$1».", "tagline": "Èn årtike di {{SITENAME}}.", @@ -148,6 +163,7 @@ "permalink": "Hårdêye viè cisse modêye ci", "print": "Imprimer", "view": "Vey", + "view-foreign": "Vey so $1", "edit": "Candjî", "create": "Ahiver", "editthispage": "Candjî l' pådje", @@ -169,7 +185,7 @@ "articlepage": "Vey l' årtike", "talk": "Copene", "views": "Vuwes", - "toolbox": "Boesse ås usteyes", + "toolbox": "Usteyes", "userpage": "Vey li pådje di l' uzeu", "projectpage": "Vey li pådje do pordjet", "imagepage": "Vey li pådje do fitchî", @@ -187,21 +203,27 @@ "pool-errorunknown": "Aroke nén cnoxhowe", "aboutsite": "Åd fwait di {{SITENAME}}", "aboutpage": "Project:Åd fwait", - "copyright": "Li contnou est dizo l' $1.", + "copyright": "Li contnou est dzo l' licince $1 a moens k' ça soeye dit ôtrumint.", "copyrightpage": "{{ns:project}}:Abondroets", "currentevents": "Actouwålités", "currentevents-url": "Project:Actouwålités", "edithelp": "Aidance", + "helppage-top-gethelp": "Aidance", "mainpage": "Mwaisse pådje", "mainpage-description": "Mwaisse pådje", "portal": "Inte di nozôtes", "portal-url": "Project:Inte di nozôtes", "badaccess": "Åk n' a nén stî avou les permissions", + "badaccess-groups": "L' accion ki vos avoz dmandé est limitêye ås uzeus {{PLURAL:$2|do groupe|des groupes}}: $1.", "versionrequired": "I vs fåt l' modêye $1 di MediaWiki", "versionrequiredtext": "I vs fåt l' modêye $1 di MediaWiki po-z eployî cisse pådje ci. Loukîz [[Special:Version|al pådje des modêyes]]", "ok": "'l est bon", "retrievedfrom": "Prin del pådje «$1»", "youhavenewmessages": "Vos avoz des $1 ($2).", + "youhavenewmessagesfromusers": "{{PLURAL:$4|Vos avoz}} $1 {{PLURAL:$3|d' èn ôte uzeu|di $3 ôtes uzeus}} ($2).", + "youhavenewmessagesmanyusers": "Vous avoz $1 di bråmint d' uzeus ($2).", + "newmessageslinkplural": "{{PLURAL:$1|on novea messaedje|999=noveas messaedjes}}", + "newmessagesdifflinkplural": "{{PLURAL:$1|dierin candjmint|999=dierins candjmints}}", "youhavenewmessagesmulti": "Vos avoz des noveas messaedjes so $1", "editsection": "candjî", "editold": "candjî", @@ -214,6 +236,9 @@ "hidetoc": "catchî", "collapsible-collapse": "erôler", "collapsible-expand": "diswalper", + "confirmable-confirm": "Estoz vs {{GENDER:$1|seur|seure}}?", + "confirmable-yes": "Oyi", + "confirmable-no": "Neni", "thisisdeleted": "Vey ou rapexhî $1?", "viewdeleted": "Vey $1?", "restorelink": "{{PLURAL:$1|on candjmint disfacé|$1 candjmints disfacés}}", @@ -234,12 +259,14 @@ "nstab-template": "Modele", "nstab-help": "Aidance", "nstab-category": "Categoreye", + "mainpage-nstab": "Mwaisse pådje", "nosuchaction": "Nole sifwaite accion", "nosuchactiontext": "L' accion specifieye pal hårdêye n' est nén ricnoxhowe på wiki.\nMotoit ki vos avoz må scrît l' hårdêye ou shuvou on cron loyén.\nÇa pôreut eto esse on bug do programe eployî pa {{SITENAME}}.", "nosuchspecialpage": "Nole sifwaite pådje", "nospecialpagetext": "Vos avoz dmandé ene pådje sipeciåle nén valide, po ene djivêye des pådjes sipeciåles valides, loukîz a [[Special:SpecialPages]].", "error": "Aroke", "databaseerror": "Åk n' a nén stî avou l' båze di dnêyes", + "databaseerror-error": "Aroke: $1", "laggedslavemode": "Asteme: I s' pout ki l' pådje n' åye nén co les dierins candjmints.", "readonly": "Li båze di dnêyes est aclawêye", "missing-article": "Li båze di dnêyes n' a nén trové l' tecse d' ene pådje k' åreut dvou esse trovêye, lomêye «$1» $2.\n\nÇoula arive cwand on shût on loyén po ene diferince k' est houte ou viè l' istwere d' ene pådej disfacêye.\n\nSi c' est nén çoula, motoit k' vos avoz trové on bug dins l' programe.\nAdon dijhoz l' a on [[Special:ListUsers/sysop|manaedjeu]], sins rovyî d' mete li hårdêye (URL) ki mostere l' aroke.", @@ -257,18 +284,22 @@ "cannotdelete": "Dji n' sai disfacer l' pådje ou l' fitchî «$1».\nÇa s' pôreut k' ene ôte sakî l' a ddja disfacé.", "cannotdelete-title": "Dji n' sai disfacer l' pådje «$1»", "badtitle": "Måva tite", - "badtitletext": "Li tite del pådje dimandêye n' esteut nén valide, il estet vude, oudonbén c' esteut on cron loyén eterlingaedje ou eterwiki. Ça s' pout k' il åye onk ou sacwants caracteres ki n' polèt nén esse eployîs dins les tites.", + "badtitletext": "Li tite del pådje dimandêye n' esteut nén valide, il esteut vude, oudonbén c' esteut on cron loyén eterlingaedje ou eterwiki.\nÇa s' pout k' il åye onk ou sacwants caracteres ki n' polèt nén esse eployîs dins les tites.", + "title-invalid-too-long": "Li tite di pådje dimandé est pår trop longou. Ça n' pout nén aveur pus di $1 {{PLURAL:$1|octet|octets}} e l' ecôdaedje UTF-8.", "perfcached": "Les dnêyes ki shuvèt c' est ene copeye e muchete, et ça s' pout ki ça n' soeye nén ttafwaitmint a djoû. Li muchete a-st on macsimom {{PLURAL:$1|d' on rzultat|di $1 rizultats}}.", "perfcachedts": "Les dnêyes ki shuvèt c' est ene copeye e muchete, ey elle ont stî metowes a djoû pol dierin côp li $1. Li muchete a-st on macsimom {{PLURAL:$4|d' on rzultat|di $4 rizultats}}.", "viewsource": "Vey côde sourdant", "viewsource-title": "Côde sourdant di «$1»", "viewsourcetext": "Loukîz li contnou d' l’ årtike, et s’ li rcopyî si vos vloz, por vos bouter dsu foû des fyis:", "protectedinterface": "Cisse pådje ci dene on tecse d' eterface pol programe, eyet elle a stî protedjeye po s' waeranti siconte des abus.", - "editinginterface": "'''Asteme:''' Vos estoz ki candje ene pådje eployeye po fé l' tecse po l' eterface do programe.\nLes candjmints ki vso frîz vont candjî l' rivnance di l' eterface po ds ôtes uzeus.\nPo des ratournaedjes, loukîz purade a [//translatewiki.net/wiki/Main_Page?setlang=en translatewiki.net], li pordjet di locålijhaedje da MediaWiki.", + "editinginterface": "Asteme: Vos estoz ki candje ene pådje eployeye po fé l' tecse po l' eterface do programe.\nLes candjmints ki vos frîz vont candjî l' rivnance di l' eterface po ls ôtes uzeus do wiki.", "cascadeprotected": "Cisse pådje ci a stî protedjeye siconte des candjmints, pask' ele est eploye ådvins {{PLURAL:$1|del pådje shuvante k' est protedjeye|des pådjes shuvantes ki sont protedjeyes}} avou l' tchuze «e cascåde» en alaedje:\n$2", - "logouttext": "'''Vos vs avoz dislodjî.'''\n\nVos ploz continouwer a naivyî so {{SITENAME}} anonimmint, oudonbén [$1 vos relodjî], dizo l' minme uzeu ou dizo èn uzeu diferin.\nNotez ki des pådjes k' i gn a si pôrént continowuer a vey come si vos estîz elodjî, disk' a tant ki vos vudrîz l' muchete di vosse betchteu waibe.", + "logouttext": "Vos vs avoz dislodjî.\n\nNotez ki des pådjes k' i gn a si pôrént continouwer a vey come si vos estîz elodjî, disk' a tant ki vos vudrîz l' muchete di vosse betchteu waibe.", + "welcomeuser": "Bénvnowe, $1!", "yourname": "Vosse no d' elodjaedje:", + "userlogin-yourname": "No d' uzeu", "yourpassword": "Vosse sicret", + "userlogin-yourpassword": "Sicret", "yourpasswordagain": "Ritapez vosse sicret", "remembermypassword": "Rimimbrer m' sicret inte les sessions (nén dpus ki po $1 {{PLURAL:$1|djoû|djoûs}})", "yourdomainname": "Vosse dominne", @@ -279,15 +310,20 @@ "logout": "Si dislodjî", "userlogout": "Si dislodjî", "notloggedin": "Nén elodjî", + "userlogin-joinproject": "S' edjîstrer so {{SITENAME}}", "nologin": "Vos n' avoz nén d' conte so ç' wiki ci? $1.", "nologinlink": "Ahivez on conte da vosse", "createaccount": "Ahiver on novea conte", "gotaccount": "Vos avoz ddja on conte so ç' wiki ci? '''$1'''.", "gotaccountlink": "Elodjîz vs", "userlogin-resetlink": "Avoz rovyî les pondants et djondants po s' elodjî?", - "createaccountmail": "pa emile", + "createaccountmail": "Eployî on scret timporaire a l' astcheyance eyet l' evoyî so l' emile diné", + "createacct-realname": "Vraiy no (opcionel)", "createaccountreason": "Råjhon:", + "createacct-reason": "Råjhon", "createacct-another-submit": "Ahiver èn ôte conte", + "createacct-benefit-body1": "{{PLURAL:$1|candjmint|candjmints}}", + "createacct-benefit-body2": "{{PLURAL:$1|pådje|pådjes}}", "badretype": "Vos avoz dné deus screts diferins.", "userexists": "Li no d' uzeu ki vs avoz tchoezi est ddja eployî.\nTchoezixhoz è èn ôte s' i vs plait.", "loginerror": "Aroke d' elodjaedje", @@ -299,10 +335,12 @@ "nosuchuser": "I g na nou uzeu dizo l' no «$1».\nNotez k' les nos d' uzeu fjhèt l' diferince etur pitites et grandès letes.\nVerifyîz çou k' vos avoz tapé, oudonbén [[Special:UserLogin/signup|ahivez on novea conte]].", "nosuchusershort": "I g na nou uzeu dizo l' no «$1». Verifyîz çou k' vos avoz tapé.", "nouserspecified": "Vos dvoz dner on no d' elodjaedje.", + "login-userblocked": "{{GENDER:$1|Cist uzeu est bloké|Ciste uzeuse est blokêye}}. L' elodjaedje n' est nén possibe.", "wrongpassword": "Li scret ki vs avoz dné est måva. Rissayîz s' i vs plait.", "wrongpasswordempty": "Vos avoz dné on vude sicret. Rissayîz s' i vs plait.", "passwordtooshort": "Li scret doet esse di pol moens {{PLURAL:$1|1 caractere|$1 caracteres}}.", - "mailmypassword": "M' emiler on novea scret", + "passwordtoolong": "Les screts n' polèt nén aveur pus di {{PLURAL:$1|1 caractere|$1 caracteres}}.", + "mailmypassword": "Rifé l' sicret", "passwordremindertitle": "Novea scret timporaire po {{SITENAME}}", "passwordremindertext": "Ene sakî (probåblumint vos-minme, avou l' adresse IP $1) a dmandé \non novea scret po {{SITENAME}} ($4).\nOn scret timporare po l' uzeu «$2» a stî fwait, c' est «$3».\nSi c' est vos k' a fwait l' dimande, vos vs divoz elodjî eyet tchoezi on novea scret.\nLi scret timporaire ni srè pus valide après {{PLURAL:$5|on djoû|$5 djoûs}}.\n\nSi c' est ene ôte sakî k' a fwait l' dimande, ou si vos vs avoz rtrové l' vî scret eyet \nnel pus vleur candjî, vos ploz djusse ignorer ci messaedje ci eyet continouwer avou l' vî scret.", "noemail": "I n' a pont d' adresse emile di cnoxhowe po l' uzeu «$1».", @@ -318,20 +356,22 @@ "emailconfirmlink": "Acertinaedje di voste adresse emile", "invalidemailaddress": "L' adresse emile ni pout nén esse acceptêye la k' i shonnreut k' ele soeye dins ene cogne nén valide.\nTapez ene adresse emile sicrîte comifåt oudobén vudîz l' tchamp, s' i vs plait.", "accountcreated": "Conte ahivé", - "accountcreatedtext": "Li conte d' uzeu «$1» a stî ahivé.", + "accountcreatedtext": "Li conte d' uzeu «[[{{ns:User}}:$1|$1]]» ([[{{ns:User talk}}:$1|copene]]) a stî ahivé.", "loginlanguagelabel": "Lingaedje: $1", "pt-login": "S' elodjî", "pt-login-button": "S' elodjî", "pt-createaccount": "Ahiver on novea conte", "pt-userlogout": "\nSi dislodjî", "changepassword": "Candjî l' sicret", - "resetpass_announce": "Vos vs avoz elodjî avou on scret timporaire ki vos a stî emilé.\nPor vos fini l' elodjaedje, vos dvoz defini on novea scret:", + "resetpass_announce": "Por vos fini l' elodjaedje, vos dvoz defini on novea scret.", "resetpass_header": "Candjî l' sicret do conte", "oldpassword": "Vî scret:", "newpassword": "Noû scret:", "retypenew": "Ritapez l' noû scret:", "resetpass_submit": "Defini on scret et s' elodjî", - "changepassword-success": "Vosse sicret a stî candjî comifåt!\nAsteure l' elodjaedje...", + "changepassword-success": "Vosse sicret a stî candjî comifåt!", + "botpasswords-label-update": "Mete a djoû", + "botpasswords-label-delete": "Disfacer", "resetpass_forbidden": "Les screts n' polèt nén esse candjîs", "resetpass-no-info": "Vos dvoz esse elodjî po pleur aveur accès a cisse pådje ci.", "resetpass-submit-loggedin": "Candjî l' sicret", @@ -346,8 +386,8 @@ "passwordreset-capture-help": "Si vos clitchîz cisse boesse ci, l' emile (eyet li scret timporaire) vos srè håyné e minme tins k' il est emilé.", "passwordreset-email": "Adresse emile:", "passwordreset-emailtitle": "Detays do contre so {{SITENAME}}", - "changeemail": "Candjî l' emile", - "changeemail-header": "Candjî l' adresse emile do conte", + "changeemail": "Candjî ou disfacer l' adresse emile", + "changeemail-header": "Completez cisse pådje ci po candjî l' adresse emile do conte.\nSi vos vloz disfacer totes les adresses aloyeyes, leyîz l' tchamp vude å moumint d' evoyî.", "changeemail-no-info": "Vos dvoz esse elodjî po pleur aveur accès a cisse pådje ci.", "changeemail-oldemail": "Adresse emile pol moumint:", "changeemail-newemail": "Novele adresse emile:", @@ -372,14 +412,14 @@ "sig_tip": "Li sinateure da vosse, avou l' date et l' eure", "hr_tip": "Roye di coûtchî (a n' nén eployî d' trop)", "summary": "Rascourti:", - "subject": "Sudjet/tiestire:", + "subject": "Sudjet:", "minoredit": "Ci n' est k' ene tchitcheye", "watchthis": "Shuve cist årtike", "savearticle": "Schaper l' pådje", "preview": "Vey divant", "showpreview": "Vey divant", "showdiff": "Vey les candjmints", - "anoneditwarning": "'''Asteme:''' Vos n' estoz nén elodjî.\nVoste adresse IP serè rashiowe dins l' istwere di cisse pådje ci.", + "anoneditwarning": "Asteme: Vos n' estoz nén elodjî.\nVoste adresse IP serè rashiowe dins l' istwere di cisse pådje ci eyet veyowe publicmint.\nSi vos vs [$1 elodjîz] ou [$2 ahivez on conte], les candjmints da vosse seront-st atribouwés a vosse no d' uzeu, et co ds ôtes advintaedjes.", "anonpreviewwarning": "''Vos n' estoz nén elodjî. Si vos schapez c' est voste adresse IP ki serè wårdêye dins l' istwere des candjmints.''", "missingsummary": "'''Asteme:''' Vos n' avoz nén dné on tecse di rascourti po vosse candjmint. Si vos rclitchîz sol boton «Schaper», li candjmint da vosse serè schapé sins nou tecse di rascourti po l' istwere del pådje.", "missingcommenttext": "Tapez on comintaire chal pa dzo s' i vs plait.", @@ -395,10 +435,10 @@ "accmailtitle": "Li scret a stî evoyî.", "accmailtext": "On scret costrût a l' astcheyance po [[User talk:$1|$1]] a stî evoyî a $2.\n\nLi scret po ci novea conte ci pout esse candjî sol pådje di ''[[Special:ChangePassword|candjmint di scret]]'' après l' elodjaedje.", "newarticle": "(Novea)", - "newarticletext": "Vos avoz clitchî so on loyén viè ene pådje ki n' egzistêye nén co.\nMins '''vos''' l' poloz askepyî! Po çoula, vos n' avoz k' a cmincî a taper vosse tecse dins l' boesse di tecse chal pa dzo (alez vey li [$1 pådje d' aidance] po pus d' infôrmåcion).\nSi vos n' voloz nén scrire cisse pådje chal, clitchîz simplumint sol boton '''En erî''' di vosse betchteu waibe po rivni al pådje di dvant.", - "anontalkpagetext": "---- ''Çouchal, c' est li pådje di copene po èn uzeu anonime ki n' a nén (co) fwait on conte por lu s' elodjî, ou ki n' l' eploye nén.\nÇa fwait k' on doet eployî si adresse IP limerike po l' idintifyî.\nCome ene sifwaite adresse IP pout esse eployeye pa pus d' èn uzeu, i s' pout ki vos voeyoz chal des rmarkes et des messaedjes ki n' sont nén por vos.\nLoukîz s' i vs plait po [[Special:UserLogin/signup|fé on novea conte]] ou [[Special:UserLogin|s' elodjî]] po n' pus aveur d' ecramiaedje avou des ôtes uzeus anonimes.''", + "newarticletext": "Vos avoz clitchî so on loyén viè ene pådje ki n' egzistêye nén co.\nMins '''vos''' l' poloz askepyî! Po çoula, vos n' avoz k' a cmincî a taper vosse tecse dins l' boesse di tecse cial pa dzo (alez vey li [$1 pådje d' aidance] po pus d' infôrmåcion).\nSi vos estoz droci par accidint, clitchîz simplumint sol boton En erî di vosse betchteu waibe po rivni al pådje di dvant.", + "anontalkpagetext": "---- ''Çouchal, c' est li pådje di copene po èn uzeu anonime ki n' a nén (co) fwait on conte por lu s' elodjî, ou ki n' l' eploye nén.\nÇa fwait k' on doet eployî si adresse IP limerike po l' idintifyî.\nCome ene sifwaite adresse IP pout esse eployeye pa pus d' èn uzeu, i s' pout ki vos veyoz chal des rmarkes et des messaedjes ki n' sont nén por vos.\nLoukîz s' i vs plait po [[Special:UserLogin/signup|fé on novea conte]] ou [[Special:UserLogin|s' elodjî]] po n' pus aveur d' ecramiaedje avou des ôtes uzeus anonimes.''", "noarticletext": "I gn a pol moumint nou tecse e cisse pådje chal.\nVos ploz [[Special:Search/{{PAGENAME}}|cweri après l' tite di cisse pådje ci]] dins des ôtès pådjes,\noudonbén [{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} cweri dins les djournås],\nou co [{{fullurl:{{FULLPAGENAME}}|action=edit}} ahiver l' pådje].", - "noarticletext-nopermission": "I gn a pol moumint nou tecse e cisse pådje chal.\nVos ploz [[Special:Search/{{PAGENAME}}|cweri après l' tite di cisse pådje ci]] dins des ôtès pådjes,\noudonbén [{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} cweri dins les djournås].", + "noarticletext-nopermission": "I gn a pol moumint nou tecse e cisse pådje chal.\nVos ploz [[Special:Search/{{PAGENAME}}|cweri après l' tite di cisse pådje ci]] dins des ôtès pådjes,\noudonbén [{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} cweri dins les djournås], mins vos n' avoz nén l' livea d' permission pol poleur ahiver.", "blocked-notice-logextract": "{{GENDER:$1|Cist uzeu est bloké|Ciste uzeuse est blokêye}} pol moumint.\nLi dierinne intrêye e djournå des blocaedjes est dnêye chal pa dzo po infôrmåcion:", "clearyourcache": "'''Note:''' après aveur schapé l' pådje, vos l' divoz rafrister, po pleur vey les candjmints dins vosse betchteu waibe.\n* '''Firefox / Safari:''' tchôkîz so ''Shift'' tot clitchant so ''Rafrister'', ou co fjhoz ''Ctrl-F5'' ou ''Ctrl-R'' (''⌘-R'' so on Mac)\n* '''Google Chrome:''' tchôkîz so ''Ctrl-Shift-R'' (''⌘-Shift-R'' on a Mac)\n* '''Internet Explorer:''' tchôkîz so ''Ctrl'' tot clitchant so ''Rafrister'', ou co fjhoz ''Ctrl-F5''\n* '''Konqueror:''' clitchîz so ''Rafrister'' ou tchôkîz so ''F5''\n* '''Opera:''' vudîz l' muchete dins ''Usteyes → Preferinces''.", "usercssyoucanpreview": "'''Racsegne:''' eployîz l' boton «{{int:showpreview}}» po sayî vosse novea CSS divant del schaper.", @@ -425,7 +465,7 @@ "editingold": "'''ASTEME: Vos estoz ki candje ene viye modêye del pådje.\nSi vos l' schapez, tos les candjmints k' ont stî fwaits\ndispoy adon si vont piede.'''", "yourdiff": "Diferinces", "copyrightwarning": "Notez ki tos les contribouwaedjes fwaits po {{SITENAME}} dvèt esse dizo l' licince $2 (loukîz $1 po pus di racsegnes).\nSi vos n' voloz nén ki vosse tecse poye esse candjî eyet spårdou pa tot l' minme kî, adon nel evoyîz nén chal.
\nVos nos acertinez eto ki vos avoz scrît l' tecse vos-minme, oudonbén l' avoz copyî d' on sourdant libe (dominne publik ou on sourdant pareymint libe).\n'''N' EVOYÎZ NÉN DES TECSES DIZO ABONDROETS SINS PERMISSION!'''", - "copyrightwarning2": "Notez ki tos les contribouwaedjes fwaits po {{SITENAME}} polèt esse esse candjîs ou disfacés pa des ôtes contribouweus.\nSi vos n' voloz nén scrire des årtikes ki polèt esse candjîs pa des ôtes, adon nels evoyîz nén chal.
\nVos nos acertinez eto ki vos avoz scrît l' tecse vos-minme, oudonbén l' avoz copyî d' on sourdant libe (voeyoz $1 po pus di racsegnes).\n'''N' EVOYÎZ NÉN DES TECSES DIZO ABONDROETS SINS PERMISSION!'''", + "copyrightwarning2": "Notez ki tos les contribouwaedjes fwaits po {{SITENAME}} polèt esse esse candjîs ou disfacés pa des ôtes contribouweus.\nSi vos n' voloz nén scrire des årtikes ki polèt esse candjîs pa des ôtes, adon nels evoyîz nén chal.
\nVos nos acertinez eto ki vos avoz scrît l' tecse vos-minme, oudonbén l' avoz copyî d' on sourdant libe (veyoz $1 po pus di racsegnes).\n'''N' EVOYÎZ NÉN DES TECSES DIZO ABONDROETS SINS PERMISSION!'''", "longpageerror": "'''AROKE: Li tecse ki vos avoz evoyî fwait di pus d' $1 kilo-octet{{PLURAL:$1||s}}, çou k' est pus ki l' macsimom di $2 kilo-octet{{PLURAL:$2||s}}.'''\nC' est nén possible del schaper sol sierveu.", "readonlywarning": "'''ASTEME: On-z overe sol båze di dnêyes pol moumint, ey elle a stî metowe e mode seulmint-lére.\nDo côp, vos n' såroz schaper vos candjmints asteure.'''\nMotoit vos dvrîz copyî et aclaper l' tecse dins on fitchî da vosse pol poleur rimete pus tård.\n\nLi manaedjeu k' a-st eclawé l' båze di dnêyes a dné cist esplicaedje ci: $1", "protectedpagewarning": "'''ASTEME: Cisse pådje chal a stî protedjeye, seulmint les uzeus avou èn accès di manaedjeu el polèt candjî.'''\nLi dierinne intrêye ezès djournås est håynêye chal pa dzo po referince:", @@ -454,7 +494,7 @@ "currentrev": "Modêye d' asteure", "currentrev-asof": "Dierinne modêye å $1", "revisionasof": "Modêye do $1", - "revision-info": "Modêye do $1 pa $2", + "revision-info": "Modêye do $1 pa $2$7", "previousrevision": "←Modêye di dvant", "nextrevision": "Modêye shuvante→", "currentrevisionlink": "Modêye d' asteure", @@ -479,10 +519,11 @@ "rev-deleted-text-permission": "Cisse modêye ci del pådje a stî '''disfacêye'''.\nVos ploz vey les ca et les ma sol [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} djournå des disfaçaedjes].", "rev-deleted-text-view": "Cisse modêye ci del pådje a stî '''disfacêye'''.\nVos l' poloz co vey; i gn a des detays sol [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} djournå des disfaçaedjes].", "rev-delundel": "mostrer/catchî", + "rev-showdeleted": "mostrer", "revisiondelete": "Disfacer/rapexhî des modêyes", "revdelete-show-file-submit": "Oyi", "logdelete-selected": "{{PLURAL:$1|Evenmint tchoezi|Evenmints tchoezis}} ezès djournås:", - "revdelete-legend": "Defini des restriccions sol voeyaedje", + "revdelete-legend": "Defini des restriccions sol veyaedje", "revdelete-hide-text": "Catchî l' tecse del modêye", "revdelete-hide-comment": "Catchî l' comintaire di candjmint", "revdelete-hide-user": "Catchî l' no d' uzeu/adresse IP do candjeu", @@ -514,7 +555,7 @@ "shown-title": "Mostrer $1 rizultat{{PLURAL:$1||s}} par pådje", "viewprevnext": "Vey ($1 {{int:pipe-separator}} $2) ($3).", "searchmenu-exists": "'''Gn a ddja ene pådje lomêye « [[:$1]] » so ç' wiki ci'''", - "searchmenu-new": "'''Ahiver l' pådje \"[[:$1]]\" so ç' wiki ci!'''", + "searchmenu-new": "Ahiver l' pådje \"[[:$1]]\" so ç' wiki ci!\n{{PLURAL:$2|0=|Loukîz eto l' pådje trovêye pa vosse cweraedje.|Loukîz eto li rzultat di vosse cweraedje.}}", "searchprofile-articles": "Pådjes di contnou", "searchprofile-images": "Multimedia", "searchprofile-everything": "Tote li waibe", @@ -539,6 +580,7 @@ "powersearch-togglelabel": "Tchoezi:", "powersearch-toggleall": "Totafwait", "powersearch-togglenone": "Disclitchî tot", + "powersearch-remember": "Rimimbrer l' tchuze po ls ôtes cweraedjes", "search-external": "Difoûtrin cweraedje", "searchdisabled": "Mande escuzes! Li cweraedje å dvins des årtikes a stî dismetou pol moumint, cåze ki l' sierveu est fortcherdjî. Tot ratindant, vos ploz eployî Google po fé les rcweraedjes so {{SITENAME}}, mins çoula pout esse ene miete vî.", "preferences": "Preferinces", @@ -554,6 +596,7 @@ "prefs-watchlist-days": "Nombe di djoûs a mostrer dins l' djivêye:", "prefs-watchlist-days-max": "Macsimom $1 djoû{{PLURAL:$1||s}}", "prefs-watchlist-edits": "Nombe di candjmints a mostrer dins l' djivêye:", + "prefs-watchlist-edits-max": "Nombe macsimom: 1000", "prefs-misc": "Totes sôres", "prefs-resetpass": "Candjî l' sicret", "prefs-changeemail": "Candjî l' emile", @@ -566,9 +609,13 @@ "rows": "Royes", "columns": "Colones", "searchresultshead": "Håynaedje des rzultats di cweraedje", + "stub-threshold": "Limite pol formataedje des loyéns djermons ($1):", + "stub-threshold-sample-link": "egzimpe", + "stub-threshold-disabled": "Dismetou", "recentchangesdays": "Nombe di djoûs po les dierins candjmints:", "recentchangesdays-max": "Macsimom $1 djoû{{PLURAL:$1||s}}", "recentchangescount": "Prémetou nombe di candjmintstites a håyner:", + "prefs-help-recentchangescount": "Çouchal inclût les dierins candjmints, l' istwere, eyet les djournås.", "savedprefs": "Vos preferinces ont stî schapêyes.", "timezonelegend": "Coisse d' eureye:", "localtime": "L' eure locåle", @@ -696,7 +743,7 @@ "right-deletedtext": "Vey les tecses disfacés eyet les candjmints etur disfacêyès modêyes", "right-browsearchive": "Loukî après les disfacêyès pådjes", "right-undelete": "Rapexhî ene pådje k' a stî disfacêye", - "right-suppressrevision": "Verifyî et rapexhî les modêyes catcheyes åzès manaedjeus", + "right-suppressrevision": "Vey, catchî et discatchî des dnés candjmints po tot l' minme kén uzeu", "right-suppressionlog": "Vey les djournås privés", "right-block": "Espaitchî d' ôtes uzeus di scrire", "right-blockemail": "Espaitchî èn uzeu d' evoyî des emiles", @@ -704,6 +751,7 @@ "right-ipblock-exempt": "Passer houte des blocaedjes pa adresse IP, pa fortchete d' adresses ou des blocaedjes otomatikes", "right-unblockself": "Si disbloker lu-minme", "right-protect": "Candjî les liveas d' protedjaedje eyet candjî les pådjes protedjeyes", + "right-rollback": "Disfijhaedje abeye des candjmints do dierin uzeu a-z aveur candjî ene pådje", "newuserlogpage": "Djournå des noveas uzeus", "newuserlogpagetext": "Chal pa dzo c' est ene djivêye des uzeus novelmint eredjîstrés.", "rightslog": "Djournå des droets des uzeus", @@ -741,14 +789,32 @@ "recentchanges-label-minor": "Ci n' est k' on ptit candjmint", "recentchanges-label-bot": "Ci candjmint la a stî fwait pa on robot", "recentchanges-label-unpatrolled": "Ci candjmint la n' a nén co stî patrouyî", + "recentchanges-label-plusminus": "Li grandeur del pådje a candjî d' ostant d' octets", + "recentchanges-legend-heading": "Ledjinde:", + "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (vey eto l' [[Special:NewPages|djivêye des nouvès pådjes]])", + "recentchanges-submit": "Vey", "rcnotefrom": "Chal pa dzo les candjmints dispoy li '''$2''' (disk' a '''$1''' di mostrés).", "rclistfrom": "Mostrer les candjmints k' i gn a yeu a pårti do $3 $2", "rcshowhideminor": "$1 candjmints mineurs", + "rcshowhideminor-show": "Mostrer", + "rcshowhideminor-hide": "Catchî", "rcshowhidebots": "$1 robots", - "rcshowhideliu": "$1 uzeus eredjîstrés", + "rcshowhidebots-show": "Mostrer", + "rcshowhidebots-hide": "Catchî", + "rcshowhideliu": "$1 uzeus edjîstrés", + "rcshowhideliu-hide": "Catchî", "rcshowhideanons": "$1 uzeus anonimes", + "rcshowhideanons-show": "Mostrer", + "rcshowhideanons-hide": "Catchî", "rcshowhidepatr": "$1 candjmints rwaitîs", + "rcshowhidepatr-show": "Mostrer", + "rcshowhidepatr-hide": "Catchî", "rcshowhidemine": "$1 candjmints da minne", + "rcshowhidemine-show": "Mostrer", + "rcshowhidemine-hide": "Catchî", + "rcshowhidecategorization": "$1 li categorijhaedjes des pådjes", + "rcshowhidecategorization-show": "Mostrer", + "rcshowhidecategorization-hide": "Catchî", "rclinks": "Mostrer les $1 dierins candjmints des dierins $2 djoûs.
$3", "diff": "dif.", "hist": "ist.", @@ -762,7 +828,7 @@ "rc_categories_any": "Totes", "rc-change-size-new": "$1 {{PLURAL:$1|octet|octets}} après l' candjmint", "newsectionsummary": "/* $1 */ novele seccion", - "rc-enhanced-expand": "Mostrer les detays (i fåt JavaScript)", + "rc-enhanced-expand": "Mostrer les detays", "rc-enhanced-hide": "Catchî les detays", "recentchangeslinked": "Candjmints aloyîs", "recentchangeslinked-feed": "Candjmints aloyîs", @@ -844,8 +910,12 @@ "shared-repo-from": "vént d' $1", "shared-repo": "on depot pårtaedjî", "filerevert": "Rimete come divant $1", + "filerevert-legend": "Rapexhî l' fitchî", + "filerevert-intro": "Vos estoz k' alez rapexhî l' fitchî [[Media:$1|$1]] al [$4 modêye do $3, a $2].", "filerevert-comment": "Råjhon:", + "filerevert-defaultcomment": "Rimetou al modêye do $2, a $1 ($3)", "filerevert-submit": "Disfé", + "filerevert-success": "[[Media:$1|$1]] a stî rmetou al [$4 modêye do $3, a $2].", "filedelete": "Disfacer $1", "filedelete-legend": "Disfacer fitchî", "filedelete-comment": "Råjhon:", @@ -905,6 +975,7 @@ "mostimages": "Imådjes les pus loyeyes", "mostrevisions": "Årtikes avou l' pus di candjmints", "prefixindex": "Indecse pa betchete", + "prefixindex-submit": "Mostrer", "shortpages": "Coûtès pådjes", "longpages": "Longowès pådjes", "deadendpages": "Pådjes sins nou loyén wiki", @@ -912,6 +983,7 @@ "protectedpages": "Pådjes protedjeyes", "protectedpages-indef": "Seulmint les protedjaedje disk' a todi", "protectedpages-cascade": "Seulmint les protedjaedjes e cascåde", + "protectedpages-noredirect": "Catchî les redjiblaedjes", "protectedpagesempty": "I gn a pol moumint nole pådje sifwaitmint protedjeye.", "protectedtitles": "Tites protedjîs", "protectedtitlesempty": "I gn a pol moumint nou tite sifwaitmint protedjî.", @@ -919,6 +991,7 @@ "usereditcount": "$1 candjmint{{PLURAL:$1||s}}", "usercreated": "{{GENDER:$3|Edjîstré|Edjîstrêye}} li $1 a $2", "newpages": "Novelès pådjes", + "newpages-submit": "Mostrer", "newpages-username": "No d' elodjaedje:", "ancientpages": "Viyès pådjes", "move": "Displaecî", @@ -929,9 +1002,11 @@ "pager-older-n": "{{PLURAL:$1|$1 pus vî|$1 pus vîs}}", "booksources": "Sourdants po les lives", "booksources-search-legend": "Cweri des sourdants po des lives", + "booksources-search": "Cweri", "specialloguserlabel": "Fwait pa:", "speciallogtitlelabel": "Såme (tite ou uzeu):", "log": "Djournås", + "logeventslist-submit": "Mostrer", "all-logs-page": "Tos les djournås publiks", "alllogstext": "Håynaedje etercroejhlé di tos les djournås disponibes so {{SITENAME}}.
\nVos ploz defini l' håynaedje tot tchoezixhant ene sôre di djournå, on no d' uzeu, ou l' tite d' ene pådje (po ces deus dierins l' sitinme fwait l' diferince inte les grandes et les ptitès letes).", "logempty": "Rén n' corespond dins l' djournå.", @@ -945,7 +1020,9 @@ "allpagessubmit": "I va", "allpagesprefix": "Håyner les pådjes avou l' betchete:", "allpagesbadtitle": "Li tite di pådje diné n' est nén valide oudonbén il a-st ene betchete di loyén eterlingaedje ou eterwiki. Ça s' pout k' il åye onk ou d' pus d' caracteres ki n' si polèt nén eployî dins les tites.", + "allpages-hide-redirects": "Catchî les redjiblaedjes", "categories": "Categoreyes", + "categories-submit": "Mostrer", "categoriespagetext": "{{PLURAL:$1|Li categoreye shuvante est eployeye|Les categoreyes shuvantes sont-st eployeyes}} pa des pådjes ou des fitchîs.\n[[Special:UnusedCategories|Les categoreyes nén eployeyes]] èn sont nén håynêyes chal.\nLoukîz eto [[Special:WantedCategories|les categoreyes dimandêyes]].", "categoriesfrom": "Håyner les categoreyes a pårti di:", "special-categories-sort-count": "relére pa nombe di cayets", @@ -964,6 +1041,7 @@ "listusers-submit": "Vey", "listusers-noresult": "Nol uzeu di trové.", "listusers-blocked": "({{GENDER:$1|bloké|blokêye}})", + "activeusers-hidebots": "Catchî les robots", "listgrouprights-members": "(djivêye des mimbes)", "mailnologin": "Nole adresse d' evoyeu", "mailnologintext": "Po-z evoyî èn emile a èn ôte uzeu i vs fåt esse [[Special:UserLogin|elodjî]] eyet aveur ene adresse emile d' evoyeu ki soeye valide dins vos [[Special:Preferences|preferinces]].", @@ -996,13 +1074,15 @@ "notanarticle": "Nén èn årtike", "watchlist-details": "Vos avoz {{PLURAL:$1|$1 pådje shuvowe|$1 pådjes shuvowes}} (sins conter les pådjes di copene).", "wlheader-enotif": "Li notifiaedje pa emile est en alaedje.", - "wlheader-showupdated": "Les pådjes k' ont candjî dispoy vosse dierinne vizite sont metowes e '''cråssès letes'''", + "wlheader-showupdated": "Les pådjes k' ont candjî dispoy vosse dierinne vizite sont metowes e cråssès letes.", "wlnote": "Chal pa dzo {{PLURAL:$1|li dierin candjmint|les '''$1''' dierins candjmints}} {{PLURAL:$2|del dierinne eure|des '''$2''' dierinnès eures}}, disk' å $3 a $4.", - "wlshowlast": "Mostrer les dierin(nè)s $1 eures, $2 djoûs ou", + "wlshowlast": "Mostrer les dierin(nè)s $1 eures, $2 djoûs", + "watchlist-hide": "Catchî", + "watchlist-submit": "Mostrer", "watchlist-options": "Tchuzes del djivêye des shuvous", "enotif_reset": "Mårker totes les pådjes come vizitêyes", "enotif_lastvisited": "Loukîz $1 po tos les candjmints dispoy vosse dierinne vizite.", - "enotif_body": "Binamé $WATCHINGUSERNAME,\n\nLi pådje «$PAGETITLE» so {{SITENAME}} a stî $CHANGEDORCREATED li $PAGEEDITDATE pa $PAGEEDITOR,\nloukîz $PAGETITLE_URL pol modêye do moumint.\n\n$NEWPAGE\n\nComintaire do candjeu: $PAGESUMMARY $PAGEMINOREDIT\n\nContak do candjeu:\nemile: $PAGEEDITOR_EMAIL\nwiki: $PAGEEDITOR_WIKI\n\nI n' årè nén d' ôtes notifiaedjes po ds ôtes candjmints di ç' minme pådje ci tant k' vos n' l' åroz nén vizitêye.\nVos ploz eto rimete a noû les drapeas di notifiaedje po totes les pådjes di vosse djivêye des pådjes a shuve.\n\n\nVosse binamé sistinme di notifiaedje so {{SITENAME}}\n\n--\nPo candjî l' apontiaedje di vos notifiaedjes pa emile, loukîz\n{{canonicalurl:{{#special:Preferences}}}}\n\nPo candjî l' apontiaedje di vosse djivêye a shuve, loukîz\n{{canonicalurl:{{#special:EditWatchlist}}}}\n\nPo rsaetchî l' pådje di vosse djivêye a shuve, alez so\n$UNWATCHURL\n\nPo pus d' aidance:\n$HELPPAGE", + "enotif_body": "Binamé $WATCHINGUSERNAME,\n\n$PAGEINTRO $NEWPAGE\n\nComintaire do candjeu: $PAGESUMMARY $PAGEMINOREDIT\n\nContak do candjeu:\nemile: $PAGEEDITOR_EMAIL\nwiki: $PAGEEDITOR_WIKI\n\nI n' årè nén d' ôtes notifiaedjes po ds ôtes candjmints di ç' minme pådje ci tant k' vos n' l' åroz nén vizitêye (tot estant elodjî).\nVos ploz eto rimete a noû les drapeas di notifiaedje po totes les pådjes di vosse djivêye des pådjes a shuve.\n\n\nVosse binamé sistinme di notifiaedje so {{SITENAME}}\n\n--\nPo candjî l' apontiaedje di vos notifiaedjes pa emile, loukîz\n{{canonicalurl:{{#special:Preferences}}}}\n\nPo candjî l' apontiaedje di vosse djivêye a shuve, loukîz\n{{canonicalurl:{{#special:EditWatchlist}}}}\n\nPo rsaetchî l' pådje di vosse djivêye a shuve, alez so\n$UNWATCHURL\n\nPo pus d' aidance:\n$HELPPAGE", "created": "ahivêye", "changed": "candjeye", "deletepage": "Disfacer l' pådje", @@ -1013,6 +1093,7 @@ "delete-confirm": "Disfacer «$1»", "delete-legend": "Disfacer", "historywarning": "'''Asteme:''' Li pådje ki vos alez disfacer a-st ene istwere avou a pô près $1 modêye{{PLURAL:$1||s}}:", + "historyaction-submit": "Mostrer", "confirmdeletetext": "Vos alez disfacer ene pådje avou tote si istwere.\nAcertinez s' i vs plait ki c' est bén çoula ki vos vloz fé,\nki vos comprindoz les consecwinces, et ki vos fjhoz çoula\ntot [[{{MediaWiki:Policy-url}}|shuvant les rîles]].", "actioncomplete": "Fwait", "actionfailed": "L' accion a fwait berwete", @@ -1028,11 +1109,15 @@ "delete-edit-reasonlist": "Candjî les råjhons do disfaçaedje", "delete-toobig": "Cisse pådje ci a ene foû grande istwere, avou dpus di $1 modêye{{PLURAL:$1||s}}.\nLi disfaçaedje des sfwaitès pådjes a stî dismetou po-z espaitchî k' i gn åye des problinmes so {{SITENAME}}.", "delete-warning-toobig": "Cisse pådje ci a ene foû grande istwere, avou dpus di $1 modêye{{PLURAL:$1||s}}.\nSi disfaçaedje pôreut fé des problinmes avou l' rotaedje del båze di dnêyes so {{SITENAME}}; \nnel fijhoz k' avou asteme.", + "rollback": "Disfé les candjmints", "rollbacklink": "netyî", + "rollbacklinkcount": "disfé $1 {{PLURAL:$1|candjmint|candjmints}}", + "rollbackfailed": "Li disfijhaedje a fwait berwete", "cantrollback": "Dji n' sai disfé les candjmints; li dierin contribouweu est li seu oteur po cist årtike ci.", "alreadyrolled": "Dji n' sai disfé li dierin candjmint di [[$1]] fwait pa [[User:$2|$2]] ([[User talk:$2|Copene]]);\nene sakî d' ôte a ddja candjî l' årtike ou ddja rmetou l' modêye di dvant.\n\nLi dierin candjmint a stî fwait pa [[User:$3|$3]] ([[User talk:$3|Copene]]).", "editcomment": "Li rascourti do candjmint esteut: $1.", "revertpage": "Disfwait les candjmints da [[Special:Contributions/$2|$2]] ([[User talk:$2|copene]]); li dierin candjmint est asteure da [[User:$1|$1]]", + "rollback-success": "Disfwait les candjmints da $1;\nli dierin candjmint est asteure da $2.", "protectlogpage": "Djournå des protedjaedjes", "protectlogtext": "Chal pa dzo c' est ene djivêye des protedjaedjes et disprotedjaedjes des pådjes.\nLoukîz al [[Special:ProtectedPages|djivêye des pådjes protedjeyes]] po vey les protedjaedjes ki sont en alaedje pol moumint.", "protectedarticle": "«[[$1]]» protedjî", @@ -1099,8 +1184,9 @@ "undelete-missing-filearchive": "Nén possibe d' aler rapexhî li fitchî avou l’ ID $1 pask' i n' est nén dins l' båze di dnêyes. Motoit k' il a ddja stî rapexhî dvant.", "namespace": "Espåce di lomaedje:", "invert": "Tchuze å rvier", + "namespace_association": "Espåce di lomaedje aloyî", "blanknamespace": "(Mwaisse)", - "contributions": "Ovraedjes di l' uzeu", + "contributions": "Ovraedjes di l' {{GENDER:$1|uzeu|uzeuse}}", "contributions-title": "Djivêye des ovraedjes di l' {{GENDER:$1|uzeu|uzeuse}} $1", "mycontris": "Mi ovraedje", "contribsub2": "Po l' uzeu $1 ($2)", @@ -1137,6 +1223,7 @@ "whatlinkshere-hidelinks": "$1 les loyaedjes", "whatlinkshere-hideimages": "$1 fitchîs k' eploynut cist imådje ci", "whatlinkshere-filters": "Passetes", + "whatlinkshere-submit": "Vey", "autoblockid": "Blocaedje otomatike #$1", "blockip": "Bloker èn uzeu", "blockiptext": "Rimplixhoz les tchamps chal pa dzo po bloker\nl' accès e scrijhaedje d' èn uzeu dné ou a pårt d' ene\nadresse IP dnêye. Çouci èn doet esse fwait ki po-z arester les\nvandales, et çoula doet esse fwait tot shuvant les\n[[{{MediaWiki:Policy-url}}|rîles]].\nDinez ene råjhon do blocaedje (eg: dijhoz les pådjes k' ont\nstî vandalijheyes).", @@ -1254,7 +1341,7 @@ "importlogpagetext": "Ristitchaedjes (import) administratifs di pådjes avou leus istorikes di candjmints, a pårti d' ôtes wikis.", "import-logentry-upload-detail": "$1 {{PLURAL:$1|modêye|modêyes}}", "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|modêye|modêyes}} foû di $2", - "tooltip-pt-userpage": "Pådje d' uzeu da minne", + "tooltip-pt-userpage": "Pådje d' {{GENDER:|uzeu|uzeuse}} da minne", "tooltip-pt-anonuserpage": "Li pådje d' uzeu po l' adresse IP ki vos eployîz pol moumint", "tooltip-pt-mytalk": "Pådje di copene da minne", "tooltip-pt-anontalk": "Pådje di copene po les candjmints fwaits a pårti di ciste adresse IP ci", @@ -1263,8 +1350,9 @@ "tooltip-pt-mycontris": "Djivêye des ovraedjes da minne", "tooltip-pt-login": "Vos estoz ecoraedjî d' vos elodjî, mins nerén, c' est nén oblidjî.", "tooltip-pt-logout": "Vos dislodjî", + "tooltip-pt-createaccount": "Nos vs ricomandans d' ahiver on conte et di vs elodjî; mins nerén, c' est nén oblidjî", "tooltip-ca-talk": "Copene åd fwait do contnou del pådje", - "tooltip-ca-edit": "Vos ploz candjî cisse pådje ci. S' i vs plait, eployîz l' boton «Vey divant» po vs acertiner k' tot est comifåt dvant d' schaper vos candjmints.", + "tooltip-ca-edit": "Candjî l' pådje", "tooltip-ca-addsection": "Radjouter ene novele seccion", "tooltip-ca-viewsource": "Cisse pådje ci est protedjeye.\nVos ploz seulmint vey li côde sourdant, mins nén l' candjî.", "tooltip-ca-history": "Viyès modêyes del pådje.", @@ -1290,7 +1378,7 @@ "tooltip-t-recentchangeslinked": "Dierins candjmints fwaits so des pådjes ki cisse pådje ci a des loyéns viè zeles", "tooltip-feed-rss": "Sindicåcion RSS po cisse pådje ci", "tooltip-feed-atom": "Sindicåcion Atom po cisse pådje ci", - "tooltip-t-contributions": "Vey li djivêye des ovraedjes fwait pa cist uzeu ci", + "tooltip-t-contributions": "Vey li djivêye des ovraedjes fwait pa {{GENDER:$1|cist uzeu|ciste uzeuse}} ci", "tooltip-t-emailuser": "Evoyî èn emile a cist uzeu ci", "tooltip-t-upload": "Eberweter sol sierveu des imådjes ou fitchîs media", "tooltip-t-specialpages": "Djivêye di totes les pådjes sipeciåles", @@ -1299,7 +1387,7 @@ "tooltip-ca-nstab-main": "Vey li pådje di contnou", "tooltip-ca-nstab-user": "Vey li pådje di l' uzeu", "tooltip-ca-nstab-media": "Vey li pådje di media", - "tooltip-ca-nstab-special": "Çouchal, c' est ene pådje sipeciåle, vos n' poloz nén candjî l' pådje leye-minme.", + "tooltip-ca-nstab-special": "Çouchal, c' est ene pådje sipeciåle, ele ni s' pout nén candjî.", "tooltip-ca-nstab-project": "Vey li pådje di pordjet", "tooltip-ca-nstab-image": "Vey li pådje do fitchî", "tooltip-ca-nstab-mediawiki": "Vey li messaedje ratournåve do sistinme", @@ -1327,10 +1415,12 @@ "anonusers": "$1, {{PLURAL:$2|uzeu anonime|uzeus anonimes}} di {{SITENAME}}", "creditspage": "Pådje di credits", "nocredits": "I n' a pont d' infôrmåcion di credits po cisse pådje ci.", + "spam_reverting": "Rimetaedje al dierinne modêye sins nou loyén viè $1", "pageinfo-title": "Infôrmåcion po «$1»", "pageinfo-watchers": "Nombe di shuveus", "pageinfo-edits": "Nombe di candjmints", "pageinfo-authors": "Nombe d' oteurs diferins", + "pageinfo-toolboxlink": "Infôrmåcion sol pådje", "markaspatrolleddiff": "Marké come ricoridjî", "markaspatrolledtext": "Marker cisse pådje ci come dedja patrouyeye", "patrol-log-page": "Djournå des patrouyaedjes", @@ -1342,13 +1432,16 @@ "previousdiff": "← Diferinces des candjmints di dvant", "nextdiff": "Diferinces des candjmints shuvants →", "mediawarning": "'''Asteme''': Ci fitchî chal pôreut esse evirussé.\nSi vos l' enondez vos pôrîz infecter l' sistinme da vosse.", - "imagemaxsize": "Limite pol grandeu des imådjes:
''(ezès pådjes d'i discrijhaedje di fitchîs)''", - "thumbsize": "Grandeu po les imådjetes (thumb):", + "imagemaxsize": "Limite pol grandeur des imådjes:
(ezès pådjes di discrijhaedje di fitchîs)", + "thumbsize": "Grandeur po les imådjetes (thumb):", "widthheightpage": "$1 × $2, $3 pådje{{PLURAL:$3||s}}", "file-info-size": "$1 × $2 picsels, groxheur do fitchî: $3, del sôre \"MIME\": $4", "file-nohires": "I n' a nén di pus grande finté.", "svg-long-desc": "Fitchî SVG, finté di $1 × $2 picsels, grandeu: $3", - "show-big-image": "Imådje a si grandeur d' oridjinne", + "show-big-image": "Fitchî d' oridjinne", + "show-big-image-preview": "Grandeur do préveyaedje: $1.", + "show-big-image-other": "{{PLURAL:$2|Ôte finté|Ôtès fintés}}: $1.", + "show-big-image-size": "$1 × $2 picsels", "newimages": "Galreye des nouvès imådjes", "imagelisttext": "Chal pa dzo c' est ene djivêye di '''$1''' {{PLURAL:$1|imådje relîte|imådjes relîtes}} $2.", "noimages": "I n' a rén a vey.", @@ -1506,6 +1599,7 @@ "fileduplicatesearch": "Cweraedje après les dobes fitchîs", "fileduplicatesearch-submit": "Cweri", "specialpages": "Pådjes sipeciåles", + "specialpages-note-top": "Ledjinde", "specialpages-group-maintenance": "Etertinance", "specialpages-group-other": "Ôtès pådjes especiåles", "specialpages-group-login": "S' elodjî / si rashire", @@ -1522,6 +1616,7 @@ "intentionallyblankpage": "Cisse pådje ci est vude en esprès.", "tag-filter": "Passete po ls [[Special:Tags|etiketes]]:", "tag-filter-submit": "Passete", + "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Etikete|Etiketes}}]]: $2)", "tags-edit": "candjî", "tags-hitcount": "$1 candjmint{{PLURAL:$1||s}}", "comparepages": "Comparer des pådjes", @@ -1556,9 +1651,10 @@ "logentry-patrol-patrol": "$1 a marké come patrouyî l' candjmint $4 del pådje $3", "logentry-patrol-patrol-auto": "$1 a marké otomaticmint come patrouyî l' candjmint $4 del pådje $3", "logentry-newusers-newusers": "$1 a-st ahivé on conte d' uzeu", - "logentry-newusers-create": "$1 a-st ahivé on conte d' uzeu", + "logentry-newusers-create": "Li conte d' uzeu $1 a stî ahivé", "logentry-newusers-create2": "$1 a-st ahivé on conte d' uzeu $3", "logentry-newusers-autocreate": "li conte $1 a stî ahivé otomaticmint", + "logentry-upload-upload": "$1 {{GENDER:$2|}}a-st eberweté $3", "rightsnone": "(nouk)", "feedback-adding": "Vosse messaedje a stî håyné sol pådje...", "feedback-cancel": "Rinoncî", diff --git a/languages/i18n/war.json b/languages/i18n/war.json index 61255566ae..28dc0d8665 100644 --- a/languages/i18n/war.json +++ b/languages/i18n/war.json @@ -432,7 +432,7 @@ "createaccountreason": "Rason:", "createacct-reason": "Rason", "createacct-reason-ph": "Kay ano nahimo ka hin usa pa nga akawnt", - "createacct-submit": "Ighimo an im akawnt", + "createacct-submit": "Ighimo an im account", "createacct-another-submit": "Paghimo hin account", "createacct-benefit-heading": "{{SITENAME}} in ginhimo hin tawo nga sugad ha imo.", "createacct-benefit-body1": "{{PLURAL:$1|pagliwat|mga pagliwat}}", @@ -448,7 +448,7 @@ "nocookieslogin": "{{SITENAME}} in nagkikinahanglan hin mga kuki para makapagpalog-in hin mga gumaramit. An im mga kuki in diri nagana.\nAlayon paganaha hira ngan utro liwat.", "nocookiesfornew": "An imo akawnt han gumaramit in waray nahimo, kay tungod diri kami nakakakompirma han tinikangan.\nSiguradoha nga an mga cookies in nakaandar, igreload ini nga pakli ngan utroha.", "noname": "Waray ka nakahatag hin maupay nga agnay-hit-gumaramit.", - "loginsuccesstitle": "Malinamposon an pagsulod", + "loginsuccesstitle": "Nakalog-in", "loginsuccess": "'''Ikaw in nakalog-in ha {{SITENAME}} komo \"$1\".'''", "nosuchuser": "Waray gumaramit an may-ada ngaran nga \"$1\".\nIt mga agnay-hi-gumaramit in case sensitive.\nPanginano-a it imo pagbaybay, o [[Special:UserLogin/signup|paghimo hin bag-o nga akawnt]].", "nosuchusershort": "Waray nagamit it may ngaran nga \"$1\".\nKitaa kun amo it im pagbaybay.", @@ -627,7 +627,7 @@ "newarticle": "(Bag-o)", "newarticletext": "Ginsunod mo an pakli nga waray pa kahihimo. Para ighimo an pakli, tikanga pagmakinilya ha kahon nga aada ha ubos (kitaa an [$1 nabulig nga pakli] para han kadugangan nga pananabutan). Kun sayop an imo pagkanhi, igpidlit an imo kanan panngaykay (''browser'') '''balik''' (''back'') nga piridlitan.", "anontalkpagetext": "----\n''Ini in hiruhimangraw-nga-pakli para han waray magpakilala nga gumaramit, nga waray pa hinmimo hin akawnt.''\nMagamit la kami hin IP address para makilal-an hiya.\nSugad hini nga IP address, in puydi sinmaro hiton pipira nga mga gumaramit.\nKun ikaw in waray magpakilala nga gumaramit, ngan pag-abat mo in may mga diri naangay nga komento an ginpapadangat ha imo, alayon nala [[Special:UserLogin/signup|paghimo hin akawnt]] o [[Special:UserLogin|pag-log in]] para malikyan an sumurunod nga mga pagkalipat nga dapat para ha iba nga waray magpakilala nga mga gumaramit.", - "noarticletext": "Waray yana nahasurat hini nga pakli.\nPuyde hi ikaw [[Special:Search/{{PAGENAME}}|magbiling para han ngaran hini nga pakli]] ha iba nga mga pakli,\n[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} binga an mga nanginginlabot nga mga log],\no [{{fullurl:{{FULLPAGENAME}}|action=edit}} igliwat ini nga pakli].", + "noarticletext": "Waray yana teksto ha sulod hinin nga pakli.\nPuyde ka [[Special:Search/{{PAGENAME}}|mamiling hin titulo hinin nga pakli]] ha iba pa nga mga pakli,\n[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} pamilnga an may mga pagkahisumpay nga mga talaan],\no [{{fullurl:{{FULLPAGENAME}}|action=edit}} igliwat ini nga pakli].", "noarticletext-nopermission": "Waray yana nahasurat hini nga pakli\nPuyde hi ikaw [[Special:Search/{{PAGENAME}}|magbiling han ngaran hini nga pakli]] ha iba nga mga pakli,\no [{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} mamiling han mga nanginginlabot nga mga talaan], kundi diri ka gintutugotan hin paghímò hini nga pakli.", "missing-revision": "Waray na an rebisyon #$1 han pakli nga ginngaranan nga \"{{FULLPAGENAME}}\".\n\nIni in agsob tungod han pagsunod hin daan nga sumpay hin kaagi ha pakli nga ginpara.\nAn mga detalye in mabibilngan ha [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} deletion log].", "userpage-userdoesnotexist": "Diri nakarehistro an akawnt han gumaramit nga \"$1\".\nAlayon pagpamuruotbuot kun karuyag mo maghimo/mag-edit hini nga pakli.", @@ -987,9 +987,16 @@ "grant-createaccount": "Pahimo hin mga account", "grant-createeditmovepage": "Paghimo, pagliwat, ngan pagbalhin hin mga pakli", "grant-delete": "Pagpara hin mga pakli, mga rebisyon, ngan mga iginsulod ha log", + "grant-sendemail": "Igpadara hin email ngadto ha iba nga mga gumaramit", + "grant-uploadeditmovefile": "Pagkarga, pagsaliwan, ngan pagbalhin hin mga file", + "grant-uploadfile": "Pagkarga hin bag-o nga mga file", + "grant-basic": "Mga panguna nga katungod", + "grant-viewdeleted": "Kitaa an mga pinanmara nga file ngan pakli", + "grant-viewmywatchlist": "Kitaa an imo mga barantayon", "newuserlogpage": "Talaan han paghimo hin gumaramit", "newuserlogpagetext": "Ini an talaan han mga nagkahihimo nga mga gumaramit.", "rightslog": "Talaan hin mga katungod han gumaramit", + "rightslogtext": "Ini an talaan han mga pagbag-o han mga katungod hit gumaramit.", "action-read": "basaha ini nga pakli", "action-edit": "liwata ini nga pakli", "action-createpage": "pahimo hin mga pakli", @@ -1675,12 +1682,11 @@ "import-rootpage-invalid": "An ginhatag nga gamot-pakli in uska diri balido nga titulo.", "import-rootpage-nosubpage": "Ngaran-lat'ang nga \"$1\" han gamot-pakli in diri natugot hin mga bahin-pakli.", "importlogpage": "Talaan hin pan-aangbit", - "javascripttest-pagetext-skins": "Pagpili hin panit para ha pag-paandar han:", - "tooltip-pt-userpage": "An imo pakli hin gumaramit", - "tooltip-pt-mytalk": "An imo pakli hin hiruhimangraw", - "tooltip-pt-preferences": "An imo mga karuyag", + "tooltip-pt-userpage": "{{GENDER:|An imo gumaramit}} nga pakli", + "tooltip-pt-mytalk": "{{GENDER:|An imo}} hiruhimangraw nga pakli", + "tooltip-pt-preferences": "{{GENDER:|An imo}} mga karuyag", "tooltip-pt-watchlist": "An talaan hin mga pakli nga imo ginsisinubay para hin mga kabag-ohan", - "tooltip-pt-mycontris": "Talaan han imo mga ámot", + "tooltip-pt-mycontris": "Listahan han {{GENDER:|imo}} mga gin-amot", "tooltip-pt-login": "Gin-aaghat ka nga mag log-in, pero diri ini ginpipirit.", "tooltip-pt-logout": "gawas", "tooltip-pt-createaccount": "Ginaag-hat ka nga maghimo hin account ngan maglog-in; pero diri ini mandatorya", @@ -1709,7 +1715,7 @@ "tooltip-t-recentchangeslinked": "Mga bag-o nga kabag-ohan ha mga pakli nga nahasumpay tikang hini nga pakli", "tooltip-feed-rss": "RSS nga pangarga para hini nga pakli", "tooltip-feed-atom": "Atom nga pangarga para hini nga pakli", - "tooltip-t-contributions": "Kitaa an talaan hin mga amot hini nga nágámit", + "tooltip-t-contributions": "Kitaa an listahan hin mga amot {{GENDER:$1|hinin nga gumaramit}}", "tooltip-t-emailuser": "Padad-i hin e-mail ini nga nágámit", "tooltip-t-upload": "Pagkarga hin mga paypay", "tooltip-t-specialpages": "Talaan hin mga pinaurog nga pakli", diff --git a/languages/i18n/wuu.json b/languages/i18n/wuu.json index 27e8630fd3..87f978ba4d 100644 --- a/languages/i18n/wuu.json +++ b/languages/i18n/wuu.json @@ -362,7 +362,7 @@ "perfcachedts": "下头是缓存数据,阿末一趟更新辰光是$1。缓存里最多有{{PLURAL:$4|$4条结果}}。", "querypage-no-updates": "当前禁止对此页面进行更新。箇搭个数据弗好立即刷新。", "viewsource": "望源码", - "viewsource-title": "望“$1”个源代码", + "viewsource-title": "望“$1”个源码", "actionthrottled": "动作已压制", "actionthrottledtext": "基于反滥用个考量,限制垃拉短时间内多趟重复箇只操作。请过脱几分钟再试试看。", "protectedpagetext": "箇页锁牢定,防编搭各许操作。", @@ -575,13 +575,13 @@ "summary-preview": "摘要预览:", "subject-preview": "主题预览:", "blockedtitle": "用户拨查封", - "blockedtext": "侬个用户名或IP地址已经拨$1查封。\n\n箇趟查封是由$1所封个。原因是''$2''。\n\n* 箇趟查封开始个辰光是:$8\n* 箇趟查封到期个辰光是:$6\n* 对于畀查封者:$7\n\n侬可以联络$1或者其他个 [[{{MediaWiki:Grouppage-sysop}}|管理员]],讨论箇趟查封。\n除非侬已经垃侬个 [[Special:Preferences|个人设置]]里向设置仔一只有效个电子邮件地址,弗然侬弗好使用「e-mail箇位用户」功能。当设置了一只有效个电子邮件地址之后,箇只功能是弗会畀封锁个。\n\n侬个IP地址是$3,而该查封ID是 #$5。 请垃拉侬个查询里向注明以上所有资料。", - "autoblockedtext": "侬个IP地址已经自动查封,由于之前另一位 搭侬用一样IP个用户畀$1所查封。\n而查封个原因是:\n\n:''$2''\n\n* 箇趟查封个开始辰光是:$8\n* 箇趟查封个到期辰光是:$6\n* 对于畀查封者:$7\n\n侬可以联络$1或者其他个 [[{{MediaWiki:Grouppage-sysop}}|管理员]],讨论箇趟查封。\n除非侬已经垃侬个 [[Special:Preferences|个人设置]]里向设置仔一只有效个电子邮件地址,弗然侬弗好使用「e-mail箇位用户」功能。当设置了一只有效个电子邮件地址之后,箇只功能是弗会畀封锁个。\n\n侬个IP地址是$3,而该查封ID是 #$5。 请垃拉侬个查询里向注明以上所有资料。", + "blockedtext": "侬个用户名或IP地址已经畀查封。\n\n由$1查封。畀出个原因是$2。\n\n* 查封开始辰光:$8\n* 查封到期辰光:$6\n* 目标查封对象:$7\n\n侬可以联络$1或者其他个[[{{MediaWiki:Grouppage-sysop}}|管理员]],讨论箇趟查封。侬弗好使用“电邮联系箇位用户”功能,除非侬已经垃侬个[[Special:Preferences|账号设置]]里向指定仔一只有效个电邮地址并且朆畀禁止使用箇只功能。侬当前个IP地址是$3,而该查封ID是#$5。请垃拉侬个查询里向注明以上所有资料。", + "autoblockedtext": "侬个IP地址已经畀自动查封,因为之前另一位畀$1查封个用户搭侬用一样个IP地址。查封个原因是:\n\n:$2\n\n* 查封开始辰光:$8\n* 查封到期辰光:$6\n* 目标查封对象:$7\n\n侬可以联络$1或者其他个[[{{MediaWiki:Grouppage-sysop}}|管理员]],讨论箇趟查封。\n\n注意侬弗好使用“电邮联系箇位用户”功能,除非侬已经垃侬个[[Special:Preferences|账号设置]]里向指定仔一只有效个电邮地址并且朆畀禁止使用箇只功能。\n\n侬当前个IP地址是$3,而该查封ID是#$5。请垃拉侬个查询里向注明以上所有资料。", "blockednoreason": "朆畀出原因", "whitelistedittext": "请$1编辑。", "confirmedittext": "垃拉编辑此页之前侬必须确认侬个邮箱地址。请通过[[Special:Preferences|个人设置]]设置并验证侬个邮箱地址。", "nosuchsectiontitle": "寻弗着箇只段落", - "nosuchsectiontext": "侬尝试编辑个章节弗存在。\n作兴是垃拉侬查看页面个辰光已经移动或者畀删除。", + "nosuchsectiontext": "侬尝试编辑个章节弗存在。作兴是垃拉侬望页面个辰光已经畀移动或者删脱。", "loginreqtitle": "必须登录", "loginreqlink": "登录", "loginreqpagetext": "请$1来望其他页面。", @@ -594,7 +594,7 @@ "noarticletext-nopermission": "箇只页面目前呒不文本。侬可以垃拉其他页面高头[[Special:Search/{{PAGENAME}}|寻箇页标题]],或者[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} 寻相关日志],但必过侬呒不权限建立箇只页面。", "userpage-userdoesnotexist": "用户账户“$1”弗曾创建。请垃拉创建/编辑迭个页面前头先检查一记。", "userpage-userdoesnotexist-view": "用户账户“$1”弗曾创建。", - "blocked-notice-logextract": "箇位用户箇歇畀封锁垃许。\n下头有最近个封锁纪录以供参考:", + "blocked-notice-logextract": "箇位用户箇歇畀封锁垃许。下头有最近个封锁纪录以供参考:", "clearyourcache": "注意:垃拉保存之后,侬作兴要清除浏览器个缓存才好看见改变。\n* Firefox或Safari:揿牢“Shift”个同时点击“刷新”,或揿“Ctrl-F5”或“Ctrl-R”(Mac上是“⌘-R”)\n* Google Chrome:揿“Ctrl-Shift-R”(Mac上是“⌘-Shift-R”)\n* Internet Explorer:揿牢“Ctrl”个同时点击“刷新”,或揿“Ctrl-F5”\n* Opera:垃拉“工具→首选项”里向清除缓存", "usercssyoucanpreview": "'''提示:''' 垃拉保存之前请用“{{int:showpreview}}”揿钮来测试新 CSS 。", "userjsyoucanpreview": "'''提示:''' 垃拉保存之前请用“{{int:showpreview}}”揿钮来测试新 JavaScript 。", @@ -645,7 +645,7 @@ "permissionserrorstext-withaction": "为仔下头个{{PLURAL:$1|原因|原因}}咾侬无权进行$2操作:", "recreate-moveddeleted-warn": "警告:你来上重新创建一只老早删过个页面。\n\n你应该考虑继续编辑箇只页面啊合适。为方便起见,箇只页面个删除搭移动记录提供勒下底:", "moveddeleted-notice": "箇页删脱哉。箇页个删除搭移动记录提供垃拉下头以便参考。", - "log-fulllog": "查看完整日志", + "log-fulllog": "望完整日志", "edit-hook-aborted": "编辑畀钩子取消。\n渠弗曾畀出解释。", "edit-gone-missing": "弗好更新页面。\n渠作兴齐巧畀删除。", "edit-conflict": "编辑冲突", @@ -698,7 +698,7 @@ "page_first": "最前", "page_last": "阿末", "histlegend": "选择比较版本:标记要比较个两只版本,回车或者揿页面底里个揿钮。
图例:(当前) = 搭当前版本有啥两样, (上个) = 搭上个版本有啥两样,小 = 小改动。", - "history-fieldset-title": "浏览页史", + "history-fieldset-title": "浏览历史", "history-show-deleted": "只显示删脱个", "histfirst": "顶早", "histlast": "顶晏", @@ -795,7 +795,7 @@ "mergelog": "合并日志", "revertmerge": "反合并", "mergelogpagetext": "下底是只最近发生个页面历史合并个记录列表。", - "history-title": "“$1”的版本历史", + "history-title": "“$1”个修订历史", "difference-title": "“$1”版本间个差别", "difference-title-multipage": "页面“$1”搭“$2”之间个差别", "difference-multipage": "(页面间个差别)", @@ -820,7 +820,7 @@ "nextn-title": "后$1个结果", "shown-title": "一页显示$1个结果", "viewprevnext": "望($1 {{int:pipe-separator}} $2)($3)", - "searchmenu-exists": "'''箇wiki里有一页名字“[[:$1]]”哉'''", + "searchmenu-exists": "箇wiki里有只叫“[[:$1]]”个页面哉。{{PLURAL:$2|0=|另见寻着个结果。}}", "searchmenu-new": "登箇Wiki上建“[[:$1]]”页!{{PLURAL:$2|0=|另见寻着个页面。|另见搜寻个结果。}}", "searchprofile-articles": "内容页", "searchprofile-images": "多媒体", @@ -1035,7 +1035,7 @@ "recentchanges-label-newpage": "箇编辑建立着新页", "recentchanges-label-minor": "箇是小编写", "recentchanges-label-bot": "箇编辑由机器人执行", - "recentchanges-label-unpatrolled": "该编辑还朆巡查", + "recentchanges-label-unpatrolled": "箇编辑还朆巡查", "recentchanges-label-plusminus": "箇页面字节数前后个变化", "recentchanges-legend-heading": "说明:", "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}}(见[[Special:NewPages|新页列表]])", @@ -1089,7 +1089,7 @@ "fileuploadsummary": "小结:", "filereuploadsummary": "文件更改:", "filestatus": "版权状态:", - "filesource": "来源:", + "filesource": "来源:", "ignorewarning": "弗管警告,随便哪亨要保存文件。", "ignorewarnings": "忽略所有警告", "minlength1": "文件名至少一個字。", @@ -1214,7 +1214,7 @@ "log": "记录", "alllogstext": "所有{{SITENAME}}公开日志个联合展示。侬可以选择日志类型、用户名(区分大小写)或者相关页面(区分大小写)来缩小搜寻范围。", "allpages": "全部页面", - "nextpage": "下页 ($1)", + "nextpage": "下一页($1)", "prevpage": "上一页($1)", "allpagesfrom": "显示个页面开始于:", "allpagesto": "显示从此地结束个页面:", @@ -1322,7 +1322,7 @@ "restriction-move": "捅荡", "undeletepage": "查看搭仔恢复删脱个页面", "viewdeletedpage": "望望相删脱个页面", - "undeletelink": "查看/还原", + "undeletelink": "望/恢复", "undeleteviewlink": "望", "undeletecomment": "理由:", "undelete-search-submit": "搜尋", @@ -1428,7 +1428,7 @@ "tooltip-ca-talk": "讨论内容页", "tooltip-ca-edit": "编辑箇页", "tooltip-ca-addsection": "开始新段", - "tooltip-ca-viewsource": "箇页受保护,你好望源代码", + "tooltip-ca-viewsource": "箇页畀保护勒上。你好望源码", "tooltip-ca-history": "该只页面老早个版本", "tooltip-ca-protect": "保护箇页", "tooltip-ca-delete": "删脱箇页", @@ -1457,14 +1457,14 @@ "tooltip-t-print": "箇页个打印版", "tooltip-t-permalink": "箇页当前版本个老世链接", "tooltip-ca-nstab-main": "望内容页", - "tooltip-ca-nstab-user": "查看用户页", - "tooltip-ca-nstab-media": "查看媒体页", + "tooltip-ca-nstab-user": "望用户页", + "tooltip-ca-nstab-media": "望媒体页", "tooltip-ca-nstab-special": "箇是特别页面,弗好编辑", "tooltip-ca-nstab-project": "望项目页", "tooltip-ca-nstab-image": "望文件页", - "tooltip-ca-nstab-mediawiki": "查看系统讯息", + "tooltip-ca-nstab-mediawiki": "望系统消息", "tooltip-ca-nstab-template": "望模板", - "tooltip-ca-nstab-help": "查看帮忙页面", + "tooltip-ca-nstab-help": "望帮忙页", "tooltip-ca-nstab-category": "望分类页", "tooltip-minoredit": "标作小编写", "tooltip-save": "保存侬个修改", @@ -1545,7 +1545,7 @@ "table_pager_first": "头一页", "table_pager_last": "阿末一页", "table_pager_limit": "显示 $1 条每页", - "autoredircomment": "重定向页面至[[$1]]", + "autoredircomment": "重定向页面到[[$1]]", "autosumm-new": "新页面:“$1”", "watchlistedit-normal-title": "编辑监视列表", "watchlistedit-normal-legend": "从关注表里向拿脱标题", diff --git a/languages/i18n/xal.json b/languages/i18n/xal.json index 915ca6b986..bae1ce5007 100644 --- a/languages/i18n/xal.json +++ b/languages/i18n/xal.json @@ -152,6 +152,7 @@ "printableversion": "Барин бәәдл", "permalink": "Даңгин заалһ", "print": "Барлх", + "view": "Хәләвр", "edit": "Ясх", "create": "Бүтәх", "editthispage": "Эн халх ясх", @@ -410,6 +411,7 @@ "notextmatches": "Халхсин бичәснд ирлцән уга", "prevn": "урдк {{PLURAL:$1|$1}}", "nextn": "дарук {{PLURAL:$1|$1}}", + "shown-title": "Халхар $1 аш үзүлх", "viewprevnext": "Хәләх ($1 {{int:pipe-separator}} $2) ($3)", "searchprofile-articles": "Зүүлс", "searchprofile-images": "Үзгдл-соңсвр", @@ -417,6 +419,8 @@ "searchprofile-advanced": "Нәрн", "searchprofile-articles-tooltip": "$1 дотр хәәх", "searchprofile-images-tooltip": "Боомг хәәх", + "searchprofile-everything-tooltip": "Хамг зокъял хәәх (күүндвр халх орлцулҗ)", + "searchprofile-advanced-tooltip": "Заасн нердин делкәст хәәх", "search-result-size": "$1 ({{PLURAL:$2|$2 үг|$2 үг|$2 үг}})", "search-redirect": "(туудг $1)", "search-section": "(«$1» салвр)", @@ -514,6 +518,7 @@ "grouppage-bot": "{{ns:project}}:Көдлгчүд", "grouppage-sysop": "{{ns:project}}:Закрачуд", "grouppage-bureaucrat": "{{ns:project}}:Нойнчуд", + "right-writeapi": "API бичхин төлә кергллт", "newuserlogpage": "Бичгдлһнә седкүл", "rightslog": "Демнәчна зөвин седкүл", "action-edit": "эн халх ясх", @@ -585,6 +590,7 @@ "imagelinks": "Боомг керглән", "linkstoimage": "Эн $1 халх эн боомгур заана:", "sharedupload": "Эн боомг $1 ормас. Териг талдан төсвд олзлҗ болх.", + "sharedupload-desc-here": "Эн боомг $1 талас, бус төслд керглҗ болх.\nБичлһнь [$2 боомгин бичлһнә халх] доракшан үзгднә.", "uploadnewversion-linktext": "Тер боомгин шин һарц тәвх", "randompage": "Уршг зүүл", "statistics": "То бүрткл", @@ -745,8 +751,9 @@ "tooltip-pt-mycontris": "Тана демнлһнә сеткүл", "tooltip-pt-login": "Та орсн күцх бәәнәт, болв кергтә биш.", "tooltip-pt-logout": "Һарх", + "tooltip-pt-createaccount": "Танд бичгдлһн бүтәҗ, дигләнд орхар сәәшгднә, эн даалhврго чигн", "tooltip-ca-talk": "Халхин дотрин туск меткән", - "tooltip-ca-edit": "Та эн халхиг чиклҗ чаднат.\nБуйн болтха, хадһлһна күртл хәләвр олзлтн.", + "tooltip-ca-edit": "Эн халх ясх", "tooltip-ca-addsection": "Шин хүв эклх", "tooltip-ca-viewsource": "Эн халх харссн бәәнә.\nТа энүнә медсн үзҗ чаднат.", "tooltip-ca-history": "Эн халхна шидрә чикллһн", @@ -779,7 +786,7 @@ "tooltip-ca-nstab-main": "Халхнь", "tooltip-ca-nstab-user": "Демнчна халхиг үзүлх", "tooltip-ca-nstab-media": "Боомгин халх үзх", - "tooltip-ca-nstab-special": "Эн көдлхнә халх. Та эниг чиклҗ чадхшв.", + "tooltip-ca-nstab-special": "Эн көдлхнә халх, эн ясгдшго.", "tooltip-ca-nstab-project": "Төслин халх", "tooltip-ca-nstab-image": "Боомгин халхиг", "tooltip-ca-nstab-mediawiki": "MediaWiki зәңгин халх", @@ -801,14 +808,17 @@ "file-info-size": "$1 × $2 цегтә, боомгин кемҗән: $3, MIME янз: $4", "file-nohires": "Икәр чинртә янз уга.", "svg-long-desc": "SVG боомг, $1 × $2 мет цегтә, боомгин кемҗән: $3", - "show-big-image": "Күцц чинр", + "show-big-image": "Эк боомг", + "show-big-image-preview": "Хәләврин аһу: $1.", + "show-big-image-other": "Бус нигтрл: $1.", + "show-big-image-size": "$1 × $2 цегтә", "file-info-gif-looped": "билцгсн", "bad_image_list": "Эн темдглһн кергтә:\n\nБүртклин мөчүд һанцхн оньгтан авх (мөрәд * эклцта).\nТүрүн мөрәнә заалһ - тәвх хөрсн зургин заалһ.\nДарук заалһуд эн мөрәд хаҗилһн болх (халхс зургиг орулҗ болх).", "metadata": "Мета өггцн", "metadata-help": "Эн боомг дәкәд өггцтә. Тер өггцн то камерар аль сканерар немсмн. Боомг бүтәлһнә хөөн чиклсн бәәхлә, зәрм кемҗәд одахн зургд әдл биш болх.", "metadata-expand": "Ик тодрхасиг үзүлх", "metadata-collapse": "Ик тодрхасиг бултулх", - "metadata-fields": "Эн җигсәмҗд нерлгдсн мета өггцин аһу, дүрслгч халхд герәсләр үзүлгдх, наадкснь бултулгдх.\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": "Эн бүртклд нерәдсн зургин мета то-дигин теегмүд мета то-дигин көснг эвкснд зургин халхт үзгднә. Наадк теегмүд таарсар нуугдх.\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-imagewidth": "Өргн", "exif-imagelength": "Өндр", "exif-bitspersample": "Өңгин гүн", @@ -820,8 +830,8 @@ "exif-artist": "Зокъялч", "exif-copyright": "Зокъялчин зөвәнә эзн", "exif-exifversion": "Exif'ин һарц", - "exif-pixelydimension": "Күцц зургин өндр", - "exif-pixelxdimension": "Күцц зургин өргн", + "exif-pixelxdimension": "Күцц зургин өндр", + "exif-pixelydimension": "Күцц зургин өргн", "exif-exposuretime": "Дәврдгсн цаг", "exif-exposuretime-format": "$1 с ($2)", "exif-contrast": "Зөрү", @@ -873,8 +883,11 @@ "specialpages-group-spam": "Спамас зевсг", "blankpage": "Хоосн халх", "intentionallyblankpage": "Тер халх хоосн күслтә бәәнә.", + "tag-filter": "[[Special:Tags|Царадын]] шүр:", + "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Царан|Царад}}]]: $2)", "htmlform-reset": "Сольлһиг уга кех", "htmlform-selectorother-other": "Талдан", + "logentry-newusers-create": "$1 демнәчин бичгдлһн бүтәгдв", "rightsnone": "(уга)", "searchsuggest-search": "Хәәвр" } diff --git a/languages/i18n/xmf.json b/languages/i18n/xmf.json index bc98445479..19b3bec6db 100644 --- a/languages/i18n/xmf.json +++ b/languages/i18n/xmf.json @@ -15,7 +15,8 @@ "아라", "Silovan", "David1010", - "Macofe" + "Macofe", + "Nemo bis" ] }, "tog-underline": "რცხუეფიშ ათოღაზუა:", @@ -1180,7 +1181,7 @@ "recentchangeslinked-page": "ხასილაშ ჯოხო:", "recentchangeslinked-to": "მანგიერო ქაძირე ათე ხასილაშა მერცხილ ხასილეფშა მიშაღალირ თირაფეფ", "recentchanges-page-added-to-category": "[[:$1]] გეძინელჷ რე კატეგორიას", - "recentchanges-page-added-to-category-bundled": "[[:$1]] დო {{PLURAL:$2|ართ ხასჷლა|$2 ხასჷლა}} გეძინელ რე კატეგორიას", + "recentchanges-page-added-to-category-bundled": "[[:$1]] დო [[Special:WhatLinksHere/$1|{{PLURAL:$2|ართ ხასჷლა|$2 ხასჷლა}}]] გეძინელ რე კატეგორიას", "recentchanges-page-removed-from-category": "[[:$1]] ლასირი რე კატეგორიაშე", "recentchanges-page-removed-from-category-bundled": "[[:$1]] დო {{PLURAL:$2|ართ ხასჷლა|$2 ხასჷლა}} ლასირი რე კატეგორიაშე", "upload": "ფაილიშ ეხარგუა", diff --git a/languages/i18n/yi.json b/languages/i18n/yi.json index d5f577682f..ef1552cc2a 100644 --- a/languages/i18n/yi.json +++ b/languages/i18n/yi.json @@ -16,7 +16,8 @@ "Amire80", "පසිඳු කාවින්ද", "Matma Rex", - "Macofe" + "Macofe", + "Nemo bis" ] }, "tog-underline": "שטרייכט אונטער לינקען", @@ -1251,7 +1252,7 @@ "recentchangeslinked-page": "בלאַט נאָמען:", "recentchangeslinked-to": "צייג ענדערונגען צו בלעטער פארבינדן צו דעם בלאט אנשטאט", "recentchanges-page-added-to-category": "[[:$1]] צוגעלייגט צו קאטעגאריע", - "recentchanges-page-added-to-category-bundled": "[[:$1]] און {{PLURAL:$2|איין בלאט|$2 בלעטער}} צוגעלייגט צו קאטעגאריע", + "recentchanges-page-added-to-category-bundled": "[[:$1]] און [[Special:WhatLinksHere/$1|{{PLURAL:$2]]|איין בלאט|$2 בלעטער}} צוגעלייגט צו קאטעגאריע", "recentchanges-page-removed-from-category": "[[:$1]] אראפגענומען פון קאטעגאריע", "recentchanges-page-removed-from-category-bundled": "[[:$1]] און {{PLURAL:$2|איין בלאט|$2 בלעטער}} אראפגענומען פון קאטעגאריע", "autochange-username": "מעדיעוויקי אויטאמאטישער טויש", @@ -1663,8 +1664,6 @@ "categories-submit": "ווייזן", "categoriespagetext": "די פֿאלגענדע {{PLURAL:$1| קאַטעגאָריע אַנטהאַלט|קאַטעגאָריעס אַנטהאַלטן}} בלעטער אדער מעדיע.\n[[Special:UnusedCategories|אומבאַניצטע קאַטעגאריעס]] זענען נישט געוויזן דא.\nזעט אויך [[Special:WantedCategories|געזוכטע קאַטעגאריעס]].", "categoriesfrom": "ווײַזן קאַטעגאריעס אָנהייבנדיג פֿון:", - "special-categories-sort-count": "סארטיר לויטן צאל בלעטער", - "special-categories-sort-abc": "סארטירן אַלפֿאַבעטיש", "deletedcontributions": "אויסגעמעקטע באַניצער בײַשטײַערונגען", "deletedcontributions-title": "אויסגעמעקטע באַניצער בײַשטײַערונגען", "sp-deletedcontributions-contribs": "בײַשטײַערונגען", @@ -2238,11 +2237,7 @@ "import-logentry-upload-detail": "$1 {{PLURAL:$1|רעוויזיע|רעוויזיעס}} אימפארטירט", "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|רעוויזיע|רעוויזיעס}} אימפארטירט פֿון $2", "javascripttest": "JavaScript טעסט", - "javascripttest-pagetext-noframework": " דער בלאט איז רעזערווירט פאר JavaScript. פרואוון.", - "javascripttest-pagetext-unknownframework": "אומבאקאנטער טעסטן גערעם \"$1\".", "javascripttest-pagetext-unknownaction": "אומבאַקאַנטע אַקציע '$1'", - "javascripttest-pagetext-frameworks": "ביטע קלויבט איינעם פון די פאלגנדע טעסטן־גערעם: $1", - "javascripttest-pagetext-skins": "קלויבט א באניצער־אייבערפלאך מיט וואס דורכצופירן די בדיקות:", "javascripttest-qunit-intro": "זעט [$1 דאקומענטאציע פאר טעסטן] בײַ mediawiki.org.", "tooltip-pt-userpage": "אייער {{GENDER:|באניצער|באניצערין}} בלאט", "tooltip-pt-anonuserpage": "באַניצער בלאַט פון דעם IP אַדרעס", @@ -2485,8 +2480,8 @@ "exif-colorspace": "קאליר רוים", "exif-componentsconfiguration": "מיינונג פון יעדן באשטאנדטייל", "exif-compressedbitsperpixel": "בילד צוזאמקוועטשן מאוד", - "exif-pixelydimension": "בילד ברייט", - "exif-pixelxdimension": "בילד הייך", + "exif-pixelxdimension": "בילד ברייט", + "exif-pixelydimension": "בילד הייך", "exif-usercomment": "באניצער קאמענטורן", "exif-relatedsoundfile": "פֿאַרבונדענע אוידיאָ טעקע", "exif-datetimeoriginal": "דאטום און צייט פון דאַטן באשאפונג", @@ -2892,7 +2887,6 @@ "version-entrypoints-header-url": "URL", "version-libraries-library": "ביבליאטעק", "version-libraries-version": "ווערסיע", - "redirect-legend": "ווײַטערײַטערפירונג צו א טעקע אדער בלאט", "redirect-submit": "גייט", "redirect-lookup": "זוכן:", "redirect-value": "ווערט:", @@ -2903,7 +2897,6 @@ "redirect-not-exists": "ווערט נישט געטראפן", "fileduplicatesearch": "זוכן דופליקאַטע טעקעס", "fileduplicatesearch-summary": "זוכן דופליקאטע טעקעס באזירט אויף האש־ווערטן.", - "fileduplicatesearch-legend": "זוכן א דופליקאַט", "fileduplicatesearch-filename": "טעקע:", "fileduplicatesearch-submit": "זוכן", "fileduplicatesearch-info": "$1 × $2 פיקסעל
טעקע גרייס: $3
טיפ MIME: $4", @@ -3123,5 +3116,9 @@ "special-characters-group-khmer": "כמער", "special-characters-title-endash": "ען טירע", "special-characters-title-emdash": "עם טירע", - "special-characters-title-minus": "מינוס" + "special-characters-title-minus": "מינוס", + "log-action-filter-upload": "טיפ ארויפֿלאד:", + "log-action-filter-all": "אַלע", + "log-action-filter-delete-delete": "אויסמעקן בלאט", + "log-action-filter-protect-unprotect": "אראפנעמען שיץ" } diff --git a/languages/i18n/yo.json b/languages/i18n/yo.json index 91af0cee53..3b75367960 100644 --- a/languages/i18n/yo.json +++ b/languages/i18n/yo.json @@ -1447,8 +1447,6 @@ "categories": "Àwọn ẹ̀ka", "categoriespagetext": "{{PLURAL:$1|Ẹ̀ka|Àwọn ẹ̀ka}} yìí ní ojúewé tàbí amóhùnmáwòrán.\n[[Special:UnusedCategories|Àwọn ẹ̀ka aláìlò]] kò hàn níbí.\nBákannáà ẹ wo [[Special:WantedCategories|àwọn ẹ̀ka wíwá]].", "categoriesfrom": "Ìfihàn àwọn ẹ̀ka nípa bíbẹ̀rẹ̀ láti:", - "special-categories-sort-count": "títò bíi nọ́mbà", - "special-categories-sort-abc": "títò bíi lẹ́tà", "deletedcontributions": "Àwọn àfikún píparẹ́ oníṣe", "deletedcontributions-title": "Àwọn àfikún píparẹ́ oníṣe", "sp-deletedcontributions-contribs": "àwọn àfikún", @@ -1988,8 +1986,6 @@ "import-logentry-upload-detail": "{{PLURAL:$1|Àtúnyẹ̀wò|Àwọn àtúnyẹ̀wò}} $1", "import-logentry-interwiki-detail": "{{PLURAL:$1|Àtúnyẹ̀wò|Àwọn àtúnyẹ̀wò}} $1 láti $2", "javascripttest": "Ìdánwò JavaScript", - "javascripttest-pagetext-noframework": "Ojúewé yìí jẹ́ dídásílẹ̀ fún ṣíṣe ìdánwò JavaScript.", - "javascripttest-pagetext-skins": "Ẹ mú irú ojú ara tí ẹ fẹ́ lò láti ṣe àdánwò náà:", "javascripttest-qunit-intro": "Ẹ wo [$1 ìwé aṣàlàyé ìdánwò] ní mediawiki.org.", "tooltip-pt-userpage": "Ojúewé oníṣe yín", "tooltip-pt-anonuserpage": "Ojúewé oníṣe fún àdírẹ́ẹ̀sì IP tí ẹ únlò láti ṣàtúnṣe", @@ -2222,8 +2218,8 @@ "exif-colorspace": "Àyè àwọ̀", "exif-componentsconfiguration": "Ìtumọ̀ àkóónú kọ̀ọ̀kan", "exif-compressedbitsperpixel": "Àyè ìtẹ̀pọ̀ àwòrán", - "exif-pixelydimension": "Ìfẹ̀ àwòrán", - "exif-pixelxdimension": "Ìga àwòrán", + "exif-pixelxdimension": "Ìfẹ̀ àwòrán", + "exif-pixelydimension": "Ìga àwòrán", "exif-usercomment": "Àwọn àwìsọ oníṣe", "exif-relatedsoundfile": "Fáìlì ìfohùn tó jọra", "exif-datetimeoriginal": "Ọjọ́ àti àsìkò tí dátà jade", @@ -2486,7 +2482,6 @@ "version-entrypoints-header-url": "URL", "fileduplicatesearch": "Ìṣàwárí fún àwọn fáìlì àdáwòkọ", "fileduplicatesearch-summary": "Ìṣàwárí fún àwọn fáìlì àdáwòkọ gẹ́gẹ́bí nọ́mbà hash", - "fileduplicatesearch-legend": "Ìṣàwárí fún àdáwòkọ kan", "fileduplicatesearch-filename": "Orúkọ fáìlì:", "fileduplicatesearch-submit": "Àwárí", "fileduplicatesearch-info": "$1 × $2 pixel
Ìtóbi fáìlì: $3
Irú MIME: $4", diff --git a/languages/i18n/yue.json b/languages/i18n/yue.json index 6d63e20cb0..1e1cd61153 100644 --- a/languages/i18n/yue.json +++ b/languages/i18n/yue.json @@ -1239,7 +1239,7 @@ "recentchangeslinked-page": "頁名:", "recentchangeslinked-to": "顯示連到所畀到嘅版", "recentchanges-page-added-to-category": "[[:$1]] 加咗落分類", - "recentchanges-page-added-to-category-bundled": "[[:$1]] 同另外 {{PLURAL:$2|1 版|$2 版}}加咗落分類", + "recentchanges-page-added-to-category-bundled": "[[:$1]] 同另外 [[Special:WhatLinksHere/$1|{{PLURAL:$2|1 版|$2 版}}]]加咗落分類", "recentchanges-page-removed-from-category": "[[:$1]] 拎走咗分類", "recentchanges-page-removed-from-category-bundled": "[[:$1]] 同另外 {{PLURAL:$2|1 版|$2 版}}拎走咗分類", "autochange-username": "MediaWiki 自動改動", @@ -1641,8 +1641,6 @@ "categories": "類", "categoriespagetext": "下面嘅{{PLURAL:$1|類}}有版或媒體。\n[[Special:UnusedCategories|未用類]]唔會響呢度列示。\n請同時參閱[[Special:WantedCategories|需要嘅分類]]。", "categoriesfrom": "顯示由呢項起嘅類:", - "special-categories-sort-count": "跟數量排", - "special-categories-sort-abc": "跟字母排", "deletedcontributions": "已經刪除咗嘅用戶貢獻", "deletedcontributions-title": "已經刪除咗嘅用戶貢獻", "sp-deletedcontributions-contribs": "貢獻", @@ -2229,11 +2227,7 @@ "import-logentry-upload-detail": "$1個修訂都已經倒入咗", "import-logentry-interwiki-detail": "由$2倒入嘅$1個修訂", "javascripttest": "JavaScript測試", - "javascripttest-pagetext-noframework": "呢頁留畀行JavaScript測試。", - "javascripttest-pagetext-unknownframework": "唔知嘅測試框架「$1」。", "javascripttest-pagetext-unknownaction": "唔知嘅動作「$1」。", - "javascripttest-pagetext-frameworks": "請揀一個測試框架:$1", - "javascripttest-pagetext-skins": "揀個外觀去行測試:", "javascripttest-qunit-intro": "睇 mediawiki.org 嘅 [$1 測試文檔]。", "tooltip-pt-userpage": "你嘅用戶頁", "tooltip-pt-anonuserpage": "你編輯呢個IP嘅對應用戶頁", @@ -2499,8 +2493,8 @@ "exif-colorspace": "色彩空間", "exif-componentsconfiguration": "每個部份嘅意思", "exif-compressedbitsperpixel": "影像壓縮模式", - "exif-pixelydimension": "影像闊度", - "exif-pixelxdimension": "影像高度", + "exif-pixelxdimension": "影像闊度", + "exif-pixelydimension": "影像高度", "exif-usercomment": "用家註腳", "exif-relatedsoundfile": "相關聲音檔", "exif-datetimeoriginal": "原創日期時間", @@ -2850,7 +2844,6 @@ "redirect-file": "檔名", "fileduplicatesearch": "㨂重覆檔案", "fileduplicatesearch-summary": "用重覆檔案嘅切細值去搵個檔案係唔係重覆。", - "fileduplicatesearch-legend": "搵重覆", "fileduplicatesearch-filename": "檔名:", "fileduplicatesearch-submit": "搵", "fileduplicatesearch-info": "$1 × $2 像素
檔案大細: $3
MIME類型: $4", diff --git a/languages/i18n/zh-hans.json b/languages/i18n/zh-hans.json index 916192be06..89972edce8 100644 --- a/languages/i18n/zh-hans.json +++ b/languages/i18n/zh-hans.json @@ -107,6 +107,7 @@ "tog-watchdefault": "添加我编辑的页面和文件至我的监视列表", "tog-watchmoves": "添加我移动的页面和文件至我的监视列表", "tog-watchdeletion": "添加我删除的页面和文件至我的监视列表", + "tog-watchuploads": "添加我上传的新文件至我的监视列表", "tog-watchrollback": "添加我执行过回退的页面至我的监视列表", "tog-minordefault": "默认标记所有编辑为小编辑", "tog-previewontop": "在编辑框上方显示预览", @@ -231,7 +232,6 @@ "moredotdotdot": "更多...", "morenotlisted": "本列表不完整。", "mypage": "页面", - "anonuserpage": "未知用户", "mytalk": "讨论", "anontalk": "讨论", "navigation": "导航", @@ -340,7 +340,7 @@ "retrievedfrom": "取自“$1”", "youhavenewmessages": "{{PLURAL:$3|您}}有$1($2)。", "youhavenewmessagesfromusers": "{{PLURAL:$4|您}}有来自{{PLURAL:$3|其他用户|$3个用户}}的$1($2)。", - "youhavenewmessagesmanyusers": "你有来自多个用户的$1($2)。", + "youhavenewmessagesmanyusers": "您有来自多个用户的$1($2)。", "newmessageslinkplural": "{{PLURAL:$1|新信息|999=新消息}}", "newmessagesdifflinkplural": "最后{{PLURAL:$1|更改|999=更改}}", "youhavenewmessagesmulti": "你在$1有新信息", @@ -527,14 +527,14 @@ "loginerror": "登录错误", "createacct-error": "账户创建出错", "createaccounterror": "无法建立账户:$1", - "nocookiesnew": "该用户帐户已被创建,但登录失败。{{SITENAME}}使用Cookie实现用户登录。您已禁用Cookie,请启用Cookie,然后使用你的新用户名与密码登录。", + "nocookiesnew": "该用户帐户已被创建,但登录失败。{{SITENAME}}使用Cookie实现用户登录。您已禁用Cookie,请启用Cookie,然后使用您的新用户名与密码登录。", "nocookieslogin": "{{SITENAME}}使用Cookie实现用户登录。您已停用Cookie。请启用Cookie后再试。", "nocookiesfornew": "该用户账户未被创建,我们不能确认它的来源。请确保你已启用Cookie,刷新本页后再试。", "noname": "未指定有效的用户名。", "loginsuccesstitle": "已登录", "loginsuccess": "您现在已经以\"$1\"的身份登录了{{SITENAME}}。", "nosuchuser": "没有名为“$1”的用户。用户名区分大小写。请检查你的拼写或[[Special:UserLogin/signup|创建新账户]]。", - "nosuchusershort": "没有名为“$1”的用户。请检查你的拼写。", + "nosuchusershort": "没有名为“$1”的用户。请检查您的拼写。", "nouserspecified": "您必须指定一个用户名。", "login-userblocked": "该用户已被封禁,禁止登录。", "wrongpassword": "您输入的密码错误。请重试。", @@ -550,7 +550,7 @@ "noemail": "用户\"$1\"没有登记电子邮件地址。", "noemailcreate": "您需要提供一个有效的电子邮件地址", "passwordsent": "用户\"$1\"的新密码已经寄往所登记的电子邮件地址。\n请在收到后再登录。", - "blocked-mailpassword": "你的IP地址被禁止编辑,为预防滥用,密码恢复功能也被禁止使用。", + "blocked-mailpassword": "您的IP地址被禁止编辑,为预防滥用,也不允许从该IP地址使用密码恢复功能。", "eauthentsent": "一封确认信已经发送至您设定的邮件地址。\n在任何其他邮件发送至您的账户前,您将不得不根据邮件中的指示,确认那个账户确实是您的。", "throttled-mailpassword": "密码提醒已在最近$1小时内发送。为了安全起见,在每$1小时内只能发送一个密码提醒。", "mailerror": "发送邮件错误:$1", @@ -663,7 +663,7 @@ "changeemail-throttled": "您最近尝试了太多次登录。请等待$1后再试。", "changeemail-nochange": "请输入一个不同的新的电子邮件地址。", "resettokens": "重置密钥", - "resettokens-text": "你可以在这里重置允许访问与你的账户有关的特定私人数据的密钥。\n\n如果你意外将它们分享给他人,或是你的账户已经被入侵,你应该重置它们。", + "resettokens-text": "您可以在这里重置允许访问与您的账户有关的特定私人数据的密钥。\n\n如果您意外将它们分享给他人,或是您的账户已经被入侵,您应该重置它们。", "resettokens-no-tokens": "没有可以重置的密钥。", "resettokens-tokens": "密钥:", "resettokens-token-label": "$1(当前值:$2)", @@ -700,7 +700,7 @@ "anoneditwarning": "警告:您没有登录。如果您做出任意编辑,您的IP地址将会公开可见。如果您[$1 登录]或[$2 创建]一个账户,您的编辑将归属于您的用户名,且将享受其他好处。", "anonpreviewwarning": "您没有登录。保存将您的IP地址记录至此页面的编辑历史中。", "missingsummary": "提示:您没有提供编辑摘要。如果您再次点击“{{int:savearticle}}”,您的编辑将不带摘要保存。", - "selfredirect": "警告:您正在将此页面重定向至它自己。\n您可能指定了错误的重定向目标,或者您正在编辑错误的页面。\n如果您再次点击“{{int:savearticle}}”,重定向将无论如何被创建。", + "selfredirect": "警告:您正在将此页面重定向至它自己。您可能指定了错误的重定向目标,或者您正在编辑错误的页面。如果您再次点击“{{int:savearticle}}”,重定向将无论如何被创建。", "missingcommenttext": "请在下面输入评论。", "missingcommentheader": "提示:您还没有为此评论提供一个标题。如果您再次点击“{{int:savearticle}}”,您的编辑将不带标题保存。", "summary-preview": "摘要预览:", @@ -711,7 +711,7 @@ "autoblockedtext": "您的IP地址因曾被一位被$1封禁的用户使用而被自动封禁。封禁原因:\n\n:$2\n\n* 开始时间:$8\n* 到期时间:$6\n* 目标用户:$7\n\n您可以联系$1或其他[[{{MediaWiki:Grouppage-sysop}}|管理员]]申诉该封禁。\n\n请注意,只有当您已在[[Special:Preferences|系统设置]]确认了电子邮件地址且未被禁止使用“电邮联系”功能时,才能发送电子邮件联系管理员。\n\n您当前的IP地址为$3,该封禁ID为#$5。\n请您在申诉内容中说明以上所有信息。", "blockednoreason": "未给出原因", "whitelistedittext": "请$1以编辑页面。", - "confirmedittext": "你必须确认你的电子邮件地址才能编辑页面。请通过[[Special:Preferences|系统设置]]设置并确认你的电子邮件地址。", + "confirmedittext": "您必须确认您的电子邮件地址才能编辑页面。请通过[[Special:Preferences|系统设置]]设置并确认您的电子邮件地址。", "nosuchsectiontitle": "没有这个段落", "nosuchsectiontext": "您尝试编辑的章节并不存在。\n可能是在您查看页面时已经移动或删除。", "loginreqtitle": "需要登录", @@ -732,9 +732,9 @@ "usercssyoucanpreview": "提示:在保存前请用“{{int:showpreview}}”按钮来测试您新的 CSS 。", "userjsyoucanpreview": "提示:在保存前请用“{{int:showpreview}}”按钮来测试您新的 JavaScript 。", "usercsspreview": "请记住您现在只是在预览你的用户CSS。它尚未保存!", - "userjspreview": "请记住你现在只是在测试/预览你的用户JavaScript。它尚未保存!", + "userjspreview": "请记住您现在只是在测试/预览您的用户JavaScript。它尚未保存!", "sitecsspreview": "请记住你现在只是在预览该CSS。它尚未保存!", - "sitejspreview": "请记住你现在只是在预览该JavaScript代码。它尚未保存!", + "sitejspreview": "请记住您现在只是在预览该JavaScript代码。它尚未保存!", "userinvalidcssjstitle": "警告:不存在皮肤“$1”。注意自定义的 .css 和 .js 页要使用小写标题,例如,{{ns:user}}:Foo/vector.css 不同于 {{ns:user}}:Foo/Vector.css。", "updated": "(已更新)", "note": "注意:", @@ -750,7 +750,7 @@ "editingsection": "编辑“$1(段落)”", "editingcomment": "编辑“$1”(新段落)", "editconflict": "编辑冲突:$1", - "explainconflict": "其他用户在你开始编辑后更改了该页面。上面的文字区含有该页面当前的文字。下面的文字区显示你的更改。你必须把你的更改合并至现有文字。'''只有'''当你单击“{{int:savearticle}}”后,上面的文字区中的文字才会被保存。", + "explainconflict": "其他用户在您开始编辑后更改了该页面。上面的文字区含有该页面当前的文字。下面的文字区显示您的更改。您必须把您的更改合并至现有文字。只有当您单击“{{int:savearticle}}”后,上面的文字区中的文字才会被保存。", "yourtext": "您的文字", "storedversion": "已保存的版本", "nonunicodebrowser": "警告:您的浏览器不兼容Unicode编码。这里有一个工作区将使您能安全地编辑页面:非ASCII字符将以十六进制编码方式出现在编辑框中。", @@ -874,9 +874,9 @@ "rev-deleted-no-diff": "您不能查看该差异,因为其中一个版本已被删除。详情请见[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} 删除日志]。", "rev-suppressed-no-diff": "无法查看该差异,因为其中一个版本已被删除。", "rev-deleted-unhide-diff": "该差异对比的其中的一个版本已经被删除。在[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} 删除日志]中可以找到更多的信息。如果您想继续的话,您仍然可以[$1 查看此版本]。", - "rev-suppressed-unhide-diff": "该页面的其中一次版本已经被监督隐藏。\n在[{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} 监督日志]中可以找到更多的资料。如果您想继续的话,您可以仍然[$1 去查看这版本]。", + "rev-suppressed-unhide-diff": "该页面的其中一次版本已经被屏蔽。在[{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} 监督日志]中可以找到更多的资料。如果您想继续的话,您仍然可以[$1 查看该差异]。", "rev-deleted-diff-view": "差异对比中的一次版本已被删除。您可以对比此差异。详细信息可在[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} 删除日志]中找到。", - "rev-suppressed-diff-view": "差异对比中的一个版本已被监督隐藏。您可以对比此差异。详细信息可在[{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} 监督日志]中找到。", + "rev-suppressed-diff-view": "差异对比中的一个版本已被屏蔽。您可以对比此差异;详细信息可在[{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} 监督日志]中找到。", "rev-delundel": "更改可见性", "rev-showdeleted": "显示", "revisiondelete": "删除/还原版本", @@ -1012,7 +1012,7 @@ "searchall": "所有", "showingresults": "下面显示从第$2条结果开始的$1条结果。", "showingresultsinrange": "下面显示区间#$2至#$3的$1条结果。", - "search-showingresults": "{{PLURAL:$4|$3条结果中的$1条|$3条结果中的$1~$2条}}", + "search-showingresults": "{{PLURAL:$4|第$1条结果,共$3条|第$1~$2条结果,共$3条}}", "search-nonefound": "找不到和查询相匹配的结果。", "search-nonefound-thiswiki": "在此网站找不到匹配查询的结果。", "powersearch-legend": "高级搜索", @@ -1113,7 +1113,7 @@ "prefs-help-gender": "该设置为可选项。软件根据该值在称呼您及对他人提及您时使用适当的语法性别。该信息会被公开。", "email": "电子邮件", "prefs-help-realname": "真实姓名是选填项目。如果提供,它可能用于署名您的贡献。", - "prefs-help-email": "电子邮件地址是选填项,但是当你忘记你的密码要重置密码时,需要该信息。", + "prefs-help-email": "电子邮件地址是选填项,但是当您忘记您的密码要重置密码时,需要该信息。", "prefs-help-email-others": "您也可以选择让其他用户通过您的用户或讨论页面上的链接用电子邮件联系您。其他用户联系您时您的电子邮件地址不会显示。", "prefs-help-email-required": "电子邮件地址是必填项目。", "prefs-info": "基本信息", @@ -1392,9 +1392,9 @@ "recentchangeslinked-page": "页面名称:", "recentchangeslinked-to": "显示链到所给出的页面", "recentchanges-page-added-to-category": "[[:$1]]已添加至分类", - "recentchanges-page-added-to-category-bundled": "[[:$1]]及其他{{PLURAL:$2|$2个页面}}已添加至分类", + "recentchanges-page-added-to-category-bundled": "[[:$1]]已添加至分类,[[Special:WhatLinksHere/$1|此页面包含在其他页面之内]]", "recentchanges-page-removed-from-category": "[[:$1]]已从分类中移除", - "recentchanges-page-removed-from-category-bundled": "[[:$1]]及其他{{PLURAL:$2|$2个页面}}已从分类中移除", + "recentchanges-page-removed-from-category-bundled": "[[:$1]]已从分类中移除,[[Special:WhatLinksHere/$1|此页面包含在其他页面之内]]", "autochange-username": "MediaWiki自动化更改", "upload": "上传文件", "uploadbtn": "上传文件", @@ -1574,6 +1574,7 @@ "uploadstash-badtoken": "执行对应操作失败。可能是因为您的编辑凭证已过期。请重试。", "uploadstash-errclear": "清除文件失败。", "uploadstash-refresh": "更新文件列表", + "uploadstash-thumbnail": "显示缩略图", "invalid-chunk-offset": "无效区块偏移量", "img-auth-accessdenied": "拒绝访问", "img-auth-nopathinfo": "PATH_INFO缺失。\n您的服务器尚未设置传送该信息。\n它可能基于CGI,因而不支持img_auth。\n请参见https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Image_Authorization。", @@ -1873,8 +1874,8 @@ "showhideselectedlogentries": "更改选定日志记录的可见性", "log-edit-tags": "编辑选定日志记录的标签", "checkbox-select": "选择:$1", - "checkbox-all": "全部", - "checkbox-none": "无", + "checkbox-all": "全选", + "checkbox-none": "全不选", "checkbox-invert": "反选", "allpages": "所有页面", "nextpage": "下一页($1)", @@ -1895,8 +1896,6 @@ "categories-submit": "显示", "categoriespagetext": "以下{{PLURAL:$1|分类包含}}页面或媒体文件。[[Special:UnusedCategories|未使用分类]]不在这里显示。另请见[[Special:WantedCategories|需要的分类]]。", "categoriesfrom": "显示分类开始于:", - "special-categories-sort-count": "按数量排列", - "special-categories-sort-abc": "按字母排列", "deletedcontributions": "被删除的用户贡献", "deletedcontributions-title": "被删除的用户贡献", "sp-deletedcontributions-contribs": "贡献", @@ -2036,7 +2035,7 @@ "enotif_lastvisited": "请浏览 $1 查看在你上次访问后的所有更改。", "enotif_lastdiff": "请浏览 $1 查看该更改。", "enotif_anon_editor": "匿名用户$1", - "enotif_body": "亲爱的$WATCHINGUSERNAME:\n\n你好!\n\n$PAGEINTRO$NEWPAGE\n编辑摘要:$PAGESUMMARY $PAGEMINOREDIT\n\n你可以通过以下方式联系编者:\n电子邮件:$PAGEEDITOR_EMAIL\n用户页面:$PAGEEDITOR_WIKI\n\n在你登录并访问该页面之前,我们不会发送新增更改的通知。\n你也可以重设你的监视列表中所有监视页面的通知标志。\n\n{{SITENAME}}通知系统\n--\n更改邮件通知设置:\n{{canonicalurl:{{#special:Preferences}}}}\n更改监视列表设置:\n{{canonicalurl:{{#special:EditWatchlist}}}}\n从监视列表中删除该页面:\n$UNWATCHURL\n反馈与其他帮助:\n$HELPPAGE", + "enotif_body": "亲爱的$WATCHINGUSERNAME:\n\n您好!\n$PAGEINTRO$NEWPAGE\n\n编辑摘要:$PAGESUMMARY $PAGEMINOREDIT\n\n可通过以下方式联系编辑者:\n电子邮件:$PAGEEDITOR_EMAIL\n用户页面:$PAGEEDITOR_WIKI\n\n在您登录并访问该页面之前,我们不会发送新增更改的通知。您也可以重设您的监视列表中所有监视页面的通知标志。\n\n{{SITENAME}}通知系统\n\n--\n更改邮件通知设置:\n{{canonicalurl:{{#special:Preferences}}}}\n更改监视列表设置:\n{{canonicalurl:{{#special:EditWatchlist}}}}\n从监视列表中删除该页面:\n$UNWATCHURL\n反馈与其他帮助:\n$HELPPAGE", "created": "创建", "changed": "更改", "deletepage": "删除页面", @@ -2048,7 +2047,7 @@ "delete-legend": "删除", "historywarning": "警告:您将要删除的页面有约$1次{{PLURAL:$1|修订}}的历史:", "historyaction-submit": "显示", - "confirmdeletetext": "您即将删除一个页面或图像以及其历史。\n请确定您要进行此项操作,并且了解其后果,同时您的行为符合[[{{MediaWiki:Policy-url}}]]。", + "confirmdeletetext": "您即将删除一个页面或图像以及其历史。请确定您要进行此项操作,并且了解其后果,同时您的行为符合[[{{MediaWiki:Policy-url}}|方针]]。", "actioncomplete": "操作完成", "actionfailed": "操作失败", "deletedtext": "“$1”已被删除。最近的删除日志请见$2。", @@ -2274,6 +2273,7 @@ "ipb-unblock": "解封用户名或IP地址", "ipb-blocklist": "查看现有封禁", "ipb-blocklist-contribs": "{{GENDER:$1|$1}}的贡献", + "ipb-blocklist-duration-left": "剩余$1", "unblockip": "解封用户", "unblockiptext": "使用下列表单来恢复之前被封禁的IP地址或用户名的写权限。", "ipusubmit": "解除此封禁", @@ -2515,11 +2515,7 @@ "import-logentry-upload-detail": "导入$1个{{PLURAL:$1|版本}}", "import-logentry-interwiki-detail": "来自$2的$1个{{PLURAL:$1|版本}}已导入", "javascripttest": "JavaScript测试", - "javascripttest-pagetext-noframework": "本页面被保留进行JavaScript测试。", - "javascripttest-pagetext-unknownframework": "未知的框架“$1”。", "javascripttest-pagetext-unknownaction": "未知操作“$1”。", - "javascripttest-pagetext-frameworks": "请选择以下的框架之一:$1", - "javascripttest-pagetext-skins": "选择外观来运行测试:", "javascripttest-qunit-intro": "请见mediawiki.org的[$1 测试说明文件]。", "tooltip-pt-userpage": "{{GENDER:|您的用户}}页", "tooltip-pt-anonuserpage": "您用于编辑的IP地址的用户页面", @@ -2535,7 +2531,7 @@ "tooltip-ca-talk": "关于内容页面的讨论", "tooltip-ca-edit": "编辑本页", "tooltip-ca-addsection": "开始新段落", - "tooltip-ca-viewsource": "本页面受到保护。\n您可以查看其源代码", + "tooltip-ca-viewsource": "本页面受到保护。您可以查看其源代码", "tooltip-ca-history": "本页面过去的版本", "tooltip-ca-protect": "保护本页", "tooltip-ca-unprotect": "更改本页面的保护", @@ -2550,7 +2546,7 @@ "tooltip-p-logo": "访问首页", "tooltip-n-mainpage": "访问首页", "tooltip-n-mainpage-description": "访问首页", - "tooltip-n-portal": "关于本项目,你可做的事,何处找到你所需", + "tooltip-n-portal": "关于本项目,您可做的事,何处找到您所需", "tooltip-n-currentevents": "查看当前事件的背景信息", "tooltip-n-recentchanges": "本wiki最近更改的列表", "tooltip-n-randompage": "载入一个随机页面", @@ -2805,8 +2801,8 @@ "exif-colorspace": "色彩空间", "exif-componentsconfiguration": "各部分含义", "exif-compressedbitsperpixel": "图像压缩模式", - "exif-pixelydimension": "图像宽度", - "exif-pixelxdimension": "图像高度", + "exif-pixelxdimension": "图像宽度", + "exif-pixelydimension": "图像高度", "exif-usercomment": "用户评论", "exif-relatedsoundfile": "相关声音文件", "exif-datetimeoriginal": "数据生成日期时间", @@ -3115,7 +3111,7 @@ "namespacesall": "所有", "monthsall": "所有", "confirmemail": "确认电子邮件地址", - "confirmemail_noemail": "你还没有在你的[[Special:Preferences|系统设置]]中设置有效的电子邮件地址。", + "confirmemail_noemail": "您还没有在您的[[Special:Preferences|系统设置]]中设置有效的电子邮件地址。", "confirmemail_text": "{{SITENAME}}要求您在使用邮件功能之前验证您的邮箱地址。\n点击以下按钮可向您的邮箱发送一封确认邮件。该邮件包含有一行代码链接;\n请在您的浏览器中加载此链接以确认您的邮箱地址是有效的。", "confirmemail_pending": "一个确认码已经被发送到您的邮箱,您可能需要等几分钟才能收到。如果无法收到,请再申请一个新的确认码。", "confirmemail_send": "邮件发送确认代码", @@ -3132,6 +3128,10 @@ "confirmemail_body_set": "拥有IP地址$1的用户(可能是您)在{{SITENAME}}将账户“$2”的电子邮箱地址设置为这个电子邮件地址。\n\n请确认这个账户是属于您的,并同时激活在{{SITENAME}}上的电子邮件功能。请\n在浏览器中打开下面的链接:\n\n$3\n\n如果这个账户*不是*属于您的,请打开下面的链接去取消电子邮件确认:\n\n$5\n\n确认码会在$4过期。", "confirmemail_invalidated": "电子邮件地址确认已取消", "invalidateemail": "取消电子邮件确认", + "notificationemail_subject_changed": "{{SITENAME}}注册的电子邮件地址已被更改", + "notificationemail_subject_removed": "{{SITENAME}}注册的电子邮件地址已被移除", + "notificationemail_body_changed": "来自IP地址$1的人(可能是您)在{{SITENAME}}上更改了账户“$2”的电子邮件地址至“$3”。\n\n如果这不是您,请立即联系一位网站管理员。", + "notificationemail_body_removed": "来自IP地址$1的人(可能是您)在{{SITENAME}}上移除了账户“$2”的电子邮件地址。\n\n如果这不是您,请立即联系一位网站管理员。", "scarytranscludedisabled": "[跨网站的编码转换不可用]", "scarytranscludefailed": "[提取$1失败]", "scarytranscludefailed-httpstatus": "[模板$1读取失败:HTTP $2]", @@ -3257,7 +3257,6 @@ "version-libraries-description": "描述", "version-libraries-authors": "作者", "redirect": "重定向(按文件、用户、页面、修订版本或日志ID)", - "redirect-legend": "重定向至文件或页面", "redirect-summary": "本特殊页面可以跳转至一个文件(提供文件名)、页面(提供修订版本ID或页面ID)、用户页(提供数字用户ID)或日志记录(提供日志ID)。用法:[[{{#Special:Redirect}}/file/Example.jpg]]、[[{{#Special:Redirect}}/page/64308]]、[[{{#Special:Redirect}}/revision/328429]]、[[{{#Special:Redirect}}/user/101]]或[[{{#Special:Redirect}}/logid/186]]。", "redirect-submit": "提交", "redirect-lookup": "基于:", @@ -3270,7 +3269,6 @@ "redirect-not-exists": "没找到相应值", "fileduplicatesearch": "搜索重复文件", "fileduplicatesearch-summary": "根据哈希(hash)值搜索重复文件。", - "fileduplicatesearch-legend": "搜索重复文件", "fileduplicatesearch-filename": "文件名:", "fileduplicatesearch-submit": "搜索", "fileduplicatesearch-info": "$1×$2像素
文件大小:$3
MIME类型:$4", @@ -3444,7 +3442,7 @@ "revdelete-uname-unhid": "公开用户名", "revdelete-restricted": "应用对管理员的限制", "revdelete-unrestricted": "删除对管理员的限制", - "logentry-block-block": "$1{{GENDER:$2|封禁了}}{{GENDER:$4|$3}},持续时间$5 $6", + "logentry-block-block": "$1{{GENDER:$2|封禁了}}{{GENDER:$4|$3}},期限为$5 $6", "logentry-block-unblock": "$1{{GENDER:$2|解封了}}{{GENDER:$4|$3}}", "logentry-block-reblock": "$1将{{GENDER:$4|$3}}的封禁设置{{GENDER:$2|更改为}}持续时间$5 $6", "logentry-suppress-block": "$1{{GENDER:$2|封禁了}}{{GENDER:$4|$3}},持续时间$5 $6", @@ -3471,7 +3469,7 @@ "logentry-protect-protect-cascade": "$1{{GENDER:$2|保护了}}$3 $4[级联]", "logentry-protect-modify": "$1{{GENDER:$2|更改了}}$3的保护等级$4", "logentry-protect-modify-cascade": "$1{{GENDER:$2|更改了}}$3的保护等级$4[级联]", - "logentry-rights-rights": "$1{{GENDER:$2|更改}}$3的用户组自$4至$5", + "logentry-rights-rights": "$1已将{{GENDER:$3|$3}}的用户组从$4{{GENDER:$2|更改}}至$5", "logentry-rights-rights-legacy": "$1更改$3的用户组", "logentry-rights-autopromote": "$1被自动地{{GENDER:$2|提升}}自$4至$5", "logentry-upload-upload": "$1{{GENDER:$2|上传}}$3", @@ -3497,7 +3495,7 @@ "feedback-back": "返回", "feedback-bugcheck": "请检查本bug是否为[$1 已知bug]。", "feedback-bugnew": "我检查了。报告新bug", - "feedback-bugornote": "如果你准备好详细描述一个技术问题,请[$1 报告bug]。或者你可以使用下面的简单表格。你的评论将被添加至页面“[$3 $2]”,附有你的用户名。", + "feedback-bugornote": "如果您准备好详细描述一个技术问题,请[$1 报告bug]。或者您可以使用下面的简单表格。您的评论将被添加至页面“[$3 $2]”,附有您的用户名。", "feedback-cancel": "取消", "feedback-close": "完成", "feedback-external-bug-report-button": "提交技术报告", @@ -3564,6 +3562,7 @@ "api-error-unknownerror": "未知错误:$1。", "api-error-uploaddisabled": "该wiki停用上传。", "api-error-verification-error": "该文件可能损坏或扩展名错误。", + "api-error-was-deleted": "此名称的文件曾被上传,随后被删除。", "duration-seconds": "$1秒", "duration-minutes": "$1分", "duration-hours": "$1小时", @@ -3654,6 +3653,7 @@ "special-characters-group-ipa": "国际音标", "special-characters-group-symbols": "符号", "special-characters-group-greek": "希腊字母", + "special-characters-group-greekextended": "希腊字母扩展", "special-characters-group-cyrillic": "西里尔字母", "special-characters-group-arabic": "阿拉伯字母", "special-characters-group-arabicextended": "扩展阿拉伯字母", @@ -3679,5 +3679,54 @@ "sessionprovider-generic": "$1会话", "sessionprovider-mediawiki-session-cookiesessionprovider": "基于cookie的会话", "sessionprovider-nocookies": "Cookie可能已被禁用。确保您已启用cookie,并重试。", - "randomrootpage": "随机根页面" + "randomrootpage": "随机根页面", + "log-action-filter-block": "封禁类型:", + "log-action-filter-contentmodel": "内容模型修改的类型:", + "log-action-filter-delete": "删除类型:", + "log-action-filter-import": "导入的类型:", + "log-action-filter-managetags": "标签管理行为的类型:", + "log-action-filter-move": "移动的类型:", + "log-action-filter-newusers": "账户创建的类型:", + "log-action-filter-patrol": "巡查类型:", + "log-action-filter-protect": "保护类型:", + "log-action-filter-rights": "权限更改的类型", + "log-action-filter-suppress": "屏蔽的类型", + "log-action-filter-upload": "上传类型:", + "log-action-filter-all": "全部", + "log-action-filter-block-block": "封禁", + "log-action-filter-block-reblock": "封禁修改", + "log-action-filter-block-unblock": "解封", + "log-action-filter-contentmodel-change": "内容类型的更改", + "log-action-filter-contentmodel-new": "带有非标准内容模型的页面的更改", + "log-action-filter-delete-delete": "页面删除", + "log-action-filter-delete-restore": "页面还原", + "log-action-filter-delete-event": "日志删除", + "log-action-filter-delete-revision": "修订版本删除", + "log-action-filter-import-interwiki": "跨wiki导入", + "log-action-filter-import-upload": "通过XML上传导入", + "log-action-filter-managetags-create": "标签创建", + "log-action-filter-managetags-delete": "标签删除", + "log-action-filter-managetags-activate": "标签激活", + "log-action-filter-managetags-deactivate": "标签取消激活", + "log-action-filter-move-move": "移动而不覆盖重定向", + "log-action-filter-move-move_redir": "移动并覆盖重定向", + "log-action-filter-newusers-create": "由匿名用户创建", + "log-action-filter-newusers-create2": "由已注册用户创建", + "log-action-filter-newusers-autocreate": "自动创建", + "log-action-filter-newusers-byemail": "带通过电子邮件发送密码的创建", + "log-action-filter-patrol-patrol": "手动巡查", + "log-action-filter-patrol-autopatrol": "自动巡查", + "log-action-filter-protect-protect": "保护", + "log-action-filter-protect-modify": "保护修改", + "log-action-filter-protect-unprotect": "解除保护", + "log-action-filter-protect-move_prot": "已移动保护", + "log-action-filter-rights-rights": "手动更改", + "log-action-filter-rights-autopromote": "自动更改", + "log-action-filter-suppress-event": "日志屏蔽", + "log-action-filter-suppress-revision": "修订版本屏蔽", + "log-action-filter-suppress-delete": "页面屏蔽", + "log-action-filter-suppress-block": "通过封禁的用户屏蔽", + "log-action-filter-suppress-reblock": "通过再封禁的用户屏蔽", + "log-action-filter-upload-upload": "新上传", + "log-action-filter-upload-overwrite": "重新上传" } diff --git a/languages/i18n/zh-hant.json b/languages/i18n/zh-hant.json index 1fb520abad..c3e5aaa45d 100644 --- a/languages/i18n/zh-hant.json +++ b/languages/i18n/zh-hant.json @@ -69,7 +69,8 @@ "Jasonzhuocn", "Bowleerin", "飞舞回堂前", - "Bbslam" + "Bbslam", + "Zerng07" ] }, "tog-underline": "底線標示連結:", @@ -87,6 +88,7 @@ "tog-watchdefault": "將我編輯的頁面和檔案加入監視清單", "tog-watchmoves": "將我移動的頁面和檔案加入監視清單", "tog-watchdeletion": "將我刪除的頁面和檔案加入監視清單", + "tog-watchuploads": "加入我上傳的新檔案至我的監視清單", "tog-watchrollback": "將我曾經還原的頁面新增至監視清單", "tog-minordefault": "預設標記所有的編輯為小修訂", "tog-previewontop": "顯示預覽於編輯框上方", @@ -210,7 +212,6 @@ "moredotdotdot": "更多...", "morenotlisted": "此清單尚未讀取完畢。", "mypage": "頁面", - "anonuserpage": "不明使用者", "mytalk": "對話", "anontalk": "對話", "navigation": "導覽", @@ -342,10 +343,10 @@ "feedlinks": "訂閱:", "feed-invalid": "無效的訂閱 Feed 類型。", "feed-unavailable": "目前未提供 RSS 或 Atom", - "site-rss-feed": "$1 的 RSS 摘要", - "site-atom-feed": "$1 的 Atom 摘要", - "page-rss-feed": "\"$1\" 的 RSS 摘要", - "page-atom-feed": "\"$1\" 的 Atom 摘要", + "site-rss-feed": "$1 的 RSS 來源", + "site-atom-feed": "$1 的 Atom 來源", + "page-rss-feed": "\"$1\" 的 RSS 來源", + "page-atom-feed": "\"$1\" 的 Atom 來源", "red-link-title": "$1 (頁面不存在)", "sort-descending": "降冪排序", "sort-ascending": "昇冪排序", @@ -479,7 +480,7 @@ "createaccount": "建立帳號", "gotaccount": "您已經擁有帳號了嗎? $1。", "gotaccountlink": "登入", - "userlogin-resetlink": "您忘記了登入的詳細資料?", + "userlogin-resetlink": "忘了您登入的詳細資料?", "userlogin-resetpassword-link": "忘記密碼?", "userlogin-helplink2": "登入協助", "userlogin-loggedin": "您目前已登入 {{GENDER:$1|$1}} 使用者,\n請使用下列表單改登入另一位使用者。", @@ -509,7 +510,7 @@ "nocookieslogin": "要登入 {{SITENAME}} 使用者需使用 Cookies,\n您的 Cookies 未尚開啟。\n請在開啟後重試。", "nocookiesfornew": "這個使用者的帳號未建立,我們不能確認它的來源。\n請確認您已開啟 Cookie,重新載入後再試。", "noname": "您輸入的使用者名稱無效。", - "loginsuccesstitle": "登入成功", + "loginsuccesstitle": "已登入", "loginsuccess": "{{GENDER:|您|妳|你}}現在已經以 \"$1\" 的身分登入了 {{SITENAME}}。", "nosuchuser": "查無使用者 \"$1\"。\n使用者名稱有大小寫區分,\n請檢查您拼寫是否正確,或者 [[Special:UserLogin/signup|建立新帳號]]。", "nosuchusershort": "查無使用者 \"$1\",\n請檢查您拼寫是否正確。", @@ -528,7 +529,7 @@ "noemail": "使用者 \"$1\" 沒有電子郵件地址記錄。", "noemailcreate": "您需要提供一個有效的電子郵件地址。", "passwordsent": "使用者 \"$1\" 的新密碼已寄至當出登記的電子郵件地址,\n請稍後收到郵件後再登入。", - "blocked-mailpassword": "您的 IP 位址已被封鎖不允許編輯,密碼復原的功能也同樣被禁止使用以防止被濫用。", + "blocked-mailpassword": "您的 IP 位址已被封鎖不允許編輯,已禁止來自此 IP 位址的密碼復原功能以防止濫用。", "eauthentsent": "已寄出一封確認信到您所設定的電子郵件地址。\n在未收到其它電子郵件前,您必須先依照郵件中的指示,確認這個帳號確實是您本人。", "throttled-mailpassword": "密碼重設的電子郵件已經在最近 $1 小時內寄出。\n為防止濫用,$1 小時內只能寄出一次密碼重設信件。", "mailerror": "傳送電子郵件錯誤:$1", @@ -694,7 +695,7 @@ "nosuchsectiontext": "您嘗試編輯的章節並不存在。\n可能在您檢視頁面時已經移動或刪除。", "loginreqtitle": "需要登入", "loginreqlink": "登入", - "loginreqpagetext": "您必須 $1 方可檢視其他頁面。", + "loginreqpagetext": "請先 $1 方可檢視其他頁面。", "accmailtitle": "密碼已寄出", "accmailtext": "[[User talk:$1|$1]] 的隨機密碼已經寄送至 $2,可登入後至 [[Special:ChangePassword|變更密碼]] 頁面更改。", "newarticle": "(新)", @@ -923,7 +924,9 @@ "mergehistory-fail-invalid-source": "來源頁面無效。", "mergehistory-fail-invalid-dest": "目標頁面無效。", "mergehistory-fail-no-change": "歷史合併尚未合併任何修訂歷史紀錄。請再次檢查頁面以及時間參數。", + "mergehistory-fail-permission": "權限不足,無法合併歷史。", "mergehistory-fail-self-merge": "來源頁面與目標頁面的名稱相同。", + "mergehistory-fail-timestamps-overlap": "來源修訂版本重複,或在目標修訂版本之後才出現。", "mergehistory-fail-toobig": "超過 $1 個修訂移動的上限,無法進行歷史合併。", "mergehistory-no-source": "來源頁面 $1 不存在。", "mergehistory-no-destination": "目標頁面 $1 不存在。", @@ -1317,7 +1320,7 @@ "recentchanges-label-bot": "該編輯由機器人執行", "recentchanges-label-unpatrolled": "該編輯尚未巡查", "recentchanges-label-plusminus": "該頁面變更的大小 (位元組)", - "recentchanges-legend-heading": "說明:", + "recentchanges-legend-heading": "圖例:", "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (請參考[[Special:NewPages|新頁面]])", "recentchanges-legend-plusminus": "(±123)", "recentchanges-submit": "顯示", @@ -1344,7 +1347,7 @@ "rcshowhidecategorization": "$1 頁面分類", "rcshowhidecategorization-show": "顯示", "rcshowhidecategorization-hide": "隱藏", - "rclinks": "顯示最近 $2 天內的 $1 次更改。
$3", + "rclinks": "顯示最近 $2 天內的 $1 次變更。
$3", "diff": "差異", "hist": "歷史", "hide": "隱藏", @@ -1368,9 +1371,9 @@ "recentchangeslinked-page": "頁面名稱:", "recentchangeslinked-to": "改顯示連結至指定頁面的變更", "recentchanges-page-added-to-category": "[[:$1]] 已加入至分類", - "recentchanges-page-added-to-category-bundled": "[[:$1]] 與其他 {{PLURAL:$2|1 頁|$2 頁}}已加入至分類", + "recentchanges-page-added-to-category-bundled": "[[:$1]] 已加入至分類,[[Special:WhatLinksHere/$1|此頁面已被其他頁面引用]]", "recentchanges-page-removed-from-category": "[[:$1]] 已自分類移除", - "recentchanges-page-removed-from-category-bundled": "[[:$1]] 與其他 {{PLURAL:$2|1 頁|$2 頁}}已自分類移除", + "recentchanges-page-removed-from-category-bundled": "[[:$1]] 已自分類移除,[[Special:WhatLinksHere/$1|此頁面已被其他頁面引用]]", "autochange-username": "MediaWiki 自動變更", "upload": "上傳檔案", "uploadbtn": "上傳檔案", @@ -1549,6 +1552,7 @@ "uploadstash-badtoken": "執行動作失敗。您的編輯資訊可能已經過期,請重新再試。", "uploadstash-errclear": "清除檔案失敗。", "uploadstash-refresh": "更新檔案清單", + "uploadstash-thumbnail": "檢視縮圖", "invalid-chunk-offset": "無效區塊位置", "img-auth-accessdenied": "拒絕存取", "img-auth-nopathinfo": "缺少 PATH_INFO 參數。\n您安裝的伺服器未傳遞此資訊,\n您可能使用 CGI 為基礎的伺服器,且不支援 img_auth 功能。\n請參考 https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Image_Authorization。", @@ -1797,8 +1801,9 @@ "apihelp": "API 說明", "apihelp-no-such-module": "查無模組 \"$1\"。", "apisandbox": "API 沙盒", + "apisandbox-jsonly": "需要 JavaScript 才能使用 API 沙箱。", "apisandbox-api-disabled": "此網站已關閉 API。", - "apisandbox-intro": "使用此頁面可測試 '''MediaWiki Web Service API'''。\n請參考 [//www.mediawiki.org/wiki/API:Main_page API 說明文件] 以取得詳細資訊。例:[//www.mediawiki.org/wiki/API#A_simple_example 取得主頁的內容]。 請選擇動作以取得更多範例。\n\n請注意,雖然此為沙盒,您在此頁所執行的動作仍有可能會修改到 Wiki。", + "apisandbox-intro": "使用此頁面可測試 MediaWiki web service API。\n請參考 [[mw:API:Main page|API 說明文件]] 以取得詳細資訊。例:[//www.mediawiki.org/wiki/API#A_simple_example 取得主頁的內容]。 請選擇動作以取得更多範例。\n\n請注意,雖然此為沙盒,您在此頁所執行的動作仍有可能會修改到 Wiki。", "apisandbox-fullscreen": "展開面板", "apisandbox-fullscreen-tooltip": "展開沙盒面板來填滿瀏覽器視窗。", "apisandbox-unfullscreen": "顯示頁面", @@ -1822,9 +1827,13 @@ "apisandbox-results": "結果", "apisandbox-sending-request": "傳送 API 請求中...", "apisandbox-loading-results": "接收 API 結果中...", + "apisandbox-results-error": "讀取 API 查詢回應時發生錯誤:$1。", "apisandbox-request-url-label": "請求 URL:", "apisandbox-request-time": "請求時間:{{PLURAL:$1|$1 ms}}", "apisandbox-results-fixtoken": "更正密鑰並重新送出", + "apisandbox-results-fixtoken-fail": "取得 \"$1\" 密鑰失敗。", + "apisandbox-alert-page": "此頁面上的欄位無效。", + "apisandbox-alert-field": "此欄位的值無效。", "booksources": "圖書資源", "booksources-search-legend": "尋找圖書資源", "booksources-isbn": "國際標準書號:", @@ -1864,8 +1873,6 @@ "categories-submit": "顯示", "categoriespagetext": "下列為包含頁面或媒體的{{PLURAL:$1|分類}}。\n[[Special:UnusedCategories|未使用的分類]] 不會在此顯示。\n請參考 [[Special:WantedCategories|需要的分類]]。", "categoriesfrom": "顯示分類開始於:", - "special-categories-sort-count": "依數量排列", - "special-categories-sort-abc": "依字母排列", "deletedcontributions": "已刪除的使用者貢獻", "deletedcontributions-title": "已刪除的使用者貢獻", "sp-deletedcontributions-contribs": "貢獻", @@ -2059,6 +2066,7 @@ "changecontentmodel-nodirectediting": "$1 的內容模型不支援直接編輯", "log-name-contentmodel": "內容模型變更日誌", "log-description-contentmodel": "與頁面內容模型相關的事件", + "logentry-contentmodel-new": "$1 {{GENDER:$2|已使用}}非預設的內容模型 \"$5\" 建立頁面 $3", "logentry-contentmodel-change": "$1 {{GENDER:$2|已變更}}頁面 $3 的內容模型自 \"$4\" 至 \"$5\"", "logentry-contentmodel-change-revertlink": "還原", "logentry-contentmodel-change-revert": "還原", @@ -2242,6 +2250,7 @@ "ipb-unblock": "解除封鎖使用者名稱或 IP 位址", "ipb-blocklist": "檢視目前的封鎖", "ipb-blocklist-contribs": "{{GENDER:$1|$1}} 的貢獻", + "ipb-blocklist-duration-left": "剩下 $1", "unblockip": "解除封鎖使用者", "unblockiptext": "使用以下表單以還原之前被封鎖的 IP 位址或使用者名稱的寫入存取。", "ipusubmit": "移除此封鎖", @@ -2296,6 +2305,7 @@ "block-log-flags-hiddenname": "隱藏使用者名稱", "range_block_disabled": "管理員可建立範圍封鎖的權限已被關閉。", "ipb_expiry_invalid": "無效的期限。", + "ipb_expiry_old": "到期時間已過。", "ipb_expiry_temp": "隱藏使用者名稱的封鎖不可設定期限。", "ipb_hide_invalid": "無法禁止顯示此帳號;它擁有超過 $1 次的編輯。", "ipb_already_blocked": "已經封鎖 \"$1\"。", @@ -2435,7 +2445,7 @@ "import": "匯入頁面", "importinterwiki": "從其他 wiki 匯入", "import-interwiki-text": "請選擇一個 Wiki 與頁面標題以進行匯入。\n會同時記錄修訂日期和編輯者的名稱。\n所有的從跨 Wiki 匯入操作都會被記錄在 [[Special:Log/import|匯入日誌]]。", - "import-interwiki-sourcewiki": "來源 Wiki:", + "import-interwiki-sourcewiki": "來源 wiki:", "import-interwiki-sourcepage": "來源頁面:", "import-interwiki-history": "複製此頁面的所有歷史修訂", "import-interwiki-templates": "包含所有模板", @@ -2465,7 +2475,7 @@ "import-nonewrevisions": "未匯入任何修訂 (修訂已存在,或因錯誤跳過)。", "xml-error-string": "$1 於行 $2,欄 $3 ($4 位元組):$5", "import-upload": "上傳 XML 資料", - "import-token-mismatch": "連線階段資料遺失。\n請再試一次。", + "import-token-mismatch": "連線階段資料遺失。\n\n您可能已被登出。請確認您是否仍在登入狀態並再試一次。\n若仍無法運作,請嘗試[[Special:UserLogout|登出]]再登入一次,並檢查您的瀏覽器是否允許本站使用 cookie。", "import-invalid-interwiki": "不能從指定的 Wiki 匯入。", "import-error-edit": "您沒有權限編輯頁面 \"$1\",無法匯入。", "import-error-create": "您沒有權限建立頁面 \"$1\",無法匯入。", @@ -2482,11 +2492,7 @@ "import-logentry-upload-detail": "已匯入 $1 筆{{PLURAL:$1|修訂}}", "import-logentry-interwiki-detail": "已從 $2 匯入 $1 筆{{PLURAL:$1|修訂}}", "javascripttest": "JavaScript 測試", - "javascripttest-pagetext-noframework": "此頁面保留用來作為 JavaScript 測試使用。", - "javascripttest-pagetext-unknownframework": "不明的測試 Framework \"$1\"。", "javascripttest-pagetext-unknownaction": "不明操作 \"$1\"。", - "javascripttest-pagetext-frameworks": "請選擇下列一種測試 Framework:$1", - "javascripttest-pagetext-skins": "選擇執行測試的外觀:", "javascripttest-qunit-intro": "請參考 mediawiki.org 的 [$1 測試說明文件]。", "tooltip-pt-userpage": "{{GENDER:|您的使用者}}頁面", "tooltip-pt-anonuserpage": "您正在作為以下身分編輯此 IP 位址的使用者頁面", @@ -2502,7 +2508,7 @@ "tooltip-ca-talk": "有關頁面內容的討論", "tooltip-ca-edit": "編輯此頁面", "tooltip-ca-addsection": "開始一個新章節", - "tooltip-ca-viewsource": "此頁面已被保護。\n您可檢視此頁面原始碼", + "tooltip-ca-viewsource": "此頁面已被保護。您可檢視此頁面原始碼", "tooltip-ca-history": "此頁面先前的修訂", "tooltip-ca-protect": "保護此頁面", "tooltip-ca-unprotect": "變更此頁面保護", @@ -2519,13 +2525,13 @@ "tooltip-n-mainpage-description": "前往首頁", "tooltip-n-portal": "關於本專案、您可以做什麼、哪裡可以找到您需要的事物", "tooltip-n-currentevents": "於新聞事件中找到相關背景資料", - "tooltip-n-recentchanges": "列出此Wiki中的最近更改清單", + "tooltip-n-recentchanges": "列出此 Wiki 中的最近變更清單", "tooltip-n-randompage": "隨機進入一個頁面", "tooltip-n-help": "尋求協助的地方", "tooltip-t-whatlinkshere": "列出所有連結此頁面的頁面", "tooltip-t-recentchangeslinked": "此頁面連結至其他頁面的最近變更", - "tooltip-feed-rss": "此頁面的 RSS 摘要", - "tooltip-feed-atom": "此頁面的 Atom 摘要", + "tooltip-feed-rss": "此頁面的 RSS 來源", + "tooltip-feed-atom": "此頁面的 Atom 來源", "tooltip-t-contributions": "{{GENDER:$1|此使用者}}的貢獻清單", "tooltip-t-emailuser": "傳送電子郵件聯絡{{GENDER:$1|這位使用者}}", "tooltip-t-info": "更多關於此頁面的資訊", @@ -2761,8 +2767,8 @@ "exif-colorspace": "色彩空間", "exif-componentsconfiguration": "每像素內含", "exif-compressedbitsperpixel": "影像壓縮模式", - "exif-pixelydimension": "圖片寬度", - "exif-pixelxdimension": "圖片高度", + "exif-pixelxdimension": "圖片寬度", + "exif-pixelydimension": "圖片高度", "exif-usercomment": "使用者評論", "exif-relatedsoundfile": "相關的音效檔案", "exif-datetimeoriginal": "資料產生的日期時間", @@ -3088,6 +3094,8 @@ "confirmemail_body_set": "不明人士 (可能是您自己,來自 IP 位址 $1) 已將在 {{SITENAME}} 帳號 \"$2\" 的電子郵件地址設定至此。\n\n請確認這個帳號是屬於您的,並使用瀏覽器開啟下方連結以開啟在 {{SITENAME}} 上的電子郵件功能:\n\n$3\n\n若您 *未* 註冊此帳號,\n請開啟下方連結取消電子郵件確認:\n\n$5\n\n此確認代碼會於 $4 過期。", "confirmemail_invalidated": "已取消電子郵件地址確認", "invalidateemail": "取消電子郵件確認", + "notificationemail_subject_changed": "{{SITENAME}} 註冊的電子郵件位址已變更", + "notificationemail_subject_removed": "{{SITENAME}} 註冊的電子郵件位址已移除", "scarytranscludedisabled": "[Interwiki 轉換代碼不可用]", "scarytranscludefailed": "[模板 $1 讀取失敗]", "scarytranscludefailed-httpstatus": "[模板 $1 讀取失敗:HTTP $2]", @@ -3173,10 +3181,10 @@ "version-antispam": "垃圾訊息防止", "version-other": "其他", "version-mediahandlers": "媒體處理器", - "version-hooks": "鉤", + "version-hooks": "掛鉤", "version-parser-extensiontags": "解析器擴充標籤", - "version-parser-function-hooks": "剖析器函數鉤", - "version-hook-name": "鉤名", + "version-parser-function-hooks": "語法分析函數掛鉤", + "version-hook-name": "掛鉤名稱", "version-hook-subscribedby": "署名", "version-version": "($1)", "version-no-ext-name": "[未命名]", @@ -3212,7 +3220,6 @@ "version-libraries-description": "描述", "version-libraries-authors": "作者", "redirect": "依檔案、使用者、頁面、修訂或日誌 ID 來重新導向", - "redirect-legend": "重新導向至檔案或頁面", "redirect-summary": "此特殊頁面可用來重新導向至檔案 (指定檔案名稱)、頁面 (指定修訂 ID 或頁面 ID)、使用者頁面 (指定使用者 ID)、或者日誌項目 (指定日誌 ID)。用法:[[{{#Special:Redirect}}/file/Example.jpg]]、[[{{#Special:Redirect}}/page/64308]]、[[{{#Special:Redirect}}/revision/328429]]、[[{{#Special:Redirect}}/user/101]] 或 [[{{#Special:Redirect}}/logid/186]]。", "redirect-submit": "執行", "redirect-lookup": "查詢:", @@ -3225,7 +3232,6 @@ "redirect-not-exists": "查無值", "fileduplicatesearch": "搜尋重複檔案", "fileduplicatesearch-summary": "依據雜湊值 (Hash) 來搜尋重複的檔案。", - "fileduplicatesearch-legend": "搜尋重複", "fileduplicatesearch-filename": "檔案名稱:", "fileduplicatesearch-submit": "搜尋", "fileduplicatesearch-info": "$1 × $2 像素
檔案大小:$3
MIME 類型:$4", @@ -3275,6 +3281,7 @@ "tags-deactivate": "停用", "tags-hitcount": "$1 次變更", "tags-manage-no-permission": "您沒有權限管理變更標籤。", + "tags-manage-blocked": "您無法在被封鎖的情況下管理變更標籤。", "tags-create-heading": "建立新標籤", "tags-create-explanation": "在預設情況下,新建立的標籤可被使用者及機器人使用。", "tags-create-tag-name": "標籤名稱:", @@ -3309,9 +3316,11 @@ "tags-deactivate-not-allowed": "無法停用標籤 \"$1\"。", "tags-deactivate-submit": "停用", "tags-apply-no-permission": "您沒有權限連同您的變更一起套用標籤。", + "tags-apply-blocked": "您無法在被封鎖的情況下套用變更標籤為您的變更。", "tags-apply-not-allowed-one": "不允許手動套用標籤 \"$1\"。", "tags-apply-not-allowed-multi": "不允許手動套用以下{{PLURAL:$2|標籤|標籤}}:$1", "tags-update-no-permission": "您沒有權限加入與移除任何於各別修訂與日誌項目的標籤", + "tags-update-blocked": "您無法在被封鎖的情況下移除變更標籤。", "tags-update-add-not-allowed-one": "不允許手動加入標籤 \"$1\"。", "tags-update-add-not-allowed-multi": "不允許手動加入以下{{PLURAL:$2|標籤|標籤}}:$1", "tags-update-remove-not-allowed-one": "不允許手動移除標籤 \"$1\"。", @@ -3554,6 +3563,7 @@ "expand_templates_preview": "預覽", "expand_templates_preview_fail_html": "因連線階段的資料遺失且 {{SITENAME}} 已開啟顯示原始 HTML 功能,為預防 JavaScript 攻擊已隱藏預覽內容。\n\n若您目前的預覽動作並無非法,請再試一次。\n若仍然無效,請嘗試[[Special:UserLogout|登出]]並再登入一次。", "expand_templates_preview_fail_html_anon": "因您尚未登入且 {{SITENAME}} 已開啟顯示原始 HTML 功能,為預防 JavaScript 攻擊已隱藏預覽內容。\n\n若您目前的預覽動作並無非法,請[[Special:UserLogin|登入]]後再試一次。", + "expand_templates_input_missing": "您至少需要提供一些輸入文字。", "pagelanguage": "變更頁面語言", "pagelang-name": "頁面", "pagelang-language": "語言", @@ -3626,8 +3636,58 @@ "mw-widgets-titleinput-description-new-page": "頁面不存在", "mw-widgets-titleinput-description-redirect": "重新導向至 $1", "api-error-blacklisted": "請選擇另一個更具描述性的標題。", + "sessionmanager-tie": "無法合併多個請求認証類型:$1。", "sessionprovider-generic": "$1 連線階段", "sessionprovider-mediawiki-session-cookiesessionprovider": "以 cookie 為基礎的連線階段", "sessionprovider-nocookies": "Cookie 功能可能已被關閉,請確認您改開啟 Cookie 功能並重新啟動。", - "randomrootpage": "隨機根頁面" + "randomrootpage": "隨機根頁面", + "log-action-filter-block": "封鎖類型:", + "log-action-filter-contentmodel": "內容模型修改類型:", + "log-action-filter-delete": "刪除類型:", + "log-action-filter-import": "匯入類型:", + "log-action-filter-managetags": "標籤管理動作類型:", + "log-action-filter-move": "移動類型:", + "log-action-filter-newusers": "帳號建立類型:", + "log-action-filter-patrol": "巡查類型:", + "log-action-filter-protect": "保護類型:", + "log-action-filter-rights": "權限變更類型:", + "log-action-filter-suppress": "禁止顯示類型:", + "log-action-filter-upload": "上傳類型:", + "log-action-filter-all": "全部", + "log-action-filter-block-block": "封鎖", + "log-action-filter-block-reblock": "封鎖修改", + "log-action-filter-block-unblock": "解除封鎖", + "log-action-filter-contentmodel-change": "變更內容模型", + "log-action-filter-contentmodel-new": "使用非標準內容模型建立的頁面", + "log-action-filter-delete-delete": "頁面刪除", + "log-action-filter-delete-restore": "頁面取消刪除", + "log-action-filter-delete-event": "日誌刪除", + "log-action-filter-delete-revision": "修訂刪除", + "log-action-filter-import-interwiki": "Transwiki 匯入", + "log-action-filter-import-upload": "使用 XML 上傳匯入", + "log-action-filter-managetags-create": "標籤建立", + "log-action-filter-managetags-delete": "標籤刪除", + "log-action-filter-managetags-activate": "標籤啟動", + "log-action-filter-managetags-deactivate": "標籤取消啟動", + "log-action-filter-move-move": "移動不覆寫重新導向", + "log-action-filter-move-move_redir": "移動覆寫重新導向", + "log-action-filter-newusers-create": "由匿名使用者建立", + "log-action-filter-newusers-create2": "由註冊使用者建立", + "log-action-filter-newusers-autocreate": "自動建立", + "log-action-filter-newusers-byemail": "使用電子郵件發送密碼建立", + "log-action-filter-patrol-patrol": "手動巡查", + "log-action-filter-patrol-autopatrol": "自動巡查", + "log-action-filter-protect-protect": "保護", + "log-action-filter-protect-modify": "保護修改", + "log-action-filter-protect-unprotect": "解除保護", + "log-action-filter-protect-move_prot": "已移動保護", + "log-action-filter-rights-rights": "手動變更", + "log-action-filter-rights-autopromote": "自動變更", + "log-action-filter-suppress-event": "日誌禁止顯示", + "log-action-filter-suppress-revision": "修訂禁止顯示", + "log-action-filter-suppress-delete": "頁面禁止顯示", + "log-action-filter-suppress-block": "由封鎖禁止顯示使用者", + "log-action-filter-suppress-reblock": "由重新封鎖禁止顯示使用者", + "log-action-filter-upload-upload": "新上傳", + "log-action-filter-upload-overwrite": "重新上傳" } diff --git a/languages/messages/MessagesAf.php b/languages/messages/MessagesAf.php index 181032c98d..d6dab21ac7 100644 --- a/languages/messages/MessagesAf.php +++ b/languages/messages/MessagesAf.php @@ -59,12 +59,12 @@ $magicWords = [ 'namespace' => [ '1', 'NAAMSPASIE', 'NAMESPACE' ], 'talkspace' => [ '1', 'BESPREKINGSBLADSY', 'TALKSPACE' ], 'fullpagename' => [ '1', 'VOLBLADSYNAAM', 'FULLPAGENAME' ], - 'img_thumbnail' => [ '1', 'duimnael', 'thumbnail', 'thumb' ], + 'img_thumbnail' => [ '1', 'duimnael', 'thumb', 'thumbnail' ], 'img_right' => [ '1', 'regs', 'right' ], 'img_left' => [ '1', 'links', 'left' ], 'img_none' => [ '1', 'geen', 'none' ], 'img_center' => [ '1', 'senter', 'center', 'centre' ], - 'img_framed' => [ '1', 'omraam', 'framed', 'enframed', 'frame' ], + 'img_framed' => [ '1', 'omraam', 'frame', 'framed', 'enframed' ], 'img_frameless' => [ '1', 'raamloos', 'frameless' ], 'img_border' => [ '1', 'raam', 'border' ], 'img_top' => [ '1', 'bo', 'top' ], diff --git a/languages/messages/MessagesAn.php b/languages/messages/MessagesAn.php index 33b1107921..038566bade 100644 --- a/languages/messages/MessagesAn.php +++ b/languages/messages/MessagesAn.php @@ -44,7 +44,7 @@ $magicWords = [ 'namespace' => [ '1', 'ESPACIODENOMBRES', 'ESPACIODENOMBRE', 'NAMESPACE' ], 'namespacee' => [ '1', 'ESPACIODENOMBRESE', 'ESPACIODENOMBREC', 'NAMESPACEE' ], 'img_right' => [ '1', 'dreita', 'derecha', 'dcha', 'der', 'right' ], - 'img_left' => [ '1', 'cucha', 'zurda', 'izquierda', 'izda', 'izq', 'left' ], + 'img_left' => [ '1', 'cucha', 'izquierda', 'zurda', 'izda', 'izq', 'left' ], 'ns' => [ '0', 'EN:', 'EDN:', 'NS:' ], 'displaytitle' => [ '1', 'TÍTOL', 'MOSTRARTÍTULO', 'MOSTRARTITULO', 'DISPLAYTITLE' ], 'currentversion' => [ '1', 'BERSIÓNAUTUAL', 'BERSIONAUTUAL', 'REVISIÓNACTUAL', 'VERSIONACTUAL', 'VERSIÓNACTUAL', 'CURRENTVERSION' ], diff --git a/languages/messages/MessagesAr.php b/languages/messages/MessagesAr.php index e76e419277..a83b71754f 100644 --- a/languages/messages/MessagesAr.php +++ b/languages/messages/MessagesAr.php @@ -196,14 +196,14 @@ $magicWords = [ 'subst' => [ '0', 'نسخ:', 'SUBST:' ], 'safesubst' => [ '0', 'نسخ_آمن:', 'SAFESUBST:' ], 'msgnw' => [ '0', 'رسالة_بدون_تهيئة:', 'MSGNW:' ], - 'img_thumbnail' => [ '1', 'تصغير', 'thumbnail', 'thumb' ], + 'img_thumbnail' => [ '1', 'تصغير', 'thumb', 'thumbnail' ], 'img_manualthumb' => [ '1', 'تصغير=$1', 'مصغر=$1', 'thumbnail=$1', 'thumb=$1' ], 'img_right' => [ '1', 'يمين', 'right' ], 'img_left' => [ '1', 'يسار', 'left' ], 'img_none' => [ '1', 'بدون', 'بلا', 'none' ], 'img_width' => [ '1', '$1بك', '$1عن', '$1px' ], 'img_center' => [ '1', 'مركز', 'center', 'centre' ], - 'img_framed' => [ '1', 'إطار', 'بإطار', 'framed', 'enframed', 'frame' ], + 'img_framed' => [ '1', 'إطار', 'بإطار', 'frame', 'framed', 'enframed' ], 'img_frameless' => [ '1', 'لاإطار', 'frameless' ], 'img_lang' => [ '1', 'لغة=$1', 'lang=$1' ], 'img_page' => [ '1', 'صفحة=$1', 'صفحة_$1', 'page=$1', 'page $1' ], diff --git a/languages/messages/MessagesArc.php b/languages/messages/MessagesArc.php index 91dc377045..0c1b668ff4 100644 --- a/languages/messages/MessagesArc.php +++ b/languages/messages/MessagesArc.php @@ -108,7 +108,7 @@ $magicWords = [ 'pagenamee' => [ '1', 'ܟܘܢܝܐ_ܕܦܐܬܐ', 'PAGENAMEE' ], 'namespace' => [ '1', 'ܚܩܠܐ', 'NAMESPACE' ], 'msg' => [ '0', 'ܐܓܪܬܐ:', 'MSG:' ], - 'img_thumbnail' => [ '1', 'ܙܥܘܪܬܐ', 'thumbnail', 'thumb' ], + 'img_thumbnail' => [ '1', 'ܙܥܘܪܬܐ', 'thumb', 'thumbnail' ], 'img_manualthumb' => [ '1', 'ܙܥܘܪܬܐ=$1', 'thumbnail=$1', 'thumb=$1' ], 'img_right' => [ '1', 'ܝܡܝܢܐ', 'right' ], 'img_left' => [ '1', 'ܣܡܠܐ', 'left' ], diff --git a/languages/messages/MessagesArz.php b/languages/messages/MessagesArz.php index f3377ae01e..2e69353069 100644 --- a/languages/messages/MessagesArz.php +++ b/languages/messages/MessagesArz.php @@ -208,15 +208,15 @@ $magicWords = [ 'subst' => [ '0', 'نسخ:', 'إحلال:', 'SUBST:' ], 'safesubst' => [ '0', 'نسخ_آمن:', 'SAFESUBST:' ], 'msgnw' => [ '0', 'رسالة_من_غير_تهيئه:', 'رسالة_بدون_تهيئة:', 'MSGNW:' ], - 'img_thumbnail' => [ '1', 'تصغير', 'مصغر', 'thumbnail', 'thumb' ], + 'img_thumbnail' => [ '1', 'تصغير', 'مصغر', 'thumb', 'thumbnail' ], 'img_manualthumb' => [ '1', 'تصغير=$1', 'مصغر=$1', 'thumbnail=$1', 'thumb=$1' ], 'img_right' => [ '1', 'يمين', 'right' ], 'img_left' => [ '1', 'يسار', 'left' ], 'img_none' => [ '1', 'بدون', 'بلا', 'none' ], 'img_width' => [ '1', '$1بك', '$1عن', '$1px' ], 'img_center' => [ '1', 'مركز', 'center', 'centre' ], - 'img_framed' => [ '1', 'إطار', 'بإطار', 'framed', 'enframed', 'frame' ], - 'img_frameless' => [ '1', 'من_غير_اطار', 'لاإطار', 'frameless' ], + 'img_framed' => [ '1', 'إطار', 'بإطار', 'frame', 'framed', 'enframed' ], + 'img_frameless' => [ '1', 'لاإطار', 'من_غير_اطار', 'frameless' ], 'img_lang' => [ '1', 'لغه=$1', 'لغة=$1', 'lang=$1' ], 'img_page' => [ '1', 'صفح=$1', 'صفحه_$1', 'صفحة=$1', 'صفحة_$1', 'page=$1', 'page $1' ], 'img_upright' => [ '1', 'معدول', 'معدول=$1', 'معدول_$1', 'upright', 'upright=$1', 'upright $1' ], diff --git a/languages/messages/MessagesAzb.php b/languages/messages/MessagesAzb.php index 840d17b3ed..92ca0f87fa 100644 --- a/languages/messages/MessagesAzb.php +++ b/languages/messages/MessagesAzb.php @@ -81,6 +81,6 @@ $magicWords = [ 'img_right' => [ '1', 'ساغ', 'راست', 'right' ], 'img_left' => [ '1', 'سول', 'چپ', 'left' ], 'img_none' => [ '1', 'هئچ', 'هیچ', 'none' ], - 'img_framed' => [ '1', 'قابیق', 'قاب', 'framed', 'enframed', 'frame' ], + 'img_framed' => [ '1', 'قابیق', 'قاب', 'frame', 'framed', 'enframed' ], ]; diff --git a/languages/messages/MessagesBcl.php b/languages/messages/MessagesBcl.php index 475ba9be36..0b0d42eca3 100644 --- a/languages/messages/MessagesBcl.php +++ b/languages/messages/MessagesBcl.php @@ -67,7 +67,7 @@ $magicWords = [ 'img_left' => [ '1', 'wala', 'left' ], 'img_none' => [ '1', 'mayò', 'none' ], 'img_center' => [ '1', 'sentro', 'tangâ', 'center', 'centre' ], - 'img_framed' => [ '1', 'nakakawadro', 'kwadro', 'framed', 'enframed', 'frame' ], + 'img_framed' => [ '1', 'nakakawadro', 'kwadro', 'frame', 'framed', 'enframed' ], 'img_frameless' => [ '1', 'daing kwadro', 'frameless' ], 'img_page' => [ '1', 'pahina=$1', 'pahina $1', 'page=$1', 'page $1' ], 'localurl' => [ '0', 'LOKALURL', 'LOCALURL:' ], diff --git a/languages/messages/MessagesBe.php b/languages/messages/MessagesBe.php index c306ba4939..9822436dad 100644 --- a/languages/messages/MessagesBe.php +++ b/languages/messages/MessagesBe.php @@ -34,14 +34,14 @@ $namespaceAliases = [ ]; $magicWords = [ - 'img_thumbnail' => [ '1', 'міні', 'мініяцюра', 'thumbnail', 'thumb' ], + 'img_thumbnail' => [ '1', 'міні', 'мініяцюра', 'thumb', 'thumbnail' ], 'img_manualthumb' => [ '1', 'міні=$1', 'мініяцюра=$1', 'thumbnail=$1', 'thumb=$1' ], 'img_right' => [ '1', 'справа', 'right' ], 'img_left' => [ '1', 'злева', 'left' ], 'img_none' => [ '1', 'няма', 'none' ], 'img_width' => [ '1', '$1пкс', '$1px' ], 'img_center' => [ '1', 'цэнтр', 'center', 'centre' ], - 'img_framed' => [ '1', 'безрамкі', 'framed', 'enframed', 'frame' ], + 'img_framed' => [ '1', 'безрамкі', 'frame', 'framed', 'enframed' ], ]; $bookstoreList = [ diff --git a/languages/messages/MessagesBg.php b/languages/messages/MessagesBg.php index d775d25638..74b7fe00a5 100644 --- a/languages/messages/MessagesBg.php +++ b/languages/messages/MessagesBg.php @@ -162,14 +162,14 @@ $magicWords = [ 'msg' => [ '0', 'СЪОБЩ:', 'MSG:' ], 'subst' => [ '0', 'ЗАМЕСТ:', 'SUBST:' ], 'msgnw' => [ '0', 'СЪОБЩБУ:', 'MSGNW:' ], - 'img_thumbnail' => [ '1', 'мини', 'thumbnail', 'thumb' ], + 'img_thumbnail' => [ '1', 'мини', 'thumb', 'thumbnail' ], 'img_manualthumb' => [ '1', 'мини=$1', 'thumbnail=$1', 'thumb=$1' ], - 'img_right' => [ '1', 'вдясно', 'дясно', 'д', 'right' ], - 'img_left' => [ '1', 'вляво', 'ляво', 'л', 'left' ], + 'img_right' => [ '1', 'дясно', 'вдясно', 'д', 'right' ], + 'img_left' => [ '1', 'ляво', 'вляво', 'л', 'left' ], 'img_none' => [ '1', 'н', 'none' ], 'img_width' => [ '1', '$1пкс', '$1п', '$1px' ], - 'img_center' => [ '1', 'център', 'центр', 'ц', 'center', 'centre' ], - 'img_framed' => [ '1', 'рамка', 'врамка', 'framed', 'enframed', 'frame' ], + 'img_center' => [ '1', 'център', 'ц', 'центр', 'center', 'centre' ], + 'img_framed' => [ '1', 'рамка', 'врамка', 'frame', 'framed', 'enframed' ], 'img_frameless' => [ '1', 'безрамка', 'frameless' ], 'img_border' => [ '1', 'ръб', 'контур', 'border' ], 'int' => [ '0', 'ВЪТР:', 'INT:' ], diff --git a/languages/messages/MessagesBs.php b/languages/messages/MessagesBs.php index c020b091ca..6211da20a8 100644 --- a/languages/messages/MessagesBs.php +++ b/languages/messages/MessagesBs.php @@ -13,7 +13,7 @@ $namespaceNames = [ NS_SPECIAL => 'Posebno', NS_TALK => 'Razgovor', NS_USER => 'Korisnik', - NS_USER_TALK => 'Razgovor_sa_korisnikom', + NS_USER_TALK => 'Razgovor_s_korisnikom', NS_PROJECT_TALK => 'Razgovor_{{grammar:instrumental|$1}}', NS_FILE => 'Datoteka', NS_FILE_TALK => 'Razgovor_o_datoteci', @@ -28,6 +28,7 @@ $namespaceNames = [ ]; $namespaceAliases = [ + 'Razgovor_sa_korisnikom' => NS_USER_TALK, 'Medija' => NS_MEDIA, 'Slika' => NS_FILE, 'Razgovor_o_datoteci' => NS_FILE_TALK, @@ -186,14 +187,14 @@ $magicWords = [ 'msg' => [ '0', 'POR:', 'MSG:' ], 'subst' => [ '0', 'ZAMJENI:', 'SUBST:' ], 'msgnw' => [ '0', 'NVPOR:', 'MSGNW:' ], - 'img_thumbnail' => [ '1', 'mini', 'thumbnail', 'thumb' ], + 'img_thumbnail' => [ '1', 'mini', 'thumb', 'thumbnail' ], 'img_manualthumb' => [ '1', 'mini=$1', 'thumbnail=$1', 'thumb=$1' ], 'img_right' => [ '1', 'desno', 'd', 'right' ], 'img_left' => [ '1', 'lijevo', 'l', 'left' ], 'img_none' => [ '1', 'n', 'bez', 'none' ], 'img_width' => [ '1', '$1piksel', '$1p', '$1px' ], 'img_center' => [ '1', 'centar', 'c', 'center', 'centre' ], - 'img_framed' => [ '1', 'okvir', 'ram', 'framed', 'enframed', 'frame' ], + 'img_framed' => [ '1', 'okvir', 'ram', 'frame', 'framed', 'enframed' ], 'img_frameless' => [ '1', 'bez_okvira', 'frameless' ], 'img_page' => [ '1', 'stranica=$1', 'stranica $1', 'page=$1', 'page $1' ], 'img_upright' => [ '1', 'na_gore', 'na_gore=$1', 'na_gore_$1', 'upright', 'upright=$1', 'upright $1' ], diff --git a/languages/messages/MessagesCe.php b/languages/messages/MessagesCe.php index d83a36485a..d442f07242 100644 --- a/languages/messages/MessagesCe.php +++ b/languages/messages/MessagesCe.php @@ -221,20 +221,20 @@ $magicWords = [ 'msg' => [ '0', 'ХААМ:', 'СООБЩЕНИЕ:', 'СООБЩ:', 'MSG:' ], 'subst' => [ '0', 'ХӀОТТОР:', 'ХӀОТТ:', 'ПОДСТАНОВКА:', 'ПОДСТ:', 'SUBST:' ], 'msgnw' => [ '0', 'ВИКИ_ХААМ_БОЦАШ:', 'СООБЩ_БЕЗ_ВИКИ:', 'MSGNW:' ], - 'img_thumbnail' => [ '1', 'жима', 'жимо', 'мини', 'миниатюра', 'thumbnail', 'thumb' ], + 'img_thumbnail' => [ '1', 'мини', 'жима', 'жимо', 'миниатюра', 'thumb', 'thumbnail' ], 'img_manualthumb' => [ '1', 'жима=$1', 'жимо=$1', 'мини=$1', 'миниатюра=$1', 'thumbnail=$1', 'thumb=$1' ], - 'img_right' => [ '1', 'бакъхьа', 'справа', 'right' ], - 'img_left' => [ '1', 'харцхьа', 'слева', 'left' ], + 'img_right' => [ '1', 'справа', 'бакъхьа', 'right' ], + 'img_left' => [ '1', 'слева', 'харцхьа', 'left' ], 'img_none' => [ '1', 'йоцуш', 'без', 'none' ], 'img_width' => [ '1', '$1пкс', '$1px' ], - 'img_center' => [ '1', 'юккъ', 'центр', 'center', 'centre' ], - 'img_framed' => [ '1', 'гурабе', 'обрамить', 'framed', 'enframed', 'frame' ], - 'img_frameless' => [ '1', 'гурабоцаш', 'безрамки', 'frameless' ], + 'img_center' => [ '1', 'центр', 'юккъ', 'center', 'centre' ], + 'img_framed' => [ '1', 'гурабе', 'обрамить', 'frame', 'framed', 'enframed' ], + 'img_frameless' => [ '1', 'безрамки', 'гурабоцаш', 'frameless' ], 'img_page' => [ '1', 'агlо=$1', 'агlо_$1', 'page_$1', 'страница=$1', 'страница_$1', 'страница $1', 'page=$1', 'page $1' ], 'img_upright' => [ '1', 'бакъхьалакхо', 'бакъхьалакхо=$1', 'бакъхьалакхо_$1', 'upright_$1', 'сверхусправа', 'сверхусправа=$1', 'сверхусправа_$1', 'сверхусправа $1', 'upright', 'upright=$1', 'upright $1' ], 'img_border' => [ '1', 'доза', 'граница', 'border' ], 'img_baseline' => [ '1', 'бух', 'основание', 'baseline' ], - 'img_sub' => [ '1', 'буха', 'под', 'sub' ], + 'img_sub' => [ '1', 'под', 'буха', 'sub' ], 'img_super' => [ '1', 'тӀе', 'над', 'super', 'sup' ], 'img_top' => [ '1', 'лакхахь', 'сверху', 'top' ], 'img_text_top' => [ '1', 'лакххьара-йоза', 'текст-сверху', 'text-top' ], diff --git a/languages/messages/MessagesCkb.php b/languages/messages/MessagesCkb.php index a010c2c531..ad45b66341 100644 --- a/languages/messages/MessagesCkb.php +++ b/languages/messages/MessagesCkb.php @@ -109,12 +109,12 @@ $specialPageAliases = [ ]; $magicWords = [ - 'img_thumbnail' => [ '1', 'وێنۆک', 'thumbnail', 'thumb' ], + 'img_thumbnail' => [ '1', 'وێنۆک', 'thumb', 'thumbnail' ], 'img_right' => [ '1', 'ڕاست', 'right' ], 'img_left' => [ '1', 'چەپ', 'left' ], 'img_width' => [ '1', '$1پیکسڵ', '$1px' ], 'img_center' => [ '1', 'ناوەڕاست', 'center', 'centre' ], - 'img_framed' => [ '1', 'چوارچێوە', 'framed', 'enframed', 'frame' ], + 'img_framed' => [ '1', 'چوارچێوە', 'frame', 'framed', 'enframed' ], 'img_frameless' => [ '1', 'بێچوارچێوە', 'frameless' ], 'img_border' => [ '1', 'سنوور', 'border' ], ]; diff --git a/languages/messages/MessagesCs.php b/languages/messages/MessagesCs.php index 3cd652bd05..548b78c940 100644 --- a/languages/messages/MessagesCs.php +++ b/languages/messages/MessagesCs.php @@ -72,12 +72,12 @@ $specialPageAliases = [ 'Filepath' => [ 'Cesta_k_souboru' ], 'Import' => [ 'Importovat_stránky' ], 'Invalidateemail' => [ 'Zneplatnit_e-mail', 'Zrušit_potvrzení_e-mailu' ], - 'BlockList' => [ 'Blokovaní_uživatelé', 'Blokovani_uzivatele' ], + 'BlockList' => [ 'Blokovaní_uživatelé', 'Blokovani_uzivatele', 'Zablokovaní_uživatelé' ], 'LinkSearch' => [ 'Hledání_odkazů', 'Hledani_odkazu' ], 'Listadmins' => [ 'Seznam_správců', 'Seznam_spravcu' ], 'Listbots' => [ 'Seznam_botů', 'Seznam_botu' ], 'Listfiles' => [ 'Seznam_souborů', 'Seznam_souboru' ], - 'Listgrouprights' => [ 'Seznam_uživatelských_práv', 'Seznam_uzivatelskych_prav' ], + 'Listgrouprights' => [ 'Práva_uživatelských_skupin', 'Seznam_uživatelských_práv', 'Seznam_uzivatelskych_prav' ], 'Listredirects' => [ 'Seznam_přesměrování', 'Seznam_presmerovani' ], 'Listusers' => [ 'Uživatelé', 'Uzivatele', 'Seznam_uživatelů', 'Seznam_uzivatelu' ], 'Lockdb' => [ 'Zamknout_databázi', 'Zamknout_databazi' ], @@ -92,7 +92,7 @@ $specialPageAliases = [ 'Mostlinkedcategories' => [ 'Nejpoužívanější_kategorie', 'Nejpouzivanejsi_kategorie' ], 'Mostlinkedtemplates' => [ 'Nejpoužívanější_šablony', 'Nejpouzivanejsi_sablony' ], 'Mostrevisions' => [ 'Stránky_s_nejvíce_editacemi', 'Stranky_s_nejvice_editacemi', 'Stránky_s_nejvyšším_počtem_editací' ], - 'Movepage' => [ 'Přesunout_stránku' ], + 'Movepage' => [ 'Přesunout_stránku', 'Přejmenovat_stránku' ], 'Mycontributions' => [ 'Mé_příspěvky', 'Me_prispevky' ], 'Mypage' => [ 'Moje_stránka', 'Moje_stranka' ], 'Mytalk' => [ 'Moje_diskuse' ], @@ -191,14 +191,14 @@ $magicWords = [ 'subjectpagenamee' => [ '1', 'NÁZEVČLÁNKUE', 'SUBJECTPAGENAMEE', 'ARTICLEPAGENAMEE' ], 'subst' => [ '0', 'VLOŽIT:', 'SUBST:' ], 'msgnw' => [ '0', 'VLOŽITNW:', 'MSGNW:' ], - 'img_thumbnail' => [ '1', 'náhled', 'thumbnail', 'thumb' ], + 'img_thumbnail' => [ '1', 'náhled', 'thumb', 'thumbnail' ], 'img_manualthumb' => [ '1', 'náhled=$1', 'thumbnail=$1', 'thumb=$1' ], 'img_right' => [ '1', 'vpravo', 'right' ], 'img_left' => [ '1', 'vlevo', 'left' ], 'img_none' => [ '1', 'žádné', 'none' ], 'img_width' => [ '1', '$1pixelů', '$1px' ], 'img_center' => [ '1', 'střed', 'center', 'centre' ], - 'img_framed' => [ '1', 'rám', 'framed', 'enframed', 'frame' ], + 'img_framed' => [ '1', 'rám', 'frame', 'framed', 'enframed' ], 'img_frameless' => [ '1', 'bezrámu', 'frameless' ], 'img_lang' => [ '1', 'jazyk=$1', 'lang=$1' ], 'img_page' => [ '1', 'strana=$1', 'strana_$1', 'page=$1', 'page $1' ], diff --git a/languages/messages/MessagesCy.php b/languages/messages/MessagesCy.php index 8306461bda..a569f16d53 100644 --- a/languages/messages/MessagesCy.php +++ b/languages/messages/MessagesCy.php @@ -53,7 +53,7 @@ $magicWords = [ 'subpagenamee' => [ '1', 'ENWISDUDALENE', 'SUBPAGENAMEE' ], 'talkpagename' => [ '1', 'ENWTUDALENSGWRS', 'TALKPAGENAME' ], 'talkpagenamee' => [ '1', 'ENWTUDALENSGWRSE', 'TALKPAGENAMEE' ], - 'img_thumbnail' => [ '1', 'ewin_bawd', 'bawd', 'mân-lun', 'thumbnail', 'thumb' ], + 'img_thumbnail' => [ '1', 'bawd', 'ewin_bawd', 'mân-lun', 'thumb', 'thumbnail' ], 'img_manualthumb' => [ '1', 'mân-lun=$1', 'bawd=$1', 'thumbnail=$1', 'thumb=$1' ], 'img_right' => [ '1', 'de', 'right' ], 'img_left' => [ '1', 'chwith', 'left' ], diff --git a/languages/messages/MessagesDe.php b/languages/messages/MessagesDe.php index 0a53ff5db2..5fc359ebe6 100644 --- a/languages/messages/MessagesDe.php +++ b/languages/messages/MessagesDe.php @@ -208,21 +208,21 @@ $magicWords = [ 'subjectpagenamee' => [ '1', 'HAUPTSEITENNAME_URL', 'VORDERSEITE_URL', 'HAUPTSEITE_URL', 'SUBJECTPAGENAMEE', 'ARTICLEPAGENAMEE' ], 'subst' => [ '0', 'ERS:', 'SUBST:' ], 'safesubst' => [ '0', 'SICHER_ERS:', 'SICHERERS:', 'SAFESUBST:' ], - 'img_thumbnail' => [ '1', 'mini', 'miniatur', 'thumbnail', 'thumb' ], + 'img_thumbnail' => [ '1', 'miniatur', 'mini', 'thumb', 'thumbnail' ], 'img_manualthumb' => [ '1', 'miniatur=$1', 'mini=$1', 'thumbnail=$1', 'thumb=$1' ], 'img_right' => [ '1', 'rechts', 'right' ], 'img_left' => [ '1', 'links', 'left' ], 'img_none' => [ '1', 'ohne', 'none' ], 'img_center' => [ '1', 'zentriert', 'center', 'centre' ], - 'img_framed' => [ '1', 'gerahmt', 'framed', 'enframed', 'frame' ], + 'img_framed' => [ '1', 'gerahmt', 'frame', 'framed', 'enframed' ], 'img_frameless' => [ '1', 'rahmenlos', 'frameless' ], 'img_lang' => [ '1', 'sprache=$1', 'lang=$1' ], 'img_page' => [ '1', 'seite=$1', 'seite_$1', 'page=$1', 'page $1' ], 'img_upright' => [ '1', 'hochkant', 'hochkant=$1', 'hochkant_$1', 'upright', 'upright=$1', 'upright $1' ], 'img_border' => [ '1', 'rand', 'border' ], 'img_baseline' => [ '1', 'grundlinie', 'baseline' ], - 'img_sub' => [ '1', 'tiefgestellt', 'tief', 'sub' ], - 'img_super' => [ '1', 'hochgestellt', 'hoch', 'super', 'sup' ], + 'img_sub' => [ '1', 'tief', 'tiefgestellt', 'sub' ], + 'img_super' => [ '1', 'hoch', 'hochgestellt', 'super', 'sup' ], 'img_top' => [ '1', 'oben', 'top' ], 'img_text_top' => [ '1', 'text-oben', 'text-top' ], 'img_middle' => [ '1', 'mitte', 'middle' ], diff --git a/languages/messages/MessagesDiq.php b/languages/messages/MessagesDiq.php index 03cf459830..c81fd34248 100644 --- a/languages/messages/MessagesDiq.php +++ b/languages/messages/MessagesDiq.php @@ -224,14 +224,14 @@ $magicWords = [ 'subst' => [ '0', 'KOPYAKE', 'ATEBERDE', 'SUBST:' ], 'safesubst' => [ '0', 'EMELEYATEBERDE', 'SAFESUBST:' ], 'msgnw' => [ '0', 'MSCNW:', 'MSGNW:' ], - 'img_thumbnail' => [ '1', 'resmoqıckek', 'qıckek', 'thumbnail', 'thumb' ], + 'img_thumbnail' => [ '1', 'resmoqıckek', 'qıckek', 'thumb', 'thumbnail' ], 'img_manualthumb' => [ '1', 'resmoqıckek=$1', 'qıckek=$1', 'thumbnail=$1', 'thumb=$1' ], 'img_right' => [ '1', 'raşt', 'right' ], 'img_left' => [ '1', 'çep', 'left' ], 'img_none' => [ '1', 'çıniyo', 'none' ], 'img_width' => [ '1', '$1pik', '$1piksel', '$1px' ], 'img_center' => [ '1', 'werte', 'miyan', 'center', 'centre' ], - 'img_framed' => [ '1', 'çerçeweyın', 'çerçewekerden', 'çerçewe', 'framed', 'enframed', 'frame' ], + 'img_framed' => [ '1', 'çerçeweyın', 'çerçewekerden', 'çerçewe', 'frame', 'framed', 'enframed' ], 'img_frameless' => [ '1', 'béçerçewe', 'frameless' ], 'img_lang' => [ '1', 'zuwan=1$', 'lang=$1' ], 'img_page' => [ '1', 'pera=$1', 'pera_$1', 'page=$1', 'page $1' ], @@ -239,7 +239,7 @@ $magicWords = [ 'img_border' => [ '1', 'sinor', 'border' ], 'img_baseline' => [ '1', 'Sinoréerdi', 'baseline' ], 'img_sub' => [ '1', 'anvar', 'sub' ], - 'img_super' => [ '1', 'corén', 'cor', 'super', 'sup' ], + 'img_super' => [ '1', 'cor', 'corén', 'super', 'sup' ], 'img_top' => [ '1', 'gedug', 'top' ], 'img_text_top' => [ '1', 'gedug-metin', 'text-top' ], 'img_middle' => [ '1', 'merkez', 'middle' ], diff --git a/languages/messages/MessagesEl.php b/languages/messages/MessagesEl.php index 763f9faa12..dd7cd68f4c 100644 --- a/languages/messages/MessagesEl.php +++ b/languages/messages/MessagesEl.php @@ -215,14 +215,14 @@ $magicWords = [ 'msg' => [ '0', 'ΚΕΙΜΕΝΟ:', 'MSG:' ], 'subst' => [ '0', 'ΑΛΛΑΓΗ:', 'SUBST:' ], 'msgnw' => [ '0', 'ΑΠΛΟΚΕΙΜΕΝΟ:', 'MSGNW:' ], - 'img_thumbnail' => [ '1', 'μικρογραφία', 'μινιατούρα', 'thumbnail', 'thumb' ], + 'img_thumbnail' => [ '1', 'μικρογραφία', 'μινιατούρα', 'thumb', 'thumbnail' ], 'img_manualthumb' => [ '1', 'μικρογραφία=$1', 'μινιατούρα=$1', 'thumbnail=$1', 'thumb=$1' ], 'img_right' => [ '1', 'δεξιά', 'right' ], 'img_left' => [ '1', 'αριστερά', 'left' ], 'img_none' => [ '1', 'καθόλου', 'none' ], 'img_width' => [ '1', '$1εσ', '$1px' ], 'img_center' => [ '1', 'κέντρο', 'center', 'centre' ], - 'img_framed' => [ '1', 'με-πλαίσιο', 'framed', 'enframed', 'frame' ], + 'img_framed' => [ '1', 'με-πλαίσιο', 'frame', 'framed', 'enframed' ], 'img_frameless' => [ '1', 'χωρίς-πλαίσιο', 'frameless' ], 'img_page' => [ '1', 'σελίδα=$1', 'σελίδα_$1', 'page=$1', 'page $1' ], 'img_upright' => [ '1', 'κατακόρυφα', 'κατακόρυφα=$1', 'κατακόρυφα_$1', 'upright', 'upright=$1', 'upright $1' ], diff --git a/languages/messages/MessagesEn.php b/languages/messages/MessagesEn.php index d6ed2356c5..674be133b2 100644 --- a/languages/messages/MessagesEn.php +++ b/languages/messages/MessagesEn.php @@ -197,9 +197,16 @@ $bookstoreList = [ * IDs must be valid identifiers, they cannot contain hyphens. * CASE is 0 to match all case variants, 1 for case-sensitive * - * Note to translators: - * Please include the English words as synonyms. This allows people - * from other wikis to contribute more easily. + * Note to localisers: + * - Include the English magic words as synonyms. This allows people from + * other wikis that do not speak the language to contribute more easily. + * - The first alias listed MUST be the preferred alias in that language. + * Tools (like Visual Editor) are expected to use the first listed alias + * when editing or creating new content. + * - Order the other aliases so that common aliases occur before more rarely + * used aliases. The aliases SHOULD be sorted by the following convention: + * 1. Local first, English last, then + * 2. Most common first, least common last. * * This array can be modified at runtime with the LanguageGetMagic hook */ @@ -265,14 +272,14 @@ $magicWords = [ 'subst' => [ 0, 'SUBST:' ], 'safesubst' => [ 0, 'SAFESUBST:' ], 'msgnw' => [ 0, 'MSGNW:' ], - 'img_thumbnail' => [ 1, 'thumbnail', 'thumb' ], + 'img_thumbnail' => [ 1, 'thumb', 'thumbnail' ], 'img_manualthumb' => [ 1, 'thumbnail=$1', 'thumb=$1' ], 'img_right' => [ 1, 'right' ], 'img_left' => [ 1, 'left' ], 'img_none' => [ 1, 'none' ], 'img_width' => [ 1, '$1px' ], 'img_center' => [ 1, 'center', 'centre' ], - 'img_framed' => [ 1, 'framed', 'enframed', 'frame' ], + 'img_framed' => [ 1, 'frame', 'framed', 'enframed' ], 'img_frameless' => [ 1, 'frameless' ], 'img_lang' => [ 1, 'lang=$1' ], 'img_page' => [ 1, 'page=$1', 'page $1' ], diff --git a/languages/messages/MessagesEo.php b/languages/messages/MessagesEo.php index 45ea18b92e..9c6b7be6fb 100644 --- a/languages/messages/MessagesEo.php +++ b/languages/messages/MessagesEo.php @@ -202,14 +202,14 @@ $magicWords = [ 'subst' => [ '0', 'ANSTAT:', 'SUBST:' ], 'safesubst' => [ '0', 'SEKURANSTAT:', 'SAFESUBST:' ], 'msgnw' => [ '0', 'NVMSĜ:', 'NVMSGX:', 'MSGNW:' ], - 'img_thumbnail' => [ '1', 'eta', 'thumbnail', 'thumb' ], + 'img_thumbnail' => [ '1', 'eta', 'thumb', 'thumbnail' ], 'img_manualthumb' => [ '1', 'eta=$1', 'thumbnail=$1', 'thumb=$1' ], 'img_right' => [ '1', 'dekstra', 'dekstre', 'right' ], 'img_left' => [ '1', 'maldekstra', 'maldekstre', 'left' ], - 'img_none' => [ '1', 'nenio', 'neniu', 'none' ], + 'img_none' => [ '1', 'neniu', 'nenio', 'none' ], 'img_width' => [ '1', '$1ra', '$1px' ], 'img_center' => [ '1', 'centra', 'meza', 'center', 'centre' ], - 'img_framed' => [ '1', 'kadro', 'enkadrita', 'enkadrite', 'framed', 'enframed', 'frame' ], + 'img_framed' => [ '1', 'kadro', 'enkadrita', 'enkadrite', 'frame', 'framed', 'enframed' ], 'img_frameless' => [ '1', 'senkadra', 'frameless' ], 'img_page' => [ '1', 'paĝo=$1', 'paĝo $1', 'pagxo=$1', 'pagxo_$1', 'page=$1', 'page $1' ], 'img_upright' => [ '1', 'altdekstre', 'altdekstre=$1', 'altdekstre_$1', 'upright', 'upright=$1', 'upright $1' ], diff --git a/languages/messages/MessagesEs.php b/languages/messages/MessagesEs.php index a9f1d08e65..3b7c4bc966 100644 --- a/languages/messages/MessagesEs.php +++ b/languages/messages/MessagesEs.php @@ -201,13 +201,13 @@ $magicWords = [ 'subjectpagenamee' => [ '1', 'NOMBREDEPAGINADETEMAC', 'NOMBREDEPÁGINADETEMAC', 'NOMBREDEPÁGINADEASUNTOC', 'NOMBREDEPAGINADEASUNTOC', 'NOMBREDEPAGINADEARTICULOC', 'NOMBREDEPÁGINADEARTÍCULOC', 'SUBJECTPAGENAMEE', 'ARTICLEPAGENAMEE' ], 'msg' => [ '0', 'MSJ:', 'MSG:' ], 'subst' => [ '0', 'SUST:', 'FIJAR:', 'SUBST:' ], - 'img_thumbnail' => [ '1', 'miniaturadeimagen', 'miniatura', 'mini', 'thumbnail', 'thumb' ], + 'img_thumbnail' => [ '1', 'miniaturadeimagen', 'miniatura', 'mini', 'thumb', 'thumbnail' ], 'img_manualthumb' => [ '1', 'miniaturadeimagen=$1', 'miniatura=$1', 'thumbnail=$1', 'thumb=$1' ], - 'img_right' => [ '1', 'derecha', 'dcha', 'der', 'right' ], + 'img_right' => [ '1', 'derecha', 'der', 'dcha', 'right' ], 'img_left' => [ '1', 'izquierda', 'izda', 'izq', 'left' ], - 'img_none' => [ '1', 'ninguna', 'nada', 'no', 'ninguno', 'none' ], + 'img_none' => [ '1', 'no', 'ninguna', 'ninguno', 'nada', 'none' ], 'img_center' => [ '1', 'centro', 'centrado', 'centrada', 'centrar', 'center', 'centre' ], - 'img_framed' => [ '1', 'marco', 'enmarcado', 'enmarcada', 'framed', 'enframed', 'frame' ], + 'img_framed' => [ '1', 'marco', 'enmarcado', 'enmarcada', 'frame', 'framed', 'enframed' ], 'img_frameless' => [ '1', 'sinmarco', 'sin_enmarcar', 'sinenmarcar', 'frameless' ], 'img_lang' => [ '1', 'idioma=$1', 'lang=$1' ], 'img_page' => [ '1', 'pagina=$1', 'página=$1', 'pagina_$1', 'página_$1', 'page=$1', 'page $1' ], diff --git a/languages/messages/MessagesEt.php b/languages/messages/MessagesEt.php index 681d2ff4fc..8a53d9e87a 100644 --- a/languages/messages/MessagesEt.php +++ b/languages/messages/MessagesEt.php @@ -204,13 +204,13 @@ $magicWords = [ 'talkpagename' => [ '1', 'ARUTELUNIMI', 'TALKPAGENAME' ], 'talkpagenamee' => [ '1', 'ARUTELUNIMI1', 'TALKPAGENAMEE' ], 'subst' => [ '0', 'ASENDA:', 'SUBST:' ], - 'img_thumbnail' => [ '1', 'pisi', 'pisipilt', 'thumbnail', 'thumb' ], + 'img_thumbnail' => [ '1', 'pisi', 'pisipilt', 'thumb', 'thumbnail' ], 'img_manualthumb' => [ '1', 'pisi=$1', 'pisipilt=$1', 'thumbnail=$1', 'thumb=$1' ], 'img_right' => [ '1', 'paremal', 'right' ], 'img_left' => [ '1', 'vasakul', 'left' ], 'img_none' => [ '1', 'tühi', 'none' ], 'img_center' => [ '1', 'keskel', 'center', 'centre' ], - 'img_framed' => [ '1', 'raam', 'framed', 'enframed', 'frame' ], + 'img_framed' => [ '1', 'raam', 'frame', 'framed', 'enframed' ], 'img_frameless' => [ '1', 'raamita', 'frameless' ], 'img_lang' => [ '1', 'keel=$1', 'lang=$1' ], 'img_page' => [ '1', 'lehekülg=$1', 'lehekülg_$1', 'page=$1', 'page $1' ], diff --git a/languages/messages/MessagesFa.php b/languages/messages/MessagesFa.php index 564445bba8..eee9793cfb 100644 --- a/languages/messages/MessagesFa.php +++ b/languages/messages/MessagesFa.php @@ -211,14 +211,14 @@ $magicWords = [ 'subst' => [ '0', 'جایگزین:', 'جا:', 'SUBST:' ], 'safesubst' => [ '0', 'جایگزین_امن:', 'جام:', 'SAFESUBST:' ], 'msgnw' => [ '0', 'پیغام‌بی‌بسط:', 'MSGNW:' ], - 'img_thumbnail' => [ '1', 'بندانگشتی', 'انگشتدان', 'انگشتی', 'thumbnail', 'thumb' ], + 'img_thumbnail' => [ '1', 'بندانگشتی', 'انگشتی', 'انگشتدان', 'thumb', 'thumbnail' ], 'img_manualthumb' => [ '1', 'بندانگشتی=$1', 'انگشتدان=$1', 'انگشتی=$1', 'thumbnail=$1', 'thumb=$1' ], 'img_right' => [ '1', 'راست', 'right' ], 'img_left' => [ '1', 'چپ', 'left' ], 'img_none' => [ '1', 'هیچ', 'none' ], 'img_width' => [ '1', '$1پیکسل', '$1px' ], 'img_center' => [ '1', 'وسط', 'center', 'centre' ], - 'img_framed' => [ '1', 'قاب', 'framed', 'enframed', 'frame' ], + 'img_framed' => [ '1', 'قاب', 'frame', 'framed', 'enframed' ], 'img_frameless' => [ '1', 'بی‌قاب', 'بیقاب', 'بی_قاب', 'frameless' ], 'img_lang' => [ '1', 'زبان=$1', 'lang=$1' ], 'img_page' => [ '1', 'صفحه=$1', 'صفحه_$1', 'page=$1', 'page $1' ], diff --git a/languages/messages/MessagesFi.php b/languages/messages/MessagesFi.php index 3013ea62c0..0d1abbd91b 100644 --- a/languages/messages/MessagesFi.php +++ b/languages/messages/MessagesFi.php @@ -190,13 +190,13 @@ $magicWords = [ 'subjectpagename' => [ '1', 'AIHESIVUNIMI', 'ARTIKKELISIVUNIMI', 'SUBJECTPAGENAME', 'ARTICLEPAGENAME' ], 'subjectpagenamee' => [ '1', 'AIHESIVUNIMIE', 'ARTIKKELISIVUNIMIE', 'SUBJECTPAGENAMEE', 'ARTICLEPAGENAMEE' ], 'subst' => [ '0', 'VASTINE:', 'SUBST:' ], - 'img_thumbnail' => [ '1', 'pienoiskuva', 'pienois', 'thumbnail', 'thumb' ], + 'img_thumbnail' => [ '1', 'pienoiskuva', 'pienois', 'thumb', 'thumbnail' ], 'img_manualthumb' => [ '1', 'pienoiskuva=$1', 'pienois=$1', 'thumbnail=$1', 'thumb=$1' ], 'img_right' => [ '1', 'oikea', 'right' ], 'img_left' => [ '1', 'vasen', 'left' ], 'img_none' => [ '1', 'tyhjä', 'none' ], - 'img_center' => [ '1', 'keskitetty', 'keski', 'center', 'centre' ], - 'img_framed' => [ '1', 'kehys', 'kehystetty', 'framed', 'enframed', 'frame' ], + 'img_center' => [ '1', 'keski', 'keskitetty', 'center', 'centre' ], + 'img_framed' => [ '1', 'kehys', 'kehystetty', 'frame', 'framed', 'enframed' ], 'img_frameless' => [ '1', 'kehyksetön', 'frameless' ], 'img_page' => [ '1', 'sivu=$1', 'sivu_$1', 'page=$1', 'page $1' ], 'img_upright' => [ '1', 'yläoikea', 'yläoikea=$1', 'yläoikea_$1', 'upright', 'upright=$1', 'upright $1' ], diff --git a/languages/messages/MessagesFr.php b/languages/messages/MessagesFr.php index d69149c9f1..9bb02da1cf 100644 --- a/languages/messages/MessagesFr.php +++ b/languages/messages/MessagesFr.php @@ -196,18 +196,18 @@ $magicWords = [ 'talkpagenamee' => [ '1', 'NOMPAGEDISCUSSIONX', 'TALKPAGENAMEE' ], 'subjectpagename' => [ '1', 'NOMPAGESUJET', 'NOMPAGEARTICLE', 'SUBJECTPAGENAME', 'ARTICLEPAGENAME' ], 'subjectpagenamee' => [ '1', 'NOMPAGESUJETX', 'NOMPAGEARTICLEX', 'SUBJECTPAGENAMEE', 'ARTICLEPAGENAMEE' ], - 'img_thumbnail' => [ '1', 'vignette', 'thumbnail', 'thumb' ], + 'img_thumbnail' => [ '1', 'vignette', 'thumb', 'thumbnail' ], 'img_manualthumb' => [ '1', 'vignette=$1', 'thumbnail=$1', 'thumb=$1' ], 'img_right' => [ '1', 'droite', 'right' ], 'img_left' => [ '1', 'gauche', 'left' ], 'img_none' => [ '1', 'néant', 'neant', 'none' ], 'img_center' => [ '1', 'centré', 'center', 'centre' ], - 'img_framed' => [ '1', 'cadre', 'encadré', 'encadre', 'framed', 'enframed', 'frame' ], + 'img_framed' => [ '1', 'cadre', 'encadré', 'encadre', 'frame', 'framed', 'enframed' ], 'img_frameless' => [ '1', 'sans_cadre', 'non_encadré', 'non_encadre', 'frameless' ], 'img_lang' => [ '1', 'langue=$1', 'lang=$1' ], 'img_upright' => [ '1', 'redresse', 'redresse=$1', 'redresse_$1', 'upright', 'upright=$1', 'upright $1' ], 'img_border' => [ '1', 'bordure', 'border' ], - 'img_baseline' => [ '1', 'ligne-de-base', 'base', 'baseline' ], + 'img_baseline' => [ '1', 'base', 'ligne-de-base', 'baseline' ], 'img_sub' => [ '1', 'indice', 'ind', 'sub' ], 'img_super' => [ '1', 'exposant', 'exp', 'super', 'sup' ], 'img_top' => [ '1', 'haut', 'top' ], diff --git a/languages/messages/MessagesFrp.php b/languages/messages/MessagesFrp.php index dd6d1c8e93..106ba5e69b 100644 --- a/languages/messages/MessagesFrp.php +++ b/languages/messages/MessagesFrp.php @@ -196,13 +196,13 @@ $magicWords = [ 'subjectpagenamee' => [ '1', 'NOM_DE_LA_PÂGE_DU_SUJÈT_URL', 'NOM_DE_LA_PÂGE_DE_L_ARTICLLO_URL', 'NOMPAGESUJETX', 'NOMPAGEARTICLEX', 'SUBJECTPAGENAMEE', 'ARTICLEPAGENAMEE' ], 'msg' => [ '0', 'MSJ:', 'MSG:' ], 'msgnw' => [ '0', 'MSJNV:', 'MSGNW:' ], - 'img_thumbnail' => [ '1', 'figura', 'vignette', 'thumbnail', 'thumb' ], + 'img_thumbnail' => [ '1', 'figura', 'vignette', 'thumb', 'thumbnail' ], 'img_manualthumb' => [ '1', 'figura=$1', 'vignette=$1', 'thumbnail=$1', 'thumb=$1' ], 'img_right' => [ '1', 'drêta', 'droite', 'right' ], 'img_left' => [ '1', 'gôche', 'gauche', 'left' ], 'img_none' => [ '1', 'vouedo', 'néant', 'neant', 'none' ], 'img_center' => [ '1', 'centrâ', 'centré', 'center', 'centre' ], - 'img_framed' => [ '1', 'encâdrâ', 'câdro', 'cadre', 'encadré', 'encadre', 'framed', 'enframed', 'frame' ], + 'img_framed' => [ '1', 'encâdrâ', 'câdro', 'cadre', 'encadré', 'encadre', 'frame', 'framed', 'enframed' ], 'img_frameless' => [ '1', 'sen_câdro', 'pas_encâdrâ', 'sans_cadre', 'non_encadré', 'non_encadre', 'frameless' ], 'img_page' => [ '1', 'pâge=$1', 'pâge $1', 'page=$1', 'page $1' ], 'img_upright' => [ '1', 'drêt', 'drêt=$1', 'drêt $1', 'redresse', 'redresse=$1', 'redresse $1', 'redresse_$1', 'upright', 'upright=$1', 'upright $1' ], diff --git a/languages/messages/MessagesGa.php b/languages/messages/MessagesGa.php index 7c00dc7a5c..a5087900cf 100644 --- a/languages/messages/MessagesGa.php +++ b/languages/messages/MessagesGa.php @@ -30,12 +30,12 @@ $magicWords = [ 'msg' => [ '0', 'TCHT:', 'MSG:' ], 'subst' => [ '0', 'IONAD:', 'SUBST:' ], 'msgnw' => [ '0', 'TCHTFS:', 'MSGNW:' ], - 'img_thumbnail' => [ '1', 'mionsamhail', 'mion', 'thumbnail', 'thumb' ], + 'img_thumbnail' => [ '1', 'mion', 'mionsamhail', 'thumb', 'thumbnail' ], 'img_right' => [ '1', 'deas', 'right' ], 'img_left' => [ '1', 'clé', 'left' ], 'img_none' => [ '1', 'faic', 'none' ], 'img_center' => [ '1', 'lár', 'center', 'centre' ], - 'img_framed' => [ '1', 'fráma', 'frámaithe', 'framed', 'enframed', 'frame' ], + 'img_framed' => [ '1', 'fráma', 'frámaithe', 'frame', 'framed', 'enframed' ], 'int' => [ '0', 'INMH:', 'INT:' ], 'sitename' => [ '1', 'AINMANTSUÍMH', 'SITENAME' ], 'ns' => [ '0', 'AS:', 'NS:' ], diff --git a/languages/messages/MessagesGl.php b/languages/messages/MessagesGl.php index 092226cd46..8f1d4a753b 100644 --- a/languages/messages/MessagesGl.php +++ b/languages/messages/MessagesGl.php @@ -200,17 +200,17 @@ $magicWords = [ 'basepagename' => [ '1', 'NOMEDAPÁXINABASE', 'NOMEDAPAGINABASE', 'NOMEDAPÁGINABASE', 'BASEPAGENAME' ], 'talkpagename' => [ '1', 'NOMEDAPÁXINADECONVERSA', 'NOMEDAPAGINADEDISCUSSAO', 'NOMEDAPÁGINADEDISCUSSÃO', 'TALKPAGENAME' ], 'subjectpagename' => [ '1', 'NOMEDAPÁXINADECONTIDO', 'NOMEDAPAGINADECONTEUDO', 'NOMEDAPÁGINADECONTEÚDO', 'SUBJECTPAGENAME', 'ARTICLEPAGENAME' ], - 'img_thumbnail' => [ '1', 'miniatura', 'miniaturadaimaxe', 'miniaturadaimagem', 'thumbnail', 'thumb' ], + 'img_thumbnail' => [ '1', 'miniatura', 'miniaturadaimagem', 'miniaturadaimaxe', 'thumb', 'thumbnail' ], 'img_manualthumb' => [ '1', 'miniatura=$1', 'miniaturadaimaxe=$1', 'miniaturadaimagem=$1', 'thumbnail=$1', 'thumb=$1' ], 'img_right' => [ '1', 'dereita', 'direita', 'right' ], 'img_left' => [ '1', 'esquerda', 'left' ], 'img_none' => [ '1', 'ningún', 'nenhum', 'none' ], 'img_center' => [ '1', 'centro', 'center', 'centre' ], - 'img_framed' => [ '1', 'conmarco', 'conbordo', 'marco', 'commoldura', 'comborda', 'framed', 'enframed', 'frame' ], + 'img_framed' => [ '1', 'conmarco', 'marco', 'conbordo', 'commoldura', 'comborda', 'frame', 'framed', 'enframed' ], 'img_frameless' => [ '1', 'senmarco', 'senbordo', 'semmoldura', 'semborda', 'frameless' ], 'img_page' => [ '1', 'páxina=$1', 'páxina_$1', 'página=$1', 'página_$1', 'página $1', 'page=$1', 'page $1' ], 'img_upright' => [ '1', 'arribaádereita', 'arribaádereita=$1', 'arribaádereita_$1', 'superiordireito', 'superiordireito=$1', 'superiordireito_$1', 'superiordireito $1', 'upright', 'upright=$1', 'upright $1' ], - 'img_border' => [ '1', 'bordo', 'borda', 'border' ], + 'img_border' => [ '1', 'borda', 'bordo', 'border' ], 'img_baseline' => [ '1', 'liñadebase', 'linhadebase', 'baseline' ], 'img_top' => [ '1', 'arriba', 'acima', 'top' ], 'img_text_top' => [ '1', 'texto-arriba', 'text-top' ], diff --git a/languages/messages/MessagesHe.php b/languages/messages/MessagesHe.php index 217e5cbc94..9e03942ad9 100644 --- a/languages/messages/MessagesHe.php +++ b/languages/messages/MessagesHe.php @@ -211,18 +211,18 @@ $magicWords = [ 'subst' => [ '0', 'ס:', 'SUBST:' ], 'safesubst' => [ '0', 'ס בטוח:', 'SAFESUBST:' ], 'msgnw' => [ '0', 'הכללת מקור', 'MSGNW:' ], - 'img_thumbnail' => [ '1', 'ממוזער', 'thumbnail', 'thumb' ], + 'img_thumbnail' => [ '1', 'ממוזער', 'thumb', 'thumbnail' ], 'img_manualthumb' => [ '1', 'ממוזער=$1', 'thumbnail=$1', 'thumb=$1' ], 'img_right' => [ '1', 'ימין', 'right' ], 'img_left' => [ '1', 'שמאל', 'left' ], 'img_none' => [ '1', 'ללא', 'none' ], 'img_width' => [ '1', '$1 פיקסלים', '$1px' ], 'img_center' => [ '1', 'מרכז', 'center', 'centre' ], - 'img_framed' => [ '1', 'ממוסגר', 'מסגרת', 'framed', 'enframed', 'frame' ], + 'img_framed' => [ '1', 'מסגרת', 'ממוסגר', 'frame', 'framed', 'enframed' ], 'img_frameless' => [ '1', 'לא ממוסגר', 'ללא מסגרת', 'frameless' ], 'img_page' => [ '1', 'דף=$1', 'דף $1', 'page=$1', 'page $1' ], 'img_upright' => [ '1', 'ימין למעלה', 'ימין למעלה=$1', 'ימין למעלה $1', 'upright', 'upright=$1', 'upright $1' ], - 'img_border' => [ '1', 'גבולות', 'גבול', 'border' ], + 'img_border' => [ '1', 'גבול', 'גבולות', 'border' ], 'img_baseline' => [ '1', 'שורת הבסיס', 'baseline' ], 'img_sub' => [ '1', 'תחתי', 'sub' ], 'img_super' => [ '1', 'עילי', 'super', 'sup' ], diff --git a/languages/messages/MessagesHi.php b/languages/messages/MessagesHi.php index 30902e3c8b..3f3b007869 100644 --- a/languages/messages/MessagesHi.php +++ b/languages/messages/MessagesHi.php @@ -179,19 +179,19 @@ $magicWords = [ 'subst' => [ '0', 'प्रति:', 'SUBST:' ], 'safesubst' => [ '0', 'सुरक्षित_प्रति:', 'SAFESUBST:' ], 'msgnw' => [ '0', 'सन्देश_नोविकी:', 'संदेश_नोविकी:', 'MSGNW:' ], - 'img_thumbnail' => [ '1', 'अंगूठाकार', 'अंगूठा', 'thumbnail', 'thumb' ], + 'img_thumbnail' => [ '1', 'अंगूठाकार', 'अंगूठा', 'thumb', 'thumbnail' ], 'img_manualthumb' => [ '1', 'अंगूठाकार=$1', 'अंगूठा=$1', 'thumbnail=$1', 'thumb=$1' ], 'img_right' => [ '1', 'दाएँ', 'दायें', 'दाएं', 'right' ], - 'img_left' => [ '1', 'बाएँ', 'बायें', 'बाएं', 'left' ], + 'img_left' => [ '1', 'बाएँ', 'बाएं', 'बायें', 'left' ], 'img_none' => [ '1', 'कोई_नहीं', 'none' ], 'img_width' => [ '1', '$1पिक्सेल', '$1px' ], - 'img_center' => [ '1', 'केन्द्र', 'केंद्र', 'केन्द्रित', 'केंद्रित', 'center', 'centre' ], - 'img_framed' => [ '1', 'फ़्रेम', 'फ्रेम', 'framed', 'enframed', 'frame' ], + 'img_center' => [ '1', 'केंद्र', 'केन्द्र', 'केन्द्रित', 'केंद्रित', 'center', 'centre' ], + 'img_framed' => [ '1', 'फ्रेम', 'फ़्रेम', 'frame', 'framed', 'enframed' ], 'img_frameless' => [ '1', 'फ़्रेमहीन', 'फ्रेमहीन', 'frameless' ], 'img_lang' => [ '1', 'भाषा=$1', 'lang=$1' ], 'img_page' => [ '1', 'पृष्ठ=$1', 'पृष्ठ_$1', 'page=$1', 'page $1' ], 'img_upright' => [ '1', 'खड़ी', 'खड़ी=$1', 'खड़ी_$1', 'upright', 'upright=$1', 'upright $1' ], - 'img_border' => [ '1', 'किनारा', 'बॉर्डर', 'border' ], + 'img_border' => [ '1', 'बॉर्डर', 'किनारा', 'border' ], 'img_baseline' => [ '1', 'आधार_रेखा', 'baseline' ], 'img_sub' => [ '1', 'पद', 'sub' ], 'img_super' => [ '1', 'मूर्ध', 'super', 'sup' ], diff --git a/languages/messages/MessagesHr.php b/languages/messages/MessagesHr.php index ee06560705..97cac52725 100644 --- a/languages/messages/MessagesHr.php +++ b/languages/messages/MessagesHr.php @@ -181,20 +181,20 @@ $magicWords = [ 'subjectpagename' => [ '1', 'IMEGLAVNESTRANICE', 'SUBJECTPAGENAME', 'ARTICLEPAGENAME' ], 'subjectpagenamee' => [ '1', 'IMEGLAVNESTRANICEE', 'SUBJECTPAGENAMEE', 'ARTICLEPAGENAMEE' ], 'subst' => [ '0', 'ZAMJENA:', 'SUBST:' ], - 'img_thumbnail' => [ '1', 'minijatura', 'mini', 'thumbnail', 'thumb' ], + 'img_thumbnail' => [ '1', 'mini', 'minijatura', 'thumb', 'thumbnail' ], 'img_manualthumb' => [ '1', 'minijatura=$1', 'thumbnail=$1', 'thumb=$1' ], 'img_right' => [ '1', 'desno', 'right' ], 'img_left' => [ '1', 'lijevo', 'left' ], 'img_none' => [ '1', 'ništa', 'none' ], 'img_center' => [ '1', 'središte', 'center', 'centre' ], - 'img_framed' => [ '1', 'okvir', 'framed', 'enframed', 'frame' ], + 'img_framed' => [ '1', 'okvir', 'frame', 'framed', 'enframed' ], 'img_frameless' => [ '1', 'bezokvira', 'frameless' ], 'img_lang' => [ '1', 'jezik=$1', 'lang=$1' ], 'img_page' => [ '1', 'stranica=$1', 'stranica $1', 'page=$1', 'page $1' ], 'img_upright' => [ '1', 'uspravno=$1', 'uspravno $1', 'upright', 'upright=$1', 'upright $1' ], 'img_border' => [ '1', 'obrub', 'border' ], 'img_baseline' => [ '1', 'osnovnacrta', 'baseline' ], - 'img_sub' => [ '1', 'potpis', 'ind', 'sub' ], + 'img_sub' => [ '1', 'ind', 'potpis', 'sub' ], 'img_super' => [ '1', 'natpis', 'eks', 'super', 'sup' ], 'img_top' => [ '1', 'vrh', 'top' ], 'img_text_top' => [ '1', 'tekst-vrh', 'text-top' ], diff --git a/languages/messages/MessagesHu.php b/languages/messages/MessagesHu.php index 93a7f5a6aa..6ba075ad74 100644 --- a/languages/messages/MessagesHu.php +++ b/languages/messages/MessagesHu.php @@ -207,13 +207,13 @@ $magicWords = [ 'subjectpagenamee' => [ '1', 'SZÓCIKKNEVEE', 'SUBJECTPAGENAMEE', 'ARTICLEPAGENAMEE' ], 'msg' => [ '0', 'ÜZENET:', 'ÜZ:', 'MSG:' ], 'subst' => [ '0', 'BEILLESZT:', 'BEMÁSOL:', 'SUBST:' ], - 'img_thumbnail' => [ '1', 'bélyegkép', 'bélyeg', 'miniatűr', 'thumbnail', 'thumb' ], + 'img_thumbnail' => [ '1', 'bélyegkép', 'bélyeg', 'miniatűr', 'thumb', 'thumbnail' ], 'img_manualthumb' => [ '1', 'bélyegkép=$1', 'bélyeg=$1', 'miniatűr=$1', 'thumbnail=$1', 'thumb=$1' ], - 'img_right' => [ '1', 'jobb', 'jobbra', 'right' ], - 'img_left' => [ '1', 'bal', 'balra', 'left' ], + 'img_right' => [ '1', 'jobbra', 'jobb', 'right' ], + 'img_left' => [ '1', 'balra', 'bal', 'left' ], 'img_none' => [ '1', 'semmi', 'none' ], - 'img_center' => [ '1', 'közép', 'középre', 'center', 'centre' ], - 'img_framed' => [ '1', 'keretezett', 'keretes', 'keretben', 'kerettel', 'framed', 'enframed', 'frame' ], + 'img_center' => [ '1', 'középre', 'közép', 'center', 'centre' ], + 'img_framed' => [ '1', 'keretezett', 'keretben', 'keretes', 'kerettel', 'frame', 'framed', 'enframed' ], 'img_frameless' => [ '1', 'keretnélküli', 'frameless' ], 'img_page' => [ '1', 'oldal=$1', 'oldal $1', 'page=$1', 'page $1' ], 'img_upright' => [ '1', 'fennjobbra', 'fennjobbra=$1', 'fennjobbra $1', 'upright', 'upright=$1', 'upright $1' ], @@ -224,7 +224,7 @@ $magicWords = [ 'img_top' => [ '1', 'fenn', 'fent', 'top' ], 'img_text_top' => [ '1', 'szöveg-fenn', 'szöveg-fent', 'text-top' ], 'img_middle' => [ '1', 'vközépen', 'vközépre', 'middle' ], - 'img_bottom' => [ '1', 'lenn', 'lent', 'bottom' ], + 'img_bottom' => [ '1', 'lent', 'lenn', 'bottom' ], 'img_text_bottom' => [ '1', 'szöveg-lenn', 'szöveg-lent', 'text-bottom' ], 'sitename' => [ '1', 'WIKINEVE', 'SITENAME' ], 'ns' => [ '0', 'NÉVTÉR:', 'NS:' ], diff --git a/languages/messages/MessagesHy.php b/languages/messages/MessagesHy.php index 28c3a4da90..ab1d198bf9 100644 --- a/languages/messages/MessagesHy.php +++ b/languages/messages/MessagesHy.php @@ -130,14 +130,14 @@ $magicWords = [ 'subjectpagenamee' => [ '1', 'ՀՈԴՎԱԾԻ_ԷՋԻ_ԱՆՎԱՆՈՒՄԸ_2', 'SUBJECTPAGENAMEE', 'ARTICLEPAGENAMEE' ], 'msg' => [ '0', 'ՀՈՂՈՐԴ՝', 'MSG:' ], 'msgnw' => [ '0', 'ՀՈՂՈՐԴ_ԱՌԱՆՑ_ՎԻՔԻԻ՝', 'MSGNW:' ], - 'img_thumbnail' => [ '1', 'մինի', 'thumbnail', 'thumb' ], + 'img_thumbnail' => [ '1', 'մինի', 'thumb', 'thumbnail' ], 'img_manualthumb' => [ '1', 'մինի=$1', 'thumbnail=$1', 'thumb=$1' ], 'img_right' => [ '1', 'աջից', 'right' ], 'img_left' => [ '1', 'ձախից', 'left' ], 'img_none' => [ '1', 'առանց', 'none' ], 'img_width' => [ '1', '$1փքս', '$1px' ], 'img_center' => [ '1', 'կենտրոն', 'center', 'centre' ], - 'img_framed' => [ '1', 'շրջափակել', 'framed', 'enframed', 'frame' ], + 'img_framed' => [ '1', 'շրջափակել', 'frame', 'framed', 'enframed' ], 'img_page' => [ '1', 'էջը=$1', 'էջ $1', 'page=$1', 'page $1' ], 'int' => [ '0', 'ՆԵՐՔ՝', 'INT:' ], 'sitename' => [ '1', 'ԿԱՅՔԻ_ԱՆՈՒՆԸ', 'SITENAME' ], diff --git a/languages/messages/MessagesId.php b/languages/messages/MessagesId.php index bf1d4d9088..5fee30665c 100644 --- a/languages/messages/MessagesId.php +++ b/languages/messages/MessagesId.php @@ -105,13 +105,13 @@ $magicWords = [ 'msg' => [ '0', 'PSN:', 'PESAN:', 'MSG:' ], 'subst' => [ '0', 'GNT:', 'GANTI:', 'TUKAR:', 'SUBST:' ], 'msgnw' => [ '0', 'TPL:', 'MSGNW:' ], - 'img_thumbnail' => [ '1', 'jmpl', 'jempol', 'mini', 'miniatur', 'thumbnail', 'thumb' ], + 'img_thumbnail' => [ '1', 'jmpl', 'jempol', 'mini', 'miniatur', 'thumb', 'thumbnail' ], 'img_manualthumb' => [ '1', 'jmpl=$1', 'jempol=$1', 'mini=$1', 'miniatur=$1', 'thumbnail=$1', 'thumb=$1' ], 'img_right' => [ '1', 'ka', 'kanan', 'right' ], - 'img_left' => [ '1', 'ki', 'kiri', 'left' ], + 'img_left' => [ '1', 'kiri', 'ki', 'left' ], 'img_none' => [ '1', 'nir', 'tanpa', 'none' ], 'img_center' => [ '1', 'pus', 'pusat', 'center', 'centre' ], - 'img_framed' => [ '1', 'bing', 'bingkai', 'framed', 'enframed', 'frame' ], + 'img_framed' => [ '1', 'bingkai', 'bing', 'frame', 'framed', 'enframed' ], 'img_frameless' => [ '1', 'nirbing', 'tanpabingkai', 'frameless' ], 'img_lang' => [ '1', 'bhs=$1', 'lang=$1' ], 'img_page' => [ '1', 'hal=$1', 'halaman=$1', 'hal_$1', 'halaman_$1', 'page=$1', 'page $1' ], diff --git a/languages/messages/MessagesIt.php b/languages/messages/MessagesIt.php index 19cb171154..8714c7214d 100644 --- a/languages/messages/MessagesIt.php +++ b/languages/messages/MessagesIt.php @@ -188,13 +188,13 @@ $magicWords = [ 'subpagename' => [ '1', 'NOMESOTTOPAGINA', 'SUBPAGENAME' ], 'subpagenamee' => [ '1', 'NOMESOTTOPAGINAE', 'SUBPAGENAMEE' ], 'subst' => [ '0', 'SOST:', 'SUBST:' ], - 'img_thumbnail' => [ '1', 'miniatura', 'min', 'thumbnail', 'thumb' ], + 'img_thumbnail' => [ '1', 'miniatura', 'min', 'thumb', 'thumbnail' ], 'img_manualthumb' => [ '1', 'miniatura=$1', 'min=$1', 'thumbnail=$1', 'thumb=$1' ], 'img_right' => [ '1', 'destra', 'right' ], 'img_left' => [ '1', 'sinistra', 'left' ], 'img_none' => [ '1', 'nessuno', 'none' ], 'img_center' => [ '1', 'centro', 'center', 'centre' ], - 'img_framed' => [ '1', 'riquadrato', 'incorniciato', 'originale', 'framed', 'enframed', 'frame' ], + 'img_framed' => [ '1', 'riquadrato', 'originale', 'incorniciato', 'frame', 'framed', 'enframed' ], 'img_frameless' => [ '1', 'senza_cornice', 'frameless' ], 'img_page' => [ '1', 'pagina=$1', 'pagina_$1', 'page=$1', 'page $1' ], 'img_upright' => [ '1', 'verticale', 'verticale=$1', 'verticale_$1', 'upright', 'upright=$1', 'upright $1' ], diff --git a/languages/messages/MessagesJa.php b/languages/messages/MessagesJa.php index ef20b156a7..b905345e52 100644 --- a/languages/messages/MessagesJa.php +++ b/languages/messages/MessagesJa.php @@ -229,19 +229,19 @@ $magicWords = [ 'subst' => [ '0', '展開:', '展開:', 'SUBST:' ], 'safesubst' => [ '0', '安全展開:', 'SAFESUBST:' ], 'msgnw' => [ '0', 'ウィキ無効メッセージ:', 'MSGNW:' ], - 'img_thumbnail' => [ '1', 'サムネイル', 'thumbnail', 'thumb' ], + 'img_thumbnail' => [ '1', 'サムネイル', 'thumb', 'thumbnail' ], 'img_manualthumb' => [ '1', '代替画像=$1', 'サムネイル=$1', 'thumbnail=$1', 'thumb=$1' ], 'img_right' => [ '1', '右', 'right' ], 'img_left' => [ '1', '左', 'left' ], 'img_none' => [ '1', 'なし', '無し', 'none' ], 'img_width' => [ '1', '$1ピクセル', '$1px' ], 'img_center' => [ '1', '中央', 'center', 'centre' ], - 'img_framed' => [ '1', 'フレーム', 'framed', 'enframed', 'frame' ], + 'img_framed' => [ '1', 'フレーム', 'frame', 'framed', 'enframed' ], 'img_frameless' => [ '1', 'フレームなし', 'frameless' ], 'img_page' => [ '1', 'ページ=$1', 'ページ $1', 'page=$1', 'page $1' ], 'img_upright' => [ '1', '右上', 'upright', 'upright=$1', 'upright $1' ], 'img_border' => [ '1', '境界', 'ボーダー', 'border' ], - 'img_baseline' => [ '1', '下線', 'ベースライン', 'baseline' ], + 'img_baseline' => [ '1', 'ベースライン', '下線', 'baseline' ], 'img_sub' => [ '1', '下付き', 'sub' ], 'img_super' => [ '1', '上付き', 'super', 'sup' ], 'img_top' => [ '1', '上端', 'top' ], diff --git a/languages/messages/MessagesKa.php b/languages/messages/MessagesKa.php index 00b98dc048..7c55460167 100644 --- a/languages/messages/MessagesKa.php +++ b/languages/messages/MessagesKa.php @@ -126,7 +126,7 @@ $magicWords = [ 'namespace' => [ '1', 'სახელთა_სივრცე', 'NAMESPACE' ], 'fullpagename' => [ '1', 'გვერდის_სრული_სახელი', 'FULLPAGENAME' ], 'subst' => [ '0', 'მიდგმ:', 'SUBST:' ], - 'img_thumbnail' => [ '1', 'მინიატიურა', 'მინი', 'მინიასლი', 'ცეროდენა', 'thumbnail', 'thumb' ], + 'img_thumbnail' => [ '1', 'მინი', 'მინიატიურა', 'მინიასლი', 'ცეროდენა', 'thumb', 'thumbnail' ], 'img_manualthumb' => [ '1', 'მინიატიურა=$1', 'მინი=$1', 'thumbnail=$1', 'thumb=$1' ], 'img_right' => [ '1', 'მარჯვნივ', 'right' ], 'img_left' => [ '1', 'მარცხნივ', 'left' ], diff --git a/languages/messages/MessagesKm.php b/languages/messages/MessagesKm.php index 6ae2e88ec3..e970b1798d 100644 --- a/languages/messages/MessagesKm.php +++ b/languages/messages/MessagesKm.php @@ -215,14 +215,14 @@ $magicWords = [ 'talkpagename' => [ '1', 'ឈ្មោះទំព័រពិភាក្សា', 'TALKPAGENAME' ], 'msg' => [ '0', 'សារ:', 'MSG:' ], 'msgnw' => [ '0', 'សារមិនមែនជាកូដវិគី:', 'MSGNW:' ], - 'img_thumbnail' => [ '1', 'រូបភាពតូច', 'រូបតូច', 'thumbnail', 'thumb' ], + 'img_thumbnail' => [ '1', 'រូបភាពតូច', 'រូបតូច', 'thumb', 'thumbnail' ], 'img_manualthumb' => [ '1', 'រូបភាពតូច=$1', 'រូបតូច=$1', 'thumbnail=$1', 'thumb=$1' ], 'img_right' => [ '1', 'ស្តាំ', 'ខាងស្តាំ', 'right' ], 'img_left' => [ '1', 'ធ្វេង', 'ខាងធ្វេង', 'left' ], 'img_none' => [ '1', 'ទទេ', 'គ្មាន', 'none' ], 'img_width' => [ '1', '$1ភីកសែល', '$1ភស', '$1px' ], 'img_center' => [ '1', 'កណ្តាល', 'center', 'centre' ], - 'img_framed' => [ '1', 'ស៊ុម', 'framed', 'enframed', 'frame' ], + 'img_framed' => [ '1', 'ស៊ុម', 'frame', 'framed', 'enframed' ], 'img_frameless' => [ '1', 'គ្មានស៊ុម', 'frameless' ], 'img_page' => [ '1', 'ទំព័រ=$1', 'ទំព័រ$1', 'page=$1', 'page $1' ], 'img_top' => [ '1', 'ផ្នែកលើ', 'ផ្នែកខាងលើ', 'top' ], diff --git a/languages/messages/MessagesKo.php b/languages/messages/MessagesKo.php index 09acaadfb4..4a3c15e9ca 100644 --- a/languages/messages/MessagesKo.php +++ b/languages/messages/MessagesKo.php @@ -245,14 +245,14 @@ $magicWords = [ 'subst' => [ '0', '풀기:', 'SUBST:' ], 'safesubst' => [ '0', '안전풀기:', 'SAFESUBST:' ], 'msgnw' => [ '0', '위키잘못메시지:', 'MSGNW:' ], - 'img_thumbnail' => [ '1', '섬네일', '썸네일', '축소판', 'thumbnail', 'thumb' ], + 'img_thumbnail' => [ '1', '섬네일', '썸네일', '축소판', 'thumb', 'thumbnail' ], 'img_manualthumb' => [ '1', '섬네일=$1', '썸네일=$1', '축소판=$1', 'thumbnail=$1', 'thumb=$1' ], 'img_right' => [ '1', '오른쪽', 'right' ], 'img_left' => [ '1', '왼쪽', 'left' ], 'img_none' => [ '1', '없음', 'none' ], 'img_width' => [ '1', '$1픽셀', '$1px' ], 'img_center' => [ '1', '가운데', 'center', 'centre' ], - 'img_framed' => [ '1', '프레임', 'framed', 'enframed', 'frame' ], + 'img_framed' => [ '1', '프레임', 'frame', 'framed', 'enframed' ], 'img_frameless' => [ '1', '프레임없음', 'frameless' ], 'img_lang' => [ '1', '언어=$1', 'lang=$1' ], 'img_page' => [ '1', '문서=$1', 'page=$1', 'page $1' ], diff --git a/languages/messages/MessagesKsh.php b/languages/messages/MessagesKsh.php index f3aea35e69..b13578ebea 100644 --- a/languages/messages/MessagesKsh.php +++ b/languages/messages/MessagesKsh.php @@ -202,7 +202,7 @@ $magicWords = [ 'nogallery' => [ '0', '__KEIN_JALLERIE__', '__KEINE_GALERIE__', '__KEINEGALERIE__', '__NOGALLERY__' ], 'toc' => [ '0', '__ENHALLT__', '__INHALTSVERZEICHNIS__', '__TOC__' ], 'img_right' => [ '1', 'rähß', 'räts', 'rechts', 'right' ], - 'img_left' => [ '1', 'lengks', 'lenks', 'links', 'left' ], + 'img_left' => [ '1', 'links', 'lengks', 'lenks', 'left' ], 'language' => [ '0', '#SHPROOCH:', '#SPROCH:', '#SPRACHE:', '#LANGUAGE:' ], 'hiddencat' => [ '1', '__VERSHTOCHE_SAACHJRUPP__', '__VERSTECKTE_KATEGORIE__', '__WARTUNGSKATEGORIE__', '__HIDDENCAT__' ], ]; diff --git a/languages/messages/MessagesKw.php b/languages/messages/MessagesKw.php index 45b9bb4c5d..5a0a02b667 100644 --- a/languages/messages/MessagesKw.php +++ b/languages/messages/MessagesKw.php @@ -166,13 +166,13 @@ $magicWords = [ 'numberofedits' => [ '1', 'NIVERAJANJYOW', 'NUMBEROFEDITS' ], 'pagename' => [ '1', 'HANOWANFOLEN', 'PAGENAME' ], 'fullpagename' => [ '1', 'HANOWLEUNANFOLEN', 'FULLPAGENAME' ], - 'img_thumbnail' => [ '1', 'skeusennik', 'thumbnail', 'thumb' ], + 'img_thumbnail' => [ '1', 'skeusennik', 'thumb', 'thumbnail' ], 'img_manualthumb' => [ '1', 'skeusennik=$1', 'thumbnail=$1', 'thumb=$1' ], 'img_right' => [ '1', 'dyhow', 'right' ], 'img_left' => [ '1', 'kledh', 'left' ], 'img_none' => [ '1', 'nagonan', 'none' ], 'img_center' => [ '1', 'kresel', 'center', 'centre' ], - 'img_framed' => [ '1', 'fremys', 'framed', 'enframed', 'frame' ], + 'img_framed' => [ '1', 'fremys', 'frame', 'framed', 'enframed' ], 'img_frameless' => [ '1', 'hebfram', 'frameless' ], 'img_page' => [ '1', 'folen=$1', 'folen_$1', 'page=$1', 'page $1' ], 'img_top' => [ '1', 'gwartha', 'top' ], diff --git a/languages/messages/MessagesLb.php b/languages/messages/MessagesLb.php index 77a5b435e4..2f52faf9cf 100644 --- a/languages/messages/MessagesLb.php +++ b/languages/messages/MessagesLb.php @@ -169,15 +169,15 @@ $magicWords = [ 'namespace' => [ '1', 'Nummraum', 'NAMENSRAUM', 'NAMESPACE' ], 'subjectspace' => [ '1', 'Haaptnummraum', 'HAUPTNAMENSRAUM', 'SUBJECTSPACE', 'ARTICLESPACE' ], 'subjectpagename' => [ '1', 'Haaptsäit', 'HAUPTSEITE', 'HAUPTSEITENNAME', 'VORDERSEITE', 'SUBJECTPAGENAME', 'ARTICLEPAGENAME' ], - 'img_thumbnail' => [ '1', 'Miniatur', 'miniatur', 'mini', 'thumbnail', 'thumb' ], + 'img_thumbnail' => [ '1', 'miniatur', 'Miniatur', 'mini', 'thumb', 'thumbnail' ], 'img_right' => [ '1', 'riets', 'rechts', 'right' ], 'img_left' => [ '1', 'lénks', 'links', 'left' ], - 'img_none' => [ '1', 'ouni', 'ohne', 'none' ], + 'img_none' => [ '1', 'ohne', 'ouni', 'none' ], 'img_center' => [ '1', 'zentréiert', 'zentriert', 'center', 'centre' ], - 'img_framed' => [ '1', 'gerummt', 'gerahmt', 'framed', 'enframed', 'frame' ], - 'img_frameless' => [ '1', 'net_gerummt', 'rahmenlos', 'frameless' ], + 'img_framed' => [ '1', 'gerummt', 'gerahmt', 'frame', 'framed', 'enframed' ], + 'img_frameless' => [ '1', 'rahmenlos', 'net_gerummt', 'frameless' ], 'img_page' => [ '1', 'Säit=$1', 'Säit_$1', 'seite=$1', 'seite $1', 'page=$1', 'page $1' ], - 'img_border' => [ '1', 'bord', 'rand', 'border' ], + 'img_border' => [ '1', 'rand', 'bord', 'border' ], 'img_top' => [ '1', 'uewen', 'oben', 'top' ], 'img_middle' => [ '1', 'mëtt', 'mitte', 'middle' ], 'img_bottom' => [ '1', 'ënnen', 'unten', 'bottom' ], diff --git a/languages/messages/MessagesLt.php b/languages/messages/MessagesLt.php index 289bd90c87..a8e6c77f7e 100644 --- a/languages/messages/MessagesLt.php +++ b/languages/messages/MessagesLt.php @@ -164,7 +164,7 @@ $magicWords = [ 'numberoffiles' => [ '1', 'FAILŲSKAIČIUS', 'NUMBEROFFILES' ], 'numberofusers' => [ '1', 'NAUDOTOJŲSKAIČIUS', 'NUMBEROFUSERS' ], 'numberofedits' => [ '1', 'KEITIMŲSKAIČIUS', 'NUMBEROFEDITS' ], - 'img_thumbnail' => [ '1', 'miniatiūra', 'mini', 'thumbnail', 'thumb' ], + 'img_thumbnail' => [ '1', 'miniatiūra', 'mini', 'thumb', 'thumbnail' ], 'img_manualthumb' => [ '1', 'miniatiūra=$1', 'mini=$1', 'thumbnail=$1', 'thumb=$1' ], 'img_right' => [ '1', 'dešinėje', 'right' ], 'img_left' => [ '1', 'kairėje', 'left' ], diff --git a/languages/messages/MessagesMg.php b/languages/messages/MessagesMg.php index 48720ad048..653be834f6 100644 --- a/languages/messages/MessagesMg.php +++ b/languages/messages/MessagesMg.php @@ -67,7 +67,7 @@ $magicWords = [ 'img_right' => [ '1', 'ankavanana', 'droite', 'right' ], 'img_left' => [ '1', 'ankavia', 'gauche', 'left' ], 'img_none' => [ '1', 'tsymisy', 'néant', 'neant', 'none' ], - 'img_center' => [ '1', 'ampivoany', 'anivony', 'centré', 'center', 'centre' ], + 'img_center' => [ '1', 'centré', 'ampivoany', 'anivony', 'center', 'centre' ], 'img_page' => [ '1', 'pejy $1', 'page=$1', 'page $1' ], 'img_border' => [ '1', 'sisiny', 'bordure', 'border' ], 'img_top' => [ '1', 'ambony', 'haut', 'top' ], diff --git a/languages/messages/MessagesMhr.php b/languages/messages/MessagesMhr.php index 2d6e83aaf9..99ab0e55f3 100644 --- a/languages/messages/MessagesMhr.php +++ b/languages/messages/MessagesMhr.php @@ -81,7 +81,7 @@ $specialPageAliases = [ ]; $magicWords = [ - 'img_right' => [ '1', 'пурла', 'справа', 'right' ], + 'img_right' => [ '1', 'справа', 'пурла', 'right' ], 'img_left' => [ '1', 'шола', 'слева', 'left' ], 'img_border' => [ '1', 'чек', 'граница', 'border' ], 'img_sub' => [ '1', 'йымалне', 'под', 'sub' ], diff --git a/languages/messages/MessagesMk.php b/languages/messages/MessagesMk.php index cc76c619f0..c15b040d5e 100644 --- a/languages/messages/MessagesMk.php +++ b/languages/messages/MessagesMk.php @@ -252,14 +252,14 @@ $magicWords = [ 'subst' => [ '0', 'ЗАМЕНИ:', 'SUBST:' ], 'safesubst' => [ '0', 'БЕЗБЗАМЕНИ', 'SAFESUBST:' ], 'msgnw' => [ '0', 'ИЗВЕШТNW:', 'MSGNW:' ], - 'img_thumbnail' => [ '1', 'мини', 'мини-слика', 'thumbnail', 'thumb' ], + 'img_thumbnail' => [ '1', 'мини', 'мини-слика', 'thumb', 'thumbnail' ], 'img_manualthumb' => [ '1', 'мини-слика=$1', 'мини=$1', 'thumbnail=$1', 'thumb=$1' ], 'img_right' => [ '1', 'десно', 'д', 'right' ], 'img_left' => [ '1', 'лево', 'л', 'left' ], 'img_none' => [ '1', 'н', 'нема', 'none' ], 'img_width' => [ '1', '$1пкс', '$1п', '$1px' ], 'img_center' => [ '1', 'центар', 'ц', 'center', 'centre' ], - 'img_framed' => [ '1', 'рамка', 'ворамка', 'framed', 'enframed', 'frame' ], + 'img_framed' => [ '1', 'рамка', 'ворамка', 'frame', 'framed', 'enframed' ], 'img_frameless' => [ '1', 'безрамка', 'frameless' ], 'img_lang' => [ '1', 'јаз=$1', 'lang=$1' ], 'img_page' => [ '1', 'страница=$1', 'страница_$1', 'page=$1', 'page $1' ], diff --git a/languages/messages/MessagesMl.php b/languages/messages/MessagesMl.php index 0f2c1894f8..2c9542bd49 100644 --- a/languages/messages/MessagesMl.php +++ b/languages/messages/MessagesMl.php @@ -253,14 +253,14 @@ $magicWords = [ 'subst' => [ '0', 'ബദൽ:', 'ഉൾപ്പെടുത്തൽ:', 'SUBST:' ], 'safesubst' => [ '0', 'സംരക്ഷിതബദൽ:', 'സംരക്ഷിതയുൾപ്പെടുത്തൽ:', 'SAFESUBST:' ], 'msgnw' => [ '0', 'മൂലരൂപം:', 'MSGNW:' ], - 'img_thumbnail' => [ '1', 'ലഘുചിത്രം', 'ലഘു', 'thumbnail', 'thumb' ], + 'img_thumbnail' => [ '1', 'ലഘുചിത്രം', 'ലഘു', 'thumb', 'thumbnail' ], 'img_manualthumb' => [ '1', 'ലഘുചിത്രം=$1', 'ലഘു=$1', 'thumbnail=$1', 'thumb=$1' ], 'img_right' => [ '1', 'വലത്ത്‌', 'വലത്‌', 'right' ], 'img_left' => [ '1', 'ഇടത്ത്‌', 'ഇടത്‌', 'left' ], 'img_none' => [ '1', 'ശൂന്യം', 'none' ], 'img_width' => [ '1', '$1ബിന്ദു', '$1px' ], 'img_center' => [ '1', 'നടുവിൽ', 'നടുക്ക്‌', 'center', 'centre' ], - 'img_framed' => [ '1', 'ചട്ടം', 'ചട്ടത്തിൽ', 'framed', 'enframed', 'frame' ], + 'img_framed' => [ '1', 'ചട്ടം', 'ചട്ടത്തിൽ', 'frame', 'framed', 'enframed' ], 'img_frameless' => [ '1', 'ചട്ടരഹിതം', 'frameless' ], 'img_lang' => [ '1', 'ഭാഷ=$1', 'lang=$1' ], 'img_page' => [ '1', 'താൾ=$1', 'താൾ_$1', 'page=$1', 'page $1' ], diff --git a/languages/messages/MessagesMr.php b/languages/messages/MessagesMr.php index 0ea16f906a..61fc6138ac 100644 --- a/languages/messages/MessagesMr.php +++ b/languages/messages/MessagesMr.php @@ -223,14 +223,14 @@ $magicWords = [ 'msg' => [ '0', 'संदेश:', 'निरोप:', 'MSG:' ], 'subst' => [ '0', 'पर्याय:', 'समाविष्टी:', 'अबाह्य:', 'निरकंसबिंब:', 'कंसत्याग:', 'साचाहिन:', 'साचान्तर:', 'साचापरिस्फोट:', 'साचोद्घाटन:', 'SUBST:' ], 'msgnw' => [ '0', 'संदेशनवा:', 'निरोपनवा:', 'MSGNW:' ], - 'img_thumbnail' => [ '1', 'इवलेसे', 'thumbnail', 'thumb' ], + 'img_thumbnail' => [ '1', 'इवलेसे', 'thumb', 'thumbnail' ], 'img_manualthumb' => [ '1', 'इवलेसे=$1', 'thumbnail=$1', 'thumb=$1' ], 'img_right' => [ '1', 'उजवे', 'right' ], 'img_left' => [ '1', 'डावे', 'left' ], 'img_none' => [ '1', 'कोणतेचनाही', 'नन्ना', 'none' ], 'img_width' => [ '1', '$1अंश', '$1कणी', '$1पक्ष', '$1px' ], 'img_center' => [ '1', 'मध्यवर्ती', 'center', 'centre' ], - 'img_framed' => [ '1', 'चौकट', 'फ़्रेम', 'framed', 'enframed', 'frame' ], + 'img_framed' => [ '1', 'चौकट', 'फ़्रेम', 'frame', 'framed', 'enframed' ], 'img_frameless' => [ '1', 'विनाचौकट', 'विनाफ़्रेम', 'frameless' ], 'img_page' => [ '1', 'पान=$1', 'पान_$1', 'page=$1', 'page $1' ], 'img_upright' => [ '1', 'उभा', 'उभा=$1', 'उभा_$1', 'upright', 'upright=$1', 'upright $1' ], diff --git a/languages/messages/MessagesMt.php b/languages/messages/MessagesMt.php index 50ea43ba9c..aad38b7703 100644 --- a/languages/messages/MessagesMt.php +++ b/languages/messages/MessagesMt.php @@ -192,13 +192,13 @@ $magicWords = [ 'msg' => [ '0', 'MSĠ:', 'MSG:' ], 'subst' => [ '0', 'BIDDEL:', 'SUBST:' ], 'msgnw' => [ '0', 'MSĠEW:', 'MSGNW:' ], - 'img_thumbnail' => [ '1', 'daqsminuri', 'minuri', 'thumbnail', 'thumb' ], + 'img_thumbnail' => [ '1', 'daqsminuri', 'minuri', 'thumb', 'thumbnail' ], 'img_manualthumb' => [ '1', 'daqsminuri=$1', 'minuri=$1', 'thumbnail=$1', 'thumb=$1' ], 'img_right' => [ '1', 'lemin', 'right' ], 'img_left' => [ '1', 'xellug', 'left' ], 'img_none' => [ '1', 'xejn', 'none' ], 'img_center' => [ '1', 'nofs', 'ċentrali', 'ċentru', 'center', 'centre' ], - 'img_framed' => [ '1', 'tilat', 'b\'tilar', 'tilar', 'framed', 'enframed', 'frame' ], + 'img_framed' => [ '1', 'tilat', 'b\'tilar', 'tilar', 'frame', 'framed', 'enframed' ], 'img_frameless' => [ '1', 'bla_tilar', 'frameless' ], 'img_page' => [ '1', 'paġna=$1', 'paġna $1', 'page=$1', 'page $1' ], 'img_upright' => [ '1', 'wieqaf', 'wieqaf=$1', 'wieqaf $1', 'upright', 'upright=$1', 'upright $1' ], diff --git a/languages/messages/MessagesMyv.php b/languages/messages/MessagesMyv.php index 53033c3dbc..20057d52b2 100644 --- a/languages/messages/MessagesMyv.php +++ b/languages/messages/MessagesMyv.php @@ -144,12 +144,12 @@ $magicWords = [ 'fullpagename' => [ '1', 'ЛОПАЛЕМКУВАКАСТО', 'ПОЛНОЕ_НАЗВАНИЕ_СТРАНИЦЫ', 'FULLPAGENAME' ], 'talkpagename' => [ '1', 'КОРТАМОЛОПАЛЕМ', 'НАЗВАНИЕ_СТРАНИЦЫ_ОБСУЖДЕНИЯ', 'TALKPAGENAME' ], 'msg' => [ '0', 'ПАЧТЯМНЭ:', 'СООБЩЕНИЕ:', 'СООБЩ:', 'MSG:' ], - 'img_thumbnail' => [ '1', 'кенжешка', 'мини', 'миниатюра', 'thumbnail', 'thumb' ], + 'img_thumbnail' => [ '1', 'кенжешка', 'мини', 'миниатюра', 'thumb', 'thumbnail' ], 'img_right' => [ '1', 'вить_кедь', 'справа', 'right' ], 'img_left' => [ '1', 'керш_кедь', 'слева', 'left' ], 'img_none' => [ '1', 'вейкеяк_арась', 'без', 'none' ], 'img_center' => [ '1', 'куншкасо', 'центр', 'center', 'centre' ], - 'img_framed' => [ '1', 'кундсо', 'обрамить', 'framed', 'enframed', 'frame' ], + 'img_framed' => [ '1', 'кундсо', 'обрамить', 'frame', 'framed', 'enframed' ], 'img_frameless' => [ '1', 'кундовтомо', 'безрамки', 'frameless' ], 'img_page' => [ '1', 'лопа=$1', 'лопа_$1', 'страница=$1', 'страница_$1', 'страница $1', 'page=$1', 'page $1' ], 'img_top' => [ '1', 'верькс', 'сверху', 'top' ], diff --git a/languages/messages/MessagesNds.php b/languages/messages/MessagesNds.php index 8a18f2f3b0..b04066cca2 100644 --- a/languages/messages/MessagesNds.php +++ b/languages/messages/MessagesNds.php @@ -72,12 +72,12 @@ $magicWords = [ 'pagename' => [ '1', 'SIETNAAM', 'SEITENNAME', 'PAGENAME' ], 'pagenamee' => [ '1', 'SIETNAAME', 'SEITENNAME_URL', 'PAGENAMEE' ], 'namespace' => [ '1', 'NAAMRUUM', 'NAMENSRAUM', 'NAMESPACE' ], - 'img_thumbnail' => [ '1', 'duum', 'miniatur', 'mini', 'thumbnail', 'thumb' ], + 'img_thumbnail' => [ '1', 'duum', 'miniatur', 'mini', 'thumb', 'thumbnail' ], 'img_right' => [ '1', 'rechts', 'right' ], 'img_left' => [ '1', 'links', 'left' ], 'img_none' => [ '1', 'keen', 'ohne', 'none' ], - 'img_center' => [ '1', 'merrn', 'zentriert', 'center', 'centre' ], - 'img_framed' => [ '1', 'rahmt', 'gerahmt', 'framed', 'enframed', 'frame' ], + 'img_center' => [ '1', 'zentriert', 'merrn', 'center', 'centre' ], + 'img_framed' => [ '1', 'gerahmt', 'rahmt', 'frame', 'framed', 'enframed' ], 'sitename' => [ '1', 'STEEDNAAM', 'PROJEKTNAME', 'SITENAME' ], 'ns' => [ '0', 'NR:', 'NS:' ], 'localurl' => [ '0', 'STEEDURL:', 'LOKALE_URL:', 'LOCALURL:' ], diff --git a/languages/messages/MessagesNl.php b/languages/messages/MessagesNl.php index 9ebb79f9bc..dde2e04b7e 100644 --- a/languages/messages/MessagesNl.php +++ b/languages/messages/MessagesNl.php @@ -171,13 +171,13 @@ $magicWords = [ 'subst' => [ '0', 'VERV:', 'SUBST:' ], 'safesubst' => [ '0', 'VEILIGVERV:', 'SAFESUBST:' ], 'msgnw' => [ '0', 'BERICHTNW', 'MSGNW:' ], - 'img_thumbnail' => [ '1', 'miniatuur', 'thumbnail', 'thumb' ], + 'img_thumbnail' => [ '1', 'miniatuur', 'thumb', 'thumbnail' ], 'img_manualthumb' => [ '1', 'miniatuur=$1', 'thumbnail=$1', 'thumb=$1' ], 'img_right' => [ '1', 'rechts', 'right' ], 'img_left' => [ '1', 'links', 'left' ], 'img_none' => [ '1', 'geen', 'none' ], 'img_center' => [ '1', 'gecentreerd', 'center', 'centre' ], - 'img_framed' => [ '1', 'omkaderd', 'framed', 'enframed', 'frame' ], + 'img_framed' => [ '1', 'omkaderd', 'frame', 'framed', 'enframed' ], 'img_frameless' => [ '1', 'kaderloos', 'frameless' ], 'img_lang' => [ '1', 'taal=$1', 'lang=$1' ], 'img_page' => [ '1', 'pagina=$1', 'pagina_$1', 'page=$1', 'page $1' ], diff --git a/languages/messages/MessagesNn.php b/languages/messages/MessagesNn.php index 49987ad458..b8ae8d7d44 100644 --- a/languages/messages/MessagesNn.php +++ b/languages/messages/MessagesNn.php @@ -132,14 +132,14 @@ $magicWords = [ 'subst' => [ '0', 'LIMINN:', 'SUBST:' ], 'safesubst' => [ '0', 'TRYGGLIMINN:', 'SAFESUBST:' ], 'msgnw' => [ '0', 'IKWIKMELD:', 'MSGNW:' ], - 'img_thumbnail' => [ '1', 'mini', 'miniatyr', 'thumbnail', 'thumb' ], + 'img_thumbnail' => [ '1', 'mini', 'miniatyr', 'thumb', 'thumbnail' ], 'img_manualthumb' => [ '1', 'mini=$1', 'miniatyr=$1', 'thumbnail=$1', 'thumb=$1' ], 'img_right' => [ '1', 'høgre', 'høyre', 'right' ], 'img_left' => [ '1', 'venstre', 'left' ], 'img_none' => [ '1', 'ingen', 'none' ], 'img_width' => [ '1', '$1pk', '$1px' ], 'img_center' => [ '1', 'sentrum', 'center', 'centre' ], - 'img_framed' => [ '1', 'ramme', 'ramma', 'framed', 'enframed', 'frame' ], + 'img_framed' => [ '1', 'ramme', 'ramma', 'frame', 'framed', 'enframed' ], 'img_frameless' => [ '1', 'rammelaus', 'frameless' ], 'img_lang' => [ '1', 'språk=$1', 'lang=$1' ], 'img_page' => [ '1', 'side=$1', 'side_$1', 'page=$1', 'page $1' ], diff --git a/languages/messages/MessagesOc.php b/languages/messages/MessagesOc.php index 47f6b0a9c9..6c7512ba45 100644 --- a/languages/messages/MessagesOc.php +++ b/languages/messages/MessagesOc.php @@ -194,13 +194,13 @@ $magicWords = [ 'talkpagenamee' => [ '1', 'NOMPAGINADISCUSSIONX', 'TALKPAGENAMEE' ], 'subjectpagename' => [ '1', 'NOMPAGINASUBJECTE', 'NOMPAGINASUBJÈCTE', 'NOMPAGINAARTICLE', 'SUBJECTPAGENAME', 'ARTICLEPAGENAME' ], 'subjectpagenamee' => [ '1', 'NOMPAGINASUBJECTEX', 'NOMPAGINASUBJÈCTEX', 'NOMPAGINAARTICLEX', 'SUBJECTPAGENAMEE', 'ARTICLEPAGENAMEE' ], - 'img_thumbnail' => [ '1', 'vinheta', 'thumbnail', 'thumb' ], + 'img_thumbnail' => [ '1', 'vinheta', 'thumb', 'thumbnail' ], 'img_manualthumb' => [ '1', 'vinheta=$1', 'thumbnail=$1', 'thumb=$1' ], 'img_right' => [ '1', 'drecha', 'dreta', 'right' ], 'img_left' => [ '1', 'esquèrra', 'senèstra', 'gaucha', 'left' ], 'img_none' => [ '1', 'neant', 'nonrés', 'none' ], 'img_center' => [ '1', 'centrat', 'center', 'centre' ], - 'img_framed' => [ '1', 'quadre', 'enquagrat', 'framed', 'enframed', 'frame' ], + 'img_framed' => [ '1', 'quadre', 'enquagrat', 'frame', 'framed', 'enframed' ], 'img_frameless' => [ '1', 'sens_quadre', 'frameless' ], 'img_upright' => [ '1', 'redreça', 'redreça$1', 'redreça $1', 'upright', 'upright=$1', 'upright $1' ], 'img_border' => [ '1', 'bordadura', 'border' ], diff --git a/languages/messages/MessagesOr.php b/languages/messages/MessagesOr.php index e84c4f6d3f..4f500a774e 100644 --- a/languages/messages/MessagesOr.php +++ b/languages/messages/MessagesOr.php @@ -216,7 +216,7 @@ $magicWords = [ 'img_none' => [ '1', 'କିଛି_ନୁହେଁ', 'none' ], 'img_width' => [ '1', '$1_ପିକସେଲ', '$1px' ], 'img_center' => [ '1', 'କେନ୍ଦ୍ର', 'center', 'centre' ], - 'img_framed' => [ '1', 'ଫ୍ରେମକରା', 'framed', 'enframed', 'frame' ], + 'img_framed' => [ '1', 'ଫ୍ରେମକରା', 'frame', 'framed', 'enframed' ], 'img_frameless' => [ '1', 'ଫ୍ରେମନଥିବା', 'frameless' ], 'img_border' => [ '1', 'ବର୍ଡର', 'border' ], 'img_baseline' => [ '1', 'ବେସଲାଇନ', 'baseline' ], diff --git a/languages/messages/MessagesOs.php b/languages/messages/MessagesOs.php index 26b3832c3e..5ba4ff558e 100644 --- a/languages/messages/MessagesOs.php +++ b/languages/messages/MessagesOs.php @@ -169,7 +169,7 @@ $magicWords = [ 'numberofpages' => [ '1', 'ФÆРСТЫНЫМÆЦ', 'КОЛИЧЕСТВО_СТРАНИЦ', 'NUMBEROFPAGES' ], 'numberofarticles' => [ '1', 'УАЦТЫНЫМÆЦ', 'КОЛИЧЕСТВО_СТАТЕЙ', 'NUMBEROFARTICLES' ], 'pagename' => [ '1', 'ФАРСЫНОМ', 'НАЗВАНИЕ_СТРАНИЦЫ', 'PAGENAME' ], - 'img_thumbnail' => [ '1', 'къаддæргонд', 'къаддæр', 'мини', 'миниатюра', 'thumbnail', 'thumb' ], + 'img_thumbnail' => [ '1', 'мини', 'къаддæргонд', 'къаддæр', 'миниатюра', 'thumb', 'thumbnail' ], 'img_manualthumb' => [ '1', 'къаддæргонд=$1', 'къаддæр=$1', 'мини=$1', 'миниатюра=$1', 'thumbnail=$1', 'thumb=$1' ], 'img_right' => [ '1', 'рахиз', 'справа', 'right' ], 'img_left' => [ '1', 'галиу', 'слева', 'left' ], diff --git a/languages/messages/MessagesPl.php b/languages/messages/MessagesPl.php index 9c7264dff0..cfe034530d 100644 --- a/languages/messages/MessagesPl.php +++ b/languages/messages/MessagesPl.php @@ -266,13 +266,13 @@ $magicWords = [ 'basepagename' => [ '1', 'BAZOWANAZWASTRONY', 'BASEPAGENAME' ], 'talkpagename' => [ '1', 'NAZWASTRONYDYSKUSJI', 'TALKPAGENAME' ], 'subst' => [ '0', 'podst:', 'SUBST:' ], - 'img_thumbnail' => [ '1', 'mały', 'thumbnail', 'thumb' ], + 'img_thumbnail' => [ '1', 'mały', 'thumb', 'thumbnail' ], 'img_manualthumb' => [ '1', 'mały=$1', 'thumbnail=$1', 'thumb=$1' ], 'img_right' => [ '1', 'prawo', 'right' ], 'img_left' => [ '1', 'lewo', 'left' ], 'img_none' => [ '1', 'brak', 'none' ], 'img_center' => [ '1', 'centruj', 'center', 'centre' ], - 'img_framed' => [ '1', 'ramka', 'framed', 'enframed', 'frame' ], + 'img_framed' => [ '1', 'ramka', 'frame', 'framed', 'enframed' ], 'img_frameless' => [ '1', 'bezramki', 'bez_ramki', 'frameless' ], 'img_page' => [ '1', 'strona=$1', 'page=$1', 'page $1' ], 'img_border' => [ '1', 'tło', 'border' ], diff --git a/languages/messages/MessagesPs.php b/languages/messages/MessagesPs.php index 4254b7458b..18c115b84b 100644 --- a/languages/messages/MessagesPs.php +++ b/languages/messages/MessagesPs.php @@ -133,7 +133,7 @@ $magicWords = [ 'fullpagename' => [ '1', 'دمخ_بشپړنوم', 'FULLPAGENAME' ], 'fullpagenamee' => [ '1', 'دمخ_بشپړنوم_نښه', 'FULLPAGENAMEE' ], 'msg' => [ '0', 'پیغام:', 'پ:', 'MSG:' ], - 'img_thumbnail' => [ '1', 'بټنوک', 'thumbnail', 'thumb' ], + 'img_thumbnail' => [ '1', 'بټنوک', 'thumb', 'thumbnail' ], 'img_right' => [ '1', 'ښي', 'right' ], 'img_left' => [ '1', 'کيڼ', 'left' ], 'img_none' => [ '1', 'هېڅ', 'none' ], diff --git a/languages/messages/MessagesPt.php b/languages/messages/MessagesPt.php index dd6216e86d..5c3c191027 100644 --- a/languages/messages/MessagesPt.php +++ b/languages/messages/MessagesPt.php @@ -269,13 +269,13 @@ $magicWords = [ 'talkpagenamee' => [ '1', 'NOMEDAPAGINADEDISCUSSAOC', 'NOMEDAPÁGINADEDISCUSSÃOC', 'TALKPAGENAMEE' ], 'subjectpagename' => [ '1', 'NOMEDAPAGINADECONTEUDO', 'NOMEDAPÁGINADECONTEÚDO', 'SUBJECTPAGENAME', 'ARTICLEPAGENAME' ], 'subjectpagenamee' => [ '1', 'NOMEDAPAGINADECONTEUDOC', 'NOMEDAPÁGINADECONTEÚDOC', 'SUBJECTPAGENAMEE', 'ARTICLEPAGENAMEE' ], - 'img_thumbnail' => [ '1', 'miniaturadaimagem', 'miniatura', 'thumbnail', 'thumb' ], + 'img_thumbnail' => [ '1', 'miniaturadaimagem', 'miniatura', 'thumb', 'thumbnail' ], 'img_manualthumb' => [ '1', 'miniaturadaimagem=$1', 'miniatura=$1', 'thumbnail=$1', 'thumb=$1' ], 'img_right' => [ '1', 'direita', 'right' ], 'img_left' => [ '1', 'esquerda', 'left' ], 'img_none' => [ '1', 'nenhum', 'none' ], 'img_center' => [ '1', 'centro', 'center', 'centre' ], - 'img_framed' => [ '1', 'commoldura', 'comborda', 'framed', 'enframed', 'frame' ], + 'img_framed' => [ '1', 'commoldura', 'comborda', 'frame', 'framed', 'enframed' ], 'img_frameless' => [ '1', 'semmoldura', 'semborda', 'frameless' ], 'img_page' => [ '1', 'página=$1', 'página_$1', 'página $1', 'page=$1', 'page $1' ], 'img_upright' => [ '1', 'superiordireito', 'superiordireito=$1', 'superiordireito_$1', 'superiordireito $1', 'upright', 'upright=$1', 'upright $1' ], diff --git a/languages/messages/MessagesQu.php b/languages/messages/MessagesQu.php index 8339ad2b69..eb1c8d9d61 100644 --- a/languages/messages/MessagesQu.php +++ b/languages/messages/MessagesQu.php @@ -197,13 +197,13 @@ $magicWords = [ 'msg' => [ '0', 'WILLA:', 'MSJ:', 'MSG:' ], 'subst' => [ '0', 'WAKCHAY:', 'SUST:', 'FIJAR:', 'SUBST:' ], 'msgnw' => [ '0', 'WILLAMUSUQ:', 'MSGNW:' ], - 'img_thumbnail' => [ '1', 'rikchacha', 'miniaturadeimagen', 'miniatura', 'mini', 'thumbnail', 'thumb' ], + 'img_thumbnail' => [ '1', 'rikchacha', 'miniaturadeimagen', 'mini', 'miniatura', 'thumb', 'thumbnail' ], 'img_manualthumb' => [ '1', 'rikchacha=$1', 'miniaturadeimagen=$1', 'miniatura=$1', 'thumbnail=$1', 'thumb=$1' ], 'img_right' => [ '1', 'paña', 'alliq', 'derecha', 'dcha', 'der', 'right' ], 'img_left' => [ '1', 'lluqi', 'ichuq', 'izquierda', 'izda', 'izq', 'left' ], 'img_none' => [ '1', 'manaima', 'mana', 'ninguna', 'nada', 'no', 'ninguno', 'none' ], 'img_center' => [ '1', 'chawpi', 'centro', 'centrado', 'centrada', 'centrar', 'center', 'centre' ], - 'img_framed' => [ '1', 'inchuyuq', 'inchu', 'marco', 'enmarcado', 'enmarcada', 'framed', 'enframed', 'frame' ], + 'img_framed' => [ '1', 'inchuyuq', 'inchu', 'marco', 'enmarcado', 'enmarcada', 'frame', 'framed', 'enframed' ], 'img_frameless' => [ '1', 'inchunnaq', 'sinmarco', 'sin_embarcar', 'sinenmarcar', 'sin_enmarcar', 'frameless' ], 'img_page' => [ '1', 'panqa=$1', 'pagina=$1', 'página=$1', 'pagina_$1', 'página_$1', 'page=$1', 'page $1' ], 'img_upright' => [ '1', 'sayaq', 'sayaq=$1', 'upright', 'upright=$1', 'upright $1' ], diff --git a/languages/messages/MessagesRm.php b/languages/messages/MessagesRm.php index 8c04de8c0c..7304dbfb08 100644 --- a/languages/messages/MessagesRm.php +++ b/languages/messages/MessagesRm.php @@ -36,7 +36,7 @@ $namespaceNames = [ $magicWords = [ 'redirect' => [ '0', '#RENVIAMENT', '#REDIRECT' ], - 'img_thumbnail' => [ '1', 'miniatura', 'thumbnail', 'thumb' ], + 'img_thumbnail' => [ '1', 'miniatura', 'thumb', 'thumbnail' ], 'img_manualthumb' => [ '1', 'miniatura=$1', 'thumbnail=$1', 'thumb=$1' ], 'img_upright' => [ '1', 'sidretg', 'sidretg=$1', 'sidretg_$1', 'upright', 'upright=$1', 'upright $1' ], ]; diff --git a/languages/messages/MessagesRo.php b/languages/messages/MessagesRo.php index b1860f9d03..8b921713d2 100644 --- a/languages/messages/MessagesRo.php +++ b/languages/messages/MessagesRo.php @@ -86,13 +86,13 @@ $magicWords = [ 'subjectpagenamee' => [ '1', 'NUMEEPAGINASUBIECT', 'NUMEEPAGINAARTICOL', 'SUBJECTPAGENAMEE', 'ARTICLEPAGENAMEE' ], 'msg' => [ '0', 'MSJ:', 'MSG:' ], 'msgnw' => [ '0', 'MSJNOU:', 'MSGNW:' ], - 'img_thumbnail' => [ '1', 'miniatura', 'mini', 'thumbnail', 'thumb' ], + 'img_thumbnail' => [ '1', 'miniatura', 'mini', 'thumb', 'thumbnail' ], 'img_manualthumb' => [ '1', 'miniatura=$1', 'mini=$1', 'thumbnail=$1', 'thumb=$1' ], 'img_right' => [ '1', 'dreapta', 'right' ], 'img_left' => [ '1', 'stanga', 'left' ], 'img_none' => [ '1', 'nu', 'none' ], 'img_center' => [ '1', 'centru', 'center', 'centre' ], - 'img_framed' => [ '1', 'cadru', 'framed', 'enframed', 'frame' ], + 'img_framed' => [ '1', 'cadru', 'frame', 'framed', 'enframed' ], 'img_frameless' => [ '1', 'faracadru', 'frameless' ], 'img_page' => [ '1', 'pagina=$1', 'pagina $1', 'page=$1', 'page $1' ], 'img_upright' => [ '1', 'dreaptasus', 'dreaptasus=$1', 'dreaptasus $1', 'upright', 'upright=$1', 'upright $1' ], diff --git a/languages/messages/MessagesRu.php b/languages/messages/MessagesRu.php index c27365474d..e1af8f3326 100644 --- a/languages/messages/MessagesRu.php +++ b/languages/messages/MessagesRu.php @@ -291,14 +291,14 @@ $magicWords = [ 'subst' => [ '0', 'ПОДСТАНОВКА:', 'ПОДСТ:', 'SUBST:' ], 'safesubst' => [ '0', 'ЗАЩПОДСТ:', 'SAFESUBST:' ], 'msgnw' => [ '0', 'СООБЩ_БЕЗ_ВИКИ:', 'MSGNW:' ], - 'img_thumbnail' => [ '1', 'мини', 'миниатюра', 'thumbnail', 'thumb' ], + 'img_thumbnail' => [ '1', 'мини', 'миниатюра', 'thumb', 'thumbnail' ], 'img_manualthumb' => [ '1', 'мини=$1', 'миниатюра=$1', 'thumbnail=$1', 'thumb=$1' ], 'img_right' => [ '1', 'справа', 'right' ], 'img_left' => [ '1', 'слева', 'left' ], 'img_none' => [ '1', 'без', 'none' ], 'img_width' => [ '1', '$1пкс', '$1px' ], 'img_center' => [ '1', 'центр', 'center', 'centre' ], - 'img_framed' => [ '1', 'обрамить', 'framed', 'enframed', 'frame' ], + 'img_framed' => [ '1', 'обрамить', 'frame', 'framed', 'enframed' ], 'img_frameless' => [ '1', 'безрамки', 'frameless' ], 'img_page' => [ '1', 'страница=$1', 'страница $1', 'page=$1', 'page $1' ], 'img_upright' => [ '1', 'сверхусправа', 'сверхусправа=$1', 'сверхусправа $1', 'upright', 'upright=$1', 'upright $1' ], diff --git a/languages/messages/MessagesSa.php b/languages/messages/MessagesSa.php index 21b5e6354b..4a369bdc40 100644 --- a/languages/messages/MessagesSa.php +++ b/languages/messages/MessagesSa.php @@ -223,14 +223,14 @@ $magicWords = [ 'subjectpagename' => [ '1', 'विषयपृष्ठनाम', 'लेखपृष्ठनाम', 'SUBJECTPAGENAME', 'ARTICLEPAGENAME' ], 'msg' => [ '0', 'सन्देश:', 'MSG:' ], 'msgnw' => [ '0', 'नूतनसन्देश:', 'MSGNW:' ], - 'img_thumbnail' => [ '1', 'लघुत्तम', 'सङ्कुचितचित्र', 'अङ्गुष्ठ', 'thumbnail', 'thumb' ], + 'img_thumbnail' => [ '1', 'लघुत्तम', 'अङ्गुष्ठ', 'सङ्कुचितचित्र', 'thumb', 'thumbnail' ], 'img_manualthumb' => [ '1', 'सङ्कुचितचित्र=$1', 'अङ्गुष्ठ=$1', 'लघुत्तमचित्र=$1', 'thumbnail=$1', 'thumb=$1' ], 'img_right' => [ '1', 'दक्षिणत', 'right' ], 'img_left' => [ '1', 'वामतः', 'left' ], 'img_none' => [ '1', 'नैव', 'none' ], 'img_width' => [ '1', '$1पिट', '$1px' ], 'img_center' => [ '1', 'मध्य', 'center', 'centre' ], - 'img_framed' => [ '1', 'आबन्ध', 'framed', 'enframed', 'frame' ], + 'img_framed' => [ '1', 'आबन्ध', 'frame', 'framed', 'enframed' ], 'img_frameless' => [ '1', 'निराबन्ध', 'frameless' ], 'img_page' => [ '1', 'पृष्ठ=$1', 'पृष्ठ $1', 'page=$1', 'page $1' ], 'img_upright' => [ '1', 'उन्नत', 'उन्नत=$1', 'उन्नत $1', 'upright', 'upright=$1', 'upright $1' ], diff --git a/languages/messages/MessagesSe.php b/languages/messages/MessagesSe.php index 0208991399..e04b004db8 100644 --- a/languages/messages/MessagesSe.php +++ b/languages/messages/MessagesSe.php @@ -126,7 +126,7 @@ $magicWords = [ 'numberofactiveusers' => [ '1', 'AKTIIVAGEAVAHEDDJIIDMEARRI', ' AKTIIVAGEAVAHEADDJIMEARRI', ' AKTIIVAGEAVAHEADDJEMEARRI', 'NUMBEROFACTIVEUSERS' ], 'numberofedits' => [ '1', 'RIEVDADUSAIDMEARRI', ' RIEVDADUSMEARRI', 'NUMBEROFEDITS' ], 'subst' => [ '0', 'LIIBME:', 'SUBST:' ], - 'img_thumbnail' => [ '1', 'mini', 'thumbnail', 'thumb' ], + 'img_thumbnail' => [ '1', 'mini', 'thumb', 'thumbnail' ], 'img_manualthumb' => [ '1', 'mini=$1', 'thumbnail=$1', 'thumb=$1' ], 'img_right' => [ '1', 'olgeš', 'right' ], 'img_left' => [ '1', 'gurut', 'left' ], diff --git a/languages/messages/MessagesSh.php b/languages/messages/MessagesSh.php index 3a821e2aae..fb792379ee 100644 --- a/languages/messages/MessagesSh.php +++ b/languages/messages/MessagesSh.php @@ -158,14 +158,14 @@ $magicWords = [ 'msg' => [ '0', 'POR:', 'MSG:' ], 'subst' => [ '0', 'ZAMJENI:', 'ZAMENI:', 'ZAMJENA:', 'SUBST:' ], 'msgnw' => [ '0', 'NVPOR:', 'MSGNW:' ], - 'img_thumbnail' => [ '1', 'minijatura', 'mini', 'thumbnail', 'thumb' ], + 'img_thumbnail' => [ '1', 'mini', 'minijatura', 'thumb', 'thumbnail' ], 'img_manualthumb' => [ '1', 'minijatura=$1', 'mini=$1', 'thumbnail=$1', 'thumb=$1' ], 'img_right' => [ '1', 'desno', 'right' ], 'img_left' => [ '1', 'lijevo', 'levo', 'left' ], - 'img_none' => [ '1', 'n', 'bez', 'ništa', 'none' ], - 'img_center' => [ '1', 'centar', 'središte', 'c', 'center', 'centre' ], - 'img_framed' => [ '1', 'okvir', 'ram', 'framed', 'enframed', 'frame' ], - 'img_frameless' => [ '1', 'bez_okvira', 'bezokvira', 'frameless' ], + 'img_none' => [ '1', 'n', 'ništa', 'bez', 'none' ], + 'img_center' => [ '1', 'centar', 'c', 'središte', 'center', 'centre' ], + 'img_framed' => [ '1', 'okvir', 'ram', 'frame', 'framed', 'enframed' ], + 'img_frameless' => [ '1', 'bezokvira', 'bez_okvira', 'frameless' ], 'img_page' => [ '1', 'stranica=$1', 'stranica_$1', 'strana=$1', 'strana_$1', 'page=$1', 'page $1' ], 'img_upright' => [ '1', 'na_gore', 'na_gore=$1', 'na_gore_$1', 'uspravno', 'uspravno=$1', 'uspravno_$1', 'upright', 'upright=$1', 'upright $1' ], 'img_border' => [ '1', 'granica', 'obrub', 'border' ], diff --git a/languages/messages/MessagesSk.php b/languages/messages/MessagesSk.php index d1ac72f55c..299fd136dd 100644 --- a/languages/messages/MessagesSk.php +++ b/languages/messages/MessagesSk.php @@ -220,13 +220,13 @@ $magicWords = [ 'subjectpagenamee' => [ '1', 'NÁZOVČLÁNKUE', 'SUBJECTPAGENAMEE', 'ARTICLEPAGENAMEE' ], 'msg' => [ '0', 'SPRÁVA:', 'MSG:' ], 'subst' => [ '0', 'NAHR:', 'SUBST:' ], - 'img_thumbnail' => [ '1', 'náhľad', 'náhľadobrázka', 'thumbnail', 'thumb' ], + 'img_thumbnail' => [ '1', 'náhľad', 'náhľadobrázka', 'thumb', 'thumbnail' ], 'img_right' => [ '1', 'vpravo', 'right' ], 'img_left' => [ '1', 'vľavo', 'left' ], 'img_none' => [ '1', 'žiadny', 'none' ], 'img_width' => [ '1', '$1bod', '$1px' ], 'img_center' => [ '1', 'stred', 'center', 'centre' ], - 'img_framed' => [ '1', 'rám', 'framed', 'enframed', 'frame' ], + 'img_framed' => [ '1', 'rám', 'frame', 'framed', 'enframed' ], 'img_border' => [ '1', 'okraj', 'border' ], 'sitename' => [ '1', 'NÁZOVLOKALITY', 'SITENAME' ], 'ns' => [ '0', 'MP:', 'NS:' ], diff --git a/languages/messages/MessagesSl.php b/languages/messages/MessagesSl.php index c434309dd1..7599bc2b0a 100644 --- a/languages/messages/MessagesSl.php +++ b/languages/messages/MessagesSl.php @@ -119,14 +119,14 @@ $magicWords = [ 'forcetoc' => [ '0', '__VSILIKAZALOVSEBINE__', '__FORCETOC__' ], 'toc' => [ '0', '__POGLAVJE__', '__TOC__' ], 'noeditsection' => [ '0', '__BREZUREJANJARAZDELKOV__', '__NOEDITSECTION__' ], - 'img_thumbnail' => [ '1', 'sličica', 'thumbnail', 'thumb' ], + 'img_thumbnail' => [ '1', 'sličica', 'thumb', 'thumbnail' ], 'img_manualthumb' => [ '1', 'sličica=$1', 'thumbnail=$1', 'thumb=$1' ], 'img_right' => [ '1', 'desno', 'right' ], 'img_left' => [ '1', 'levo', 'left' ], 'img_none' => [ '1', 'brez', 'none' ], 'img_width' => [ '1', '$1_pik', '$1px' ], 'img_center' => [ '1', 'sredina', 'sredinsko', 'center', 'centre' ], - 'img_framed' => [ '1', 'okvir', 'okvirjeno', 'framed', 'enframed', 'frame' ], + 'img_framed' => [ '1', 'okvir', 'okvirjeno', 'frame', 'framed', 'enframed' ], 'img_frameless' => [ '1', 'brezokvirja', 'frameless' ], 'img_page' => [ '1', 'stran=$1', 'm_stran $1', 'page=$1', 'page $1' ], 'img_upright' => [ '1', 'zgorajdesno', 'zgorajdesno=$1', 'zgorajdesno $1', 'upright', 'upright=$1', 'upright $1' ], diff --git a/languages/messages/MessagesSq.php b/languages/messages/MessagesSq.php index 20e3978116..a0d88d4610 100644 --- a/languages/messages/MessagesSq.php +++ b/languages/messages/MessagesSq.php @@ -166,13 +166,13 @@ $magicWords = [ 'talkpagename' => [ '1', 'EMRIIFAQESSËDISKUTIMIT', 'TALKPAGENAME' ], 'talkpagenamee' => [ '1', 'EMRIIFAQESSËDISKUTIMITE', 'TALKPAGENAMEE' ], 'subst' => [ '0', 'ZËVN', 'SUBST:' ], - 'img_thumbnail' => [ '1', 'parapamje', 'pamje', 'thumbnail', 'thumb' ], + 'img_thumbnail' => [ '1', 'parapamje', 'pamje', 'thumb', 'thumbnail' ], 'img_manualthumb' => [ '1', 'parapamje=$1', 'pamje=$1', 'thumbnail=$1', 'thumb=$1' ], 'img_right' => [ '1', 'djathtas', 'right' ], 'img_left' => [ '1', 'majtas', 'left' ], 'img_none' => [ '1', 's\'ka', 'none' ], 'img_center' => [ '1', 'qendër', 'qendrore', 'center', 'centre' ], - 'img_framed' => [ '1', 'i_kornizuar', 'pa_kornizë', 'kornizë', 'framed', 'enframed', 'frame' ], + 'img_framed' => [ '1', 'i_kornizuar', 'pa_kornizë', 'kornizë', 'frame', 'framed', 'enframed' ], 'img_page' => [ '1', 'faqja=$1', 'faqja $1', 'page=$1', 'page $1' ], 'img_upright' => [ '1', 'lartdjathtas', 'lartdjathtas=$1', 'lartdjathtas $1', 'upright', 'upright=$1', 'upright $1' ], 'img_border' => [ '1', 'kufi', 'border' ], diff --git a/languages/messages/MessagesSv.php b/languages/messages/MessagesSv.php index 0815c71948..8819be629a 100644 --- a/languages/messages/MessagesSv.php +++ b/languages/messages/MessagesSv.php @@ -249,13 +249,13 @@ $magicWords = [ 'msg' => [ '0', 'MED:', 'MSG:' ], 'subst' => [ '0', 'BYT:', 'SUBST:' ], 'msgnw' => [ '0', 'MEDNW:', 'MSGNW:' ], - 'img_thumbnail' => [ '1', 'miniatyr', 'mini', 'thumbnail', 'thumb' ], + 'img_thumbnail' => [ '1', 'miniatyr', 'mini', 'thumb', 'thumbnail' ], 'img_manualthumb' => [ '1', 'miniatyr=$1', 'mini=$1', 'thumbnail=$1', 'thumb=$1' ], 'img_right' => [ '1', 'höger', 'right' ], 'img_left' => [ '1', 'vänster', 'left' ], 'img_none' => [ '1', 'ingen', 'none' ], 'img_center' => [ '1', 'centrerad', 'center', 'centre' ], - 'img_framed' => [ '1', 'inramad', 'ram', 'framed', 'enframed', 'frame' ], + 'img_framed' => [ '1', 'ram', 'inramad', 'frame', 'framed', 'enframed' ], 'img_frameless' => [ '1', 'ramlös', 'frameless' ], 'img_page' => [ '1', 'sida=$1', 'sida $1', 'page=$1', 'page $1' ], 'img_upright' => [ '1', 'stående', 'stående=$1', 'stående $1', 'upright', 'upright=$1', 'upright $1' ], diff --git a/languages/messages/MessagesTr.php b/languages/messages/MessagesTr.php index 747f1e88e1..9e07263abc 100644 --- a/languages/messages/MessagesTr.php +++ b/languages/messages/MessagesTr.php @@ -252,14 +252,14 @@ $magicWords = [ 'subst' => [ '0', 'YK:', 'YERİNEKOY:', 'KOPYALA:', 'AKTAR:', 'YAPIŞTIR:', 'SUBST:' ], 'safesubst' => [ '0', 'GÜVENLİYERİNEKOY:', 'GÜVENLİKOPYALA:', 'GÜVENLİAKTAR:', 'GÜVENLİYAPIŞTIR:', 'SAFESUBST:' ], 'msgnw' => [ '0', 'MSJYN:', 'İLTYN:', 'MSGNW:' ], - 'img_thumbnail' => [ '1', 'küçükresim', 'küçük', 'thumbnail', 'thumb' ], + 'img_thumbnail' => [ '1', 'küçükresim', 'küçük', 'thumb', 'thumbnail' ], 'img_manualthumb' => [ '1', 'küçükresim=$1', 'küçük=$1', 'thumbnail=$1', 'thumb=$1' ], 'img_right' => [ '1', 'sağ', 'right' ], 'img_left' => [ '1', 'sol', 'left' ], 'img_none' => [ '1', 'yok', 'none' ], 'img_width' => [ '1', '$1pik', '$1piksel', '$1px' ], 'img_center' => [ '1', 'orta', 'center', 'centre' ], - 'img_framed' => [ '1', 'çerçeveli', 'çerçeve', 'framed', 'enframed', 'frame' ], + 'img_framed' => [ '1', 'çerçeveli', 'çerçeve', 'frame', 'framed', 'enframed' ], 'img_frameless' => [ '1', 'çerçevesiz', 'frameless' ], 'img_page' => [ '1', 'sayfa=$1', 'sayfa $1', 'page=$1', 'page $1' ], 'img_upright' => [ '1', 'dikey', 'dikey=$1', 'dikey $1', 'upright', 'upright=$1', 'upright $1' ], @@ -267,7 +267,7 @@ $magicWords = [ 'img_baseline' => [ '1', 'tabançizgisi', 'altçizgi', 'baseline' ], 'img_sub' => [ '1', 'alt', 'sub' ], 'img_super' => [ '1', 'üst', 'üs', 'super', 'sup' ], - 'img_top' => [ '1', 'tavan', 'tepe', 'top' ], + 'img_top' => [ '1', 'tepe', 'tavan', 'top' ], 'img_text_top' => [ '1', 'metin-tavan', 'metin-tepe', 'text-top' ], 'img_middle' => [ '1', 'merkez', 'middle' ], 'img_bottom' => [ '1', 'taban', 'bottom' ], diff --git a/languages/messages/MessagesUk.php b/languages/messages/MessagesUk.php index d3bca667a2..369e0bed21 100644 --- a/languages/messages/MessagesUk.php +++ b/languages/messages/MessagesUk.php @@ -274,14 +274,14 @@ $magicWords = [ 'subst' => [ '0', 'ПІДСТ:', 'ПІДСТАНОВКА:', 'ПОДСТАНОВКА:', 'ПОДСТ:', 'SUBST:' ], 'safesubst' => [ '0', 'БЕЗПЕЧНА_ПІДСТАНОВКА:', 'ЗАЩПОДСТ:', 'SAFESUBST:' ], 'msgnw' => [ '0', 'ПОВІД_БЕЗ_ВІКІ:', 'СООБЩ_БЕЗ_ВИКИ:', 'MSGNW:' ], - 'img_thumbnail' => [ '1', 'міні', 'мініатюра', 'мини', 'миниатюра', 'thumbnail', 'thumb' ], + 'img_thumbnail' => [ '1', 'міні', 'мини', 'мініатюра', 'миниатюра', 'thumb', 'thumbnail' ], 'img_manualthumb' => [ '1', 'міні=$1', 'мініатюра=$1', 'мини=$1', 'миниатюра=$1', 'thumbnail=$1', 'thumb=$1' ], 'img_right' => [ '1', 'праворуч', 'справа', 'right' ], 'img_left' => [ '1', 'ліворуч', 'слева', 'left' ], 'img_none' => [ '1', 'без', 'none' ], 'img_width' => [ '1', '$1пкс', '$1px' ], 'img_center' => [ '1', 'центр', 'center', 'centre' ], - 'img_framed' => [ '1', 'обрамити', 'рамка', 'обрамить', 'framed', 'enframed', 'frame' ], + 'img_framed' => [ '1', 'обрамити', 'рамка', 'обрамить', 'frame', 'framed', 'enframed' ], 'img_frameless' => [ '1', 'безрамки', 'frameless' ], 'img_page' => [ '1', 'сторінка=$1', 'сторінка_$1', 'страница=$1', 'страница $1', 'page=$1', 'page $1' ], 'img_upright' => [ '1', 'зверхуправоруч', 'зверхуправоруч=$1', 'зверхуправоруч_$1', 'сверхусправа', 'сверхусправа=$1', 'сверхусправа $1', 'upright', 'upright=$1', 'upright $1' ], diff --git a/languages/messages/MessagesUr.php b/languages/messages/MessagesUr.php index f70080bb02..f9da1ed945 100644 --- a/languages/messages/MessagesUr.php +++ b/languages/messages/MessagesUr.php @@ -152,7 +152,7 @@ $magicWords = [ 'msg' => [ '0', 'پیغام:', 'MSG:' ], 'subst' => [ '0', 'جا:', 'نقل:', 'SUBST:' ], 'safesubst' => [ '0', 'محفوظ_جا:', 'محفوظ_نقل:', 'SAFESUBST:' ], - 'img_thumbnail' => [ '1', 'تصغیر', 'thumbnail', 'thumb' ], + 'img_thumbnail' => [ '1', 'تصغیر', 'thumb', 'thumbnail' ], 'img_right' => [ '1', 'دائیں', 'right' ], 'img_left' => [ '1', 'بائیں', 'left' ], 'img_center' => [ '1', 'درمیان', 'center', 'centre' ], diff --git a/languages/messages/MessagesVi.php b/languages/messages/MessagesVi.php index 593f61a4a5..201a6770c3 100644 --- a/languages/messages/MessagesVi.php +++ b/languages/messages/MessagesVi.php @@ -220,13 +220,13 @@ $magicWords = [ 'subst' => [ '0', 'THẾ:', 'SUBST:' ], 'safesubst' => [ '0', 'THẾ_AN_TOÀN:', 'SAFESUBST:' ], 'msgnw' => [ '0', 'NHẮN_MỚI:', 'NHẮNMỚI:', 'MSGNW:' ], - 'img_thumbnail' => [ '1', 'nhỏ', 'thumbnail', 'thumb' ], + 'img_thumbnail' => [ '1', 'nhỏ', 'thumb', 'thumbnail' ], 'img_manualthumb' => [ '1', 'nhỏ=$1', 'thumbnail=$1', 'thumb=$1' ], 'img_right' => [ '1', 'phải', 'right' ], 'img_left' => [ '1', 'trái', 'left' ], 'img_none' => [ '1', 'không', 'none' ], 'img_center' => [ '1', 'giữa', 'center', 'centre' ], - 'img_framed' => [ '1', 'khung', 'framed', 'enframed', 'frame' ], + 'img_framed' => [ '1', 'khung', 'frame', 'framed', 'enframed' ], 'img_frameless' => [ '1', 'không_khung', 'frameless' ], 'img_lang' => [ '1', 'tiếng=$1', 'ngôn_ngữ=$1', 'lang=$1' ], 'img_page' => [ '1', 'trang=$1', 'trang_$1', 'page=$1', 'page $1' ], diff --git a/languages/messages/MessagesYi.php b/languages/messages/MessagesYi.php index 074bf5480c..edc860ea5b 100644 --- a/languages/messages/MessagesYi.php +++ b/languages/messages/MessagesYi.php @@ -169,7 +169,7 @@ $magicWords = [ 'subpagename' => [ '1', 'אונטערבלאטנאמען', 'שם דף המשנה', 'SUBPAGENAME' ], 'talkpagename' => [ '1', 'רעדנבלאטנאמען', 'שם דף השיחה', 'TALKPAGENAME' ], 'subst' => [ '0', 'ס:', 'SUBST:' ], - 'img_thumbnail' => [ '1', 'קליין', 'ממוזער', 'thumbnail', 'thumb' ], + 'img_thumbnail' => [ '1', 'קליין', 'ממוזער', 'thumb', 'thumbnail' ], 'img_manualthumb' => [ '1', 'קליין=$1', 'ממוזער=$1', 'thumbnail=$1', 'thumb=$1' ], 'img_right' => [ '1', 'רעכטס', 'ימין', 'right' ], 'img_left' => [ '1', 'לינקס', 'שמאל', 'left' ], diff --git a/maintenance/archives/patch-add-cl_collation_ext_index.sql b/maintenance/archives/patch-add-cl_collation_ext_index.sql new file mode 100644 index 0000000000..8137dc6413 --- /dev/null +++ b/maintenance/archives/patch-add-cl_collation_ext_index.sql @@ -0,0 +1,2 @@ +-- @since 1.27 +CREATE INDEX /*i*/cl_collation_ext ON /*_*/categorylinks (cl_collation, cl_to, cl_type, cl_from); diff --git a/maintenance/archives/patch-categorylinks-better-collation.sql b/maintenance/archives/patch-categorylinks-better-collation.sql index c1499c151c..f5ff1f1d1a 100644 --- a/maintenance/archives/patch-categorylinks-better-collation.sql +++ b/maintenance/archives/patch-categorylinks-better-collation.sql @@ -13,7 +13,7 @@ ALTER TABLE /*$wgDBprefix*/categorylinks ADD COLUMN cl_sortkey_prefix varchar(255) binary NOT NULL default '', ADD COLUMN cl_collation varbinary(32) NOT NULL default '', ADD COLUMN cl_type ENUM('page', 'subcat', 'file') NOT NULL default 'page', - ADD INDEX (cl_collation), +-- rm'd in 1.27 ADD INDEX (cl_collation), DROP INDEX cl_sortkey, ADD INDEX cl_sortkey (cl_to, cl_type, cl_sortkey, cl_from); INSERT IGNORE INTO /*$wgDBprefix*/updatelog (ul_key) VALUES ('cl_fields_update'); diff --git a/maintenance/archives/patch-kill-cl_collation_index.sql b/maintenance/archives/patch-kill-cl_collation_index.sql new file mode 100644 index 0000000000..7f75a62329 --- /dev/null +++ b/maintenance/archives/patch-kill-cl_collation_index.sql @@ -0,0 +1,7 @@ +-- +-- Kill cl_collation index. +-- @since 1.27 +-- + +DROP INDEX /*i*/cl_collation ON /*_*/categorylinks; + diff --git a/maintenance/benchmarks/bench_utf8_title_check.php b/maintenance/benchmarks/bench_utf8_title_check.php index 62bb0fa114..c92a720868 100644 --- a/maintenance/benchmarks/bench_utf8_title_check.php +++ b/maintenance/benchmarks/bench_utf8_title_check.php @@ -24,14 +24,12 @@ require_once __DIR__ . '/Benchmarker.php'; /** - * This little benchmark executes the regexp used in Language->checkTitleEncoding() - * and compares its execution time against that of mb_check_encoding, if available. + * This little benchmark executes the regexp formerly used in Language->checkTitleEncoding() + * and compares its execution time against that of mb_check_encoding. * * @ingroup Benchmark */ class BenchUtf8TitleCheck extends Benchmarker { - private $canRun; - private $data; public function __construct() { @@ -61,20 +59,11 @@ class BenchUtf8TitleCheck extends Benchmarker { ]; // @codingStandardsIgnoreEnd - $this->canRun = function_exists( 'mb_check_encoding' ); - - if ( $this->canRun ) { - $this->addDescription( "Benchmark for using a regexp vs. mb_check_encoding " . - "to check for UTF-8 encoding." ); - } else { - $this->addDescription( 'CANNOT RUN benchmark using mb_check_encoding: function not available.' ); - } + $this->addDescription( "Benchmark for using a regexp vs. mb_check_encoding " . + "to check for UTF-8 encoding." ); } public function execute() { - if ( !$this->canRun ) { - return; - } $benchmarks = []; foreach ( $this->data as $val ) { $benchmarks[] = [ diff --git a/maintenance/cleanupCaps.php b/maintenance/cleanupCaps.php index 641250d102..693125994c 100644 --- a/maintenance/cleanupCaps.php +++ b/maintenance/cleanupCaps.php @@ -92,7 +92,7 @@ class CapsCleanup extends TableCleanup { } else { $mp = new MovePage( $current, $target ); $status = $mp->move( $this->user, 'Converting page titles to lowercase', true ); - $ok = $status->isOK() ? 'OK' : $status->getWikiText(); + $ok = $status->isOK() ? 'OK' : $status->getWikiText( false, false, 'en' ); $this->output( "\"$display\" -> \"$targetDisplay\": $ok\n" ); } if ( $ok === true ) { diff --git a/maintenance/cleanupUploadStash.php b/maintenance/cleanupUploadStash.php index 559dbd607d..cd7a8420f9 100644 --- a/maintenance/cleanupUploadStash.php +++ b/maintenance/cleanupUploadStash.php @@ -47,7 +47,7 @@ class UploadStashCleanup extends Maintenance { $repo = RepoGroup::singleton()->getLocalRepo(); $tempRepo = $repo->getTempRepo(); - $dbr = $repo->getSlaveDb(); + $dbr = $repo->getSlaveDB(); // how far back should this look for files to delete? $cutoff = time() - $wgUploadStashMaxAge; diff --git a/maintenance/commandLine.inc b/maintenance/commandLine.inc index e871a4e863..206e04677b 100644 --- a/maintenance/commandLine.inc +++ b/maintenance/commandLine.inc @@ -25,20 +25,27 @@ require_once __DIR__ . '/Maintenance.php'; // @codingStandardsIgnoreStart MediaWiki.NamingConventions.ValidGlobalName.wgPrefix global $optionsWithArgs; +global $optionsWithoutArgs; // @codingStandardsIgnoreEnd if ( !isset( $optionsWithArgs ) ) { $optionsWithArgs = []; } +if ( !isset( $optionsWithoutArgs ) ) { + $optionsWithoutArgs = []; +} class CommandLineInc extends Maintenance { public function __construct() { // @codingStandardsIgnoreStart MediaWiki.NamingConventions.ValidGlobalName.wgPrefix - global $optionsWithArgs; + global $optionsWithArgs, $optionsWithoutArgs; // @codingStandardsIgnoreEnd parent::__construct(); foreach ( $optionsWithArgs as $name ) { $this->addOption( $name, '', false, true ); } + foreach ( $optionsWithoutArgs as $name ) { + $this->addOption( $name, '', false, false ); + } } /** diff --git a/maintenance/createAndPromote.php b/maintenance/createAndPromote.php index 9abc297dc3..848c2f7eda 100644 --- a/maintenance/createAndPromote.php +++ b/maintenance/createAndPromote.php @@ -79,11 +79,16 @@ class CreateAndPromote extends Maintenance { $groups = array_filter( self::$permitRoles, [ $this, 'hasOption' ] ); if ( $this->hasOption( 'custom-groups' ) ) { + $allGroups = array_flip( User::getAllGroups() ); $customGroupsText = $this->getOption( 'custom-groups' ); if ( $customGroupsText !== '' ) { $customGroups = explode( ',', $customGroupsText ); foreach ( $customGroups as $customGroup ) { - $groups[] = trim( $customGroup ); + if ( isset( $allGroups[$customGroup] ) ) { + $groups[] = trim( $customGroup ); + } else { + $this->output( "$customGroup is not a valid group, ignoring!\n" ); + } } } } diff --git a/maintenance/dictionary/mediawiki.dic b/maintenance/dictionary/mediawiki.dic index 6d5472e74f..914336f844 100644 --- a/maintenance/dictionary/mediawiki.dic +++ b/maintenance/dictionary/mediawiki.dic @@ -538,7 +538,6 @@ asctime asdf aspx assert -astriks asymp async at diff --git a/maintenance/edit.php b/maintenance/edit.php index 4ef73799d4..4219ed0517 100644 --- a/maintenance/edit.php +++ b/maintenance/edit.php @@ -97,7 +97,7 @@ class EditCLI extends Maintenance { $exit = 1; } if ( !$status->isGood() ) { - $this->output( $status->getWikiText() . "\n" ); + $this->output( $status->getWikiText( false, false, 'en' ) . "\n" ); } exit( $exit ); } diff --git a/maintenance/exportSites.php b/maintenance/exportSites.php index 157a3234bc..b1e4fa943b 100644 --- a/maintenance/exportSites.php +++ b/maintenance/exportSites.php @@ -42,8 +42,8 @@ class ExportSites extends Maintenance { $exporter = new SiteExporter( $handle ); - $sites = SiteSQLStore::newInstance()->getSites( 'recache' ); - $exporter->exportSites( $sites ); + $siteLookup = \MediaWiki\MediaWikiServices::getInstance()->getSiteLookup(); + $exporter->exportSites( $siteLookup->getSites() ); fclose( $handle ); diff --git a/maintenance/importImages.php b/maintenance/importImages.php index f0c6569ace..c653a5f06d 100644 --- a/maintenance/importImages.php +++ b/maintenance/importImages.php @@ -36,6 +36,12 @@ $optionsWithArgs = [ 'extensions', 'comment', 'comment-file', 'comment-ext', 'summary', 'user', 'license', 'sleep', 'limit', 'from', 'source-wiki-url', 'timestamp', ]; + +$optionsWithoutArgs = [ + 'protect', 'unprotect', 'search-recursively', 'check-userblock', 'overwrite', + 'skip-dupes', 'dry' +]; + require_once __DIR__ . '/commandLine.inc'; require_once __DIR__ . '/importImages.inc'; $processed = $added = $ignored = $skipped = $overwritten = $failed = 0; @@ -251,7 +257,7 @@ if ( $count > 0 ) { $archive = $image->publish( $file, $flags, $publishOptions ); if ( !$archive->isGood() ) { echo "failed. (" . - $archive->getWikiText() . + $archive->getWikiText( false, false, 'en' ) . ")\n"; $failed++; continue; diff --git a/maintenance/importSites.php b/maintenance/importSites.php index daec7b6214..572234422f 100644 --- a/maintenance/importSites.php +++ b/maintenance/importSites.php @@ -30,7 +30,8 @@ class ImportSites extends Maintenance { public function execute() { $file = $this->getArg( 0 ); - $importer = new SiteImporter( SiteSQLStore::newInstance() ); + $siteStore = \MediaWiki\MediaWikiServices::getInstance()->getSiteStore(); + $importer = new SiteImporter( $siteStore ); $importer->setExceptionCallback( [ $this, 'reportException' ] ); $importer->importFromFile( $file ); diff --git a/maintenance/language/checkDupeMessages.php b/maintenance/language/checkDupeMessages.php index 5d482442a9..baa9c713a8 100644 --- a/maintenance/language/checkDupeMessages.php +++ b/maintenance/language/checkDupeMessages.php @@ -21,6 +21,7 @@ * @ingroup MaintenanceLanguage */ +$optionsWithArgs = [ 'lang', 'clang', 'mode' ]; require_once __DIR__ . '/../commandLine.inc'; $messagesDir = __DIR__ . '/../../languages/messages/'; $runTest = false; diff --git a/maintenance/language/checkLanguage.php b/maintenance/language/checkLanguage.php index bd9f9af8c5..a8cbac1c22 100644 --- a/maintenance/language/checkLanguage.php +++ b/maintenance/language/checkLanguage.php @@ -21,6 +21,12 @@ * @ingroup MaintenanceLanguage */ +$optionsWithArgs = [ + 'lang', 'level', 'blacklist', 'whitelist', 'wikilang', 'output', 'prefix' +]; +$optionsWithoutArgs = [ + 'help', 'links', 'noexif', 'easy', 'duplicate', 'all' +]; require_once __DIR__ . '/../commandLine.inc'; require_once 'checkLanguage.inc'; require_once 'languages.inc'; diff --git a/maintenance/language/digit2html.php b/maintenance/language/digit2html.php index eddfa261ae..46616db56b 100644 --- a/maintenance/language/digit2html.php +++ b/maintenance/language/digit2html.php @@ -32,12 +32,12 @@ class Digit2Html extends Maintenance { # A list of unicode numerals is available at: # http://www.fileformat.info/info/unicode/category/Nd/list.htm - private $mLangs = array( + private $mLangs = [ 'Ar', 'As', 'Bh', 'Bo', 'Dz', 'Fa', 'Gu', 'Hi', 'Km', 'Kn', 'Ks', 'Lo', 'Ml', 'Mr', 'Ne', 'New', 'Or', 'Pa', 'Pi', 'Sa' - ); + ]; public function __construct() { parent::__construct(); diff --git a/maintenance/language/generateUtf8Case.php b/maintenance/language/generateUtf8Case.php deleted file mode 100644 index 961424d46d..0000000000 --- a/maintenance/language/generateUtf8Case.php +++ /dev/null @@ -1,129 +0,0 @@ - - * https://www.mediawiki.org/ - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * http://www.gnu.org/copyleft/gpl.html - * - * @file - * @ingroup MaintenanceLanguage - */ - -require_once __DIR__ . '/../Maintenance.php'; - -/** - * Generates Utf8Case.ser from the Unicode Character Database and - * supplementary files. - * - * @ingroup MaintenanceLanguage - */ -class GenerateUtf8Case extends Maintenance { - - public function __construct() { - parent::__construct(); - $this->addDescription( 'Generate Utf8Case.ser from the Unicode Character Database ' . - 'and supplementary files' ); - $this->addOption( 'unicode-data-file', 'The local location of the data file ' . - 'from http://unicode.org/Public/UNIDATA/UnicodeData.txt', false, true ); - } - - public function getDbType() { - return Maintenance::DB_NONE; - } - - public function execute() { - if ( !$this->hasOption( 'unicode-data-file' ) ) { - $dataFile = 'UnicodeData.txt'; - if ( !file_exists( $dataFile ) ) { - $this->error( "Unable to find UnicodeData.txt. Please specify " . - "its location with --unicode-data-file=" ); - exit( 1 ); - } - } else { - $dataFile = $this->getOption( 'unicode-data-file' ); - if ( !file_exists( $dataFile ) ) { - $this->error( 'Unable to find the specified data file.' ); - exit( 1 ); - } - } - - $file = fopen( $dataFile, 'r' ); - if ( !$file ) { - $this->error( 'Unable to open the data file.' ); - exit( 1 ); - } - - // For the file format, see http://www.unicode.org/reports/tr44/ - $fieldNames = [ - 'Code', - 'Name', - 'General_Category', - 'Canonical_Combining_Class', - 'Bidi_Class', - 'Decomposition_Type_Mapping', - 'Numeric_Type_Value_6', - 'Numeric_Type_Value_7', - 'Numeric_Type_Value_8', - 'Bidi_Mirrored', - 'Unicode_1_Name', - 'ISO_Comment', - 'Simple_Uppercase_Mapping', - 'Simple_Lowercase_Mapping', - 'Simple_Titlecase_Mapping' - ]; - - $upper = []; - $lower = []; - - $lineNum = 0; - while ( false !== ( $line = fgets( $file ) ) ) { - ++$lineNum; - - # Strip comments - $line = trim( substr( $line, 0, strcspn( $line, '#' ) ) ); - if ( $line === '' ) { - continue; - } - - # Split fields - $numberedData = explode( ';', $line ); - $data = []; - foreach ( $fieldNames as $number => $name ) { - $data[$name] = $numberedData[$number]; - } - - $source = UtfNormal\Utils::hexSequenceToUtf8( $data['Code'] ); - if ( $data['Simple_Uppercase_Mapping'] ) { - $upper[$source] = UtfNormal\Utils::hexSequenceToUtf8( $data['Simple_Uppercase_Mapping'] ); - } - if ( $data['Simple_Lowercase_Mapping'] ) { - $lower[$source] = UtfNormal\Utils::hexSequenceToUtf8( $data['Simple_Lowercase_Mapping'] ); - } - } - - global $IP; - file_put_contents( "$IP/serialized/Utf8Case.ser", serialize( [ - 'wikiUpperChars' => $upper, - 'wikiLowerChars' => $lower, - ] ) ); - } -} - -$maintClass = 'GenerateUtf8Case'; -require_once RUN_MAINTENANCE_IF_MAIN; diff --git a/maintenance/language/transstat.php b/maintenance/language/transstat.php index ca94473f8f..720295234c 100644 --- a/maintenance/language/transstat.php +++ b/maintenance/language/transstat.php @@ -27,6 +27,7 @@ * https://www.mediawiki.org/wiki/Localisation_statistics */ $optionsWithArgs = [ 'output' ]; +$optionsWithoutArgs = [ 'help' ]; require_once __DIR__ . '/../commandLine.inc'; require_once 'languages.inc'; diff --git a/maintenance/language/zhtable/Makefile.py b/maintenance/language/zhtable/Makefile.py index 15a1cb9d0f..abe08e4bf3 100755 --- a/maintenance/language/zhtable/Makefile.py +++ b/maintenance/language/zhtable/Makefile.py @@ -248,7 +248,8 @@ def translate(text, conv_table): def manualWordsTable(path, conv_table, reconv_table): fp = open(path, 'r', encoding='U8') - reconv_table = {} + reconv_table = reconv_table.copy() + out_table = {} wordlist = [line.split('#')[0].strip() for line in fp] wordlist = list(set(wordlist)) wordlist.sort(key=lambda w: (len(w), w), reverse=True) @@ -257,9 +258,9 @@ def manualWordsTable(path, conv_table, reconv_table): new_word = translate(word, conv_table) rcv_word = translate(word, reconv_table) if word != rcv_word: - reconv_table[word] = word - reconv_table[new_word] = word - return reconv_table + reconv_table[word] = out_table[word] = word + reconv_table[new_word] = out_table[new_word] = word + return out_table def defaultWordsTable(src_wordlist, src_tomany, char_conv_table, diff --git a/maintenance/mcc.php b/maintenance/mcc.php index 0fff823a0f..784ba0ea35 100644 --- a/maintenance/mcc.php +++ b/maintenance/mcc.php @@ -22,11 +22,12 @@ * @ingroup Maintenance */ -/** */ +$optionsWithArgs = [ 'cache' ]; +$optionsWithoutArgs = [ + 'debug', 'help' +]; require_once __DIR__ . '/commandLine.inc'; -$options = getopt( '', [ 'debug', 'help', 'cache:' ] ); - $debug = isset( $options['debug'] ); $help = isset( $options['help'] ); $cache = isset( $options['cache'] ) ? $options['cache'] : null; diff --git a/maintenance/mctest.php b/maintenance/mctest.php index c4dfd8f5e6..60f94a5fa6 100644 --- a/maintenance/mctest.php +++ b/maintenance/mctest.php @@ -70,7 +70,7 @@ class McTest extends Maintenance { $server # output channel ); - $mcc = new MemCachedClientforWiki( [ + $mcc = new MemcachedClient( [ 'persistant' => true, 'timeout' => $wgMemCachedTimeout ] ); diff --git a/maintenance/mergeMessageFileList.php b/maintenance/mergeMessageFileList.php index 46d5474478..a650aa0b0e 100644 --- a/maintenance/mergeMessageFileList.php +++ b/maintenance/mergeMessageFileList.php @@ -81,7 +81,12 @@ class MergeMessageFileList extends Maintenance { # Now find out files in a directory if ( $this->hasOption( 'extensions-dir' ) ) { $extdir = $this->getOption( 'extensions-dir' ); - $entries = scandir( $extdir ); + # Allow multiple directories to be passed with ":" as delimiter + $extdirs = explode( ':', $extdir ); + $entries = []; + foreach ( $extdirs as $extdir ) { + $entries = array_merge( $entries, scandir( $extdir ) ); + } foreach ( $entries as $extname ) { if ( $extname == '.' || $extname == '..' || !is_dir( "$extdir/$extname" ) ) { continue; diff --git a/maintenance/moveBatch.php b/maintenance/moveBatch.php index 3a1a72c81d..3c2968988a 100644 --- a/maintenance/moveBatch.php +++ b/maintenance/moveBatch.php @@ -110,7 +110,7 @@ class MoveBatch extends Maintenance { $mp = new MovePage( $source, $dest ); $status = $mp->move( $wgUser, $reason, !$noredirects ); if ( !$status->isOK() ) { - $this->output( "\nFAILED: " . $status->getWikiText() ); + $this->output( "\nFAILED: " . $status->getWikiText( false, false, 'en' ) ); } $this->commitTransaction( $dbw, __METHOD__ ); $this->output( "\n" ); diff --git a/maintenance/namespaceDupes.php b/maintenance/namespaceDupes.php index 6d2a553f7e..55f361c941 100644 --- a/maintenance/namespaceDupes.php +++ b/maintenance/namespaceDupes.php @@ -583,7 +583,7 @@ class NamespaceConflictChecker extends Maintenance { $wikiPage = new WikiPage( $sourceTitle ); $wikiPage->loadPageData( 'fromdbmaster' ); - $destId = $newTitle->getArticleId(); + $destId = $newTitle->getArticleID(); $this->beginTransaction( $this->db, __METHOD__ ); $this->db->update( 'revision', // SET diff --git a/maintenance/parse.php b/maintenance/parse.php index effed56dcd..17a8d2ebf4 100644 --- a/maintenance/parse.php +++ b/maintenance/parse.php @@ -73,7 +73,7 @@ class CLIParser extends Maintenance { public function execute() { $this->initParser(); - print $this->render( $this->WikiText() ); + print $this->render( $this->Wikitext() ); } /** diff --git a/maintenance/preprocessorFuzzTest.php b/maintenance/preprocessorFuzzTest.php index 4f478ac972..aa5d69d95d 100644 --- a/maintenance/preprocessorFuzzTest.php +++ b/maintenance/preprocessorFuzzTest.php @@ -21,6 +21,7 @@ * @ingroup Maintenance */ +$optionsWithoutArgs = [ 'verbose' ]; require_once __DIR__ . '/commandLine.inc'; $wgHooks['BeforeParserFetchTemplateAndtitle'][] = 'PPFuzzTester::templateHook'; diff --git a/maintenance/rebuildLocalisationCache.php b/maintenance/rebuildLocalisationCache.php index 68b6ea311d..b9c797d107 100644 --- a/maintenance/rebuildLocalisationCache.php +++ b/maintenance/rebuildLocalisationCache.php @@ -114,6 +114,7 @@ class RebuildLocalisationCache extends Maintenance { // Child, reseed because there is no bug in PHP: // http://bugs.php.net/bug.php?id=42465 mt_srand( getmypid() ); + $this->doRebuild( $codes, $lc, $force ); exit( 0 ); } elseif ( $pid === -1 ) { diff --git a/maintenance/rebuildSitesCache.php b/maintenance/rebuildSitesCache.php index 044bafd431..230e86d48a 100644 --- a/maintenance/rebuildSitesCache.php +++ b/maintenance/rebuildSitesCache.php @@ -38,7 +38,7 @@ class RebuildSitesCache extends Maintenance { public function execute() { $sitesCacheFileBuilder = new SitesCacheFileBuilder( - new DBSiteStore(), + \MediaWiki\MediaWikiServices::getInstance()->getSiteLookup(), $this->getCacheFile() ); diff --git a/maintenance/refreshImageMetadata.php b/maintenance/refreshImageMetadata.php index 88767de2d1..bdbb347899 100644 --- a/maintenance/refreshImageMetadata.php +++ b/maintenance/refreshImageMetadata.php @@ -68,9 +68,16 @@ class RefreshImageMetadata extends Maintenance { $this->addOption( 'start', 'Name of file to start with', false, true ); $this->addOption( 'end', 'Name of file to end with', false, true ); + $this->addOption( + 'mediatype', + 'Only refresh files with this media type, e.g. BITMAP, UNKNOWN etc.', + false, + true + ); $this->addOption( 'mime', - '(Inefficient!) Only refresh files with this MIME type. Can accept wild-card image/*', + "Only refresh files with this MIME type. Can accept wild-card 'image/*'. " + . "Potentially inefficient unless 'mediatype' is also specified", false, true ); @@ -197,6 +204,7 @@ class RefreshImageMetadata extends Maintenance { $end = $this->getOption( 'end', false ); $mime = $this->getOption( 'mime', false ); + $mediatype = $this->getOption( 'mediatype', false ); $like = $this->getOption( 'metadata-contains', false ); if ( $end !== false ) { @@ -209,6 +217,9 @@ class RefreshImageMetadata extends Maintenance { $conds['img_minor_mime'] = $minor; } } + if ( $mediatype !== false ) { + $conds['img_media_type'] = $mediatype; + } if ( $like ) { $conds[] = 'img_metadata ' . $dbw->buildLike( $dbw->anyString(), $like, $dbw->anyString() ); } diff --git a/maintenance/resetUserEmail.php b/maintenance/resetUserEmail.php index 816e8a430b..8d0873f1b5 100644 --- a/maintenance/resetUserEmail.php +++ b/maintenance/resetUserEmail.php @@ -34,6 +34,9 @@ class ResetUserEmail extends Maintenance { $this->addDescription( "Resets a user's email" ); $this->addArg( 'user', 'Username or user ID, if starts with #', true ); $this->addArg( 'email', 'Email to assign' ); + + $this->addOption( 'no-reset-password', 'Don\'t reset the user\'s password', false, false ); + parent::__construct(); } @@ -57,8 +60,11 @@ class ResetUserEmail extends Maintenance { $user->setEmail( $email ); $user->setEmailAuthenticationTimestamp( wfTimestampNow() ); $user->saveSettings(); - // Kick whomever is currently controlling the account off - $user->setPassword( PasswordFactory::generateRandomPasswordString( 128 ) ); + + if ( !$this->hasOption( 'no-reset-password' ) ) { + // Kick whomever is currently controlling the account off + $user->setPassword( PasswordFactory::generateRandomPasswordString( 128 ) ); + } } } diff --git a/maintenance/sqlite.php b/maintenance/sqlite.php index 2d4e82abd6..454c506365 100644 --- a/maintenance/sqlite.php +++ b/maintenance/sqlite.php @@ -128,7 +128,7 @@ class SqliteMaintenance extends Maintenance { } private function checkSyntax() { - if ( !Sqlite::IsPresent() ) { + if ( !Sqlite::isPresent() ) { $this->error( "Error: SQLite support not found\n" ); } $files = [ $this->getOption( 'check-syntax' ) ]; diff --git a/maintenance/storage/checkStorage.php b/maintenance/storage/checkStorage.php index 9da39099a8..d69e5b9413 100644 --- a/maintenance/storage/checkStorage.php +++ b/maintenance/storage/checkStorage.php @@ -22,6 +22,7 @@ */ if ( !defined( 'MEDIAWIKI' ) ) { + $optionsWithoutArgs = [ 'fix' ]; require_once __DIR__ . '/../commandLine.inc'; $cs = new CheckStorage; diff --git a/maintenance/storage/fixBug20757.php b/maintenance/storage/fixBug20757.php index 8ea5d58fc5..0ea52cab0f 100644 --- a/maintenance/storage/fixBug20757.php +++ b/maintenance/storage/fixBug20757.php @@ -319,7 +319,7 @@ class FixBug20757 extends Maintenance { if ( $path == "" ) { return false; } - $text = ExternalStore::fetchFromUrl( $url ); + $text = ExternalStore::fetchFromURL( $url ); } if ( !in_array( 'object', $flags ) ) { return false; diff --git a/maintenance/storage/moveToExternal.php b/maintenance/storage/moveToExternal.php index 776b72fe41..80dc7f9620 100644 --- a/maintenance/storage/moveToExternal.php +++ b/maintenance/storage/moveToExternal.php @@ -24,6 +24,7 @@ define( 'REPORTING_INTERVAL', 1 ); if ( !defined( 'MEDIAWIKI' ) ) { + $optionsWithArgs = [ 'e', 's' ]; require_once __DIR__ . '/../commandLine.inc'; require_once 'resolveStubs.php'; diff --git a/maintenance/tables.sql b/maintenance/tables.sql index 7942687579..89aeb9c91d 100644 --- a/maintenance/tables.sql +++ b/maintenance/tables.sql @@ -619,8 +619,8 @@ CREATE INDEX /*i*/cl_sortkey ON /*_*/categorylinks (cl_to,cl_type,cl_sortkey,cl_ -- Used by the API (and some extensions) CREATE INDEX /*i*/cl_timestamp ON /*_*/categorylinks (cl_to,cl_timestamp); --- FIXME: Not used, delete this -CREATE INDEX /*i*/cl_collation ON /*_*/categorylinks (cl_collation); +-- Used when updating collation (e.g. updateCollation.php) +CREATE INDEX /*i*/cl_collation_ext ON /*_*/categorylinks (cl_collation, cl_to, cl_type, cl_from); -- -- Track all existing categories. Something is a category if 1) it has an en- diff --git a/maintenance/update.php b/maintenance/update.php index ed8dfa9dfc..775fa7bed4 100755 --- a/maintenance/update.php +++ b/maintenance/update.php @@ -83,6 +83,13 @@ class UpdateMediaWiki extends Maintenance { "ABORTING (see https://bugs.php.net/bug.php?id=45996).\n", true ); } + + if ( !function_exists( 'mb_strlen' ) ) { + $this->error( + "MediaWiki now requires the mbstring PHP extension, your system doesn't have it.\n" + . "ABORTING.\n", + true ); + } } function execute() { @@ -127,7 +134,7 @@ class UpdateMediaWiki extends Maintenance { $this->compatChecks(); } else { $this->output( "Skipping compatibility checks, proceed at your own risk (Ctrl+C to abort)\n" ); - wfCountdown( 5 ); + wfCountDown( 5 ); } // Check external dependencies are up to date @@ -168,7 +175,7 @@ class UpdateMediaWiki extends Maintenance { $updates[] = 'stats'; } - $updater = DatabaseUpdater::newForDb( $db, $shared, $this ); + $updater = DatabaseUpdater::newForDB( $db, $shared, $this ); $updater->doUpdates( $updates ); foreach ( $updater->getPostDatabaseUpdateMaintenance() as $maint ) { diff --git a/maintenance/updateCollation.php b/maintenance/updateCollation.php index af666b06cf..186feb222f 100644 --- a/maintenance/updateCollation.php +++ b/maintenance/updateCollation.php @@ -33,7 +33,7 @@ require_once __DIR__ . '/Maintenance.php'; * @ingroup Maintenance */ class UpdateCollation extends Maintenance { - const BATCH_SIZE = 10000; // Number of rows to process in one batch + const BATCH_SIZE = 100; // Number of rows to process in one batch const SYNC_INTERVAL = 20; // Wait for slaves after this many batches public $sizeHistogram = []; @@ -85,10 +85,18 @@ TEXT // but this will raise an exception, breaking all category pages $collation->getFirstLetter( 'MediaWiki' ); + // Locally at least, (my local is a rather old version of mysql) + // mysql seems to filesort if there is both an equality + // (but not for an inequality) condition on cl_collation in the + // WHERE and it is also the first item in the ORDER BY. + if ( $this->hasOption( 'previous-collation' ) ) { + $orderBy = 'cl_to, cl_type, cl_from'; + } else { + $orderBy = 'cl_collation, cl_to, cl_type, cl_from'; + } $options = [ 'LIMIT' => self::BATCH_SIZE, - 'ORDER BY' => 'cl_from, cl_to', - 'STRAIGHT_JOIN', + 'ORDER BY' => $orderBy, ]; if ( $force || $dryRun ) { @@ -124,16 +132,24 @@ TEXT } $this->output( "Fixing collation for $count rows.\n" ); } - $count = 0; $batchCount = 0; $batchConds = []; do { $this->output( "Selecting next " . self::BATCH_SIZE . " rows..." ); + + // cl_type must be selected as a number for proper paging because + // enums suck. + if ( $dbw->getType() === 'mysql' ) { + $clType = 'cl_type+0 AS "cl_type_numeric"'; + } else { + $clType = 'cl_type'; + } $res = $dbw->select( [ 'categorylinks', 'page' ], [ 'cl_from', 'cl_to', 'cl_sortkey_prefix', 'cl_collation', - 'cl_sortkey', 'page_namespace', 'page_title' + 'cl_sortkey', $clType, + 'page_namespace', 'page_title' ], array_merge( $collationConds, $batchConds, [ 'cl_from = page_id' ] ), __METHOD__, @@ -217,18 +233,28 @@ TEXT /** * Return an SQL expression selecting rows which sort above the given row, - * assuming an ordering of cl_from, cl_to + * assuming an ordering of cl_collation, cl_to, cl_type, cl_from * @param stdClass $row * @param DatabaseBase $dbw * @return string */ function getBatchCondition( $row, $dbw ) { - $fields = [ 'cl_from', 'cl_to' ]; + if ( $this->hasOption( 'previous-collation' ) ) { + $fields = [ 'cl_to', 'cl_type', 'cl_from' ]; + } else { + $fields = [ 'cl_collation', 'cl_to', 'cl_type', 'cl_from' ]; + } $first = true; $cond = false; $prefix = false; foreach ( $fields as $field ) { - $encValue = $dbw->addQuotes( $row->$field ); + if ( $dbw->getType() === 'mysql' && $field === 'cl_type' ) { + // Range conditions with enums are weird in mysql + // This must be a numeric literal, or it won't work. + $encValue = intval( $row->cl_type_numeric ); + } else { + $encValue = $dbw->addQuotes( $row->$field ); + } $inequality = "$field > $encValue"; $equality = "$field = $encValue"; if ( $first ) { diff --git a/maintenance/updateSearchIndex.php b/maintenance/updateSearchIndex.php index 8a895f2709..cdb7d9f701 100644 --- a/maintenance/updateSearchIndex.php +++ b/maintenance/updateSearchIndex.php @@ -61,7 +61,7 @@ class UpdateSearchIndex extends Maintenance { } public function execute() { - $posFile = $this->getOption( 'p', 'searchUpdate.' . wfWikiId() . '.pos' ); + $posFile = $this->getOption( 'p', 'searchUpdate.' . wfWikiID() . '.pos' ); $end = $this->getOption( 'e', wfTimestampNow() ); if ( $this->hasOption( 's' ) ) { $start = $this->getOption( 's' ); diff --git a/package.json b/package.json index 21a050bb3f..394f36ef18 100644 --- a/package.json +++ b/package.json @@ -6,16 +6,15 @@ "postdoc": "grunt copy:jsduck" }, "devDependencies": { - "grunt": "0.4.5", - "grunt-cli": "0.1.13", - "grunt-banana-checker": "0.4.0", - "grunt-contrib-copy": "0.8.2", + "grunt": "1.0.1", + "grunt-banana-checker": "0.5.0", + "grunt-contrib-copy": "1.0.0", "grunt-contrib-jshint": "1.0.0", - "grunt-contrib-watch": "0.6.1", + "grunt-contrib-watch": "1.0.0", "grunt-jscs": "2.8.0", "grunt-jsonlint": "1.0.7", - "grunt-karma": "0.12.1", - "karma": "0.13.19", + "grunt-karma": "0.12.2", + "karma": "0.13.22", "karma-chrome-launcher": "0.2.2", "karma-firefox-launcher": "0.1.7", "karma-qunit": "0.1.9", diff --git a/resources/Resources.php b/resources/Resources.php index bdf95a7d85..cb7adbe4d9 100644 --- a/resources/Resources.php +++ b/resources/Resources.php @@ -436,6 +436,8 @@ return [ 'ca' => 'resources/lib/jquery.ui/i18n/jquery.ui.datepicker-ca.js', 'cs' => 'resources/lib/jquery.ui/i18n/jquery.ui.datepicker-cs.js', 'da' => 'resources/lib/jquery.ui/i18n/jquery.ui.datepicker-da.js', + 'de-at' => 'resources/lib/jquery.ui/i18n/jquery.ui.datepicker-de-AT.js', + 'de-ch' => 'resources/lib/jquery.ui/i18n/jquery.ui.datepicker-de-CH.js', 'de' => 'resources/lib/jquery.ui/i18n/jquery.ui.datepicker-de.js', 'el' => 'resources/lib/jquery.ui/i18n/jquery.ui.datepicker-el.js', 'en-au' => 'resources/lib/jquery.ui/i18n/jquery.ui.datepicker-en-AU.js', @@ -482,8 +484,8 @@ return [ 'sk' => 'resources/lib/jquery.ui/i18n/jquery.ui.datepicker-sk.js', 'sl' => 'resources/lib/jquery.ui/i18n/jquery.ui.datepicker-sl.js', 'sq' => 'resources/lib/jquery.ui/i18n/jquery.ui.datepicker-sq.js', - 'sr-sr' => 'resources/lib/jquery.ui/i18n/jquery.ui.datepicker-sr-SR.js', - 'sr' => 'resources/lib/jquery.ui/i18n/jquery.ui.datepicker-sr.js', + 'sr-ec' => 'resources/lib/jquery.ui/i18n/jquery.ui.datepicker-sr.js', + 'sr-el' => 'resources/lib/jquery.ui/i18n/jquery.ui.datepicker-sr-SR.js', 'sv' => 'resources/lib/jquery.ui/i18n/jquery.ui.datepicker-sv.js', 'ta' => 'resources/lib/jquery.ui/i18n/jquery.ui.datepicker-ta.js', 'th' => 'resources/lib/jquery.ui/i18n/jquery.ui.datepicker-th.js', @@ -732,6 +734,7 @@ return [ 'moment' => [ 'scripts' => [ 'resources/lib/moment/moment.js', + 'resources/src/moment-global.js', 'resources/src/moment-local-dmy.js', ], 'languageScripts' => [ @@ -797,8 +800,8 @@ return [ 'sk' => 'resources/lib/moment/locale/sk.js', 'sl' => 'resources/lib/moment/locale/sl.js', 'sq' => 'resources/lib/moment/locale/sq.js', - 'sr' => 'resources/lib/moment/locale/sr.js', 'sr-ec' => 'resources/lib/moment/locale/sr-cyrl.js', + 'sr-el' => 'resources/lib/moment/locale/sr.js', 'sv' => 'resources/lib/moment/locale/sv.js', 'ta' => 'resources/lib/moment/locale/ta.js', 'th' => 'resources/lib/moment/locale/th.js', @@ -811,6 +814,8 @@ return [ 'vi' => 'resources/lib/moment/locale/vi.js', 'zh-cn' => 'resources/lib/moment/locale/zh-cn.js', 'zh-tw' => 'resources/lib/moment/locale/zh-tw.js', + 'zh-hans' => 'resources/lib/moment/locale/zh-cn.js', + 'zh-hant' => 'resources/lib/moment/locale/zh-tw.js', ], 'targets' => [ 'desktop', 'mobile' ], ], @@ -1196,6 +1201,7 @@ return [ 'mediawiki.user', 'mediawiki.Upload', 'mediawiki.jqueryMsg', + 'mediawiki.widgets.StashedFileWidget' ], 'messages' => [ 'upload-form-label-infoform-title', @@ -1251,11 +1257,13 @@ return [ 'api-error-unknown-error', 'api-error-uploaddisabled', 'api-error-verification-error', + 'api-error-was-deleted', 'fileexists', 'filepageexists', 'filename-bad-prefix', 'filename-thumb-name', 'badfilename', + 'protectedpagetext', 'api-error-blacklisted', // HACK ], ], @@ -1332,7 +1340,6 @@ return [ 'mediawiki.RegExp', 'mediawiki.notify', ], - 'position' => 'top', // For $wgPreloadJavaScriptMwUtil 'targets' => [ 'desktop', 'mobile' ], ], 'mediawiki.viewport' => [ @@ -1677,7 +1684,6 @@ return [ 'mediawiki.page.image.pagination' => [ 'scripts' => 'resources/src/mediawiki/page/image-pagination.js', 'dependencies' => [ - 'mediawiki.Uri', 'mediawiki.util', 'jquery.spinner', ], @@ -1848,6 +1854,7 @@ return [ 'position' => 'top', 'scripts' => 'resources/src/mediawiki.special/mediawiki.special.search.js', 'styles' => 'resources/src/mediawiki.special/mediawiki.special.search.css', + 'dependencies' => 'mediawiki.widgets.SearchInputWidget', 'messages' => [ 'powersearch-togglelabel', 'powersearch-toggleall', @@ -2237,7 +2244,19 @@ return [ 'position' => 'top', 'targets' => [ 'desktop', 'mobile' ], ], - + 'mediawiki.widgets.StashedFileWidget' => [ + 'scripts' => [ + 'resources/src/mediawiki.widgets/mw.widgets.StashedFileWidget.js', + ], + 'skinStyles' => [ + 'default' => [ + 'resources/src/mediawiki.widgets/mw.widgets.StashedFileWidget.less', + ], + ], + 'dependencies' => [ + 'oojs-ui-core', + ], + ], /* es5-shim */ 'es5-shim' => [ 'scripts' => [ @@ -2260,6 +2279,7 @@ return [ 'oojs' => [ 'scripts' => [ 'resources/lib/oojs/oojs.jquery.js', + 'resources/src/oojs-global.js', ], 'targets' => [ 'desktop', 'mobile' ], 'dependencies' => [ diff --git a/resources/lib/jquery.ui/i18n/jquery.ui.datepicker-de-AT.js b/resources/lib/jquery.ui/i18n/jquery.ui.datepicker-de-AT.js new file mode 100644 index 0000000000..456c3a0552 --- /dev/null +++ b/resources/lib/jquery.ui/i18n/jquery.ui.datepicker-de-AT.js @@ -0,0 +1,22 @@ +/* Austrian German initialisation for the jQuery UI date picker plugin. */ +jQuery(function($){ + $.datepicker.regional['de-AT'] = { + closeText: 'schließen', + prevText: '<zurück', + nextText: 'Vor>', + currentText: 'heute', + monthNames: ['Jänner','Februar','März','April','Mai','Juni', + 'Juli','August','September','Oktober','November','Dezember'], + monthNamesShort: ['Jän','Feb','Mär','Apr','Mai','Jun', + 'Jul','Aug','Sep','Okt','Nov','Dez'], + dayNames: ['Sonntag','Montag','Dienstag','Mittwoch','Donnerstag','Freitag','Samstag'], + dayNamesShort: ['So','Mo','Di','Mi','Do','Fr','Sa'], + dayNamesMin: ['So','Mo','Di','Mi','Do','Fr','Sa'], + weekHeader: 'KW', + dateFormat: 'dd.mm.yy', + firstDay: 1, + isRTL: false, + showMonthAfterYear: false, + yearSuffix: ''}; + $.datepicker.setDefaults($.datepicker.regional['de-AT']); +}); diff --git a/resources/lib/jquery.ui/i18n/jquery.ui.datepicker-de-CH.js b/resources/lib/jquery.ui/i18n/jquery.ui.datepicker-de-CH.js new file mode 100644 index 0000000000..60cbc29f37 --- /dev/null +++ b/resources/lib/jquery.ui/i18n/jquery.ui.datepicker-de-CH.js @@ -0,0 +1,22 @@ +/* Swiss Standard German initialisation for the jQuery UI date picker plugin. */ +jQuery(function($){ + $.datepicker.regional['de-CH'] = { + closeText: 'schliessen', + prevText: '<zurück', + nextText: 'Vor>', + currentText: 'heute', + monthNames: ['Januar','Februar','März','April','Mai','Juni', + 'Juli','August','September','Oktober','November','Dezember'], + monthNamesShort: ['Jan','Feb','Mär','Apr','Mai','Jun', + 'Jul','Aug','Sep','Okt','Nov','Dez'], + dayNames: ['Sonntag','Montag','Dienstag','Mittwoch','Donnerstag','Freitag','Samstag'], + dayNamesShort: ['So','Mo','Di','Mi','Do','Fr','Sa'], + dayNamesMin: ['So','Mo','Di','Mi','Do','Fr','Sa'], + weekHeader: 'KW', + dateFormat: 'dd.mm.yy', + firstDay: 1, + isRTL: false, + showMonthAfterYear: false, + yearSuffix: ''}; + $.datepicker.setDefaults($.datepicker.regional['de-CH']); +}); diff --git a/resources/lib/oojs-ui/i18n/azb.json b/resources/lib/oojs-ui/i18n/azb.json new file mode 100644 index 0000000000..313122ce89 --- /dev/null +++ b/resources/lib/oojs-ui/i18n/azb.json @@ -0,0 +1,11 @@ +{ + "@metadata": { + "authors": [ + "Sadiqr" + ] + }, + "ooui-dialog-message-reject": "وازگئچ", + "ooui-dialog-process-continue": "داوام ائت", + "ooui-selectfile-button-select": "بیر فایل سئچ", + "ooui-selectfile-placeholder": "هئچ فایل سئچیلمه‌ییب" +} diff --git a/resources/lib/oojs-ui/i18n/ba.json b/resources/lib/oojs-ui/i18n/ba.json index ff915b06e5..d8c99aafdf 100644 --- a/resources/lib/oojs-ui/i18n/ba.json +++ b/resources/lib/oojs-ui/i18n/ba.json @@ -6,9 +6,24 @@ "Assele", "Haqmar", "Sagan", - "Рустам Нурыев" + "Рустам Нурыев", + "Азат Хәлилов" ] }, - "ooui-outline-control-move-down": "Аҫҡа күсерергә", - "ooui-outline-control-move-up": "Өҫкә күсерергә" + "ooui-outline-control-move-down": "Элементты аҫҡа күсерергә", + "ooui-outline-control-move-up": "Элементты өҫкә күсерергә", + "ooui-outline-control-remove": "Биттәрҙе юйырға", + "ooui-toolbar-more": "Тағы", + "ooui-toolgroup-expand": "Күберәк", + "ooui-toolgroup-collapse": "Аҙыраҡ", + "ooui-dialog-message-accept": "Тамам", + "ooui-dialog-message-reject": "Кире алырға", + "ooui-dialog-process-error": "Нимәлер килеп сыҡманы.", + "ooui-dialog-process-dismiss": "Йәшерергә", + "ooui-dialog-process-retry": "Ҡабатлап ҡарарға.", + "ooui-dialog-process-continue": "Дауам итергә", + "ooui-selectfile-button-select": "Файлды һайлағыҙ", + "ooui-selectfile-not-supported": "Файл һайлау хупланмай.", + "ooui-selectfile-placeholder": "Файл һайланмаған", + "ooui-selectfile-dragdrop-placeholder": "Файлды бында күсерегеҙ" } diff --git a/resources/lib/oojs-ui/i18n/hi.json b/resources/lib/oojs-ui/i18n/hi.json index 573096f34c..ce007fc1d1 100644 --- a/resources/lib/oojs-ui/i18n/hi.json +++ b/resources/lib/oojs-ui/i18n/hi.json @@ -7,7 +7,8 @@ "Siddhartha Ghai", "Goelujjwal", "Ankita-ks", - "Param Mudgal" + "Param Mudgal", + "Sfic" ] }, "ooui-outline-control-move-down": "प्रविष्टि नीचे ले जाएँ", @@ -22,6 +23,8 @@ "ooui-dialog-process-dismiss": "ख़ारिज करें", "ooui-dialog-process-retry": "पुनः प्रयास करें", "ooui-dialog-process-continue": "जारी रखें", + "ooui-selectfile-button-select": "फ़ाइल चुनें", "ooui-selectfile-not-supported": "फ़ाइल का चयन समर्थित नहीं है", - "ooui-selectfile-placeholder": "कोई फाइल चुनी नही गई हेै" + "ooui-selectfile-placeholder": "कोई फाइल चुनी नही गई हेै", + "ooui-selectfile-dragdrop-placeholder": "फ़ाइल यहाँ डालें" } diff --git a/resources/lib/oojs-ui/i18n/ka.json b/resources/lib/oojs-ui/i18n/ka.json index ddfcac20c6..31df169249 100644 --- a/resources/lib/oojs-ui/i18n/ka.json +++ b/resources/lib/oojs-ui/i18n/ka.json @@ -17,7 +17,7 @@ "ooui-toolbar-more": "მეტი", "ooui-toolgroup-expand": "მეტი", "ooui-toolgroup-collapse": "რამდენიმე", - "ooui-dialog-message-accept": "კარგი", + "ooui-dialog-message-accept": "დიახ", "ooui-dialog-message-reject": "გაუქმება", "ooui-dialog-process-error": "მოხდა რაღაც შეცდომა", "ooui-dialog-process-dismiss": "დამალვა", diff --git a/resources/lib/oojs-ui/i18n/khw.json b/resources/lib/oojs-ui/i18n/khw.json new file mode 100644 index 0000000000..f0ce207318 --- /dev/null +++ b/resources/lib/oojs-ui/i18n/khw.json @@ -0,0 +1,12 @@ +{ + "@metadata": { + "authors": [ + "Rachitrali" + ] + }, + "ooui-toolbar-more": "مزید", + "ooui-toolgroup-expand": "مزید", + "ooui-toolgroup-collapse": "ای کما", + "ooui-dialog-message-accept": "ٹھیک شیر", + "ooui-dialog-message-reject": "کھینسل" +} diff --git a/resources/lib/oojs-ui/i18n/nan.json b/resources/lib/oojs-ui/i18n/nan.json index 7fdf532cc3..d94118d7c4 100644 --- a/resources/lib/oojs-ui/i18n/nan.json +++ b/resources/lib/oojs-ui/i18n/nan.json @@ -4,6 +4,12 @@ "Luuva" ] }, + "ooui-outline-control-move-down": "Hāng-bo̍k sóa ē-té", + "ooui-outline-control-move-up": "Hāng-bo̍k sóa téng-bīn", + "ooui-outline-control-remove": "Sóa cháu hāng-bo̍k", + "ooui-toolbar-more": "Khah chē", + "ooui-toolgroup-expand": "Khah chē", + "ooui-toolgroup-collapse": "Khah kiám", "ooui-dialog-message-accept": "Liáu-kái", "ooui-dialog-message-reject": "Chhú-siau", "ooui-dialog-process-error": "Ū mi̍h bô hó-sè", diff --git a/resources/lib/oojs-ui/i18n/sah.json b/resources/lib/oojs-ui/i18n/sah.json index 1e1b05d187..1e4bb555dd 100644 --- a/resources/lib/oojs-ui/i18n/sah.json +++ b/resources/lib/oojs-ui/i18n/sah.json @@ -17,6 +17,8 @@ "ooui-dialog-process-dismiss": "Сап", "ooui-dialog-process-retry": "Хатылаан көр", "ooui-dialog-process-continue": "Салгыы", + "ooui-selectfile-button-select": "Билэни тал", "ooui-selectfile-not-supported": "Билэни талыы өйөммөт", - "ooui-selectfile-placeholder": "Биир да билэ талыллыбатах" + "ooui-selectfile-placeholder": "Биир да билэ талыллыбатах", + "ooui-selectfile-dragdrop-placeholder": "Билэни манна сыҕарыт" } diff --git a/resources/lib/oojs-ui/i18n/zh-hant.json b/resources/lib/oojs-ui/i18n/zh-hant.json index f70efe1960..027b7bee2d 100644 --- a/resources/lib/oojs-ui/i18n/zh-hant.json +++ b/resources/lib/oojs-ui/i18n/zh-hant.json @@ -32,6 +32,6 @@ "ooui-dialog-process-continue": "繼續", "ooui-selectfile-button-select": "選擇一個檔案", "ooui-selectfile-not-supported": "無法支援所選擇的檔案", - "ooui-selectfile-placeholder": "未選擇檔案", + "ooui-selectfile-placeholder": "尚未選擇檔案", "ooui-selectfile-dragdrop-placeholder": "拖曳檔案到此處" } diff --git a/resources/lib/oojs-ui/oojs-ui-apex.js b/resources/lib/oojs-ui/oojs-ui-apex.js index d297933a83..4bd04297da 100644 --- a/resources/lib/oojs-ui/oojs-ui-apex.js +++ b/resources/lib/oojs-ui/oojs-ui-apex.js @@ -1,12 +1,12 @@ /*! - * OOjs UI v0.16.2 + * OOjs UI v0.16.5 * https://www.mediawiki.org/wiki/OOjs_UI * * Copyright 2011–2016 OOjs UI Team and other contributors. * Released under the MIT license * http://oojs.mit-license.org * - * Date: 2016-03-08T21:46:49Z + * Date: 2016-04-07T15:12:41Z */ ( function ( OO ) { diff --git a/resources/lib/oojs-ui/oojs-ui-core-apex.css b/resources/lib/oojs-ui/oojs-ui-core-apex.css index 8b92d89827..1accc2a5f4 100644 --- a/resources/lib/oojs-ui/oojs-ui-core-apex.css +++ b/resources/lib/oojs-ui/oojs-ui-core-apex.css @@ -1,12 +1,12 @@ /*! - * OOjs UI v0.16.2 + * OOjs UI v0.16.5 * https://www.mediawiki.org/wiki/OOjs_UI * * Copyright 2011–2016 OOjs UI Team and other contributors. * Released under the MIT license * http://oojs.mit-license.org * - * Date: 2016-03-08T21:46:53Z + * Date: 2016-04-07T15:12:44Z */ .oo-ui-element-hidden { display: none !important; @@ -236,6 +236,9 @@ -moz-box-sizing: border-box; box-sizing: border-box; } +.oo-ui-floatableElement-hidden { + display: none; +} .oo-ui-iconElement .oo-ui-iconElement-icon, .oo-ui-iconElement.oo-ui-iconElement-icon { background-size: contain; @@ -524,9 +527,6 @@ .oo-ui-decoratedOptionWidget.oo-ui-widget-disabled .oo-ui-indicatorElement-indicator { opacity: 0.2; } -.oo-ui-radioSelectWidget { - padding: 0.75em 0 0.5em 0; -} .oo-ui-radioOptionWidget { cursor: default; padding: 0; @@ -743,7 +743,7 @@ } .oo-ui-dropdownInputWidget select { width: 100%; - resize: none; + cursor: pointer; -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box; @@ -797,16 +797,16 @@ .oo-ui-textInputWidget textarea { overflow: auto; } -.oo-ui-textInputWidget input[type="search"] { - -webkit-appearance: texfield; +.oo-ui-textInputWidget [type="search"] { + -webkit-appearance: textfield; } -.oo-ui-textInputWidget input[type="search"]::-ms-clear { +.oo-ui-textInputWidget [type="search"]::-ms-clear { display: none; } -.oo-ui-textInputWidget input[type="search"]::-webkit-search-decoration, -.oo-ui-textInputWidget input[type="search"]::-webkit-search-cancel-button, -.oo-ui-textInputWidget input[type="search"]::-webkit-search-results-button, -.oo-ui-textInputWidget input[type="search"]::-webkit-search-results-decoration { +.oo-ui-textInputWidget [type="search"]::-webkit-search-decoration, +.oo-ui-textInputWidget [type="search"]::-webkit-search-cancel-button, +.oo-ui-textInputWidget [type="search"]::-webkit-search-results-button, +.oo-ui-textInputWidget [type="search"]::-webkit-search-results-decoration { display: none; } .oo-ui-textInputWidget > .oo-ui-iconElement-icon, diff --git a/resources/lib/oojs-ui/oojs-ui-core-mediawiki.css b/resources/lib/oojs-ui/oojs-ui-core-mediawiki.css index 6ff352c2ff..431a9e4074 100644 --- a/resources/lib/oojs-ui/oojs-ui-core-mediawiki.css +++ b/resources/lib/oojs-ui/oojs-ui-core-mediawiki.css @@ -1,12 +1,12 @@ /*! - * OOjs UI v0.16.2 + * OOjs UI v0.16.5 * https://www.mediawiki.org/wiki/OOjs_UI * * Copyright 2011–2016 OOjs UI Team and other contributors. * Released under the MIT license * http://oojs.mit-license.org * - * Date: 2016-03-08T21:46:53Z + * Date: 2016-04-07T15:12:44Z */ .oo-ui-element-hidden { display: none !important; @@ -69,7 +69,7 @@ } .oo-ui-buttonElement-frameless > .oo-ui-buttonElement-button:focus { box-shadow: inset 0 0 0 1px rgba(0, 0, 0, 0.2), 0 0 0 1px rgba(0, 0, 0, 0.2); - outline: none; + outline: 0; } .oo-ui-buttonElement-frameless > .oo-ui-buttonElement-button .oo-ui-indicatorElement-indicator { margin-right: 0; @@ -153,7 +153,7 @@ } .oo-ui-buttonElement-framed > .oo-ui-buttonElement-button:hover, .oo-ui-buttonElement-framed > .oo-ui-buttonElement-button:focus { - outline: none; + outline: 0; } .oo-ui-buttonElement-framed > input.oo-ui-buttonElement-button, .oo-ui-buttonElement-framed.oo-ui-labelElement > .oo-ui-buttonElement-button > .oo-ui-labelElement-label { @@ -206,8 +206,8 @@ color: #347bff; } .oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-progressive > .oo-ui-buttonElement-button:hover { - background-color: rgba(52, 123, 255, 0.1); - border-color: rgba(31, 73, 153, 0.5); + background-color: #ebf2ff; + border-color: #859dcc; } .oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-progressive > .oo-ui-buttonElement-button:focus { box-shadow: inset 0 0 0 1px #1f4999; @@ -227,8 +227,8 @@ color: #347bff; } .oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-constructive > .oo-ui-buttonElement-button:hover { - background-color: rgba(52, 123, 255, 0.1); - border-color: rgba(31, 73, 153, 0.5); + background-color: #ebf2ff; + border-color: #859dcc; } .oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-constructive > .oo-ui-buttonElement-button:focus { box-shadow: inset 0 0 0 1px #1f4999; @@ -248,8 +248,8 @@ color: #d11d13; } .oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-destructive > .oo-ui-buttonElement-button:hover { - background-color: rgba(209, 29, 19, 0.1); - border-color: rgba(115, 16, 10, 0.5); + background-color: #fbe8e7; + border-color: #b77c79; } .oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-destructive > .oo-ui-buttonElement-button:focus { box-shadow: inset 0 0 0 1px #73100a; @@ -342,6 +342,9 @@ -moz-box-sizing: border-box; box-sizing: border-box; } +.oo-ui-floatableElement-hidden { + display: none; +} .oo-ui-iconElement .oo-ui-iconElement-icon, .oo-ui-iconElement.oo-ui-iconElement-icon { background-size: contain; @@ -828,7 +831,7 @@ font: inherit; vertical-align: middle; } -.oo-ui-checkboxInputWidget input[type="checkbox"] { +.oo-ui-checkboxInputWidget [type="checkbox"] { opacity: 0; z-index: 1; position: relative; @@ -838,7 +841,7 @@ height: 1.6em; max-width: none; } -.oo-ui-checkboxInputWidget input[type="checkbox"] + span { +.oo-ui-checkboxInputWidget [type="checkbox"] + span { -webkit-transition: background-size 200ms cubic-bezier(0.175, 0.885, 0.32, 1.275); -moz-transition: background-size 200ms cubic-bezier(0.175, 0.885, 0.32, 1.275); transition: background-size 200ms cubic-bezier(0.175, 0.885, 0.32, 1.275); @@ -847,11 +850,9 @@ box-sizing: border-box; position: absolute; left: 0; - border-radius: 2px; width: 1.6em; height: 1.6em; - background-color: white; - border: 1px solid #777777; + background-color: #ffffff; background-image: url("themes/mediawiki/images/icons/check-constructive-deprecated.png"); background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/check-constructive-deprecated.svg"); background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/check-constructive-deprecated.svg"); @@ -860,29 +861,31 @@ background-position: center center; background-origin: border-box; background-size: 0 0; + border: 1px solid #777777; + border-radius: 2px; } -.oo-ui-checkboxInputWidget input[type="checkbox"]:checked + span { +.oo-ui-checkboxInputWidget [type="checkbox"]:checked + span { background-size: 100% 100%; } -.oo-ui-checkboxInputWidget input[type="checkbox"]:active + span { +.oo-ui-checkboxInputWidget [type="checkbox"]:active + span { background-color: #cccccc; border-color: #cccccc; } -.oo-ui-checkboxInputWidget input[type="checkbox"]:focus + span { +.oo-ui-checkboxInputWidget [type="checkbox"]:focus + span { border-width: 2px; } -.oo-ui-checkboxInputWidget input[type="checkbox"]:focus:hover + span, -.oo-ui-checkboxInputWidget input[type="checkbox"]:hover + span { +.oo-ui-checkboxInputWidget [type="checkbox"]:focus:hover + span, +.oo-ui-checkboxInputWidget [type="checkbox"]:hover + span { border-bottom-width: 3px; } -.oo-ui-checkboxInputWidget input[type="checkbox"]:disabled { +.oo-ui-checkboxInputWidget [type="checkbox"]:disabled { cursor: default; } -.oo-ui-checkboxInputWidget input[type="checkbox"]:disabled + span { +.oo-ui-checkboxInputWidget [type="checkbox"]:disabled + span { background-color: #dddddd; border-color: #dddddd; } -.oo-ui-checkboxInputWidget input[type="checkbox"]:disabled:checked + span { +.oo-ui-checkboxInputWidget [type="checkbox"]:disabled:checked + span { background-image: url("themes/mediawiki/images/icons/check-invert.png"); background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/check-invert.svg"); background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/check-invert.svg"); @@ -903,7 +906,7 @@ } .oo-ui-dropdownInputWidget select { width: 100%; - resize: none; + cursor: pointer; -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box; @@ -930,7 +933,7 @@ .oo-ui-dropdownInputWidget.oo-ui-widget-enabled select:hover, .oo-ui-dropdownInputWidget.oo-ui-widget-enabled select:focus { border-color: #aaaaaa; - outline: none; + outline: 0; } .oo-ui-dropdownInputWidget.oo-ui-widget-disabled select { color: #cccccc; @@ -946,7 +949,7 @@ font: inherit; vertical-align: middle; } -.oo-ui-radioInputWidget input[type="radio"] { +.oo-ui-radioInputWidget [type="radio"] { opacity: 0; z-index: 1; position: relative; @@ -956,7 +959,7 @@ height: 1.6em; max-width: none; } -.oo-ui-radioInputWidget input[type="radio"] + span { +.oo-ui-radioInputWidget [type="radio"] + span { -webkit-transition: background-size 200ms cubic-bezier(0.175, 0.885, 0.32, 1.275); -moz-transition: background-size 200ms cubic-bezier(0.175, 0.885, 0.32, 1.275); transition: background-size 200ms cubic-bezier(0.175, 0.885, 0.32, 1.275); @@ -965,11 +968,9 @@ box-sizing: border-box; position: absolute; left: 0; - border-radius: 100%; width: 1.6em; height: 1.6em; - background: white; - border: 1px solid #777777; + background-color: #ffffff; background-image: url("themes/mediawiki/images/icons/circle-constructive-deprecated.png"); background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/circle-constructive-deprecated.svg"); background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/circle-constructive-deprecated.svg"); @@ -978,29 +979,31 @@ background-position: center center; background-origin: border-box; background-size: 0 0; + border: 1px solid #777777; + border-radius: 100%; } -.oo-ui-radioInputWidget input[type="radio"]:checked + span { +.oo-ui-radioInputWidget [type="radio"]:checked + span { background-size: 100% 100%; } -.oo-ui-radioInputWidget input[type="radio"]:active + span { +.oo-ui-radioInputWidget [type="radio"]:active + span { background-color: #cccccc; border-color: #cccccc; } -.oo-ui-radioInputWidget input[type="radio"]:focus + span { +.oo-ui-radioInputWidget [type="radio"]:focus + span { border-width: 2px; } -.oo-ui-radioInputWidget input[type="radio"]:focus:hover + span, -.oo-ui-radioInputWidget input[type="radio"]:hover + span { +.oo-ui-radioInputWidget [type="radio"]:focus:hover + span, +.oo-ui-radioInputWidget [type="radio"]:hover + span { border-bottom-width: 3px; } -.oo-ui-radioInputWidget input[type="radio"]:disabled { +.oo-ui-radioInputWidget [type="radio"]:disabled { cursor: default; } -.oo-ui-radioInputWidget input[type="radio"]:disabled + span { +.oo-ui-radioInputWidget [type="radio"]:disabled + span { background-color: #dddddd; border-color: #dddddd; } -.oo-ui-radioInputWidget input[type="radio"]:disabled:checked + span { +.oo-ui-radioInputWidget [type="radio"]:disabled:checked + span { background-image: url("themes/mediawiki/images/icons/circle-invert.png"); background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/circle-invert.svg"); background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/circle-invert.svg"); @@ -1009,6 +1012,12 @@ .oo-ui-radioSelectInputWidget .oo-ui-fieldLayout { margin-bottom: 0; } +.oo-ui-radioSelectInputWidget .oo-ui-fieldLayout .oo-ui-fieldLayout-body { + padding: 0.25em 0; +} +.oo-ui-radioSelectInputWidget .oo-ui-fieldLayout .oo-ui-fieldLayout-body .oo-ui-labelElement-label { + line-height: 1.5em; +} .oo-ui-textInputWidget { position: relative; vertical-align: middle; @@ -1030,16 +1039,16 @@ .oo-ui-textInputWidget textarea { overflow: auto; } -.oo-ui-textInputWidget input[type="search"] { - -webkit-appearance: texfield; +.oo-ui-textInputWidget [type="search"] { + -webkit-appearance: textfield; } -.oo-ui-textInputWidget input[type="search"]::-ms-clear { +.oo-ui-textInputWidget [type="search"]::-ms-clear { display: none; } -.oo-ui-textInputWidget input[type="search"]::-webkit-search-decoration, -.oo-ui-textInputWidget input[type="search"]::-webkit-search-cancel-button, -.oo-ui-textInputWidget input[type="search"]::-webkit-search-results-button, -.oo-ui-textInputWidget input[type="search"]::-webkit-search-results-decoration { +.oo-ui-textInputWidget [type="search"]::-webkit-search-decoration, +.oo-ui-textInputWidget [type="search"]::-webkit-search-cancel-button, +.oo-ui-textInputWidget [type="search"]::-webkit-search-results-button, +.oo-ui-textInputWidget [type="search"]::-webkit-search-results-decoration { display: none; } .oo-ui-textInputWidget > .oo-ui-iconElement-icon, @@ -1113,7 +1122,7 @@ } .oo-ui-textInputWidget.oo-ui-widget-enabled input:focus, .oo-ui-textInputWidget.oo-ui-widget-enabled textarea:focus { - outline: none; + outline: 0; border-color: #347bff; box-shadow: inset 0 0 0 0.1em #347bff; } diff --git a/resources/lib/oojs-ui/oojs-ui-core.js b/resources/lib/oojs-ui/oojs-ui-core.js index f587a392f3..a05193ea44 100644 --- a/resources/lib/oojs-ui/oojs-ui-core.js +++ b/resources/lib/oojs-ui/oojs-ui-core.js @@ -1,12 +1,12 @@ /*! - * OOjs UI v0.16.2 + * OOjs UI v0.16.5 * https://www.mediawiki.org/wiki/OOjs_UI * * Copyright 2011–2016 OOjs UI Team and other contributors. * Released under the MIT license * http://oojs.mit-license.org * - * Date: 2016-03-08T21:46:49Z + * Date: 2016-04-07T15:12:41Z */ ( function ( OO ) { @@ -260,6 +260,58 @@ OO.ui.debounce = function ( func, wait, immediate ) { }; }; +/** + * Returns a function, that, when invoked, will only be triggered at most once + * during a given window of time. If called again during that window, it will + * wait until the window ends and then trigger itself again. + * + * As it's not knowable to the caller whether the function will actually run + * when the wrapper is called, return values from the function are entirely + * discarded. + * + * @param {Function} func + * @param {number} wait + * @return {Function} + */ +OO.ui.throttle = function ( func, wait ) { + var context, args, timeout, + previous = 0, + run = function () { + timeout = null; + previous = OO.ui.now(); + func.apply( context, args ); + }; + return function () { + // Check how long it's been since the last time the function was + // called, and whether it's more or less than the requested throttle + // period. If it's less, run the function immediately. If it's more, + // set a timeout for the remaining time -- but don't replace an + // existing timeout, since that'd indefinitely prolong the wait. + var remaining = wait - ( OO.ui.now() - previous ); + context = this; + args = arguments; + if ( remaining <= 0 ) { + // Note: unless wait was ridiculously large, this means we'll + // automatically run the first time the function was called in a + // given period. (If you provide a wait period larger than the + // current Unix timestamp, you *deserve* unexpected behavior.) + clearTimeout( timeout ); + run(); + } else if ( !timeout ) { + timeout = setTimeout( run, remaining ); + } + }; +}; + +/** + * A (possibly faster) way to get the current timestamp as an integer + * + * @return {number} Current timestamp + */ +OO.ui.now = Date.now || function () { + return new Date().getTime(); +}; + /** * Proxy for `node.addEventListener( eventName, handler, true )`. * @@ -685,7 +737,7 @@ OO.ui.Element.static.unsafeInfuse = function ( idOrNode, domPromise ) { infused.$element.removeData( 'ooui-infused-children' ); return infused; } - if ( value.html ) { + if ( value.html !== undefined ) { return new OO.ui.HtmlSnippet( value.html ); } } @@ -2000,6 +2052,16 @@ OO.ui.mixin.GroupElement = function OoUiMixinGroupElement( config ) { this.setGroupElement( config.$group || $( '
' ) ); }; +/* Events */ + +/** + * @event change + * + * A change event is emitted when the set of selected items changes. + * + * @param {OO.ui.Element[]} items Items currently in the group + */ + /* Methods */ /** @@ -2191,6 +2253,7 @@ OO.ui.mixin.GroupElement.prototype.addItems = function ( items, index ) { this.items.splice.apply( this.items, [ index, 0 ].concat( items ) ); } + this.emit( 'change', this.getItems() ); return this; }; @@ -2227,6 +2290,7 @@ OO.ui.mixin.GroupElement.prototype.removeItems = function ( items ) { } } + this.emit( 'change', this.getItems() ); return this; }; @@ -2258,6 +2322,7 @@ OO.ui.mixin.GroupElement.prototype.clearItems = function () { item.$element.detach(); } + this.emit( 'change', this.getItems() ); this.items = []; return this; }; @@ -2736,9 +2801,7 @@ OO.ui.mixin.LabelElement.prototype.setLabelElement = function ( $label ) { */ OO.ui.mixin.LabelElement.prototype.setLabel = function ( label ) { label = typeof label === 'function' ? OO.ui.resolveMsg( label ) : label; - label = ( ( typeof label === 'string' && label.length ) || label instanceof jQuery || label instanceof OO.ui.HtmlSnippet ) ? label : null; - - this.$element.toggleClass( 'oo-ui-labelElement', !!label ); + label = ( ( typeof label === 'string' || label instanceof jQuery ) && label.length ) || ( label instanceof OO.ui.HtmlSnippet && label.toString().length ) ? label : null; if ( this.label !== label ) { if ( this.$label ) { @@ -2748,6 +2811,8 @@ OO.ui.mixin.LabelElement.prototype.setLabel = function ( label ) { this.emit( 'labelChange' ); } + this.$element.toggleClass( 'oo-ui-labelElement', !!this.label ); + return this; }; @@ -3054,7 +3119,7 @@ OO.ui.mixin.TitledElement = function OoUiMixinTitledElement( config ) { this.title = null; // Initialization - this.setTitle( config.title || this.constructor.static.title ); + this.setTitle( config.title !== undefined ? config.title : this.constructor.static.title ); this.setTitledElement( config.$titled || this.$element ); }; @@ -4052,6 +4117,9 @@ OO.ui.mixin.ClippableElement.prototype.clip = function () { ccWidth + ccOffset.left : ( scOffset.left + scrollLeft + scWidth ) - ccOffset.left; desiredHeight = ( scOffset.top + scrollTop + scHeight ) - ccOffset.top; + // It should never be desirable to exceed the dimensions of the browser viewport... right? + desiredWidth = Math.min( desiredWidth, document.documentElement.clientWidth ); + desiredHeight = Math.min( desiredHeight, document.documentElement.clientHeight ); allotedWidth = Math.ceil( desiredWidth - extraWidth ); allotedHeight = Math.ceil( desiredHeight - extraHeight ); naturalWidth = this.$clippable.prop( 'scrollWidth' ); @@ -6563,22 +6631,19 @@ OO.ui.mixin.FloatableElement.prototype.togglePositioning = function ( positionin closestScrollableOfContainer = OO.ui.Element.static.getClosestScrollableContainer( this.$floatableContainer[ 0 ] ); closestScrollableOfFloatable = OO.ui.Element.static.getClosestScrollableContainer( this.$floatable[ 0 ] ); - if ( closestScrollableOfContainer !== closestScrollableOfFloatable ) { - // If the scrollable is the root, we have to listen to scroll events - // on the window because of browser inconsistencies (or do we? someone should verify this) - if ( $( closestScrollableOfContainer ).is( 'html, body' ) ) { - closestScrollableOfContainer = OO.ui.Element.static.getWindow( closestScrollableOfContainer ); - } + this.needsCustomPosition = closestScrollableOfContainer !== closestScrollableOfFloatable; + // If the scrollable is the root, we have to listen to scroll events + // on the window because of browser inconsistencies. + if ( $( closestScrollableOfContainer ).is( 'html, body' ) ) { + closestScrollableOfContainer = OO.ui.Element.static.getWindow( closestScrollableOfContainer ); } if ( positioning ) { this.$floatableWindow = $( this.getElementWindow() ); this.$floatableWindow.on( 'resize', this.onFloatableWindowResizeHandler ); - if ( closestScrollableOfContainer !== closestScrollableOfFloatable ) { - this.$floatableClosestScrollable = $( closestScrollableOfContainer ); - this.$floatableClosestScrollable.on( 'scroll', this.onFloatableScrollHandler ); - } + this.$floatableClosestScrollable = $( closestScrollableOfContainer ); + this.$floatableClosestScrollable.on( 'scroll', this.onFloatableScrollHandler ); // Initial position after visible this.position(); @@ -6600,6 +6665,50 @@ OO.ui.mixin.FloatableElement.prototype.togglePositioning = function ( positionin return this; }; +/** + * Check whether the bottom edge of the given element is within the viewport of the given container. + * + * @private + * @param {jQuery} $element + * @param {jQuery} $container + * @return {boolean} + */ +OO.ui.mixin.FloatableElement.prototype.isElementInViewport = function ( $element, $container ) { + var elemRect, contRect, + topEdgeInBounds = false, + leftEdgeInBounds = false, + bottomEdgeInBounds = false, + rightEdgeInBounds = false; + + elemRect = $element[ 0 ].getBoundingClientRect(); + if ( $container[ 0 ] === window ) { + contRect = { + top: 0, + left: 0, + right: document.documentElement.clientWidth, + bottom: document.documentElement.clientHeight + }; + } else { + contRect = $container[ 0 ].getBoundingClientRect(); + } + + if ( elemRect.top >= contRect.top && elemRect.top <= contRect.bottom ) { + topEdgeInBounds = true; + } + if ( elemRect.left >= contRect.left && elemRect.left <= contRect.right ) { + leftEdgeInBounds = true; + } + if ( elemRect.bottom >= contRect.top && elemRect.bottom <= contRect.bottom ) { + bottomEdgeInBounds = true; + } + if ( elemRect.right >= contRect.left && elemRect.right <= contRect.right ) { + rightEdgeInBounds = true; + } + + // We only care that any part of the bottom edge is visible + return bottomEdgeInBounds && ( leftEdgeInBounds || rightEdgeInBounds ); +}; + /** * Position the floatable below its container. * @@ -6614,6 +6723,17 @@ OO.ui.mixin.FloatableElement.prototype.position = function () { return this; } + if ( !this.isElementInViewport( this.$floatableContainer, this.$floatableClosestScrollable ) ) { + this.$floatable.addClass( 'oo-ui-floatableElement-hidden' ); + return; + } else { + this.$floatable.removeClass( 'oo-ui-floatableElement-hidden' ); + } + + if ( !this.needsCustomPosition ) { + return; + } + pos = OO.ui.Element.static.getRelativePosition( this.$floatableContainer, this.$floatable.offsetParent() ); // Position under container @@ -6745,7 +6865,8 @@ OO.ui.InputWidget = function OoUiInputWidget( config ) { OO.ui.InputWidget.parent.call( this, config ); // Properties - this.$input = this.getInputElement( config ); + // See #reusePreInfuseDOM about config.$input + this.$input = config.$input || this.getInputElement( config ); this.value = ''; this.inputFilter = config.inputFilter; @@ -6801,9 +6922,11 @@ OO.ui.InputWidget.static.reusePreInfuseDOM = function ( node, config ) { */ OO.ui.InputWidget.static.gatherPreInfuseState = function ( node, config ) { var state = OO.ui.InputWidget.parent.static.gatherPreInfuseState( node, config ); - state.value = config.$input.val(); - // Might be better in TabIndexedElement, but it's awkward to do there because mixins are awkward - state.focus = config.$input.is( ':focus' ); + if ( config.$input && config.$input.length ) { + state.value = config.$input.val(); + // Might be better in TabIndexedElement, but it's awkward to do there because mixins are awkward + state.focus = config.$input.is( ':focus' ); + } return state; }; @@ -6829,9 +6952,8 @@ OO.ui.InputWidget.static.gatherPreInfuseState = function ( node, config ) { * @param {Object} config Configuration options * @return {jQuery} Input element */ -OO.ui.InputWidget.prototype.getInputElement = function ( config ) { - // See #reusePreInfuseDOM about config.$input - return config.$input || $( '' ); +OO.ui.InputWidget.prototype.getInputElement = function () { + return $( '' ); }; /** @@ -7026,6 +7148,11 @@ OO.ui.ButtonInputWidget = function OoUiButtonInputWidget( config ) { // Configuration initialization config = $.extend( { type: 'button', useInputTag: false }, config ); + // See InputWidget#reusePreInfuseDOM about config.$input + if ( config.$input ) { + config.$input.empty(); + } + // Properties (must be set before parent constructor, which calls #setValue) this.useInputTag = config.useInputTag; @@ -7071,10 +7198,6 @@ OO.ui.ButtonInputWidget.static.supportsSimpleLabel = false; */ OO.ui.ButtonInputWidget.prototype.getInputElement = function ( config ) { var type; - // See InputWidget#reusePreInfuseDOM about config.$input - if ( config.$input ) { - return config.$input.empty(); - } type = [ 'button', 'submit', 'reset' ].indexOf( config.type ) !== -1 ? config.type : 'button'; return $( '<' + ( config.useInputTag ? 'input' : 'button' ) + ' type="' + type + '">' ); }; @@ -7089,22 +7212,20 @@ OO.ui.ButtonInputWidget.prototype.getInputElement = function ( config ) { * @chainable */ OO.ui.ButtonInputWidget.prototype.setLabel = function ( label ) { - OO.ui.mixin.LabelElement.prototype.setLabel.call( this, label ); + if ( typeof label === 'function' ) { + label = OO.ui.resolveMsg( label ); + } if ( this.useInputTag ) { - if ( typeof label === 'function' ) { - label = OO.ui.resolveMsg( label ); - } - if ( label instanceof jQuery ) { - label = label.text(); - } - if ( !label ) { + // Discard non-plaintext labels + if ( typeof label !== 'string' ) { label = ''; } + this.$input.val( label ); } - return this; + return OO.ui.mixin.LabelElement.prototype.setLabel.call( this, label ); }; /** @@ -7296,6 +7417,11 @@ OO.ui.DropdownInputWidget = function OoUiDropdownInputWidget( config ) { // Configuration initialization config = config || {}; + // See InputWidget#reusePreInfuseDOM about config.$input + if ( config.$input ) { + config.$input.addClass( 'oo-ui-element-hidden' ); + } + // Properties (must be done before parent constructor which calls #setDisabled) this.dropdownWidget = new OO.ui.DropdownWidget( config.dropdown ); @@ -7326,11 +7452,7 @@ OO.mixinClass( OO.ui.DropdownInputWidget, OO.ui.mixin.TitledElement ); * @inheritdoc * @protected */ -OO.ui.DropdownInputWidget.prototype.getInputElement = function ( config ) { - // See InputWidget#reusePreInfuseDOM about config.$input - if ( config.$input ) { - return config.$input.addClass( 'oo-ui-element-hidden' ); - } +OO.ui.DropdownInputWidget.prototype.getInputElement = function () { return $( '' ).attr( 'type', 'hidden' ); }; @@ -7601,6 +7723,16 @@ OO.ui.RadioSelectInputWidget.static.gatherPreInfuseState = function ( node, conf return state; }; +/** + * @inheritdoc + */ +OO.ui.RadioSelectInputWidget.static.reusePreInfuseDOM = function ( node, config ) { + config = OO.ui.RadioSelectInputWidget.parent.static.reusePreInfuseDOM( node, config ); + // Cannot reuse the `` set + delete config.$input; + return config; +}; + /* Methods */ /** @@ -7805,7 +7937,7 @@ OO.ui.TextInputWidget = function OoUiTextInputWidget( config ) { .append( this.$icon, this.$indicator ); this.setReadOnly( !!config.readOnly ); this.updateSearchIndicator(); - if ( config.placeholder ) { + if ( config.placeholder !== undefined ) { this.$input.attr( 'placeholder', config.placeholder ); } if ( config.maxLength !== undefined ) { @@ -8573,7 +8705,8 @@ OO.ui.TextInputWidget.prototype.restorePreInfuseState = function ( state ) { OO.ui.ComboBoxInputWidget = function OoUiComboBoxInputWidget( config ) { // Configuration initialization config = $.extend( { - indicator: 'down' + indicator: 'down', + autocomplete: false }, config ); // For backwards-compatibility with ComboBoxWidget config $.extend( config, config.input ); diff --git a/resources/lib/oojs-ui/oojs-ui-mediawiki.js b/resources/lib/oojs-ui/oojs-ui-mediawiki.js index c2bf522cf8..5bd3ac7bbc 100644 --- a/resources/lib/oojs-ui/oojs-ui-mediawiki.js +++ b/resources/lib/oojs-ui/oojs-ui-mediawiki.js @@ -1,12 +1,12 @@ /*! - * OOjs UI v0.16.2 + * OOjs UI v0.16.5 * https://www.mediawiki.org/wiki/OOjs_UI * * Copyright 2011–2016 OOjs UI Team and other contributors. * Released under the MIT license * http://oojs.mit-license.org * - * Date: 2016-03-08T21:46:49Z + * Date: 2016-04-07T15:12:41Z */ ( function ( OO ) { @@ -49,11 +49,15 @@ OO.ui.MediaWikiTheme.prototype.getElementClasses = function ( element ) { isFramed = element.supports( [ 'isFramed' ] ) && element.isFramed(); isActive = element.supports( [ 'isActive' ] ) && element.isActive(); if ( - ( isFramed && ( isActive || element.isDisabled() || element.hasFlag( 'primary' ) ) ) || - ( !isFramed && element.hasFlag( 'primary' ) ) + ( isFramed && ( isActive || element.isDisabled() || element.hasFlag( 'primary' ) ) ) ) { + // Button with a dark background, use white icon variants.invert = true; + } else if ( !isFramed && element.isDisabled() ) { + // Frameless disabled button, always use black icon regardless of flags + variants.invert = false; } else { + // Any other kind of button, use the right colored icon if available variants.progressive = element.hasFlag( 'progressive' ); variants.constructive = element.hasFlag( 'constructive' ); variants.destructive = element.hasFlag( 'destructive' ); diff --git a/resources/lib/oojs-ui/oojs-ui-toolbars-apex.css b/resources/lib/oojs-ui/oojs-ui-toolbars-apex.css index 0ea30069e9..d2e25a030c 100644 --- a/resources/lib/oojs-ui/oojs-ui-toolbars-apex.css +++ b/resources/lib/oojs-ui/oojs-ui-toolbars-apex.css @@ -1,12 +1,12 @@ /*! - * OOjs UI v0.16.2 + * OOjs UI v0.16.5 * https://www.mediawiki.org/wiki/OOjs_UI * * Copyright 2011–2016 OOjs UI Team and other contributors. * Released under the MIT license * http://oojs.mit-license.org * - * Date: 2016-03-08T21:46:53Z + * Date: 2016-04-07T15:12:44Z */ .oo-ui-popupTool .oo-ui-popupWidget-popup, .oo-ui-popupTool .oo-ui-popupWidget-anchor { diff --git a/resources/lib/oojs-ui/oojs-ui-toolbars-mediawiki.css b/resources/lib/oojs-ui/oojs-ui-toolbars-mediawiki.css index 90b7f83c93..35a7ef3c56 100644 --- a/resources/lib/oojs-ui/oojs-ui-toolbars-mediawiki.css +++ b/resources/lib/oojs-ui/oojs-ui-toolbars-mediawiki.css @@ -1,12 +1,12 @@ /*! - * OOjs UI v0.16.2 + * OOjs UI v0.16.5 * https://www.mediawiki.org/wiki/OOjs_UI * * Copyright 2011–2016 OOjs UI Team and other contributors. * Released under the MIT license * http://oojs.mit-license.org * - * Date: 2016-03-08T21:46:53Z + * Date: 2016-04-07T15:12:44Z */ .oo-ui-popupTool .oo-ui-popupWidget-popup, .oo-ui-popupTool .oo-ui-popupWidget-anchor { diff --git a/resources/lib/oojs-ui/oojs-ui-toolbars.js b/resources/lib/oojs-ui/oojs-ui-toolbars.js index 6fddd25ed7..7d22b8f53a 100644 --- a/resources/lib/oojs-ui/oojs-ui-toolbars.js +++ b/resources/lib/oojs-ui/oojs-ui-toolbars.js @@ -1,12 +1,12 @@ /*! - * OOjs UI v0.16.2 + * OOjs UI v0.16.5 * https://www.mediawiki.org/wiki/OOjs_UI * * Copyright 2011–2016 OOjs UI Team and other contributors. * Released under the MIT license * http://oojs.mit-license.org * - * Date: 2016-03-08T21:46:49Z + * Date: 2016-04-07T15:12:41Z */ ( function ( OO ) { diff --git a/resources/lib/oojs-ui/oojs-ui-widgets-apex.css b/resources/lib/oojs-ui/oojs-ui-widgets-apex.css index 2d60c082bf..cd7cbd5ca6 100644 --- a/resources/lib/oojs-ui/oojs-ui-widgets-apex.css +++ b/resources/lib/oojs-ui/oojs-ui-widgets-apex.css @@ -1,12 +1,12 @@ /*! - * OOjs UI v0.16.2 + * OOjs UI v0.16.5 * https://www.mediawiki.org/wiki/OOjs_UI * * Copyright 2011–2016 OOjs UI Team and other contributors. * Released under the MIT license * http://oojs.mit-license.org * - * Date: 2016-03-08T21:46:53Z + * Date: 2016-04-07T15:12:44Z */ .oo-ui-draggableElement-handle, .oo-ui-draggableElement-handle.oo-ui-widget { @@ -399,7 +399,7 @@ position: relative; overflow: hidden; } -.oo-ui-selectFileWidget-selectButton > .oo-ui-buttonElement-button > input[type="file"] { +.oo-ui-selectFileWidget-selectButton > .oo-ui-buttonElement-button > [type="file"] { position: absolute; margin: 0; top: 0; @@ -413,7 +413,7 @@ cursor: pointer; padding-top: 100px; } -.oo-ui-selectFileWidget-selectButton.oo-ui-widget-disabled > .oo-ui-buttonElement-button > input[type="file"] { +.oo-ui-selectFileWidget-selectButton.oo-ui-widget-disabled > .oo-ui-buttonElement-button > [type="file"] { display: none; } .oo-ui-selectFileWidget-info { @@ -475,7 +475,7 @@ width: 5.5em; } .oo-ui-selectFileWidget-dropTarget .oo-ui-selectFileWidget-info { - border: none; + border: 0; background: none; display: block; height: 100%; @@ -971,6 +971,6 @@ border-bottom-left-radius: 0; border-left-width: 0; } -.oo-ui-numberInputWidget .oo-ui-textInputWidget input { +.oo-ui-numberInputWidget-buttoned .oo-ui-textInputWidget input { border-radius: 0; } diff --git a/resources/lib/oojs-ui/oojs-ui-widgets-mediawiki.css b/resources/lib/oojs-ui/oojs-ui-widgets-mediawiki.css index 165a6c29d4..5a905db8fb 100644 --- a/resources/lib/oojs-ui/oojs-ui-widgets-mediawiki.css +++ b/resources/lib/oojs-ui/oojs-ui-widgets-mediawiki.css @@ -1,12 +1,12 @@ /*! - * OOjs UI v0.16.2 + * OOjs UI v0.16.5 * https://www.mediawiki.org/wiki/OOjs_UI * * Copyright 2011–2016 OOjs UI Team and other contributors. * Released under the MIT license * http://oojs.mit-license.org * - * Date: 2016-03-08T21:46:53Z + * Date: 2016-04-07T15:12:44Z */ .oo-ui-draggableElement-handle, .oo-ui-draggableElement-handle.oo-ui-widget { @@ -329,7 +329,7 @@ } .oo-ui-toggleSwitchWidget.oo-ui-widget-enabled:focus { border-color: #347bff; - outline: none; + outline: 0; } .oo-ui-toggleSwitchWidget.oo-ui-widget-enabled:focus.oo-ui-toggleWidget-on { border-color: #347bff; @@ -348,12 +348,12 @@ box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.1); } .oo-ui-toggleSwitchWidget.oo-ui-widget-disabled { - background: #dddddd; + background-color: #dddddd; border-color: #dddddd; outline: 0; } .oo-ui-toggleSwitchWidget.oo-ui-widget-disabled .oo-ui-toggleSwitchWidget-grip { - background: #ffffff; + background-color: #ffffff; } .oo-ui-progressBarWidget { max-width: 50em; @@ -363,8 +363,8 @@ overflow: hidden; } .oo-ui-progressBarWidget-bar { + background-color: #dddddd; height: 1em; - background: #dddddd; -webkit-transition: width 200ms, margin-left 200ms; -moz-transition: width 200ms, margin-left 200ms; transition: width 200ms, margin-left 200ms; @@ -419,7 +419,7 @@ position: relative; overflow: hidden; } -.oo-ui-selectFileWidget-selectButton > .oo-ui-buttonElement-button > input[type="file"] { +.oo-ui-selectFileWidget-selectButton > .oo-ui-buttonElement-button > [type="file"] { position: absolute; margin: 0; top: 0; @@ -433,7 +433,7 @@ cursor: pointer; padding-top: 100px; } -.oo-ui-selectFileWidget-selectButton.oo-ui-widget-disabled > .oo-ui-buttonElement-button > input[type="file"] { +.oo-ui-selectFileWidget-selectButton.oo-ui-widget-disabled > .oo-ui-buttonElement-button > [type="file"] { display: none; } .oo-ui-selectFileWidget-info { @@ -495,7 +495,7 @@ width: 5.5em; } .oo-ui-selectFileWidget-dropTarget .oo-ui-selectFileWidget-info { - border: none; + border: 0; background: none; display: block; height: 100%; @@ -633,7 +633,7 @@ right: 2em; } .oo-ui-selectFileWidget-supported.oo-ui-widget-enabled.oo-ui-selectFileWidget-canDrop .oo-ui-selectFileWidget-dropTarget { - background-color: rgba(52, 123, 255, 0.1); + background-color: #ebf2ff; } .oo-ui-selectFileWidget-empty.oo-ui-widget-disabled .oo-ui-selectFileWidget-dropTarget, .oo-ui-selectFileWidget-notsupported .oo-ui-selectFileWidget-dropTarget { @@ -842,7 +842,7 @@ vertical-align: middle; } .oo-ui-capsuleMultiSelectWidget-handle > .oo-ui-capsuleMultiSelectWidget-content > input:focus { - outline: none; + outline: 0; } .oo-ui-capsuleMultiSelectWidget.oo-ui-indicatorElement .oo-ui-capsuleMultiSelectWidget-handle { padding-right: 2.4875em; @@ -904,7 +904,7 @@ overflow: hidden; } .oo-ui-capsuleItemWidget:focus { - outline: none; + outline: 0; border-color: #347bff; } .oo-ui-capsuleItemWidget.oo-ui-widget-disabled { @@ -986,6 +986,6 @@ border-bottom-left-radius: 0; border-left-width: 0; } -.oo-ui-numberInputWidget .oo-ui-textInputWidget input { +.oo-ui-numberInputWidget-buttoned .oo-ui-textInputWidget input { border-radius: 0; } diff --git a/resources/lib/oojs-ui/oojs-ui-widgets.js b/resources/lib/oojs-ui/oojs-ui-widgets.js index 04137da65a..ec215f1a99 100644 --- a/resources/lib/oojs-ui/oojs-ui-widgets.js +++ b/resources/lib/oojs-ui/oojs-ui-widgets.js @@ -1,12 +1,12 @@ /*! - * OOjs UI v0.16.2 + * OOjs UI v0.16.5 * https://www.mediawiki.org/wiki/OOjs_UI * * Copyright 2011–2016 OOjs UI Team and other contributors. * Released under the MIT license * http://oojs.mit-license.org * - * Date: 2016-03-08T21:46:49Z + * Date: 2016-04-07T15:12:41Z */ ( function ( OO ) { @@ -5048,6 +5048,7 @@ OO.ui.SearchWidget.prototype.getResults = function () { * @cfg {number} [max=Infinity] Maximum allowed value * @cfg {number} [step=1] Delta when using the buttons or up/down arrow keys * @cfg {number|null} [pageStep] Delta when using the page-up/page-down keys. Defaults to 10 times #step. + * @cfg {boolean} [showButtons=true] Whether to show the plus and minus buttons. */ OO.ui.NumberInputWidget = function OoUiNumberInputWidget( config ) { // Configuration initialization @@ -5056,7 +5057,8 @@ OO.ui.NumberInputWidget = function OoUiNumberInputWidget( config ) { min: -Infinity, max: Infinity, step: 1, - pageStep: null + pageStep: null, + showButtons: true }, config ); // Parent constructor @@ -5069,28 +5071,30 @@ OO.ui.NumberInputWidget = function OoUiNumberInputWidget( config ) { }, config.input ) ); - this.minusButton = new OO.ui.ButtonWidget( $.extend( - { - disabled: this.isDisabled(), - tabIndex: -1 - }, - config.minusButton, - { - classes: [ 'oo-ui-numberInputWidget-minusButton' ], - label: '−' - } - ) ); - this.plusButton = new OO.ui.ButtonWidget( $.extend( - { - disabled: this.isDisabled(), - tabIndex: -1 - }, - config.plusButton, - { - classes: [ 'oo-ui-numberInputWidget-plusButton' ], - label: '+' - } - ) ); + if ( config.showButtons ) { + this.minusButton = new OO.ui.ButtonWidget( $.extend( + { + disabled: this.isDisabled(), + tabIndex: -1 + }, + config.minusButton, + { + classes: [ 'oo-ui-numberInputWidget-minusButton' ], + label: '−' + } + ) ); + this.plusButton = new OO.ui.ButtonWidget( $.extend( + { + disabled: this.isDisabled(), + tabIndex: -1 + }, + config.plusButton, + { + classes: [ 'oo-ui-numberInputWidget-plusButton' ], + label: '+' + } + ) ); + } // Events this.input.connect( this, { @@ -5101,12 +5105,14 @@ OO.ui.NumberInputWidget = function OoUiNumberInputWidget( config ) { keydown: this.onKeyDown.bind( this ), 'wheel mousewheel DOMMouseScroll': this.onWheel.bind( this ) } ); - this.plusButton.connect( this, { - click: [ 'onButtonClick', +1 ] - } ); - this.minusButton.connect( this, { - click: [ 'onButtonClick', -1 ] - } ); + if ( config.showButtons ) { + this.plusButton.connect( this, { + click: [ 'onButtonClick', +1 ] + } ); + this.minusButton.connect( this, { + click: [ 'onButtonClick', -1 ] + } ); + } // Initialization this.setIsInteger( !!config.isInteger ); @@ -5114,12 +5120,14 @@ OO.ui.NumberInputWidget = function OoUiNumberInputWidget( config ) { this.setStep( config.step, config.pageStep ); this.$field = $( '
' ).addClass( 'oo-ui-numberInputWidget-field' ) - .append( - this.minusButton.$element, - this.input.$element, - this.plusButton.$element - ); + .append( this.input.$element ); this.$element.addClass( 'oo-ui-numberInputWidget' ).append( this.$field ); + if ( config.showButtons ) { + this.$field + .prepend( this.minusButton.$element ) + .append( this.plusButton.$element ); + this.$element.addClass( 'oo-ui-numberInputWidget-buttoned' ); + } this.input.setValidation( this.validateNumber.bind( this ) ); }; diff --git a/resources/lib/oojs-ui/oojs-ui-windows-apex.css b/resources/lib/oojs-ui/oojs-ui-windows-apex.css index 68659d307e..dce6905309 100644 --- a/resources/lib/oojs-ui/oojs-ui-windows-apex.css +++ b/resources/lib/oojs-ui/oojs-ui-windows-apex.css @@ -1,12 +1,12 @@ /*! - * OOjs UI v0.16.2 + * OOjs UI v0.16.5 * https://www.mediawiki.org/wiki/OOjs_UI * * Copyright 2011–2016 OOjs UI Team and other contributors. * Released under the MIT license * http://oojs.mit-license.org * - * Date: 2016-03-08T21:46:53Z + * Date: 2016-04-07T15:12:44Z */ .oo-ui-actionWidget.oo-ui-pendingElement-pending { background-image: /* @embed */ url(themes/apex/images/textures/pending.gif); @@ -21,7 +21,7 @@ box-sizing: border-box; } .oo-ui-window-content:focus { - outline: none; + outline: 0; } .oo-ui-window-head, .oo-ui-window-foot { @@ -402,6 +402,8 @@ .oo-ui-windowManager-modal.oo-ui-windowManager-floating > .oo-ui-dialog > .oo-ui-window-frame { top: 1em; bottom: 1em; + max-height: 100%; + max-height: calc(100% - 2em); border: 1px solid #cccccc; border-radius: 0.5em; box-shadow: 0 0.2em 1em rgba(0, 0, 0, 0.3); diff --git a/resources/lib/oojs-ui/oojs-ui-windows-mediawiki.css b/resources/lib/oojs-ui/oojs-ui-windows-mediawiki.css index e1e5b51d5e..747f8e947d 100644 --- a/resources/lib/oojs-ui/oojs-ui-windows-mediawiki.css +++ b/resources/lib/oojs-ui/oojs-ui-windows-mediawiki.css @@ -1,12 +1,12 @@ /*! - * OOjs UI v0.16.2 + * OOjs UI v0.16.5 * https://www.mediawiki.org/wiki/OOjs_UI * * Copyright 2011–2016 OOjs UI Team and other contributors. * Released under the MIT license * http://oojs.mit-license.org * - * Date: 2016-03-08T21:46:53Z + * Date: 2016-04-07T15:12:44Z */ .oo-ui-window { background: transparent; @@ -17,7 +17,7 @@ box-sizing: border-box; } .oo-ui-window-content:focus { - outline: none; + outline: 0; } .oo-ui-window-head, .oo-ui-window-foot { @@ -377,6 +377,8 @@ .oo-ui-windowManager-modal.oo-ui-windowManager-floating > .oo-ui-dialog > .oo-ui-window-frame { top: 1em; bottom: 1em; + max-height: 100%; + max-height: calc(100% - 2em); border: 1px solid #aaaaaa; border-radius: 2px; box-shadow: 0 0.15em 0 0 rgba(0, 0, 0, 0.15); diff --git a/resources/lib/oojs-ui/oojs-ui-windows.js b/resources/lib/oojs-ui/oojs-ui-windows.js index dbd50ed645..9fd96f027d 100644 --- a/resources/lib/oojs-ui/oojs-ui-windows.js +++ b/resources/lib/oojs-ui/oojs-ui-windows.js @@ -1,12 +1,12 @@ /*! - * OOjs UI v0.16.2 + * OOjs UI v0.16.5 * https://www.mediawiki.org/wiki/OOjs_UI * * Copyright 2011–2016 OOjs UI Team and other contributors. * Released under the MIT license * http://oojs.mit-license.org * - * Date: 2016-03-08T21:46:49Z + * Date: 2016-04-07T15:12:41Z */ ( function ( OO ) { @@ -2060,9 +2060,9 @@ OO.ui.Window.prototype.updateSize = function () { * @param {string|number} [dim.width] Width * @param {string|number} [dim.minWidth] Minimum width * @param {string|number} [dim.maxWidth] Maximum width - * @param {string|number} [dim.width] Height, omit to set based on height of contents - * @param {string|number} [dim.minWidth] Minimum height - * @param {string|number} [dim.maxWidth] Maximum height + * @param {string|number} [dim.height] Height, omit to set based on height of contents + * @param {string|number} [dim.minHeight] Minimum height + * @param {string|number} [dim.maxHeight] Maximum height * @chainable */ OO.ui.Window.prototype.setDimensions = function ( dim ) { diff --git a/resources/lib/oojs-ui/themes/apex/icons-content.json b/resources/lib/oojs-ui/themes/apex/icons-content.json index c5652565cc..394ec85ea7 100644 --- a/resources/lib/oojs-ui/themes/apex/icons-content.json +++ b/resources/lib/oojs-ui/themes/apex/icons-content.json @@ -2,6 +2,10 @@ "prefix": "oo-ui-icon", "intro": "@import '../../../../src/styles/common';", "images": { + "articles": { "file": { + "ltr": "images/icons/articles-ltr.svg", + "rtl": "images/icons/articles-rtl.svg" + } }, "articleRedirect": { "file": { "ltr": "images/icons/articleRedirect-ltr.svg", "rtl": "images/icons/articleRedirect-rtl.svg" diff --git a/resources/lib/oojs-ui/themes/apex/images/icons/articles-ltr.png b/resources/lib/oojs-ui/themes/apex/images/icons/articles-ltr.png new file mode 100644 index 0000000000..7dc69876bc Binary files /dev/null and b/resources/lib/oojs-ui/themes/apex/images/icons/articles-ltr.png differ diff --git a/resources/lib/oojs-ui/themes/apex/images/icons/articles-ltr.svg b/resources/lib/oojs-ui/themes/apex/images/icons/articles-ltr.svg new file mode 100644 index 0000000000..9dd3404f4b --- /dev/null +++ b/resources/lib/oojs-ui/themes/apex/images/icons/articles-ltr.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/resources/lib/oojs-ui/themes/apex/images/icons/articles-rtl.png b/resources/lib/oojs-ui/themes/apex/images/icons/articles-rtl.png new file mode 100644 index 0000000000..9a7ce13f8d Binary files /dev/null and b/resources/lib/oojs-ui/themes/apex/images/icons/articles-rtl.png differ diff --git a/resources/lib/oojs-ui/themes/apex/images/icons/articles-rtl.svg b/resources/lib/oojs-ui/themes/apex/images/icons/articles-rtl.svg new file mode 100644 index 0000000000..b57dae255f --- /dev/null +++ b/resources/lib/oojs-ui/themes/apex/images/icons/articles-rtl.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/resources/lib/oojs-ui/themes/mediawiki/icons-content.json b/resources/lib/oojs-ui/themes/mediawiki/icons-content.json index 0c5f6f9fbf..c04573f64f 100644 --- a/resources/lib/oojs-ui/themes/mediawiki/icons-content.json +++ b/resources/lib/oojs-ui/themes/mediawiki/icons-content.json @@ -13,6 +13,10 @@ "ltr": "images/icons/article-ltr.svg", "rtl": "images/icons/article-rtl.svg" } }, + "articles": { "file": { + "ltr": "images/icons/articles-ltr.svg", + "rtl": "images/icons/articles-rtl.svg" + } }, "articleCheck": { "file": { "ltr": "images/icons/articleCheck-ltr.svg", "rtl": "images/icons/articleCheck-rtl.svg" diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/articles-ltr-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/articles-ltr-invert.png new file mode 100644 index 0000000000..edfe406416 Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/articles-ltr-invert.png differ diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/articles-ltr-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/articles-ltr-invert.svg new file mode 100644 index 0000000000..8397962777 --- /dev/null +++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/articles-ltr-invert.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/articles-ltr.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/articles-ltr.png new file mode 100644 index 0000000000..7dc69876bc Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/articles-ltr.png differ diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/articles-ltr.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/articles-ltr.svg new file mode 100644 index 0000000000..9dd3404f4b --- /dev/null +++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/articles-ltr.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/articles-rtl-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/articles-rtl-invert.png new file mode 100644 index 0000000000..153d534851 Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/articles-rtl-invert.png differ diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/articles-rtl-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/articles-rtl-invert.svg new file mode 100644 index 0000000000..12432a2877 --- /dev/null +++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/articles-rtl-invert.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/articles-rtl.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/articles-rtl.png new file mode 100644 index 0000000000..9a7ce13f8d Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/articles-rtl.png differ diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/articles-rtl.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/articles-rtl.svg new file mode 100644 index 0000000000..b57dae255f --- /dev/null +++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/articles-rtl.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/close-ltr-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/close-ltr-invert.png index a146530f38..a35e9d12d2 100644 Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/close-ltr-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/close-ltr-invert.png differ diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/close-ltr-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/close-ltr-invert.svg index 072276b076..b90f0318f9 100644 --- a/resources/lib/oojs-ui/themes/mediawiki/images/icons/close-ltr-invert.svg +++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/close-ltr-invert.svg @@ -1,6 +1,6 @@ - + diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/close-ltr.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/close-ltr.png index d768fc33b9..b6a42b8054 100644 Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/close-ltr.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/close-ltr.png differ diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/close-ltr.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/close-ltr.svg index 1427670d0c..c2693163e4 100644 --- a/resources/lib/oojs-ui/themes/mediawiki/images/icons/close-ltr.svg +++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/close-ltr.svg @@ -1,6 +1,6 @@ - + diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/close-rtl-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/close-rtl-invert.png index f484f62115..16462a2683 100644 Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/close-rtl-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/close-rtl-invert.png differ diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/close-rtl-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/close-rtl-invert.svg index 19ddef688a..34afc435ef 100644 --- a/resources/lib/oojs-ui/themes/mediawiki/images/icons/close-rtl-invert.svg +++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/close-rtl-invert.svg @@ -1,6 +1,6 @@ - + diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/close-rtl.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/close-rtl.png index 504c534a36..e3e24176b5 100644 Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/close-rtl.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/close-rtl.png differ diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/close-rtl.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/close-rtl.svg index 6e0ca93781..36e58ec2f0 100644 --- a/resources/lib/oojs-ui/themes/mediawiki/images/icons/close-rtl.svg +++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/close-rtl.svg @@ -1,6 +1,6 @@ - + diff --git a/resources/lib/sinonjs/sinon-1.15.4.js b/resources/lib/sinonjs/sinon-1.15.4.js deleted file mode 100644 index 20bc9e208d..0000000000 --- a/resources/lib/sinonjs/sinon-1.15.4.js +++ /dev/null @@ -1,5949 +0,0 @@ -/** - * Sinon.JS 1.15.4, 2015/06/27 - * - * @author Christian Johansen (christian@cjohansen.no) - * @author Contributors: https://github.com/cjohansen/Sinon.JS/blob/master/AUTHORS - * - * (The BSD License) - * - * Copyright (c) 2010-2014, Christian Johansen, christian@cjohansen.no - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * * Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * * Neither the name of Christian Johansen nor the names of his contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -(function (root, factory) { - 'use strict'; - if (typeof define === 'function' && define.amd) { - define('sinon', [], function () { - return (root.sinon = factory()); - }); - } else if (typeof exports === 'object') { - module.exports = factory(); - } else { - root.sinon = factory(); - } -}(this, function () { - 'use strict'; - var samsam, formatio, lolex; - (function () { - function define(mod, deps, fn) { - if (mod == "samsam") { - samsam = deps(); - } else if (typeof deps === "function" && mod.length === 0) { - lolex = deps(); - } else if (typeof fn === "function") { - formatio = fn(samsam); - } - } - define.amd = {}; -((typeof define === "function" && define.amd && function (m) { define("samsam", m); }) || - (typeof module === "object" && - function (m) { module.exports = m(); }) || // Node - function (m) { this.samsam = m(); } // Browser globals -)(function () { - var o = Object.prototype; - var div = typeof document !== "undefined" && document.createElement("div"); - - function isNaN(value) { - // Unlike global isNaN, this avoids type coercion - // typeof check avoids IE host object issues, hat tip to - // lodash - var val = value; // JsLint thinks value !== value is "weird" - return typeof value === "number" && value !== val; - } - - function getClass(value) { - // Returns the internal [[Class]] by calling Object.prototype.toString - // with the provided value as this. Return value is a string, naming the - // internal class, e.g. "Array" - return o.toString.call(value).split(/[ \]]/)[1]; - } - - /** - * @name samsam.isArguments - * @param Object object - * - * Returns ``true`` if ``object`` is an ``arguments`` object, - * ``false`` otherwise. - */ - function isArguments(object) { - if (getClass(object) === 'Arguments') { return true; } - if (typeof object !== "object" || typeof object.length !== "number" || - getClass(object) === "Array") { - return false; - } - if (typeof object.callee == "function") { return true; } - try { - object[object.length] = 6; - delete object[object.length]; - } catch (e) { - return true; - } - return false; - } - - /** - * @name samsam.isElement - * @param Object object - * - * Returns ``true`` if ``object`` is a DOM element node. Unlike - * Underscore.js/lodash, this function will return ``false`` if ``object`` - * is an *element-like* object, i.e. a regular object with a ``nodeType`` - * property that holds the value ``1``. - */ - function isElement(object) { - if (!object || object.nodeType !== 1 || !div) { return false; } - try { - object.appendChild(div); - object.removeChild(div); - } catch (e) { - return false; - } - return true; - } - - /** - * @name samsam.keys - * @param Object object - * - * Return an array of own property names. - */ - function keys(object) { - var ks = [], prop; - for (prop in object) { - if (o.hasOwnProperty.call(object, prop)) { ks.push(prop); } - } - return ks; - } - - /** - * @name samsam.isDate - * @param Object value - * - * Returns true if the object is a ``Date``, or *date-like*. Duck typing - * of date objects work by checking that the object has a ``getTime`` - * function whose return value equals the return value from the object's - * ``valueOf``. - */ - function isDate(value) { - return typeof value.getTime == "function" && - value.getTime() == value.valueOf(); - } - - /** - * @name samsam.isNegZero - * @param Object value - * - * Returns ``true`` if ``value`` is ``-0``. - */ - function isNegZero(value) { - return value === 0 && 1 / value === -Infinity; - } - - /** - * @name samsam.equal - * @param Object obj1 - * @param Object obj2 - * - * Returns ``true`` if two objects are strictly equal. Compared to - * ``===`` there are two exceptions: - * - * - NaN is considered equal to NaN - * - -0 and +0 are not considered equal - */ - function identical(obj1, obj2) { - if (obj1 === obj2 || (isNaN(obj1) && isNaN(obj2))) { - return obj1 !== 0 || isNegZero(obj1) === isNegZero(obj2); - } - } - - - /** - * @name samsam.deepEqual - * @param Object obj1 - * @param Object obj2 - * - * Deep equal comparison. Two values are "deep equal" if: - * - * - They are equal, according to samsam.identical - * - They are both date objects representing the same time - * - They are both arrays containing elements that are all deepEqual - * - They are objects with the same set of properties, and each property - * in ``obj1`` is deepEqual to the corresponding property in ``obj2`` - * - * Supports cyclic objects. - */ - function deepEqualCyclic(obj1, obj2) { - - // used for cyclic comparison - // contain already visited objects - var objects1 = [], - objects2 = [], - // contain pathes (position in the object structure) - // of the already visited objects - // indexes same as in objects arrays - paths1 = [], - paths2 = [], - // contains combinations of already compared objects - // in the manner: { "$1['ref']$2['ref']": true } - compared = {}; - - /** - * used to check, if the value of a property is an object - * (cyclic logic is only needed for objects) - * only needed for cyclic logic - */ - function isObject(value) { - - if (typeof value === 'object' && value !== null && - !(value instanceof Boolean) && - !(value instanceof Date) && - !(value instanceof Number) && - !(value instanceof RegExp) && - !(value instanceof String)) { - - return true; - } - - return false; - } - - /** - * returns the index of the given object in the - * given objects array, -1 if not contained - * only needed for cyclic logic - */ - function getIndex(objects, obj) { - - var i; - for (i = 0; i < objects.length; i++) { - if (objects[i] === obj) { - return i; - } - } - - return -1; - } - - // does the recursion for the deep equal check - return (function deepEqual(obj1, obj2, path1, path2) { - var type1 = typeof obj1; - var type2 = typeof obj2; - - // == null also matches undefined - if (obj1 === obj2 || - isNaN(obj1) || isNaN(obj2) || - obj1 == null || obj2 == null || - type1 !== "object" || type2 !== "object") { - - return identical(obj1, obj2); - } - - // Elements are only equal if identical(expected, actual) - if (isElement(obj1) || isElement(obj2)) { return false; } - - var isDate1 = isDate(obj1), isDate2 = isDate(obj2); - if (isDate1 || isDate2) { - if (!isDate1 || !isDate2 || obj1.getTime() !== obj2.getTime()) { - return false; - } - } - - if (obj1 instanceof RegExp && obj2 instanceof RegExp) { - if (obj1.toString() !== obj2.toString()) { return false; } - } - - var class1 = getClass(obj1); - var class2 = getClass(obj2); - var keys1 = keys(obj1); - var keys2 = keys(obj2); - - if (isArguments(obj1) || isArguments(obj2)) { - if (obj1.length !== obj2.length) { return false; } - } else { - if (type1 !== type2 || class1 !== class2 || - keys1.length !== keys2.length) { - return false; - } - } - - var key, i, l, - // following vars are used for the cyclic logic - value1, value2, - isObject1, isObject2, - index1, index2, - newPath1, newPath2; - - for (i = 0, l = keys1.length; i < l; i++) { - key = keys1[i]; - if (!o.hasOwnProperty.call(obj2, key)) { - return false; - } - - // Start of the cyclic logic - - value1 = obj1[key]; - value2 = obj2[key]; - - isObject1 = isObject(value1); - isObject2 = isObject(value2); - - // determine, if the objects were already visited - // (it's faster to check for isObject first, than to - // get -1 from getIndex for non objects) - index1 = isObject1 ? getIndex(objects1, value1) : -1; - index2 = isObject2 ? getIndex(objects2, value2) : -1; - - // determine the new pathes of the objects - // - for non cyclic objects the current path will be extended - // by current property name - // - for cyclic objects the stored path is taken - newPath1 = index1 !== -1 - ? paths1[index1] - : path1 + '[' + JSON.stringify(key) + ']'; - newPath2 = index2 !== -1 - ? paths2[index2] - : path2 + '[' + JSON.stringify(key) + ']'; - - // stop recursion if current objects are already compared - if (compared[newPath1 + newPath2]) { - return true; - } - - // remember the current objects and their pathes - if (index1 === -1 && isObject1) { - objects1.push(value1); - paths1.push(newPath1); - } - if (index2 === -1 && isObject2) { - objects2.push(value2); - paths2.push(newPath2); - } - - // remember that the current objects are already compared - if (isObject1 && isObject2) { - compared[newPath1 + newPath2] = true; - } - - // End of cyclic logic - - // neither value1 nor value2 is a cycle - // continue with next level - if (!deepEqual(value1, value2, newPath1, newPath2)) { - return false; - } - } - - return true; - - }(obj1, obj2, '$1', '$2')); - } - - var match; - - function arrayContains(array, subset) { - if (subset.length === 0) { return true; } - var i, l, j, k; - for (i = 0, l = array.length; i < l; ++i) { - if (match(array[i], subset[0])) { - for (j = 0, k = subset.length; j < k; ++j) { - if (!match(array[i + j], subset[j])) { return false; } - } - return true; - } - } - return false; - } - - /** - * @name samsam.match - * @param Object object - * @param Object matcher - * - * Compare arbitrary value ``object`` with matcher. - */ - match = function match(object, matcher) { - if (matcher && typeof matcher.test === "function") { - return matcher.test(object); - } - - if (typeof matcher === "function") { - return matcher(object) === true; - } - - if (typeof matcher === "string") { - matcher = matcher.toLowerCase(); - var notNull = typeof object === "string" || !!object; - return notNull && - (String(object)).toLowerCase().indexOf(matcher) >= 0; - } - - if (typeof matcher === "number") { - return matcher === object; - } - - if (typeof matcher === "boolean") { - return matcher === object; - } - - if (typeof(matcher) === "undefined") { - return typeof(object) === "undefined"; - } - - if (matcher === null) { - return object === null; - } - - if (getClass(object) === "Array" && getClass(matcher) === "Array") { - return arrayContains(object, matcher); - } - - if (matcher && typeof matcher === "object") { - if (matcher === object) { - return true; - } - var prop; - for (prop in matcher) { - var value = object[prop]; - if (typeof value === "undefined" && - typeof object.getAttribute === "function") { - value = object.getAttribute(prop); - } - if (matcher[prop] === null || typeof matcher[prop] === 'undefined') { - if (value !== matcher[prop]) { - return false; - } - } else if (typeof value === "undefined" || !match(value, matcher[prop])) { - return false; - } - } - return true; - } - - throw new Error("Matcher was not a string, a number, a " + - "function, a boolean or an object"); - }; - - return { - isArguments: isArguments, - isElement: isElement, - isDate: isDate, - isNegZero: isNegZero, - identical: identical, - deepEqual: deepEqualCyclic, - match: match, - keys: keys - }; -}); -((typeof define === "function" && define.amd && function (m) { - define("formatio", ["samsam"], m); -}) || (typeof module === "object" && function (m) { - module.exports = m(require("samsam")); -}) || function (m) { this.formatio = m(this.samsam); } -)(function (samsam) { - - var formatio = { - excludeConstructors: ["Object", /^.$/], - quoteStrings: true, - limitChildrenCount: 0 - }; - - var hasOwn = Object.prototype.hasOwnProperty; - - var specialObjects = []; - if (typeof global !== "undefined") { - specialObjects.push({ object: global, value: "[object global]" }); - } - if (typeof document !== "undefined") { - specialObjects.push({ - object: document, - value: "[object HTMLDocument]" - }); - } - if (typeof window !== "undefined") { - specialObjects.push({ object: window, value: "[object Window]" }); - } - - function functionName(func) { - if (!func) { return ""; } - if (func.displayName) { return func.displayName; } - if (func.name) { return func.name; } - var matches = func.toString().match(/function\s+([^\(]+)/m); - return (matches && matches[1]) || ""; - } - - function constructorName(f, object) { - var name = functionName(object && object.constructor); - var excludes = f.excludeConstructors || - formatio.excludeConstructors || []; - - var i, l; - for (i = 0, l = excludes.length; i < l; ++i) { - if (typeof excludes[i] === "string" && excludes[i] === name) { - return ""; - } else if (excludes[i].test && excludes[i].test(name)) { - return ""; - } - } - - return name; - } - - function isCircular(object, objects) { - if (typeof object !== "object") { return false; } - var i, l; - for (i = 0, l = objects.length; i < l; ++i) { - if (objects[i] === object) { return true; } - } - return false; - } - - function ascii(f, object, processed, indent) { - if (typeof object === "string") { - var qs = f.quoteStrings; - var quote = typeof qs !== "boolean" || qs; - return processed || quote ? '"' + object + '"' : object; - } - - if (typeof object === "function" && !(object instanceof RegExp)) { - return ascii.func(object); - } - - processed = processed || []; - - if (isCircular(object, processed)) { return "[Circular]"; } - - if (Object.prototype.toString.call(object) === "[object Array]") { - return ascii.array.call(f, object, processed); - } - - if (!object) { return String((1/object) === -Infinity ? "-0" : object); } - if (samsam.isElement(object)) { return ascii.element(object); } - - if (typeof object.toString === "function" && - object.toString !== Object.prototype.toString) { - return object.toString(); - } - - var i, l; - for (i = 0, l = specialObjects.length; i < l; i++) { - if (object === specialObjects[i].object) { - return specialObjects[i].value; - } - } - - return ascii.object.call(f, object, processed, indent); - } - - ascii.func = function (func) { - return "function " + functionName(func) + "() {}"; - }; - - ascii.array = function (array, processed) { - processed = processed || []; - processed.push(array); - var pieces = []; - var i, l; - l = (this.limitChildrenCount > 0) ? - Math.min(this.limitChildrenCount, array.length) : array.length; - - for (i = 0; i < l; ++i) { - pieces.push(ascii(this, array[i], processed)); - } - - if(l < array.length) - pieces.push("[... " + (array.length - l) + " more elements]"); - - return "[" + pieces.join(", ") + "]"; - }; - - ascii.object = function (object, processed, indent) { - processed = processed || []; - processed.push(object); - indent = indent || 0; - var pieces = [], properties = samsam.keys(object).sort(); - var length = 3; - var prop, str, obj, i, k, l; - l = (this.limitChildrenCount > 0) ? - Math.min(this.limitChildrenCount, properties.length) : properties.length; - - for (i = 0; i < l; ++i) { - prop = properties[i]; - obj = object[prop]; - - if (isCircular(obj, processed)) { - str = "[Circular]"; - } else { - str = ascii(this, obj, processed, indent + 2); - } - - str = (/\s/.test(prop) ? '"' + prop + '"' : prop) + ": " + str; - length += str.length; - pieces.push(str); - } - - var cons = constructorName(this, object); - var prefix = cons ? "[" + cons + "] " : ""; - var is = ""; - for (i = 0, k = indent; i < k; ++i) { is += " "; } - - if(l < properties.length) - pieces.push("[... " + (properties.length - l) + " more elements]"); - - if (length + indent > 80) { - return prefix + "{\n " + is + pieces.join(",\n " + is) + "\n" + - is + "}"; - } - return prefix + "{ " + pieces.join(", ") + " }"; - }; - - ascii.element = function (element) { - var tagName = element.tagName.toLowerCase(); - var attrs = element.attributes, attr, pairs = [], attrName, i, l, val; - - for (i = 0, l = attrs.length; i < l; ++i) { - attr = attrs.item(i); - attrName = attr.nodeName.toLowerCase().replace("html:", ""); - val = attr.nodeValue; - if (attrName !== "contenteditable" || val !== "inherit") { - if (!!val) { pairs.push(attrName + "=\"" + val + "\""); } - } - } - - var formatted = "<" + tagName + (pairs.length > 0 ? " " : ""); - var content = element.innerHTML; - - if (content.length > 20) { - content = content.substr(0, 20) + "[...]"; - } - - var res = formatted + pairs.join(" ") + ">" + content + - ""; - - return res.replace(/ contentEditable="inherit"/, ""); - }; - - function Formatio(options) { - for (var opt in options) { - this[opt] = options[opt]; - } - } - - Formatio.prototype = { - functionName: functionName, - - configure: function (options) { - return new Formatio(options); - }, - - constructorName: function (object) { - return constructorName(this, object); - }, - - ascii: function (object, processed, indent) { - return ascii(this, object, processed, indent); - } - }; - - return Formatio.prototype; -}); -!function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var f;"undefined"!=typeof window?f=window:"undefined"!=typeof global?f=global:"undefined"!=typeof self&&(f=self),f.lolex=e()}}(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o 3 || !/^(\d\d:){0,2}\d\d?$/.test(str)) { - throw new Error("tick only understands numbers and 'h:m:s'"); - } - - while (i--) { - parsed = parseInt(strings[i], 10); - - if (parsed >= 60) { - throw new Error("Invalid time " + str); - } - - ms += parsed * Math.pow(60, (l - i - 1)); - } - - return ms * 1000; -} - -/** - * Used to grok the `now` parameter to createClock. - */ -function getEpoch(epoch) { - if (!epoch) { return 0; } - if (typeof epoch.getTime === "function") { return epoch.getTime(); } - if (typeof epoch === "number") { return epoch; } - throw new TypeError("now should be milliseconds since UNIX epoch"); -} - -function inRange(from, to, timer) { - return timer && timer.callAt >= from && timer.callAt <= to; -} - -function mirrorDateProperties(target, source) { - if (source.now) { - target.now = function now() { - return target.clock.now; - }; - } else { - delete target.now; - } - - if (source.toSource) { - target.toSource = function toSource() { - return source.toSource(); - }; - } else { - delete target.toSource; - } - - target.toString = function toString() { - return source.toString(); - }; - - target.prototype = source.prototype; - target.parse = source.parse; - target.UTC = source.UTC; - target.prototype.toUTCString = source.prototype.toUTCString; - - for (var prop in source) { - if (source.hasOwnProperty(prop)) { - target[prop] = source[prop]; - } - } - - return target; -} - -function createDate() { - function ClockDate(year, month, date, hour, minute, second, ms) { - // Defensive and verbose to avoid potential harm in passing - // explicit undefined when user does not pass argument - switch (arguments.length) { - case 0: - return new NativeDate(ClockDate.clock.now); - case 1: - return new NativeDate(year); - case 2: - return new NativeDate(year, month); - case 3: - return new NativeDate(year, month, date); - case 4: - return new NativeDate(year, month, date, hour); - case 5: - return new NativeDate(year, month, date, hour, minute); - case 6: - return new NativeDate(year, month, date, hour, minute, second); - default: - return new NativeDate(year, month, date, hour, minute, second, ms); - } - } - - return mirrorDateProperties(ClockDate, NativeDate); -} - -function addTimer(clock, timer) { - if (typeof timer.func === "undefined") { - throw new Error("Callback must be provided to timer calls"); - } - - if (!clock.timers) { - clock.timers = {}; - } - - timer.id = id++; - timer.createdAt = clock.now; - timer.callAt = clock.now + (timer.delay || 0); - - clock.timers[timer.id] = timer; - - if (addTimerReturnsObject) { - return { - id: timer.id, - ref: function() {}, - unref: function() {} - }; - } - else { - return timer.id; - } -} - -function firstTimerInRange(clock, from, to) { - var timers = clock.timers, timer = null; - - for (var id in timers) { - if (!inRange(from, to, timers[id])) { - continue; - } - - if (!timer || ~compareTimers(timer, timers[id])) { - timer = timers[id]; - } - } - - return timer; -} - -function compareTimers(a, b) { - // Sort first by absolute timing - if (a.callAt < b.callAt) { - return -1; - } - if (a.callAt > b.callAt) { - return 1; - } - - // Sort next by immediate, immediate timers take precedence - if (a.immediate && !b.immediate) { - return -1; - } - if (!a.immediate && b.immediate) { - return 1; - } - - // Sort next by creation time, earlier-created timers take precedence - if (a.createdAt < b.createdAt) { - return -1; - } - if (a.createdAt > b.createdAt) { - return 1; - } - - // Sort next by id, lower-id timers take precedence - if (a.id < b.id) { - return -1; - } - if (a.id > b.id) { - return 1; - } - - // As timer ids are unique, no fallback `0` is necessary -} - -function callTimer(clock, timer) { - if (typeof timer.interval == "number") { - clock.timers[timer.id].callAt += timer.interval; - } else { - delete clock.timers[timer.id]; - } - - try { - if (typeof timer.func == "function") { - timer.func.apply(null, timer.args); - } else { - eval(timer.func); - } - } catch (e) { - var exception = e; - } - - if (!clock.timers[timer.id]) { - if (exception) { - throw exception; - } - return; - } - - if (exception) { - throw exception; - } -} - -function uninstall(clock, target) { - var method; - - for (var i = 0, l = clock.methods.length; i < l; i++) { - method = clock.methods[i]; - - if (target[method].hadOwnProperty) { - target[method] = clock["_" + method]; - } else { - try { - delete target[method]; - } catch (e) {} - } - } - - // Prevent multiple executions which will completely remove these props - clock.methods = []; -} - -function hijackMethod(target, method, clock) { - clock[method].hadOwnProperty = Object.prototype.hasOwnProperty.call(target, method); - clock["_" + method] = target[method]; - - if (method == "Date") { - var date = mirrorDateProperties(clock[method], target[method]); - target[method] = date; - } else { - target[method] = function () { - return clock[method].apply(clock, arguments); - }; - - for (var prop in clock[method]) { - if (clock[method].hasOwnProperty(prop)) { - target[method][prop] = clock[method][prop]; - } - } - } - - target[method].clock = clock; -} - -var timers = { - setTimeout: setTimeout, - clearTimeout: clearTimeout, - setImmediate: (typeof setImmediate !== "undefined" ? setImmediate : undefined), - clearImmediate: (typeof clearImmediate !== "undefined" ? clearImmediate: undefined), - setInterval: setInterval, - clearInterval: clearInterval, - Date: Date -}; - -var keys = Object.keys || function (obj) { - var ks = []; - for (var key in obj) { - ks.push(key); - } - return ks; -}; - -exports.timers = timers; - -var createClock = exports.createClock = function (now) { - var clock = { - now: getEpoch(now), - timeouts: {}, - Date: createDate() - }; - - clock.Date.clock = clock; - - clock.setTimeout = function setTimeout(func, timeout) { - return addTimer(clock, { - func: func, - args: Array.prototype.slice.call(arguments, 2), - delay: timeout - }); - }; - - clock.clearTimeout = function clearTimeout(timerId) { - if (!timerId) { - // null appears to be allowed in most browsers, and appears to be - // relied upon by some libraries, like Bootstrap carousel - return; - } - if (!clock.timers) { - clock.timers = []; - } - // in Node, timerId is an object with .ref()/.unref(), and - // its .id field is the actual timer id. - if (typeof timerId === "object") { - timerId = timerId.id - } - if (timerId in clock.timers) { - delete clock.timers[timerId]; - } - }; - - clock.setInterval = function setInterval(func, timeout) { - return addTimer(clock, { - func: func, - args: Array.prototype.slice.call(arguments, 2), - delay: timeout, - interval: timeout - }); - }; - - clock.clearInterval = function clearInterval(timerId) { - clock.clearTimeout(timerId); - }; - - clock.setImmediate = function setImmediate(func) { - return addTimer(clock, { - func: func, - args: Array.prototype.slice.call(arguments, 1), - immediate: true - }); - }; - - clock.clearImmediate = function clearImmediate(timerId) { - clock.clearTimeout(timerId); - }; - - clock.tick = function tick(ms) { - ms = typeof ms == "number" ? ms : parseTime(ms); - var tickFrom = clock.now, tickTo = clock.now + ms, previous = clock.now; - var timer = firstTimerInRange(clock, tickFrom, tickTo); - - var firstException; - while (timer && tickFrom <= tickTo) { - if (clock.timers[timer.id]) { - tickFrom = clock.now = timer.callAt; - try { - callTimer(clock, timer); - } catch (e) { - firstException = firstException || e; - } - } - - timer = firstTimerInRange(clock, previous, tickTo); - previous = tickFrom; - } - - clock.now = tickTo; - - if (firstException) { - throw firstException; - } - - return clock.now; - }; - - clock.reset = function reset() { - clock.timers = {}; - }; - - return clock; -}; - -exports.install = function install(target, now, toFake) { - if (typeof target === "number") { - toFake = now; - now = target; - target = null; - } - - if (!target) { - target = global; - } - - var clock = createClock(now); - - clock.uninstall = function () { - uninstall(clock, target); - }; - - clock.methods = toFake || []; - - if (clock.methods.length === 0) { - clock.methods = keys(timers); - } - - for (var i = 0, l = clock.methods.length; i < l; i++) { - hijackMethod(target, clock.methods[i], clock); - } - - return clock; -}; - -}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -},{}]},{},[1])(1) -}); - })(); - var define; -/** - * Sinon core utilities. For internal use only. - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ - -var sinon = (function () { -"use strict"; - - var sinon; - var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require, exports, module) { - sinon = module.exports = require("./sinon/util/core"); - require("./sinon/extend"); - require("./sinon/typeOf"); - require("./sinon/times_in_words"); - require("./sinon/spy"); - require("./sinon/call"); - require("./sinon/behavior"); - require("./sinon/stub"); - require("./sinon/mock"); - require("./sinon/collection"); - require("./sinon/assert"); - require("./sinon/sandbox"); - require("./sinon/test"); - require("./sinon/test_case"); - require("./sinon/match"); - require("./sinon/format"); - require("./sinon/log_error"); - } - - if (isAMD) { - define(loadDependencies); - } else if (isNode) { - loadDependencies(require, module.exports, module); - sinon = module.exports; - } else { - sinon = {}; - } - - return sinon; -}()); - -/** - * @depend ../../sinon.js - */ -/** - * Sinon core utilities. For internal use only. - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ - -(function (sinon) { - var div = typeof document != "undefined" && document.createElement("div"); - var hasOwn = Object.prototype.hasOwnProperty; - - function isDOMNode(obj) { - var success = false; - - try { - obj.appendChild(div); - success = div.parentNode == obj; - } catch (e) { - return false; - } finally { - try { - obj.removeChild(div); - } catch (e) { - // Remove failed, not much we can do about that - } - } - - return success; - } - - function isElement(obj) { - return div && obj && obj.nodeType === 1 && isDOMNode(obj); - } - - function isFunction(obj) { - return typeof obj === "function" || !!(obj && obj.constructor && obj.call && obj.apply); - } - - function isReallyNaN(val) { - return typeof val === "number" && isNaN(val); - } - - function mirrorProperties(target, source) { - for (var prop in source) { - if (!hasOwn.call(target, prop)) { - target[prop] = source[prop]; - } - } - } - - function isRestorable(obj) { - return typeof obj === "function" && typeof obj.restore === "function" && obj.restore.sinon; - } - - // Cheap way to detect if we have ES5 support. - var hasES5Support = "keys" in Object; - - function makeApi(sinon) { - sinon.wrapMethod = function wrapMethod(object, property, method) { - if (!object) { - throw new TypeError("Should wrap property of object"); - } - - if (typeof method != "function" && typeof method != "object") { - throw new TypeError("Method wrapper should be a function or a property descriptor"); - } - - function checkWrappedMethod(wrappedMethod) { - if (!isFunction(wrappedMethod)) { - error = new TypeError("Attempted to wrap " + (typeof wrappedMethod) + " property " + - property + " as function"); - } else if (wrappedMethod.restore && wrappedMethod.restore.sinon) { - error = new TypeError("Attempted to wrap " + property + " which is already wrapped"); - } else if (wrappedMethod.calledBefore) { - var verb = !!wrappedMethod.returns ? "stubbed" : "spied on"; - error = new TypeError("Attempted to wrap " + property + " which is already " + verb); - } - - if (error) { - if (wrappedMethod && wrappedMethod.stackTrace) { - error.stack += "\n--------------\n" + wrappedMethod.stackTrace; - } - throw error; - } - } - - var error, wrappedMethod; - - // IE 8 does not support hasOwnProperty on the window object and Firefox has a problem - // when using hasOwn.call on objects from other frames. - var owned = object.hasOwnProperty ? object.hasOwnProperty(property) : hasOwn.call(object, property); - - if (hasES5Support) { - var methodDesc = (typeof method == "function") ? {value: method} : method, - wrappedMethodDesc = sinon.getPropertyDescriptor(object, property), - i; - - if (!wrappedMethodDesc) { - error = new TypeError("Attempted to wrap " + (typeof wrappedMethod) + " property " + - property + " as function"); - } else if (wrappedMethodDesc.restore && wrappedMethodDesc.restore.sinon) { - error = new TypeError("Attempted to wrap " + property + " which is already wrapped"); - } - if (error) { - if (wrappedMethodDesc && wrappedMethodDesc.stackTrace) { - error.stack += "\n--------------\n" + wrappedMethodDesc.stackTrace; - } - throw error; - } - - var types = sinon.objectKeys(methodDesc); - for (i = 0; i < types.length; i++) { - wrappedMethod = wrappedMethodDesc[types[i]]; - checkWrappedMethod(wrappedMethod); - } - - mirrorProperties(methodDesc, wrappedMethodDesc); - for (i = 0; i < types.length; i++) { - mirrorProperties(methodDesc[types[i]], wrappedMethodDesc[types[i]]); - } - Object.defineProperty(object, property, methodDesc); - } else { - wrappedMethod = object[property]; - checkWrappedMethod(wrappedMethod); - object[property] = method; - method.displayName = property; - } - - method.displayName = property; - - // Set up a stack trace which can be used later to find what line of - // code the original method was created on. - method.stackTrace = (new Error("Stack Trace for original")).stack; - - method.restore = function () { - // For prototype properties try to reset by delete first. - // If this fails (ex: localStorage on mobile safari) then force a reset - // via direct assignment. - if (!owned) { - // In some cases `delete` may throw an error - try { - delete object[property]; - } catch (e) {} - // For native code functions `delete` fails without throwing an error - // on Chrome < 43, PhantomJS, etc. - } else if (hasES5Support) { - Object.defineProperty(object, property, wrappedMethodDesc); - } - - // Use strict equality comparison to check failures then force a reset - // via direct assignment. - if (object[property] === method) { - object[property] = wrappedMethod; - } - }; - - method.restore.sinon = true; - - if (!hasES5Support) { - mirrorProperties(method, wrappedMethod); - } - - return method; - }; - - sinon.create = function create(proto) { - var F = function () {}; - F.prototype = proto; - return new F(); - }; - - sinon.deepEqual = function deepEqual(a, b) { - if (sinon.match && sinon.match.isMatcher(a)) { - return a.test(b); - } - - if (typeof a != "object" || typeof b != "object") { - if (isReallyNaN(a) && isReallyNaN(b)) { - return true; - } else { - return a === b; - } - } - - if (isElement(a) || isElement(b)) { - return a === b; - } - - if (a === b) { - return true; - } - - if ((a === null && b !== null) || (a !== null && b === null)) { - return false; - } - - if (a instanceof RegExp && b instanceof RegExp) { - return (a.source === b.source) && (a.global === b.global) && - (a.ignoreCase === b.ignoreCase) && (a.multiline === b.multiline); - } - - var aString = Object.prototype.toString.call(a); - if (aString != Object.prototype.toString.call(b)) { - return false; - } - - if (aString == "[object Date]") { - return a.valueOf() === b.valueOf(); - } - - var prop, aLength = 0, bLength = 0; - - if (aString == "[object Array]" && a.length !== b.length) { - return false; - } - - for (prop in a) { - aLength += 1; - - if (!(prop in b)) { - return false; - } - - if (!deepEqual(a[prop], b[prop])) { - return false; - } - } - - for (prop in b) { - bLength += 1; - } - - return aLength == bLength; - }; - - sinon.functionName = function functionName(func) { - var name = func.displayName || func.name; - - // Use function decomposition as a last resort to get function - // name. Does not rely on function decomposition to work - if it - // doesn't debugging will be slightly less informative - // (i.e. toString will say 'spy' rather than 'myFunc'). - if (!name) { - var matches = func.toString().match(/function ([^\s\(]+)/); - name = matches && matches[1]; - } - - return name; - }; - - sinon.functionToString = function toString() { - if (this.getCall && this.callCount) { - var thisValue, prop, i = this.callCount; - - while (i--) { - thisValue = this.getCall(i).thisValue; - - for (prop in thisValue) { - if (thisValue[prop] === this) { - return prop; - } - } - } - } - - return this.displayName || "sinon fake"; - }; - - sinon.objectKeys = function objectKeys(obj) { - if (obj !== Object(obj)) { - throw new TypeError("sinon.objectKeys called on a non-object"); - } - - var keys = []; - var key; - for (key in obj) { - if (hasOwn.call(obj, key)) { - keys.push(key); - } - } - - return keys; - }; - - sinon.getPropertyDescriptor = function getPropertyDescriptor(object, property) { - var proto = object, descriptor; - while (proto && !(descriptor = Object.getOwnPropertyDescriptor(proto, property))) { - proto = Object.getPrototypeOf(proto); - } - return descriptor; - } - - sinon.getConfig = function (custom) { - var config = {}; - custom = custom || {}; - var defaults = sinon.defaultConfig; - - for (var prop in defaults) { - if (defaults.hasOwnProperty(prop)) { - config[prop] = custom.hasOwnProperty(prop) ? custom[prop] : defaults[prop]; - } - } - - return config; - }; - - sinon.defaultConfig = { - injectIntoThis: true, - injectInto: null, - properties: ["spy", "stub", "mock", "clock", "server", "requests"], - useFakeTimers: true, - useFakeServer: true - }; - - sinon.timesInWords = function timesInWords(count) { - return count == 1 && "once" || - count == 2 && "twice" || - count == 3 && "thrice" || - (count || 0) + " times"; - }; - - sinon.calledInOrder = function (spies) { - for (var i = 1, l = spies.length; i < l; i++) { - if (!spies[i - 1].calledBefore(spies[i]) || !spies[i].called) { - return false; - } - } - - return true; - }; - - sinon.orderByFirstCall = function (spies) { - return spies.sort(function (a, b) { - // uuid, won't ever be equal - var aCall = a.getCall(0); - var bCall = b.getCall(0); - var aId = aCall && aCall.callId || -1; - var bId = bCall && bCall.callId || -1; - - return aId < bId ? -1 : 1; - }); - }; - - sinon.createStubInstance = function (constructor) { - if (typeof constructor !== "function") { - throw new TypeError("The constructor should be a function."); - } - return sinon.stub(sinon.create(constructor.prototype)); - }; - - sinon.restore = function (object) { - if (object !== null && typeof object === "object") { - for (var prop in object) { - if (isRestorable(object[prop])) { - object[prop].restore(); - } - } - } else if (isRestorable(object)) { - object.restore(); - } - }; - - return sinon; - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require == "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require, exports) { - makeApi(exports); - } - - if (isAMD) { - define(loadDependencies); - } else if (isNode) { - loadDependencies(require, module.exports); - } else if (!sinon) { - return; - } else { - makeApi(sinon); - } -}(typeof sinon == "object" && sinon || null)); - -/** - * @depend util/core.js - */ - -(function (sinon) { - function makeApi(sinon) { - - // Adapted from https://developer.mozilla.org/en/docs/ECMAScript_DontEnum_attribute#JScript_DontEnum_Bug - var hasDontEnumBug = (function () { - var obj = { - constructor: function () { - return "0"; - }, - toString: function () { - return "1"; - }, - valueOf: function () { - return "2"; - }, - toLocaleString: function () { - return "3"; - }, - prototype: function () { - return "4"; - }, - isPrototypeOf: function () { - return "5"; - }, - propertyIsEnumerable: function () { - return "6"; - }, - hasOwnProperty: function () { - return "7"; - }, - length: function () { - return "8"; - }, - unique: function () { - return "9" - } - }; - - var result = []; - for (var prop in obj) { - result.push(obj[prop]()); - } - return result.join("") !== "0123456789"; - })(); - - /* Public: Extend target in place with all (own) properties from sources in-order. Thus, last source will - * override properties in previous sources. - * - * target - The Object to extend - * sources - Objects to copy properties from. - * - * Returns the extended target - */ - function extend(target /*, sources */) { - var sources = Array.prototype.slice.call(arguments, 1), - source, i, prop; - - for (i = 0; i < sources.length; i++) { - source = sources[i]; - - for (prop in source) { - if (source.hasOwnProperty(prop)) { - target[prop] = source[prop]; - } - } - - // Make sure we copy (own) toString method even when in JScript with DontEnum bug - // See https://developer.mozilla.org/en/docs/ECMAScript_DontEnum_attribute#JScript_DontEnum_Bug - if (hasDontEnumBug && source.hasOwnProperty("toString") && source.toString !== target.toString) { - target.toString = source.toString; - } - } - - return target; - }; - - sinon.extend = extend; - return sinon.extend; - } - - function loadDependencies(require, exports, module) { - var sinon = require("./util/core"); - module.exports = makeApi(sinon); - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require == "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - if (isAMD) { - define(loadDependencies); - } else if (isNode) { - loadDependencies(require, module.exports, module); - } else if (!sinon) { - return; - } else { - makeApi(sinon); - } -}(typeof sinon == "object" && sinon || null)); - -/** - * @depend util/core.js - */ - -(function (sinon) { - function makeApi(sinon) { - - function timesInWords(count) { - switch (count) { - case 1: - return "once"; - case 2: - return "twice"; - case 3: - return "thrice"; - default: - return (count || 0) + " times"; - } - } - - sinon.timesInWords = timesInWords; - return sinon.timesInWords; - } - - function loadDependencies(require, exports, module) { - var sinon = require("./util/core"); - module.exports = makeApi(sinon); - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require == "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - if (isAMD) { - define(loadDependencies); - } else if (isNode) { - loadDependencies(require, module.exports, module); - } else if (!sinon) { - return; - } else { - makeApi(sinon); - } -}(typeof sinon == "object" && sinon || null)); - -/** - * @depend util/core.js - */ -/** - * Format functions - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2014 Christian Johansen - */ - -(function (sinon, formatio) { - function makeApi(sinon) { - function typeOf(value) { - if (value === null) { - return "null"; - } else if (value === undefined) { - return "undefined"; - } - var string = Object.prototype.toString.call(value); - return string.substring(8, string.length - 1).toLowerCase(); - }; - - sinon.typeOf = typeOf; - return sinon.typeOf; - } - - function loadDependencies(require, exports, module) { - var sinon = require("./util/core"); - module.exports = makeApi(sinon); - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require == "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - if (isAMD) { - define(loadDependencies); - } else if (isNode) { - loadDependencies(require, module.exports, module); - } else if (!sinon) { - return; - } else { - makeApi(sinon); - } -}( - (typeof sinon == "object" && sinon || null), - (typeof formatio == "object" && formatio) -)); - -/** - * @depend util/core.js - * @depend typeOf.js - */ -/*jslint eqeqeq: false, onevar: false, plusplus: false*/ -/*global module, require, sinon*/ -/** - * Match functions - * - * @author Maximilian Antoni (mail@maxantoni.de) - * @license BSD - * - * Copyright (c) 2012 Maximilian Antoni - */ - -(function (sinon) { - function makeApi(sinon) { - function assertType(value, type, name) { - var actual = sinon.typeOf(value); - if (actual !== type) { - throw new TypeError("Expected type of " + name + " to be " + - type + ", but was " + actual); - } - } - - var matcher = { - toString: function () { - return this.message; - } - }; - - function isMatcher(object) { - return matcher.isPrototypeOf(object); - } - - function matchObject(expectation, actual) { - if (actual === null || actual === undefined) { - return false; - } - for (var key in expectation) { - if (expectation.hasOwnProperty(key)) { - var exp = expectation[key]; - var act = actual[key]; - if (match.isMatcher(exp)) { - if (!exp.test(act)) { - return false; - } - } else if (sinon.typeOf(exp) === "object") { - if (!matchObject(exp, act)) { - return false; - } - } else if (!sinon.deepEqual(exp, act)) { - return false; - } - } - } - return true; - } - - matcher.or = function (m2) { - if (!arguments.length) { - throw new TypeError("Matcher expected"); - } else if (!isMatcher(m2)) { - m2 = match(m2); - } - var m1 = this; - var or = sinon.create(matcher); - or.test = function (actual) { - return m1.test(actual) || m2.test(actual); - }; - or.message = m1.message + ".or(" + m2.message + ")"; - return or; - }; - - matcher.and = function (m2) { - if (!arguments.length) { - throw new TypeError("Matcher expected"); - } else if (!isMatcher(m2)) { - m2 = match(m2); - } - var m1 = this; - var and = sinon.create(matcher); - and.test = function (actual) { - return m1.test(actual) && m2.test(actual); - }; - and.message = m1.message + ".and(" + m2.message + ")"; - return and; - }; - - var match = function (expectation, message) { - var m = sinon.create(matcher); - var type = sinon.typeOf(expectation); - switch (type) { - case "object": - if (typeof expectation.test === "function") { - m.test = function (actual) { - return expectation.test(actual) === true; - }; - m.message = "match(" + sinon.functionName(expectation.test) + ")"; - return m; - } - var str = []; - for (var key in expectation) { - if (expectation.hasOwnProperty(key)) { - str.push(key + ": " + expectation[key]); - } - } - m.test = function (actual) { - return matchObject(expectation, actual); - }; - m.message = "match(" + str.join(", ") + ")"; - break; - case "number": - m.test = function (actual) { - return expectation == actual; - }; - break; - case "string": - m.test = function (actual) { - if (typeof actual !== "string") { - return false; - } - return actual.indexOf(expectation) !== -1; - }; - m.message = "match(\"" + expectation + "\")"; - break; - case "regexp": - m.test = function (actual) { - if (typeof actual !== "string") { - return false; - } - return expectation.test(actual); - }; - break; - case "function": - m.test = expectation; - if (message) { - m.message = message; - } else { - m.message = "match(" + sinon.functionName(expectation) + ")"; - } - break; - default: - m.test = function (actual) { - return sinon.deepEqual(expectation, actual); - }; - } - if (!m.message) { - m.message = "match(" + expectation + ")"; - } - return m; - }; - - match.isMatcher = isMatcher; - - match.any = match(function () { - return true; - }, "any"); - - match.defined = match(function (actual) { - return actual !== null && actual !== undefined; - }, "defined"); - - match.truthy = match(function (actual) { - return !!actual; - }, "truthy"); - - match.falsy = match(function (actual) { - return !actual; - }, "falsy"); - - match.same = function (expectation) { - return match(function (actual) { - return expectation === actual; - }, "same(" + expectation + ")"); - }; - - match.typeOf = function (type) { - assertType(type, "string", "type"); - return match(function (actual) { - return sinon.typeOf(actual) === type; - }, "typeOf(\"" + type + "\")"); - }; - - match.instanceOf = function (type) { - assertType(type, "function", "type"); - return match(function (actual) { - return actual instanceof type; - }, "instanceOf(" + sinon.functionName(type) + ")"); - }; - - function createPropertyMatcher(propertyTest, messagePrefix) { - return function (property, value) { - assertType(property, "string", "property"); - var onlyProperty = arguments.length === 1; - var message = messagePrefix + "(\"" + property + "\""; - if (!onlyProperty) { - message += ", " + value; - } - message += ")"; - return match(function (actual) { - if (actual === undefined || actual === null || - !propertyTest(actual, property)) { - return false; - } - return onlyProperty || sinon.deepEqual(value, actual[property]); - }, message); - }; - } - - match.has = createPropertyMatcher(function (actual, property) { - if (typeof actual === "object") { - return property in actual; - } - return actual[property] !== undefined; - }, "has"); - - match.hasOwn = createPropertyMatcher(function (actual, property) { - return actual.hasOwnProperty(property); - }, "hasOwn"); - - match.bool = match.typeOf("boolean"); - match.number = match.typeOf("number"); - match.string = match.typeOf("string"); - match.object = match.typeOf("object"); - match.func = match.typeOf("function"); - match.array = match.typeOf("array"); - match.regexp = match.typeOf("regexp"); - match.date = match.typeOf("date"); - - sinon.match = match; - return match; - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require == "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require, exports, module) { - var sinon = require("./util/core"); - require("./typeOf"); - module.exports = makeApi(sinon); - } - - if (isAMD) { - define(loadDependencies); - } else if (isNode) { - loadDependencies(require, module.exports, module); - } else if (!sinon) { - return; - } else { - makeApi(sinon); - } -}(typeof sinon == "object" && sinon || null)); - -/** - * @depend util/core.js - */ -/** - * Format functions - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2014 Christian Johansen - */ - -(function (sinon, formatio) { - function makeApi(sinon) { - function valueFormatter(value) { - return "" + value; - } - - function getFormatioFormatter() { - var formatter = formatio.configure({ - quoteStrings: false, - limitChildrenCount: 250 - }); - - function format() { - return formatter.ascii.apply(formatter, arguments); - }; - - return format; - } - - function getNodeFormatter(value) { - function format(value) { - return typeof value == "object" && value.toString === Object.prototype.toString ? util.inspect(value) : value; - }; - - try { - var util = require("util"); - } catch (e) { - /* Node, but no util module - would be very old, but better safe than sorry */ - } - - return util ? format : valueFormatter; - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require == "function", - formatter; - - if (isNode) { - try { - formatio = require("formatio"); - } catch (e) {} - } - - if (formatio) { - formatter = getFormatioFormatter() - } else if (isNode) { - formatter = getNodeFormatter(); - } else { - formatter = valueFormatter; - } - - sinon.format = formatter; - return sinon.format; - } - - function loadDependencies(require, exports, module) { - var sinon = require("./util/core"); - module.exports = makeApi(sinon); - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require == "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - if (isAMD) { - define(loadDependencies); - } else if (isNode) { - loadDependencies(require, module.exports, module); - } else if (!sinon) { - return; - } else { - makeApi(sinon); - } -}( - (typeof sinon == "object" && sinon || null), - (typeof formatio == "object" && formatio) -)); - -/** - * @depend util/core.js - * @depend match.js - * @depend format.js - */ -/** - * Spy calls - * - * @author Christian Johansen (christian@cjohansen.no) - * @author Maximilian Antoni (mail@maxantoni.de) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - * Copyright (c) 2013 Maximilian Antoni - */ - -(function (sinon) { - function makeApi(sinon) { - function throwYieldError(proxy, text, args) { - var msg = sinon.functionName(proxy) + text; - if (args.length) { - msg += " Received [" + slice.call(args).join(", ") + "]"; - } - throw new Error(msg); - } - - var slice = Array.prototype.slice; - - var callProto = { - calledOn: function calledOn(thisValue) { - if (sinon.match && sinon.match.isMatcher(thisValue)) { - return thisValue.test(this.thisValue); - } - return this.thisValue === thisValue; - }, - - calledWith: function calledWith() { - var l = arguments.length; - if (l > this.args.length) { - return false; - } - for (var i = 0; i < l; i += 1) { - if (!sinon.deepEqual(arguments[i], this.args[i])) { - return false; - } - } - - return true; - }, - - calledWithMatch: function calledWithMatch() { - var l = arguments.length; - if (l > this.args.length) { - return false; - } - for (var i = 0; i < l; i += 1) { - var actual = this.args[i]; - var expectation = arguments[i]; - if (!sinon.match || !sinon.match(expectation).test(actual)) { - return false; - } - } - return true; - }, - - calledWithExactly: function calledWithExactly() { - return arguments.length == this.args.length && - this.calledWith.apply(this, arguments); - }, - - notCalledWith: function notCalledWith() { - return !this.calledWith.apply(this, arguments); - }, - - notCalledWithMatch: function notCalledWithMatch() { - return !this.calledWithMatch.apply(this, arguments); - }, - - returned: function returned(value) { - return sinon.deepEqual(value, this.returnValue); - }, - - threw: function threw(error) { - if (typeof error === "undefined" || !this.exception) { - return !!this.exception; - } - - return this.exception === error || this.exception.name === error; - }, - - calledWithNew: function calledWithNew() { - return this.proxy.prototype && this.thisValue instanceof this.proxy; - }, - - calledBefore: function (other) { - return this.callId < other.callId; - }, - - calledAfter: function (other) { - return this.callId > other.callId; - }, - - callArg: function (pos) { - this.args[pos](); - }, - - callArgOn: function (pos, thisValue) { - this.args[pos].apply(thisValue); - }, - - callArgWith: function (pos) { - this.callArgOnWith.apply(this, [pos, null].concat(slice.call(arguments, 1))); - }, - - callArgOnWith: function (pos, thisValue) { - var args = slice.call(arguments, 2); - this.args[pos].apply(thisValue, args); - }, - - yield: function () { - this.yieldOn.apply(this, [null].concat(slice.call(arguments, 0))); - }, - - yieldOn: function (thisValue) { - var args = this.args; - for (var i = 0, l = args.length; i < l; ++i) { - if (typeof args[i] === "function") { - args[i].apply(thisValue, slice.call(arguments, 1)); - return; - } - } - throwYieldError(this.proxy, " cannot yield since no callback was passed.", args); - }, - - yieldTo: function (prop) { - this.yieldToOn.apply(this, [prop, null].concat(slice.call(arguments, 1))); - }, - - yieldToOn: function (prop, thisValue) { - var args = this.args; - for (var i = 0, l = args.length; i < l; ++i) { - if (args[i] && typeof args[i][prop] === "function") { - args[i][prop].apply(thisValue, slice.call(arguments, 2)); - return; - } - } - throwYieldError(this.proxy, " cannot yield to '" + prop + - "' since no callback was passed.", args); - }, - - toString: function () { - var callStr = this.proxy.toString() + "("; - var args = []; - - for (var i = 0, l = this.args.length; i < l; ++i) { - args.push(sinon.format(this.args[i])); - } - - callStr = callStr + args.join(", ") + ")"; - - if (typeof this.returnValue != "undefined") { - callStr += " => " + sinon.format(this.returnValue); - } - - if (this.exception) { - callStr += " !" + this.exception.name; - - if (this.exception.message) { - callStr += "(" + this.exception.message + ")"; - } - } - - return callStr; - } - }; - - callProto.invokeCallback = callProto.yield; - - function createSpyCall(spy, thisValue, args, returnValue, exception, id) { - if (typeof id !== "number") { - throw new TypeError("Call id is not a number"); - } - var proxyCall = sinon.create(callProto); - proxyCall.proxy = spy; - proxyCall.thisValue = thisValue; - proxyCall.args = args; - proxyCall.returnValue = returnValue; - proxyCall.exception = exception; - proxyCall.callId = id; - - return proxyCall; - } - createSpyCall.toString = callProto.toString; // used by mocks - - sinon.spyCall = createSpyCall; - return createSpyCall; - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require == "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require, exports, module) { - var sinon = require("./util/core"); - require("./match"); - require("./format"); - module.exports = makeApi(sinon); - } - - if (isAMD) { - define(loadDependencies); - } else if (isNode) { - loadDependencies(require, module.exports, module); - } else if (!sinon) { - return; - } else { - makeApi(sinon); - } -}(typeof sinon == "object" && sinon || null)); - -/** - * @depend times_in_words.js - * @depend util/core.js - * @depend extend.js - * @depend call.js - * @depend format.js - */ -/** - * Spy functions - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ - -(function (sinon) { - - function makeApi(sinon) { - var push = Array.prototype.push; - var slice = Array.prototype.slice; - var callId = 0; - - function spy(object, property, types) { - if (!property && typeof object == "function") { - return spy.create(object); - } - - if (!object && !property) { - return spy.create(function () { }); - } - - if (types) { - var methodDesc = sinon.getPropertyDescriptor(object, property); - for (var i = 0; i < types.length; i++) { - methodDesc[types[i]] = spy.create(methodDesc[types[i]]); - } - return sinon.wrapMethod(object, property, methodDesc); - } else { - var method = object[property]; - return sinon.wrapMethod(object, property, spy.create(method)); - } - } - - function matchingFake(fakes, args, strict) { - if (!fakes) { - return; - } - - for (var i = 0, l = fakes.length; i < l; i++) { - if (fakes[i].matches(args, strict)) { - return fakes[i]; - } - } - } - - function incrementCallCount() { - this.called = true; - this.callCount += 1; - this.notCalled = false; - this.calledOnce = this.callCount == 1; - this.calledTwice = this.callCount == 2; - this.calledThrice = this.callCount == 3; - } - - function createCallProperties() { - this.firstCall = this.getCall(0); - this.secondCall = this.getCall(1); - this.thirdCall = this.getCall(2); - this.lastCall = this.getCall(this.callCount - 1); - } - - var vars = "a,b,c,d,e,f,g,h,i,j,k,l"; - function createProxy(func, proxyLength) { - // Retain the function length: - var p; - if (proxyLength) { - eval("p = (function proxy(" + vars.substring(0, proxyLength * 2 - 1) + - ") { return p.invoke(func, this, slice.call(arguments)); });"); - } else { - p = function proxy() { - return p.invoke(func, this, slice.call(arguments)); - }; - } - p.isSinonProxy = true; - return p; - } - - var uuid = 0; - - // Public API - var spyApi = { - reset: function () { - if (this.invoking) { - var err = new Error("Cannot reset Sinon function while invoking it. " + - "Move the call to .reset outside of the callback."); - err.name = "InvalidResetException"; - throw err; - } - - this.called = false; - this.notCalled = true; - this.calledOnce = false; - this.calledTwice = false; - this.calledThrice = false; - this.callCount = 0; - this.firstCall = null; - this.secondCall = null; - this.thirdCall = null; - this.lastCall = null; - this.args = []; - this.returnValues = []; - this.thisValues = []; - this.exceptions = []; - this.callIds = []; - if (this.fakes) { - for (var i = 0; i < this.fakes.length; i++) { - this.fakes[i].reset(); - } - } - - return this; - }, - - create: function create(func, spyLength) { - var name; - - if (typeof func != "function") { - func = function () { }; - } else { - name = sinon.functionName(func); - } - - if (!spyLength) { - spyLength = func.length; - } - - var proxy = createProxy(func, spyLength); - - sinon.extend(proxy, spy); - delete proxy.create; - sinon.extend(proxy, func); - - proxy.reset(); - proxy.prototype = func.prototype; - proxy.displayName = name || "spy"; - proxy.toString = sinon.functionToString; - proxy.instantiateFake = sinon.spy.create; - proxy.id = "spy#" + uuid++; - - return proxy; - }, - - invoke: function invoke(func, thisValue, args) { - var matching = matchingFake(this.fakes, args); - var exception, returnValue; - - incrementCallCount.call(this); - push.call(this.thisValues, thisValue); - push.call(this.args, args); - push.call(this.callIds, callId++); - - // Make call properties available from within the spied function: - createCallProperties.call(this); - - try { - this.invoking = true; - - if (matching) { - returnValue = matching.invoke(func, thisValue, args); - } else { - returnValue = (this.func || func).apply(thisValue, args); - } - - var thisCall = this.getCall(this.callCount - 1); - if (thisCall.calledWithNew() && typeof returnValue !== "object") { - returnValue = thisValue; - } - } catch (e) { - exception = e; - } finally { - delete this.invoking; - } - - push.call(this.exceptions, exception); - push.call(this.returnValues, returnValue); - - // Make return value and exception available in the calls: - createCallProperties.call(this); - - if (exception !== undefined) { - throw exception; - } - - return returnValue; - }, - - named: function named(name) { - this.displayName = name; - return this; - }, - - getCall: function getCall(i) { - if (i < 0 || i >= this.callCount) { - return null; - } - - return sinon.spyCall(this, this.thisValues[i], this.args[i], - this.returnValues[i], this.exceptions[i], - this.callIds[i]); - }, - - getCalls: function () { - var calls = []; - var i; - - for (i = 0; i < this.callCount; i++) { - calls.push(this.getCall(i)); - } - - return calls; - }, - - calledBefore: function calledBefore(spyFn) { - if (!this.called) { - return false; - } - - if (!spyFn.called) { - return true; - } - - return this.callIds[0] < spyFn.callIds[spyFn.callIds.length - 1]; - }, - - calledAfter: function calledAfter(spyFn) { - if (!this.called || !spyFn.called) { - return false; - } - - return this.callIds[this.callCount - 1] > spyFn.callIds[spyFn.callCount - 1]; - }, - - withArgs: function () { - var args = slice.call(arguments); - - if (this.fakes) { - var match = matchingFake(this.fakes, args, true); - - if (match) { - return match; - } - } else { - this.fakes = []; - } - - var original = this; - var fake = this.instantiateFake(); - fake.matchingAguments = args; - fake.parent = this; - push.call(this.fakes, fake); - - fake.withArgs = function () { - return original.withArgs.apply(original, arguments); - }; - - for (var i = 0; i < this.args.length; i++) { - if (fake.matches(this.args[i])) { - incrementCallCount.call(fake); - push.call(fake.thisValues, this.thisValues[i]); - push.call(fake.args, this.args[i]); - push.call(fake.returnValues, this.returnValues[i]); - push.call(fake.exceptions, this.exceptions[i]); - push.call(fake.callIds, this.callIds[i]); - } - } - createCallProperties.call(fake); - - return fake; - }, - - matches: function (args, strict) { - var margs = this.matchingAguments; - - if (margs.length <= args.length && - sinon.deepEqual(margs, args.slice(0, margs.length))) { - return !strict || margs.length == args.length; - } - }, - - printf: function (format) { - var spy = this; - var args = slice.call(arguments, 1); - var formatter; - - return (format || "").replace(/%(.)/g, function (match, specifyer) { - formatter = spyApi.formatters[specifyer]; - - if (typeof formatter == "function") { - return formatter.call(null, spy, args); - } else if (!isNaN(parseInt(specifyer, 10))) { - return sinon.format(args[specifyer - 1]); - } - - return "%" + specifyer; - }); - } - }; - - function delegateToCalls(method, matchAny, actual, notCalled) { - spyApi[method] = function () { - if (!this.called) { - if (notCalled) { - return notCalled.apply(this, arguments); - } - return false; - } - - var currentCall; - var matches = 0; - - for (var i = 0, l = this.callCount; i < l; i += 1) { - currentCall = this.getCall(i); - - if (currentCall[actual || method].apply(currentCall, arguments)) { - matches += 1; - - if (matchAny) { - return true; - } - } - } - - return matches === this.callCount; - }; - } - - delegateToCalls("calledOn", true); - delegateToCalls("alwaysCalledOn", false, "calledOn"); - delegateToCalls("calledWith", true); - delegateToCalls("calledWithMatch", true); - delegateToCalls("alwaysCalledWith", false, "calledWith"); - delegateToCalls("alwaysCalledWithMatch", false, "calledWithMatch"); - delegateToCalls("calledWithExactly", true); - delegateToCalls("alwaysCalledWithExactly", false, "calledWithExactly"); - delegateToCalls("neverCalledWith", false, "notCalledWith", function () { - return true; - }); - delegateToCalls("neverCalledWithMatch", false, "notCalledWithMatch", function () { - return true; - }); - delegateToCalls("threw", true); - delegateToCalls("alwaysThrew", false, "threw"); - delegateToCalls("returned", true); - delegateToCalls("alwaysReturned", false, "returned"); - delegateToCalls("calledWithNew", true); - delegateToCalls("alwaysCalledWithNew", false, "calledWithNew"); - delegateToCalls("callArg", false, "callArgWith", function () { - throw new Error(this.toString() + " cannot call arg since it was not yet invoked."); - }); - spyApi.callArgWith = spyApi.callArg; - delegateToCalls("callArgOn", false, "callArgOnWith", function () { - throw new Error(this.toString() + " cannot call arg since it was not yet invoked."); - }); - spyApi.callArgOnWith = spyApi.callArgOn; - delegateToCalls("yield", false, "yield", function () { - throw new Error(this.toString() + " cannot yield since it was not yet invoked."); - }); - // "invokeCallback" is an alias for "yield" since "yield" is invalid in strict mode. - spyApi.invokeCallback = spyApi.yield; - delegateToCalls("yieldOn", false, "yieldOn", function () { - throw new Error(this.toString() + " cannot yield since it was not yet invoked."); - }); - delegateToCalls("yieldTo", false, "yieldTo", function (property) { - throw new Error(this.toString() + " cannot yield to '" + property + - "' since it was not yet invoked."); - }); - delegateToCalls("yieldToOn", false, "yieldToOn", function (property) { - throw new Error(this.toString() + " cannot yield to '" + property + - "' since it was not yet invoked."); - }); - - spyApi.formatters = { - c: function (spy) { - return sinon.timesInWords(spy.callCount); - }, - - n: function (spy) { - return spy.toString(); - }, - - C: function (spy) { - var calls = []; - - for (var i = 0, l = spy.callCount; i < l; ++i) { - var stringifiedCall = " " + spy.getCall(i).toString(); - if (/\n/.test(calls[i - 1])) { - stringifiedCall = "\n" + stringifiedCall; - } - push.call(calls, stringifiedCall); - } - - return calls.length > 0 ? "\n" + calls.join("\n") : ""; - }, - - t: function (spy) { - var objects = []; - - for (var i = 0, l = spy.callCount; i < l; ++i) { - push.call(objects, sinon.format(spy.thisValues[i])); - } - - return objects.join(", "); - }, - - "*": function (spy, args) { - var formatted = []; - - for (var i = 0, l = args.length; i < l; ++i) { - push.call(formatted, sinon.format(args[i])); - } - - return formatted.join(", "); - } - }; - - sinon.extend(spy, spyApi); - - spy.spyCall = sinon.spyCall; - sinon.spy = spy; - - return spy; - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require == "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require, exports, module) { - var sinon = require("./util/core"); - require("./call"); - require("./extend"); - require("./times_in_words"); - require("./format"); - module.exports = makeApi(sinon); - } - - if (isAMD) { - define(loadDependencies); - } else if (isNode) { - loadDependencies(require, module.exports, module); - } else if (!sinon) { - return; - } else { - makeApi(sinon); - } -}(typeof sinon == "object" && sinon || null)); - -/** - * @depend util/core.js - * @depend extend.js - */ -/** - * Stub behavior - * - * @author Christian Johansen (christian@cjohansen.no) - * @author Tim Fischbach (mail@timfischbach.de) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ - -(function (sinon) { - var slice = Array.prototype.slice; - var join = Array.prototype.join; - var useLeftMostCallback = -1; - var useRightMostCallback = -2; - - var nextTick = (function () { - if (typeof process === "object" && typeof process.nextTick === "function") { - return process.nextTick; - } else if (typeof setImmediate === "function") { - return setImmediate; - } else { - return function (callback) { - setTimeout(callback, 0); - }; - } - })(); - - function throwsException(error, message) { - if (typeof error == "string") { - this.exception = new Error(message || ""); - this.exception.name = error; - } else if (!error) { - this.exception = new Error("Error"); - } else { - this.exception = error; - } - - return this; - } - - function getCallback(behavior, args) { - var callArgAt = behavior.callArgAt; - - if (callArgAt >= 0) { - return args[callArgAt]; - } - - var argumentList; - - if (callArgAt === useLeftMostCallback) { - argumentList = args; - } - - if (callArgAt === useRightMostCallback) { - argumentList = slice.call(args).reverse(); - } - - var callArgProp = behavior.callArgProp; - - for (var i = 0, l = argumentList.length; i < l; ++i) { - if (!callArgProp && typeof argumentList[i] == "function") { - return argumentList[i]; - } - - if (callArgProp && argumentList[i] && - typeof argumentList[i][callArgProp] == "function") { - return argumentList[i][callArgProp]; - } - } - - return null; - } - - function makeApi(sinon) { - function getCallbackError(behavior, func, args) { - if (behavior.callArgAt < 0) { - var msg; - - if (behavior.callArgProp) { - msg = sinon.functionName(behavior.stub) + - " expected to yield to '" + behavior.callArgProp + - "', but no object with such a property was passed."; - } else { - msg = sinon.functionName(behavior.stub) + - " expected to yield, but no callback was passed."; - } - - if (args.length > 0) { - msg += " Received [" + join.call(args, ", ") + "]"; - } - - return msg; - } - - return "argument at index " + behavior.callArgAt + " is not a function: " + func; - } - - function callCallback(behavior, args) { - if (typeof behavior.callArgAt == "number") { - var func = getCallback(behavior, args); - - if (typeof func != "function") { - throw new TypeError(getCallbackError(behavior, func, args)); - } - - if (behavior.callbackAsync) { - nextTick(function () { - func.apply(behavior.callbackContext, behavior.callbackArguments); - }); - } else { - func.apply(behavior.callbackContext, behavior.callbackArguments); - } - } - } - - var proto = { - create: function create(stub) { - var behavior = sinon.extend({}, sinon.behavior); - delete behavior.create; - behavior.stub = stub; - - return behavior; - }, - - isPresent: function isPresent() { - return (typeof this.callArgAt == "number" || - this.exception || - typeof this.returnArgAt == "number" || - this.returnThis || - this.returnValueDefined); - }, - - invoke: function invoke(context, args) { - callCallback(this, args); - - if (this.exception) { - throw this.exception; - } else if (typeof this.returnArgAt == "number") { - return args[this.returnArgAt]; - } else if (this.returnThis) { - return context; - } - - return this.returnValue; - }, - - onCall: function onCall(index) { - return this.stub.onCall(index); - }, - - onFirstCall: function onFirstCall() { - return this.stub.onFirstCall(); - }, - - onSecondCall: function onSecondCall() { - return this.stub.onSecondCall(); - }, - - onThirdCall: function onThirdCall() { - return this.stub.onThirdCall(); - }, - - withArgs: function withArgs(/* arguments */) { - throw new Error("Defining a stub by invoking \"stub.onCall(...).withArgs(...)\" is not supported. " + - "Use \"stub.withArgs(...).onCall(...)\" to define sequential behavior for calls with certain arguments."); - }, - - callsArg: function callsArg(pos) { - if (typeof pos != "number") { - throw new TypeError("argument index is not number"); - } - - this.callArgAt = pos; - this.callbackArguments = []; - this.callbackContext = undefined; - this.callArgProp = undefined; - this.callbackAsync = false; - - return this; - }, - - callsArgOn: function callsArgOn(pos, context) { - if (typeof pos != "number") { - throw new TypeError("argument index is not number"); - } - if (typeof context != "object") { - throw new TypeError("argument context is not an object"); - } - - this.callArgAt = pos; - this.callbackArguments = []; - this.callbackContext = context; - this.callArgProp = undefined; - this.callbackAsync = false; - - return this; - }, - - callsArgWith: function callsArgWith(pos) { - if (typeof pos != "number") { - throw new TypeError("argument index is not number"); - } - - this.callArgAt = pos; - this.callbackArguments = slice.call(arguments, 1); - this.callbackContext = undefined; - this.callArgProp = undefined; - this.callbackAsync = false; - - return this; - }, - - callsArgOnWith: function callsArgWith(pos, context) { - if (typeof pos != "number") { - throw new TypeError("argument index is not number"); - } - if (typeof context != "object") { - throw new TypeError("argument context is not an object"); - } - - this.callArgAt = pos; - this.callbackArguments = slice.call(arguments, 2); - this.callbackContext = context; - this.callArgProp = undefined; - this.callbackAsync = false; - - return this; - }, - - yields: function () { - this.callArgAt = useLeftMostCallback; - this.callbackArguments = slice.call(arguments, 0); - this.callbackContext = undefined; - this.callArgProp = undefined; - this.callbackAsync = false; - - return this; - }, - - yieldsRight: function () { - this.callArgAt = useRightMostCallback; - this.callbackArguments = slice.call(arguments, 0); - this.callbackContext = undefined; - this.callArgProp = undefined; - this.callbackAsync = false; - - return this; - }, - - yieldsOn: function (context) { - if (typeof context != "object") { - throw new TypeError("argument context is not an object"); - } - - this.callArgAt = useLeftMostCallback; - this.callbackArguments = slice.call(arguments, 1); - this.callbackContext = context; - this.callArgProp = undefined; - this.callbackAsync = false; - - return this; - }, - - yieldsTo: function (prop) { - this.callArgAt = useLeftMostCallback; - this.callbackArguments = slice.call(arguments, 1); - this.callbackContext = undefined; - this.callArgProp = prop; - this.callbackAsync = false; - - return this; - }, - - yieldsToOn: function (prop, context) { - if (typeof context != "object") { - throw new TypeError("argument context is not an object"); - } - - this.callArgAt = useLeftMostCallback; - this.callbackArguments = slice.call(arguments, 2); - this.callbackContext = context; - this.callArgProp = prop; - this.callbackAsync = false; - - return this; - }, - - throws: throwsException, - throwsException: throwsException, - - returns: function returns(value) { - this.returnValue = value; - this.returnValueDefined = true; - - return this; - }, - - returnsArg: function returnsArg(pos) { - if (typeof pos != "number") { - throw new TypeError("argument index is not number"); - } - - this.returnArgAt = pos; - - return this; - }, - - returnsThis: function returnsThis() { - this.returnThis = true; - - return this; - } - }; - - // create asynchronous versions of callsArg* and yields* methods - for (var method in proto) { - // need to avoid creating anotherasync versions of the newly added async methods - if (proto.hasOwnProperty(method) && - method.match(/^(callsArg|yields)/) && - !method.match(/Async/)) { - proto[method + "Async"] = (function (syncFnName) { - return function () { - var result = this[syncFnName].apply(this, arguments); - this.callbackAsync = true; - return result; - }; - })(method); - } - } - - sinon.behavior = proto; - return proto; - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require == "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require, exports, module) { - var sinon = require("./util/core"); - require("./extend"); - module.exports = makeApi(sinon); - } - - if (isAMD) { - define(loadDependencies); - } else if (isNode) { - loadDependencies(require, module.exports, module); - } else if (!sinon) { - return; - } else { - makeApi(sinon); - } -}(typeof sinon == "object" && sinon || null)); - -/** - * @depend util/core.js - * @depend extend.js - * @depend spy.js - * @depend behavior.js - */ -/** - * Stub functions - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ - -(function (sinon) { - function makeApi(sinon) { - function stub(object, property, func) { - if (!!func && typeof func != "function" && typeof func != "object") { - throw new TypeError("Custom stub should be a function or a property descriptor"); - } - - var wrapper; - - if (func) { - if (typeof func == "function") { - wrapper = sinon.spy && sinon.spy.create ? sinon.spy.create(func) : func; - } else { - wrapper = func; - if (sinon.spy && sinon.spy.create) { - var types = sinon.objectKeys(wrapper); - for (var i = 0; i < types.length; i++) { - wrapper[types[i]] = sinon.spy.create(wrapper[types[i]]); - } - } - } - } else { - var stubLength = 0; - if (typeof object == "object" && typeof object[property] == "function") { - stubLength = object[property].length; - } - wrapper = stub.create(stubLength); - } - - if (!object && typeof property === "undefined") { - return sinon.stub.create(); - } - - if (typeof property === "undefined" && typeof object == "object") { - for (var prop in object) { - if (typeof sinon.getPropertyDescriptor(object, prop).value === "function") { - stub(object, prop); - } - } - - return object; - } - - return sinon.wrapMethod(object, property, wrapper); - } - - function getDefaultBehavior(stub) { - return stub.defaultBehavior || getParentBehaviour(stub) || sinon.behavior.create(stub); - } - - function getParentBehaviour(stub) { - return (stub.parent && getCurrentBehavior(stub.parent)); - } - - function getCurrentBehavior(stub) { - var behavior = stub.behaviors[stub.callCount - 1]; - return behavior && behavior.isPresent() ? behavior : getDefaultBehavior(stub); - } - - var uuid = 0; - - var proto = { - create: function create(stubLength) { - var functionStub = function () { - return getCurrentBehavior(functionStub).invoke(this, arguments); - }; - - functionStub.id = "stub#" + uuid++; - var orig = functionStub; - functionStub = sinon.spy.create(functionStub, stubLength); - functionStub.func = orig; - - sinon.extend(functionStub, stub); - functionStub.instantiateFake = sinon.stub.create; - functionStub.displayName = "stub"; - functionStub.toString = sinon.functionToString; - - functionStub.defaultBehavior = null; - functionStub.behaviors = []; - - return functionStub; - }, - - resetBehavior: function () { - var i; - - this.defaultBehavior = null; - this.behaviors = []; - - delete this.returnValue; - delete this.returnArgAt; - this.returnThis = false; - - if (this.fakes) { - for (i = 0; i < this.fakes.length; i++) { - this.fakes[i].resetBehavior(); - } - } - }, - - onCall: function onCall(index) { - if (!this.behaviors[index]) { - this.behaviors[index] = sinon.behavior.create(this); - } - - return this.behaviors[index]; - }, - - onFirstCall: function onFirstCall() { - return this.onCall(0); - }, - - onSecondCall: function onSecondCall() { - return this.onCall(1); - }, - - onThirdCall: function onThirdCall() { - return this.onCall(2); - } - }; - - for (var method in sinon.behavior) { - if (sinon.behavior.hasOwnProperty(method) && - !proto.hasOwnProperty(method) && - method != "create" && - method != "withArgs" && - method != "invoke") { - proto[method] = (function (behaviorMethod) { - return function () { - this.defaultBehavior = this.defaultBehavior || sinon.behavior.create(this); - this.defaultBehavior[behaviorMethod].apply(this.defaultBehavior, arguments); - return this; - }; - }(method)); - } - } - - sinon.extend(stub, proto); - sinon.stub = stub; - - return stub; - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require == "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require, exports, module) { - var sinon = require("./util/core"); - require("./behavior"); - require("./spy"); - require("./extend"); - module.exports = makeApi(sinon); - } - - if (isAMD) { - define(loadDependencies); - } else if (isNode) { - loadDependencies(require, module.exports, module); - } else if (!sinon) { - return; - } else { - makeApi(sinon); - } -}(typeof sinon == "object" && sinon || null)); - -/** - * @depend times_in_words.js - * @depend util/core.js - * @depend call.js - * @depend extend.js - * @depend match.js - * @depend spy.js - * @depend stub.js - * @depend format.js - */ -/** - * Mock functions. - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ - -(function (sinon) { - function makeApi(sinon) { - var push = [].push; - var match = sinon.match; - - function mock(object) { - // if (typeof console !== undefined && console.warn) { - // console.warn("mock will be removed from Sinon.JS v2.0"); - // } - - if (!object) { - return sinon.expectation.create("Anonymous mock"); - } - - return mock.create(object); - } - - function each(collection, callback) { - if (!collection) { - return; - } - - for (var i = 0, l = collection.length; i < l; i += 1) { - callback(collection[i]); - } - } - - sinon.extend(mock, { - create: function create(object) { - if (!object) { - throw new TypeError("object is null"); - } - - var mockObject = sinon.extend({}, mock); - mockObject.object = object; - delete mockObject.create; - - return mockObject; - }, - - expects: function expects(method) { - if (!method) { - throw new TypeError("method is falsy"); - } - - if (!this.expectations) { - this.expectations = {}; - this.proxies = []; - } - - if (!this.expectations[method]) { - this.expectations[method] = []; - var mockObject = this; - - sinon.wrapMethod(this.object, method, function () { - return mockObject.invokeMethod(method, this, arguments); - }); - - push.call(this.proxies, method); - } - - var expectation = sinon.expectation.create(method); - push.call(this.expectations[method], expectation); - - return expectation; - }, - - restore: function restore() { - var object = this.object; - - each(this.proxies, function (proxy) { - if (typeof object[proxy].restore == "function") { - object[proxy].restore(); - } - }); - }, - - verify: function verify() { - var expectations = this.expectations || {}; - var messages = [], met = []; - - each(this.proxies, function (proxy) { - each(expectations[proxy], function (expectation) { - if (!expectation.met()) { - push.call(messages, expectation.toString()); - } else { - push.call(met, expectation.toString()); - } - }); - }); - - this.restore(); - - if (messages.length > 0) { - sinon.expectation.fail(messages.concat(met).join("\n")); - } else if (met.length > 0) { - sinon.expectation.pass(messages.concat(met).join("\n")); - } - - return true; - }, - - invokeMethod: function invokeMethod(method, thisValue, args) { - var expectations = this.expectations && this.expectations[method]; - var length = expectations && expectations.length || 0, i; - - for (i = 0; i < length; i += 1) { - if (!expectations[i].met() && - expectations[i].allowsCall(thisValue, args)) { - return expectations[i].apply(thisValue, args); - } - } - - var messages = [], available, exhausted = 0; - - for (i = 0; i < length; i += 1) { - if (expectations[i].allowsCall(thisValue, args)) { - available = available || expectations[i]; - } else { - exhausted += 1; - } - push.call(messages, " " + expectations[i].toString()); - } - - if (exhausted === 0) { - return available.apply(thisValue, args); - } - - messages.unshift("Unexpected call: " + sinon.spyCall.toString.call({ - proxy: method, - args: args - })); - - sinon.expectation.fail(messages.join("\n")); - } - }); - - var times = sinon.timesInWords; - var slice = Array.prototype.slice; - - function callCountInWords(callCount) { - if (callCount == 0) { - return "never called"; - } else { - return "called " + times(callCount); - } - } - - function expectedCallCountInWords(expectation) { - var min = expectation.minCalls; - var max = expectation.maxCalls; - - if (typeof min == "number" && typeof max == "number") { - var str = times(min); - - if (min != max) { - str = "at least " + str + " and at most " + times(max); - } - - return str; - } - - if (typeof min == "number") { - return "at least " + times(min); - } - - return "at most " + times(max); - } - - function receivedMinCalls(expectation) { - var hasMinLimit = typeof expectation.minCalls == "number"; - return !hasMinLimit || expectation.callCount >= expectation.minCalls; - } - - function receivedMaxCalls(expectation) { - if (typeof expectation.maxCalls != "number") { - return false; - } - - return expectation.callCount == expectation.maxCalls; - } - - function verifyMatcher(possibleMatcher, arg) { - if (match && match.isMatcher(possibleMatcher)) { - return possibleMatcher.test(arg); - } else { - return true; - } - } - - sinon.expectation = { - minCalls: 1, - maxCalls: 1, - - create: function create(methodName) { - var expectation = sinon.extend(sinon.stub.create(), sinon.expectation); - delete expectation.create; - expectation.method = methodName; - - return expectation; - }, - - invoke: function invoke(func, thisValue, args) { - this.verifyCallAllowed(thisValue, args); - - return sinon.spy.invoke.apply(this, arguments); - }, - - atLeast: function atLeast(num) { - if (typeof num != "number") { - throw new TypeError("'" + num + "' is not number"); - } - - if (!this.limitsSet) { - this.maxCalls = null; - this.limitsSet = true; - } - - this.minCalls = num; - - return this; - }, - - atMost: function atMost(num) { - if (typeof num != "number") { - throw new TypeError("'" + num + "' is not number"); - } - - if (!this.limitsSet) { - this.minCalls = null; - this.limitsSet = true; - } - - this.maxCalls = num; - - return this; - }, - - never: function never() { - return this.exactly(0); - }, - - once: function once() { - return this.exactly(1); - }, - - twice: function twice() { - return this.exactly(2); - }, - - thrice: function thrice() { - return this.exactly(3); - }, - - exactly: function exactly(num) { - if (typeof num != "number") { - throw new TypeError("'" + num + "' is not a number"); - } - - this.atLeast(num); - return this.atMost(num); - }, - - met: function met() { - return !this.failed && receivedMinCalls(this); - }, - - verifyCallAllowed: function verifyCallAllowed(thisValue, args) { - if (receivedMaxCalls(this)) { - this.failed = true; - sinon.expectation.fail(this.method + " already called " + times(this.maxCalls)); - } - - if ("expectedThis" in this && this.expectedThis !== thisValue) { - sinon.expectation.fail(this.method + " called with " + thisValue + " as thisValue, expected " + - this.expectedThis); - } - - if (!("expectedArguments" in this)) { - return; - } - - if (!args) { - sinon.expectation.fail(this.method + " received no arguments, expected " + - sinon.format(this.expectedArguments)); - } - - if (args.length < this.expectedArguments.length) { - sinon.expectation.fail(this.method + " received too few arguments (" + sinon.format(args) + - "), expected " + sinon.format(this.expectedArguments)); - } - - if (this.expectsExactArgCount && - args.length != this.expectedArguments.length) { - sinon.expectation.fail(this.method + " received too many arguments (" + sinon.format(args) + - "), expected " + sinon.format(this.expectedArguments)); - } - - for (var i = 0, l = this.expectedArguments.length; i < l; i += 1) { - - if (!verifyMatcher(this.expectedArguments[i], args[i])) { - sinon.expectation.fail(this.method + " received wrong arguments " + sinon.format(args) + - ", didn't match " + this.expectedArguments.toString()); - } - - if (!sinon.deepEqual(this.expectedArguments[i], args[i])) { - sinon.expectation.fail(this.method + " received wrong arguments " + sinon.format(args) + - ", expected " + sinon.format(this.expectedArguments)); - } - } - }, - - allowsCall: function allowsCall(thisValue, args) { - if (this.met() && receivedMaxCalls(this)) { - return false; - } - - if ("expectedThis" in this && this.expectedThis !== thisValue) { - return false; - } - - if (!("expectedArguments" in this)) { - return true; - } - - args = args || []; - - if (args.length < this.expectedArguments.length) { - return false; - } - - if (this.expectsExactArgCount && - args.length != this.expectedArguments.length) { - return false; - } - - for (var i = 0, l = this.expectedArguments.length; i < l; i += 1) { - if (!verifyMatcher(this.expectedArguments[i], args[i])) { - return false; - } - - if (!sinon.deepEqual(this.expectedArguments[i], args[i])) { - return false; - } - } - - return true; - }, - - withArgs: function withArgs() { - this.expectedArguments = slice.call(arguments); - return this; - }, - - withExactArgs: function withExactArgs() { - this.withArgs.apply(this, arguments); - this.expectsExactArgCount = true; - return this; - }, - - on: function on(thisValue) { - this.expectedThis = thisValue; - return this; - }, - - toString: function () { - var args = (this.expectedArguments || []).slice(); - - if (!this.expectsExactArgCount) { - push.call(args, "[...]"); - } - - var callStr = sinon.spyCall.toString.call({ - proxy: this.method || "anonymous mock expectation", - args: args - }); - - var message = callStr.replace(", [...", "[, ...") + " " + - expectedCallCountInWords(this); - - if (this.met()) { - return "Expectation met: " + message; - } - - return "Expected " + message + " (" + - callCountInWords(this.callCount) + ")"; - }, - - verify: function verify() { - if (!this.met()) { - sinon.expectation.fail(this.toString()); - } else { - sinon.expectation.pass(this.toString()); - } - - return true; - }, - - pass: function pass(message) { - sinon.assert.pass(message); - }, - - fail: function fail(message) { - var exception = new Error(message); - exception.name = "ExpectationError"; - - throw exception; - } - }; - - sinon.mock = mock; - return mock; - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require == "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require, exports, module) { - var sinon = require("./util/core"); - require("./times_in_words"); - require("./call"); - require("./extend"); - require("./match"); - require("./spy"); - require("./stub"); - require("./format"); - - module.exports = makeApi(sinon); - } - - if (isAMD) { - define(loadDependencies); - } else if (isNode) { - loadDependencies(require, module.exports, module); - } else if (!sinon) { - return; - } else { - makeApi(sinon); - } -}(typeof sinon == "object" && sinon || null)); - -/** - * @depend util/core.js - * @depend spy.js - * @depend stub.js - * @depend mock.js - */ -/** - * Collections of stubs, spies and mocks. - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ - -(function (sinon) { - var push = [].push; - var hasOwnProperty = Object.prototype.hasOwnProperty; - - function getFakes(fakeCollection) { - if (!fakeCollection.fakes) { - fakeCollection.fakes = []; - } - - return fakeCollection.fakes; - } - - function each(fakeCollection, method) { - var fakes = getFakes(fakeCollection); - - for (var i = 0, l = fakes.length; i < l; i += 1) { - if (typeof fakes[i][method] == "function") { - fakes[i][method](); - } - } - } - - function compact(fakeCollection) { - var fakes = getFakes(fakeCollection); - var i = 0; - while (i < fakes.length) { - fakes.splice(i, 1); - } - } - - function makeApi(sinon) { - var collection = { - verify: function resolve() { - each(this, "verify"); - }, - - restore: function restore() { - each(this, "restore"); - compact(this); - }, - - reset: function restore() { - each(this, "reset"); - }, - - verifyAndRestore: function verifyAndRestore() { - var exception; - - try { - this.verify(); - } catch (e) { - exception = e; - } - - this.restore(); - - if (exception) { - throw exception; - } - }, - - add: function add(fake) { - push.call(getFakes(this), fake); - return fake; - }, - - spy: function spy() { - return this.add(sinon.spy.apply(sinon, arguments)); - }, - - stub: function stub(object, property, value) { - if (property) { - var original = object[property]; - - if (typeof original != "function") { - if (!hasOwnProperty.call(object, property)) { - throw new TypeError("Cannot stub non-existent own property " + property); - } - - object[property] = value; - - return this.add({ - restore: function () { - object[property] = original; - } - }); - } - } - if (!property && !!object && typeof object == "object") { - var stubbedObj = sinon.stub.apply(sinon, arguments); - - for (var prop in stubbedObj) { - if (typeof stubbedObj[prop] === "function") { - this.add(stubbedObj[prop]); - } - } - - return stubbedObj; - } - - return this.add(sinon.stub.apply(sinon, arguments)); - }, - - mock: function mock() { - return this.add(sinon.mock.apply(sinon, arguments)); - }, - - inject: function inject(obj) { - var col = this; - - obj.spy = function () { - return col.spy.apply(col, arguments); - }; - - obj.stub = function () { - return col.stub.apply(col, arguments); - }; - - obj.mock = function () { - return col.mock.apply(col, arguments); - }; - - return obj; - } - }; - - sinon.collection = collection; - return collection; - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require == "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require, exports, module) { - var sinon = require("./util/core"); - require("./mock"); - require("./spy"); - require("./stub"); - module.exports = makeApi(sinon); - } - - if (isAMD) { - define(loadDependencies); - } else if (isNode) { - loadDependencies(require, module.exports, module); - } else if (!sinon) { - return; - } else { - makeApi(sinon); - } -}(typeof sinon == "object" && sinon || null)); - -/*global lolex */ - -/** - * Fake timer API - * setTimeout - * setInterval - * clearTimeout - * clearInterval - * tick - * reset - * Date - * - * Inspired by jsUnitMockTimeOut from JsUnit - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ - -if (typeof sinon == "undefined") { - var sinon = {}; -} - -(function (global) { - function makeApi(sinon, lol) { - var llx = typeof lolex !== "undefined" ? lolex : lol; - - sinon.useFakeTimers = function () { - var now, methods = Array.prototype.slice.call(arguments); - - if (typeof methods[0] === "string") { - now = 0; - } else { - now = methods.shift(); - } - - var clock = llx.install(now || 0, methods); - clock.restore = clock.uninstall; - return clock; - }; - - sinon.clock = { - create: function (now) { - return llx.createClock(now); - } - }; - - sinon.timers = { - setTimeout: setTimeout, - clearTimeout: clearTimeout, - setImmediate: (typeof setImmediate !== "undefined" ? setImmediate : undefined), - clearImmediate: (typeof clearImmediate !== "undefined" ? clearImmediate : undefined), - setInterval: setInterval, - clearInterval: clearInterval, - Date: Date - }; - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require == "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require, epxorts, module, lolex) { - var sinon = require("./core"); - makeApi(sinon, lolex); - module.exports = sinon; - } - - if (isAMD) { - define(loadDependencies); - } else if (isNode) { - loadDependencies(require, module.exports, module, require("lolex")); - } else { - makeApi(sinon); - } -}(typeof global != "undefined" && typeof global !== "function" ? global : this)); - -/** - * Minimal Event interface implementation - * - * Original implementation by Sven Fuchs: https://gist.github.com/995028 - * Modifications and tests by Christian Johansen. - * - * @author Sven Fuchs (svenfuchs@artweb-design.de) - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2011 Sven Fuchs, Christian Johansen - */ - -if (typeof sinon == "undefined") { - this.sinon = {}; -} - -(function () { - var push = [].push; - - function makeApi(sinon) { - sinon.Event = function Event(type, bubbles, cancelable, target) { - this.initEvent(type, bubbles, cancelable, target); - }; - - sinon.Event.prototype = { - initEvent: function (type, bubbles, cancelable, target) { - this.type = type; - this.bubbles = bubbles; - this.cancelable = cancelable; - this.target = target; - }, - - stopPropagation: function () {}, - - preventDefault: function () { - this.defaultPrevented = true; - } - }; - - sinon.ProgressEvent = function ProgressEvent(type, progressEventRaw, target) { - this.initEvent(type, false, false, target); - this.loaded = progressEventRaw.loaded || null; - this.total = progressEventRaw.total || null; - this.lengthComputable = !!progressEventRaw.total; - }; - - sinon.ProgressEvent.prototype = new sinon.Event(); - - sinon.ProgressEvent.prototype.constructor = sinon.ProgressEvent; - - sinon.CustomEvent = function CustomEvent(type, customData, target) { - this.initEvent(type, false, false, target); - this.detail = customData.detail || null; - }; - - sinon.CustomEvent.prototype = new sinon.Event(); - - sinon.CustomEvent.prototype.constructor = sinon.CustomEvent; - - sinon.EventTarget = { - addEventListener: function addEventListener(event, listener) { - this.eventListeners = this.eventListeners || {}; - this.eventListeners[event] = this.eventListeners[event] || []; - push.call(this.eventListeners[event], listener); - }, - - removeEventListener: function removeEventListener(event, listener) { - var listeners = this.eventListeners && this.eventListeners[event] || []; - - for (var i = 0, l = listeners.length; i < l; ++i) { - if (listeners[i] == listener) { - return listeners.splice(i, 1); - } - } - }, - - dispatchEvent: function dispatchEvent(event) { - var type = event.type; - var listeners = this.eventListeners && this.eventListeners[type] || []; - - for (var i = 0; i < listeners.length; i++) { - if (typeof listeners[i] == "function") { - listeners[i].call(this, event); - } else { - listeners[i].handleEvent(event); - } - } - - return !!event.defaultPrevented; - } - }; - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require == "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require) { - var sinon = require("./core"); - makeApi(sinon); - } - - if (isAMD) { - define(loadDependencies); - } else if (isNode) { - loadDependencies(require); - } else { - makeApi(sinon); - } -}()); - -/** - * @depend util/core.js - */ -/** - * Logs errors - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2014 Christian Johansen - */ - -(function (sinon) { - // cache a reference to setTimeout, so that our reference won't be stubbed out - // when using fake timers and errors will still get logged - // https://github.com/cjohansen/Sinon.JS/issues/381 - var realSetTimeout = setTimeout; - - function makeApi(sinon) { - - function log() {} - - function logError(label, err) { - var msg = label + " threw exception: "; - - sinon.log(msg + "[" + err.name + "] " + err.message); - - if (err.stack) { - sinon.log(err.stack); - } - - logError.setTimeout(function () { - err.message = msg + err.message; - throw err; - }, 0); - }; - - // wrap realSetTimeout with something we can stub in tests - logError.setTimeout = function (func, timeout) { - realSetTimeout(func, timeout); - } - - var exports = {}; - exports.log = sinon.log = log; - exports.logError = sinon.logError = logError; - - return exports; - } - - function loadDependencies(require, exports, module) { - var sinon = require("./util/core"); - module.exports = makeApi(sinon); - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require == "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - if (isAMD) { - define(loadDependencies); - } else if (isNode) { - loadDependencies(require, module.exports, module); - } else if (!sinon) { - return; - } else { - makeApi(sinon); - } -}(typeof sinon == "object" && sinon || null)); - -/** - * @depend core.js - * @depend ../extend.js - * @depend event.js - * @depend ../log_error.js - */ -/** - * Fake XDomainRequest object - */ - -if (typeof sinon == "undefined") { - this.sinon = {}; -} - -// wrapper for global -(function (global) { - var xdr = { XDomainRequest: global.XDomainRequest }; - xdr.GlobalXDomainRequest = global.XDomainRequest; - xdr.supportsXDR = typeof xdr.GlobalXDomainRequest != "undefined"; - xdr.workingXDR = xdr.supportsXDR ? xdr.GlobalXDomainRequest : false; - - function makeApi(sinon) { - sinon.xdr = xdr; - - function FakeXDomainRequest() { - this.readyState = FakeXDomainRequest.UNSENT; - this.requestBody = null; - this.requestHeaders = {}; - this.status = 0; - this.timeout = null; - - if (typeof FakeXDomainRequest.onCreate == "function") { - FakeXDomainRequest.onCreate(this); - } - } - - function verifyState(xdr) { - if (xdr.readyState !== FakeXDomainRequest.OPENED) { - throw new Error("INVALID_STATE_ERR"); - } - - if (xdr.sendFlag) { - throw new Error("INVALID_STATE_ERR"); - } - } - - function verifyRequestSent(xdr) { - if (xdr.readyState == FakeXDomainRequest.UNSENT) { - throw new Error("Request not sent"); - } - if (xdr.readyState == FakeXDomainRequest.DONE) { - throw new Error("Request done"); - } - } - - function verifyResponseBodyType(body) { - if (typeof body != "string") { - var error = new Error("Attempted to respond to fake XDomainRequest with " + - body + ", which is not a string."); - error.name = "InvalidBodyException"; - throw error; - } - } - - sinon.extend(FakeXDomainRequest.prototype, sinon.EventTarget, { - open: function open(method, url) { - this.method = method; - this.url = url; - - this.responseText = null; - this.sendFlag = false; - - this.readyStateChange(FakeXDomainRequest.OPENED); - }, - - readyStateChange: function readyStateChange(state) { - this.readyState = state; - var eventName = ""; - switch (this.readyState) { - case FakeXDomainRequest.UNSENT: - break; - case FakeXDomainRequest.OPENED: - break; - case FakeXDomainRequest.LOADING: - if (this.sendFlag) { - //raise the progress event - eventName = "onprogress"; - } - break; - case FakeXDomainRequest.DONE: - if (this.isTimeout) { - eventName = "ontimeout" - } else if (this.errorFlag || (this.status < 200 || this.status > 299)) { - eventName = "onerror"; - } else { - eventName = "onload" - } - break; - } - - // raising event (if defined) - if (eventName) { - if (typeof this[eventName] == "function") { - try { - this[eventName](); - } catch (e) { - sinon.logError("Fake XHR " + eventName + " handler", e); - } - } - } - }, - - send: function send(data) { - verifyState(this); - - if (!/^(get|head)$/i.test(this.method)) { - this.requestBody = data; - } - this.requestHeaders["Content-Type"] = "text/plain;charset=utf-8"; - - this.errorFlag = false; - this.sendFlag = true; - this.readyStateChange(FakeXDomainRequest.OPENED); - - if (typeof this.onSend == "function") { - this.onSend(this); - } - }, - - abort: function abort() { - this.aborted = true; - this.responseText = null; - this.errorFlag = true; - - if (this.readyState > sinon.FakeXDomainRequest.UNSENT && this.sendFlag) { - this.readyStateChange(sinon.FakeXDomainRequest.DONE); - this.sendFlag = false; - } - }, - - setResponseBody: function setResponseBody(body) { - verifyRequestSent(this); - verifyResponseBodyType(body); - - var chunkSize = this.chunkSize || 10; - var index = 0; - this.responseText = ""; - - do { - this.readyStateChange(FakeXDomainRequest.LOADING); - this.responseText += body.substring(index, index + chunkSize); - index += chunkSize; - } while (index < body.length); - - this.readyStateChange(FakeXDomainRequest.DONE); - }, - - respond: function respond(status, contentType, body) { - // content-type ignored, since XDomainRequest does not carry this - // we keep the same syntax for respond(...) as for FakeXMLHttpRequest to ease - // test integration across browsers - this.status = typeof status == "number" ? status : 200; - this.setResponseBody(body || ""); - }, - - simulatetimeout: function simulatetimeout() { - this.status = 0; - this.isTimeout = true; - // Access to this should actually throw an error - this.responseText = undefined; - this.readyStateChange(FakeXDomainRequest.DONE); - } - }); - - sinon.extend(FakeXDomainRequest, { - UNSENT: 0, - OPENED: 1, - LOADING: 3, - DONE: 4 - }); - - sinon.useFakeXDomainRequest = function useFakeXDomainRequest() { - sinon.FakeXDomainRequest.restore = function restore(keepOnCreate) { - if (xdr.supportsXDR) { - global.XDomainRequest = xdr.GlobalXDomainRequest; - } - - delete sinon.FakeXDomainRequest.restore; - - if (keepOnCreate !== true) { - delete sinon.FakeXDomainRequest.onCreate; - } - }; - if (xdr.supportsXDR) { - global.XDomainRequest = sinon.FakeXDomainRequest; - } - return sinon.FakeXDomainRequest; - }; - - sinon.FakeXDomainRequest = FakeXDomainRequest; - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require == "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require, exports, module) { - var sinon = require("./core"); - require("../extend"); - require("./event"); - require("../log_error"); - makeApi(sinon); - module.exports = sinon; - } - - if (isAMD) { - define(loadDependencies); - } else if (isNode) { - loadDependencies(require, module.exports, module); - } else { - makeApi(sinon); - } -})(typeof global !== "undefined" ? global : self); - -/** - * @depend core.js - * @depend ../extend.js - * @depend event.js - * @depend ../log_error.js - */ -/** - * Fake XMLHttpRequest object - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ - -(function (global) { - - var supportsProgress = typeof ProgressEvent !== "undefined"; - var supportsCustomEvent = typeof CustomEvent !== "undefined"; - var supportsFormData = typeof FormData !== "undefined"; - var sinonXhr = { XMLHttpRequest: global.XMLHttpRequest }; - sinonXhr.GlobalXMLHttpRequest = global.XMLHttpRequest; - sinonXhr.GlobalActiveXObject = global.ActiveXObject; - sinonXhr.supportsActiveX = typeof sinonXhr.GlobalActiveXObject != "undefined"; - sinonXhr.supportsXHR = typeof sinonXhr.GlobalXMLHttpRequest != "undefined"; - sinonXhr.workingXHR = sinonXhr.supportsXHR ? sinonXhr.GlobalXMLHttpRequest : sinonXhr.supportsActiveX - ? function () { - return new sinonXhr.GlobalActiveXObject("MSXML2.XMLHTTP.3.0") - } : false; - sinonXhr.supportsCORS = sinonXhr.supportsXHR && "withCredentials" in (new sinonXhr.GlobalXMLHttpRequest()); - - /*jsl:ignore*/ - var unsafeHeaders = { - "Accept-Charset": true, - "Accept-Encoding": true, - Connection: true, - "Content-Length": true, - Cookie: true, - Cookie2: true, - "Content-Transfer-Encoding": true, - Date: true, - Expect: true, - Host: true, - "Keep-Alive": true, - Referer: true, - TE: true, - Trailer: true, - "Transfer-Encoding": true, - Upgrade: true, - "User-Agent": true, - Via: true - }; - /*jsl:end*/ - - // Note that for FakeXMLHttpRequest to work pre ES5 - // we lose some of the alignment with the spec. - // To ensure as close a match as possible, - // set responseType before calling open, send or respond; - function FakeXMLHttpRequest() { - this.readyState = FakeXMLHttpRequest.UNSENT; - this.requestHeaders = {}; - this.requestBody = null; - this.status = 0; - this.statusText = ""; - this.upload = new UploadProgress(); - this.responseType = ""; - this.response = ""; - if (sinonXhr.supportsCORS) { - this.withCredentials = false; - } - - var xhr = this; - var events = ["loadstart", "load", "abort", "loadend"]; - - function addEventListener(eventName) { - xhr.addEventListener(eventName, function (event) { - var listener = xhr["on" + eventName]; - - if (listener && typeof listener == "function") { - listener.call(this, event); - } - }); - } - - for (var i = events.length - 1; i >= 0; i--) { - addEventListener(events[i]); - } - - if (typeof FakeXMLHttpRequest.onCreate == "function") { - FakeXMLHttpRequest.onCreate(this); - } - } - - // An upload object is created for each - // FakeXMLHttpRequest and allows upload - // events to be simulated using uploadProgress - // and uploadError. - function UploadProgress() { - this.eventListeners = { - progress: [], - load: [], - abort: [], - error: [] - } - } - - UploadProgress.prototype.addEventListener = function addEventListener(event, listener) { - this.eventListeners[event].push(listener); - }; - - UploadProgress.prototype.removeEventListener = function removeEventListener(event, listener) { - var listeners = this.eventListeners[event] || []; - - for (var i = 0, l = listeners.length; i < l; ++i) { - if (listeners[i] == listener) { - return listeners.splice(i, 1); - } - } - }; - - UploadProgress.prototype.dispatchEvent = function dispatchEvent(event) { - var listeners = this.eventListeners[event.type] || []; - - for (var i = 0, listener; (listener = listeners[i]) != null; i++) { - listener(event); - } - }; - - function verifyState(xhr) { - if (xhr.readyState !== FakeXMLHttpRequest.OPENED) { - throw new Error("INVALID_STATE_ERR"); - } - - if (xhr.sendFlag) { - throw new Error("INVALID_STATE_ERR"); - } - } - - function getHeader(headers, header) { - header = header.toLowerCase(); - - for (var h in headers) { - if (h.toLowerCase() == header) { - return h; - } - } - - return null; - } - - // filtering to enable a white-list version of Sinon FakeXhr, - // where whitelisted requests are passed through to real XHR - function each(collection, callback) { - if (!collection) { - return; - } - - for (var i = 0, l = collection.length; i < l; i += 1) { - callback(collection[i]); - } - } - function some(collection, callback) { - for (var index = 0; index < collection.length; index++) { - if (callback(collection[index]) === true) { - return true; - } - } - return false; - } - // largest arity in XHR is 5 - XHR#open - var apply = function (obj, method, args) { - switch (args.length) { - case 0: return obj[method](); - case 1: return obj[method](args[0]); - case 2: return obj[method](args[0], args[1]); - case 3: return obj[method](args[0], args[1], args[2]); - case 4: return obj[method](args[0], args[1], args[2], args[3]); - case 5: return obj[method](args[0], args[1], args[2], args[3], args[4]); - } - }; - - FakeXMLHttpRequest.filters = []; - FakeXMLHttpRequest.addFilter = function addFilter(fn) { - this.filters.push(fn) - }; - var IE6Re = /MSIE 6/; - FakeXMLHttpRequest.defake = function defake(fakeXhr, xhrArgs) { - var xhr = new sinonXhr.workingXHR(); - each([ - "open", - "setRequestHeader", - "send", - "abort", - "getResponseHeader", - "getAllResponseHeaders", - "addEventListener", - "overrideMimeType", - "removeEventListener" - ], function (method) { - fakeXhr[method] = function () { - return apply(xhr, method, arguments); - }; - }); - - var copyAttrs = function (args) { - each(args, function (attr) { - try { - fakeXhr[attr] = xhr[attr] - } catch (e) { - if (!IE6Re.test(navigator.userAgent)) { - throw e; - } - } - }); - }; - - var stateChange = function stateChange() { - fakeXhr.readyState = xhr.readyState; - if (xhr.readyState >= FakeXMLHttpRequest.HEADERS_RECEIVED) { - copyAttrs(["status", "statusText"]); - } - if (xhr.readyState >= FakeXMLHttpRequest.LOADING) { - copyAttrs(["responseText", "response"]); - } - if (xhr.readyState === FakeXMLHttpRequest.DONE) { - copyAttrs(["responseXML"]); - } - if (fakeXhr.onreadystatechange) { - fakeXhr.onreadystatechange.call(fakeXhr, { target: fakeXhr }); - } - }; - - if (xhr.addEventListener) { - for (var event in fakeXhr.eventListeners) { - if (fakeXhr.eventListeners.hasOwnProperty(event)) { - each(fakeXhr.eventListeners[event], function (handler) { - xhr.addEventListener(event, handler); - }); - } - } - xhr.addEventListener("readystatechange", stateChange); - } else { - xhr.onreadystatechange = stateChange; - } - apply(xhr, "open", xhrArgs); - }; - FakeXMLHttpRequest.useFilters = false; - - function verifyRequestOpened(xhr) { - if (xhr.readyState != FakeXMLHttpRequest.OPENED) { - throw new Error("INVALID_STATE_ERR - " + xhr.readyState); - } - } - - function verifyRequestSent(xhr) { - if (xhr.readyState == FakeXMLHttpRequest.DONE) { - throw new Error("Request done"); - } - } - - function verifyHeadersReceived(xhr) { - if (xhr.async && xhr.readyState != FakeXMLHttpRequest.HEADERS_RECEIVED) { - throw new Error("No headers received"); - } - } - - function verifyResponseBodyType(body) { - if (typeof body != "string") { - var error = new Error("Attempted to respond to fake XMLHttpRequest with " + - body + ", which is not a string."); - error.name = "InvalidBodyException"; - throw error; - } - } - - FakeXMLHttpRequest.parseXML = function parseXML(text) { - var xmlDoc; - - if (typeof DOMParser != "undefined") { - var parser = new DOMParser(); - xmlDoc = parser.parseFromString(text, "text/xml"); - } else { - xmlDoc = new ActiveXObject("Microsoft.XMLDOM"); - xmlDoc.async = "false"; - xmlDoc.loadXML(text); - } - - return xmlDoc; - }; - - FakeXMLHttpRequest.statusCodes = { - 100: "Continue", - 101: "Switching Protocols", - 200: "OK", - 201: "Created", - 202: "Accepted", - 203: "Non-Authoritative Information", - 204: "No Content", - 205: "Reset Content", - 206: "Partial Content", - 207: "Multi-Status", - 300: "Multiple Choice", - 301: "Moved Permanently", - 302: "Found", - 303: "See Other", - 304: "Not Modified", - 305: "Use Proxy", - 307: "Temporary Redirect", - 400: "Bad Request", - 401: "Unauthorized", - 402: "Payment Required", - 403: "Forbidden", - 404: "Not Found", - 405: "Method Not Allowed", - 406: "Not Acceptable", - 407: "Proxy Authentication Required", - 408: "Request Timeout", - 409: "Conflict", - 410: "Gone", - 411: "Length Required", - 412: "Precondition Failed", - 413: "Request Entity Too Large", - 414: "Request-URI Too Long", - 415: "Unsupported Media Type", - 416: "Requested Range Not Satisfiable", - 417: "Expectation Failed", - 422: "Unprocessable Entity", - 500: "Internal Server Error", - 501: "Not Implemented", - 502: "Bad Gateway", - 503: "Service Unavailable", - 504: "Gateway Timeout", - 505: "HTTP Version Not Supported" - }; - - function makeApi(sinon) { - sinon.xhr = sinonXhr; - - sinon.extend(FakeXMLHttpRequest.prototype, sinon.EventTarget, { - async: true, - - open: function open(method, url, async, username, password) { - this.method = method; - this.url = url; - this.async = typeof async == "boolean" ? async : true; - this.username = username; - this.password = password; - this.responseText = null; - this.response = this.responseType === "json" ? null : ""; - this.responseXML = null; - this.requestHeaders = {}; - this.sendFlag = false; - - if (FakeXMLHttpRequest.useFilters === true) { - var xhrArgs = arguments; - var defake = some(FakeXMLHttpRequest.filters, function (filter) { - return filter.apply(this, xhrArgs) - }); - if (defake) { - return FakeXMLHttpRequest.defake(this, arguments); - } - } - this.readyStateChange(FakeXMLHttpRequest.OPENED); - }, - - readyStateChange: function readyStateChange(state) { - this.readyState = state; - - if (typeof this.onreadystatechange == "function") { - try { - this.onreadystatechange(); - } catch (e) { - sinon.logError("Fake XHR onreadystatechange handler", e); - } - } - - switch (this.readyState) { - case FakeXMLHttpRequest.DONE: - if (supportsProgress) { - this.upload.dispatchEvent(new sinon.ProgressEvent("progress", {loaded: 100, total: 100})); - this.dispatchEvent(new sinon.ProgressEvent("progress", {loaded: 100, total: 100})); - } - this.upload.dispatchEvent(new sinon.Event("load", false, false, this)); - this.dispatchEvent(new sinon.Event("load", false, false, this)); - this.dispatchEvent(new sinon.Event("loadend", false, false, this)); - break; - } - - this.dispatchEvent(new sinon.Event("readystatechange")); - }, - - setRequestHeader: function setRequestHeader(header, value) { - verifyState(this); - - if (unsafeHeaders[header] || /^(Sec-|Proxy-)/.test(header)) { - throw new Error("Refused to set unsafe header \"" + header + "\""); - } - - if (this.requestHeaders[header]) { - this.requestHeaders[header] += "," + value; - } else { - this.requestHeaders[header] = value; - } - }, - - // Helps testing - setResponseHeaders: function setResponseHeaders(headers) { - verifyRequestOpened(this); - this.responseHeaders = {}; - - for (var header in headers) { - if (headers.hasOwnProperty(header)) { - this.responseHeaders[header] = headers[header]; - } - } - - if (this.async) { - this.readyStateChange(FakeXMLHttpRequest.HEADERS_RECEIVED); - } else { - this.readyState = FakeXMLHttpRequest.HEADERS_RECEIVED; - } - }, - - // Currently treats ALL data as a DOMString (i.e. no Document) - send: function send(data) { - verifyState(this); - - if (!/^(get|head)$/i.test(this.method)) { - var contentType = getHeader(this.requestHeaders, "Content-Type"); - if (this.requestHeaders[contentType]) { - var value = this.requestHeaders[contentType].split(";"); - this.requestHeaders[contentType] = value[0] + ";charset=utf-8"; - } else if (supportsFormData && !(data instanceof FormData)) { - this.requestHeaders["Content-Type"] = "text/plain;charset=utf-8"; - } - - this.requestBody = data; - } - - this.errorFlag = false; - this.sendFlag = this.async; - this.response = this.responseType === "json" ? null : ""; - this.readyStateChange(FakeXMLHttpRequest.OPENED); - - if (typeof this.onSend == "function") { - this.onSend(this); - } - - this.dispatchEvent(new sinon.Event("loadstart", false, false, this)); - }, - - abort: function abort() { - this.aborted = true; - this.responseText = null; - this.response = this.responseType === "json" ? null : ""; - this.errorFlag = true; - this.requestHeaders = {}; - this.responseHeaders = {}; - - if (this.readyState > FakeXMLHttpRequest.UNSENT && this.sendFlag) { - this.readyStateChange(FakeXMLHttpRequest.DONE); - this.sendFlag = false; - } - - this.readyState = FakeXMLHttpRequest.UNSENT; - - this.dispatchEvent(new sinon.Event("abort", false, false, this)); - - this.upload.dispatchEvent(new sinon.Event("abort", false, false, this)); - - if (typeof this.onerror === "function") { - this.onerror(); - } - }, - - getResponseHeader: function getResponseHeader(header) { - if (this.readyState < FakeXMLHttpRequest.HEADERS_RECEIVED) { - return null; - } - - if (/^Set-Cookie2?$/i.test(header)) { - return null; - } - - header = getHeader(this.responseHeaders, header); - - return this.responseHeaders[header] || null; - }, - - getAllResponseHeaders: function getAllResponseHeaders() { - if (this.readyState < FakeXMLHttpRequest.HEADERS_RECEIVED) { - return ""; - } - - var headers = ""; - - for (var header in this.responseHeaders) { - if (this.responseHeaders.hasOwnProperty(header) && - !/^Set-Cookie2?$/i.test(header)) { - headers += header + ": " + this.responseHeaders[header] + "\r\n"; - } - } - - return headers; - }, - - setResponseBody: function setResponseBody(body) { - verifyRequestSent(this); - verifyHeadersReceived(this); - verifyResponseBodyType(body); - - var chunkSize = this.chunkSize || 10; - var index = 0; - this.responseText = ""; - - do { - if (this.async) { - this.readyStateChange(FakeXMLHttpRequest.LOADING); - } - - this.responseText += body.substring(index, index + chunkSize); - index += chunkSize; - } while (index < body.length); - - var type = this.getResponseHeader("Content-Type"); - - if (this.responseText && - (!type || /(text\/xml)|(application\/xml)|(\+xml)/.test(type))) { - try { - this.responseXML = FakeXMLHttpRequest.parseXML(this.responseText); - } catch (e) { - // Unable to parse XML - no biggie - } - } - - this.response = this.responseType === "json" ? JSON.parse(this.responseText) : this.responseText; - this.readyStateChange(FakeXMLHttpRequest.DONE); - }, - - respond: function respond(status, headers, body) { - this.status = typeof status == "number" ? status : 200; - this.statusText = FakeXMLHttpRequest.statusCodes[this.status]; - this.setResponseHeaders(headers || {}); - this.setResponseBody(body || ""); - }, - - uploadProgress: function uploadProgress(progressEventRaw) { - if (supportsProgress) { - this.upload.dispatchEvent(new sinon.ProgressEvent("progress", progressEventRaw)); - } - }, - - downloadProgress: function downloadProgress(progressEventRaw) { - if (supportsProgress) { - this.dispatchEvent(new sinon.ProgressEvent("progress", progressEventRaw)); - } - }, - - uploadError: function uploadError(error) { - if (supportsCustomEvent) { - this.upload.dispatchEvent(new sinon.CustomEvent("error", {detail: error})); - } - } - }); - - sinon.extend(FakeXMLHttpRequest, { - UNSENT: 0, - OPENED: 1, - HEADERS_RECEIVED: 2, - LOADING: 3, - DONE: 4 - }); - - sinon.useFakeXMLHttpRequest = function () { - FakeXMLHttpRequest.restore = function restore(keepOnCreate) { - if (sinonXhr.supportsXHR) { - global.XMLHttpRequest = sinonXhr.GlobalXMLHttpRequest; - } - - if (sinonXhr.supportsActiveX) { - global.ActiveXObject = sinonXhr.GlobalActiveXObject; - } - - delete FakeXMLHttpRequest.restore; - - if (keepOnCreate !== true) { - delete FakeXMLHttpRequest.onCreate; - } - }; - if (sinonXhr.supportsXHR) { - global.XMLHttpRequest = FakeXMLHttpRequest; - } - - if (sinonXhr.supportsActiveX) { - global.ActiveXObject = function ActiveXObject(objId) { - if (objId == "Microsoft.XMLHTTP" || /^Msxml2\.XMLHTTP/i.test(objId)) { - - return new FakeXMLHttpRequest(); - } - - return new sinonXhr.GlobalActiveXObject(objId); - }; - } - - return FakeXMLHttpRequest; - }; - - sinon.FakeXMLHttpRequest = FakeXMLHttpRequest; - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require == "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require, exports, module) { - var sinon = require("./core"); - require("../extend"); - require("./event"); - require("../log_error"); - makeApi(sinon); - module.exports = sinon; - } - - if (isAMD) { - define(loadDependencies); - } else if (isNode) { - loadDependencies(require, module.exports, module); - } else if (typeof sinon === "undefined") { - return; - } else { - makeApi(sinon); - } - -})(typeof global !== "undefined" ? global : self); - -/** - * @depend fake_xdomain_request.js - * @depend fake_xml_http_request.js - * @depend ../format.js - * @depend ../log_error.js - */ -/** - * The Sinon "server" mimics a web server that receives requests from - * sinon.FakeXMLHttpRequest and provides an API to respond to those requests, - * both synchronously and asynchronously. To respond synchronuously, canned - * answers have to be provided upfront. - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ - -if (typeof sinon == "undefined") { - var sinon = {}; -} - -(function () { - var push = [].push; - function F() {} - - function create(proto) { - F.prototype = proto; - return new F(); - } - - function responseArray(handler) { - var response = handler; - - if (Object.prototype.toString.call(handler) != "[object Array]") { - response = [200, {}, handler]; - } - - if (typeof response[2] != "string") { - throw new TypeError("Fake server response body should be string, but was " + - typeof response[2]); - } - - return response; - } - - var wloc = typeof window !== "undefined" ? window.location : {}; - var rCurrLoc = new RegExp("^" + wloc.protocol + "//" + wloc.host); - - function matchOne(response, reqMethod, reqUrl) { - var rmeth = response.method; - var matchMethod = !rmeth || rmeth.toLowerCase() == reqMethod.toLowerCase(); - var url = response.url; - var matchUrl = !url || url == reqUrl || (typeof url.test == "function" && url.test(reqUrl)); - - return matchMethod && matchUrl; - } - - function match(response, request) { - var requestUrl = request.url; - - if (!/^https?:\/\//.test(requestUrl) || rCurrLoc.test(requestUrl)) { - requestUrl = requestUrl.replace(rCurrLoc, ""); - } - - if (matchOne(response, this.getHTTPMethod(request), requestUrl)) { - if (typeof response.response == "function") { - var ru = response.url; - var args = [request].concat(ru && typeof ru.exec == "function" ? ru.exec(requestUrl).slice(1) : []); - return response.response.apply(response, args); - } - - return true; - } - - return false; - } - - function makeApi(sinon) { - sinon.fakeServer = { - create: function () { - var server = create(this); - if (!sinon.xhr.supportsCORS) { - this.xhr = sinon.useFakeXDomainRequest(); - } else { - this.xhr = sinon.useFakeXMLHttpRequest(); - } - server.requests = []; - - this.xhr.onCreate = function (xhrObj) { - server.addRequest(xhrObj); - }; - - return server; - }, - - addRequest: function addRequest(xhrObj) { - var server = this; - push.call(this.requests, xhrObj); - - xhrObj.onSend = function () { - server.handleRequest(this); - - if (server.respondImmediately) { - server.respond(); - } else if (server.autoRespond && !server.responding) { - setTimeout(function () { - server.responding = false; - server.respond(); - }, server.autoRespondAfter || 10); - - server.responding = true; - } - }; - }, - - getHTTPMethod: function getHTTPMethod(request) { - if (this.fakeHTTPMethods && /post/i.test(request.method)) { - var matches = (request.requestBody || "").match(/_method=([^\b;]+)/); - return !!matches ? matches[1] : request.method; - } - - return request.method; - }, - - handleRequest: function handleRequest(xhr) { - if (xhr.async) { - if (!this.queue) { - this.queue = []; - } - - push.call(this.queue, xhr); - } else { - this.processRequest(xhr); - } - }, - - log: function log(response, request) { - var str; - - str = "Request:\n" + sinon.format(request) + "\n\n"; - str += "Response:\n" + sinon.format(response) + "\n\n"; - - sinon.log(str); - }, - - respondWith: function respondWith(method, url, body) { - if (arguments.length == 1 && typeof method != "function") { - this.response = responseArray(method); - return; - } - - if (!this.responses) { - this.responses = []; - } - - if (arguments.length == 1) { - body = method; - url = method = null; - } - - if (arguments.length == 2) { - body = url; - url = method; - method = null; - } - - push.call(this.responses, { - method: method, - url: url, - response: typeof body == "function" ? body : responseArray(body) - }); - }, - - respond: function respond() { - if (arguments.length > 0) { - this.respondWith.apply(this, arguments); - } - - var queue = this.queue || []; - var requests = queue.splice(0, queue.length); - var request; - - while (request = requests.shift()) { - this.processRequest(request); - } - }, - - processRequest: function processRequest(request) { - try { - if (request.aborted) { - return; - } - - var response = this.response || [404, {}, ""]; - - if (this.responses) { - for (var l = this.responses.length, i = l - 1; i >= 0; i--) { - if (match.call(this, this.responses[i], request)) { - response = this.responses[i].response; - break; - } - } - } - - if (request.readyState != 4) { - this.log(response, request); - - request.respond(response[0], response[1], response[2]); - } - } catch (e) { - sinon.logError("Fake server request processing", e); - } - }, - - restore: function restore() { - return this.xhr.restore && this.xhr.restore.apply(this.xhr, arguments); - } - }; - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require == "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require, exports, module) { - var sinon = require("./core"); - require("./fake_xdomain_request"); - require("./fake_xml_http_request"); - require("../format"); - makeApi(sinon); - module.exports = sinon; - } - - if (isAMD) { - define(loadDependencies); - } else if (isNode) { - loadDependencies(require, module.exports, module); - } else { - makeApi(sinon); - } -}()); - -/** - * @depend fake_server.js - * @depend fake_timers.js - */ -/** - * Add-on for sinon.fakeServer that automatically handles a fake timer along with - * the FakeXMLHttpRequest. The direct inspiration for this add-on is jQuery - * 1.3.x, which does not use xhr object's onreadystatehandler at all - instead, - * it polls the object for completion with setInterval. Dispite the direct - * motivation, there is nothing jQuery-specific in this file, so it can be used - * in any environment where the ajax implementation depends on setInterval or - * setTimeout. - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ - -(function () { - function makeApi(sinon) { - function Server() {} - Server.prototype = sinon.fakeServer; - - sinon.fakeServerWithClock = new Server(); - - sinon.fakeServerWithClock.addRequest = function addRequest(xhr) { - if (xhr.async) { - if (typeof setTimeout.clock == "object") { - this.clock = setTimeout.clock; - } else { - this.clock = sinon.useFakeTimers(); - this.resetClock = true; - } - - if (!this.longestTimeout) { - var clockSetTimeout = this.clock.setTimeout; - var clockSetInterval = this.clock.setInterval; - var server = this; - - this.clock.setTimeout = function (fn, timeout) { - server.longestTimeout = Math.max(timeout, server.longestTimeout || 0); - - return clockSetTimeout.apply(this, arguments); - }; - - this.clock.setInterval = function (fn, timeout) { - server.longestTimeout = Math.max(timeout, server.longestTimeout || 0); - - return clockSetInterval.apply(this, arguments); - }; - } - } - - return sinon.fakeServer.addRequest.call(this, xhr); - }; - - sinon.fakeServerWithClock.respond = function respond() { - var returnVal = sinon.fakeServer.respond.apply(this, arguments); - - if (this.clock) { - this.clock.tick(this.longestTimeout || 0); - this.longestTimeout = 0; - - if (this.resetClock) { - this.clock.restore(); - this.resetClock = false; - } - } - - return returnVal; - }; - - sinon.fakeServerWithClock.restore = function restore() { - if (this.clock) { - this.clock.restore(); - } - - return sinon.fakeServer.restore.apply(this, arguments); - }; - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require == "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require) { - var sinon = require("./core"); - require("./fake_server"); - require("./fake_timers"); - makeApi(sinon); - } - - if (isAMD) { - define(loadDependencies); - } else if (isNode) { - loadDependencies(require); - } else { - makeApi(sinon); - } -}()); - -/** - * @depend util/core.js - * @depend extend.js - * @depend collection.js - * @depend util/fake_timers.js - * @depend util/fake_server_with_clock.js - */ -/** - * Manages fake collections as well as fake utilities such as Sinon's - * timers and fake XHR implementation in one convenient object. - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ - -(function () { - function makeApi(sinon) { - var push = [].push; - - function exposeValue(sandbox, config, key, value) { - if (!value) { - return; - } - - if (config.injectInto && !(key in config.injectInto)) { - config.injectInto[key] = value; - sandbox.injectedKeys.push(key); - } else { - push.call(sandbox.args, value); - } - } - - function prepareSandboxFromConfig(config) { - var sandbox = sinon.create(sinon.sandbox); - - if (config.useFakeServer) { - if (typeof config.useFakeServer == "object") { - sandbox.serverPrototype = config.useFakeServer; - } - - sandbox.useFakeServer(); - } - - if (config.useFakeTimers) { - if (typeof config.useFakeTimers == "object") { - sandbox.useFakeTimers.apply(sandbox, config.useFakeTimers); - } else { - sandbox.useFakeTimers(); - } - } - - return sandbox; - } - - sinon.sandbox = sinon.extend(sinon.create(sinon.collection), { - useFakeTimers: function useFakeTimers() { - this.clock = sinon.useFakeTimers.apply(sinon, arguments); - - return this.add(this.clock); - }, - - serverPrototype: sinon.fakeServer, - - useFakeServer: function useFakeServer() { - var proto = this.serverPrototype || sinon.fakeServer; - - if (!proto || !proto.create) { - return null; - } - - this.server = proto.create(); - return this.add(this.server); - }, - - inject: function (obj) { - sinon.collection.inject.call(this, obj); - - if (this.clock) { - obj.clock = this.clock; - } - - if (this.server) { - obj.server = this.server; - obj.requests = this.server.requests; - } - - obj.match = sinon.match; - - return obj; - }, - - restore: function () { - sinon.collection.restore.apply(this, arguments); - this.restoreContext(); - }, - - restoreContext: function () { - if (this.injectedKeys) { - for (var i = 0, j = this.injectedKeys.length; i < j; i++) { - delete this.injectInto[this.injectedKeys[i]]; - } - this.injectedKeys = []; - } - }, - - create: function (config) { - if (!config) { - return sinon.create(sinon.sandbox); - } - - var sandbox = prepareSandboxFromConfig(config); - sandbox.args = sandbox.args || []; - sandbox.injectedKeys = []; - sandbox.injectInto = config.injectInto; - var prop, value, exposed = sandbox.inject({}); - - if (config.properties) { - for (var i = 0, l = config.properties.length; i < l; i++) { - prop = config.properties[i]; - value = exposed[prop] || prop == "sandbox" && sandbox; - exposeValue(sandbox, config, prop, value); - } - } else { - exposeValue(sandbox, config, "sandbox", value); - } - - return sandbox; - }, - - match: sinon.match - }); - - sinon.sandbox.useFakeXMLHttpRequest = sinon.sandbox.useFakeServer; - - return sinon.sandbox; - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require == "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require, exports, module) { - var sinon = require("./util/core"); - require("./extend"); - require("./util/fake_server_with_clock"); - require("./util/fake_timers"); - require("./collection"); - module.exports = makeApi(sinon); - } - - if (isAMD) { - define(loadDependencies); - } else if (isNode) { - loadDependencies(require, module.exports, module); - } else if (!sinon) { - return; - } else { - makeApi(sinon); - } -}()); - -/** - * @depend util/core.js - * @depend sandbox.js - */ -/** - * Test function, sandboxes fakes - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ - -(function (sinon) { - function makeApi(sinon) { - var slice = Array.prototype.slice; - - function test(callback) { - var type = typeof callback; - - if (type != "function") { - throw new TypeError("sinon.test needs to wrap a test function, got " + type); - } - - function sinonSandboxedTest() { - var config = sinon.getConfig(sinon.config); - config.injectInto = config.injectIntoThis && this || config.injectInto; - var sandbox = sinon.sandbox.create(config); - var args = slice.call(arguments); - var oldDone = args.length && args[args.length - 1]; - var exception, result; - - if (typeof oldDone == "function") { - args[args.length - 1] = function sinonDone(result) { - if (result) { - sandbox.restore(); - throw exception; - } else { - sandbox.verifyAndRestore(); - } - oldDone(result); - }; - } - - try { - result = callback.apply(this, args.concat(sandbox.args)); - } catch (e) { - exception = e; - } - - if (typeof oldDone != "function") { - if (typeof exception !== "undefined") { - sandbox.restore(); - throw exception; - } else { - sandbox.verifyAndRestore(); - } - } - - return result; - } - - if (callback.length) { - return function sinonAsyncSandboxedTest(callback) { - return sinonSandboxedTest.apply(this, arguments); - }; - } - - return sinonSandboxedTest; - } - - test.config = { - injectIntoThis: true, - injectInto: null, - properties: ["spy", "stub", "mock", "clock", "server", "requests"], - useFakeTimers: true, - useFakeServer: true - }; - - sinon.test = test; - return test; - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require == "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require, exports, module) { - var sinon = require("./util/core"); - require("./sandbox"); - module.exports = makeApi(sinon); - } - - if (isAMD) { - define(loadDependencies); - } else if (isNode) { - loadDependencies(require, module.exports, module); - } else if (sinon) { - makeApi(sinon); - } -}(typeof sinon == "object" && sinon || null)); - -/** - * @depend util/core.js - * @depend test.js - */ -/** - * Test case, sandboxes all test functions - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ - -(function (sinon) { - function createTest(property, setUp, tearDown) { - return function () { - if (setUp) { - setUp.apply(this, arguments); - } - - var exception, result; - - try { - result = property.apply(this, arguments); - } catch (e) { - exception = e; - } - - if (tearDown) { - tearDown.apply(this, arguments); - } - - if (exception) { - throw exception; - } - - return result; - }; - } - - function makeApi(sinon) { - function testCase(tests, prefix) { - if (!tests || typeof tests != "object") { - throw new TypeError("sinon.testCase needs an object with test functions"); - } - - prefix = prefix || "test"; - var rPrefix = new RegExp("^" + prefix); - var methods = {}, testName, property, method; - var setUp = tests.setUp; - var tearDown = tests.tearDown; - - for (testName in tests) { - if (tests.hasOwnProperty(testName) && !/^(setUp|tearDown)$/.test(testName)) { - property = tests[testName]; - - if (typeof property == "function" && rPrefix.test(testName)) { - method = property; - - if (setUp || tearDown) { - method = createTest(property, setUp, tearDown); - } - - methods[testName] = sinon.test(method); - } else { - methods[testName] = tests[testName]; - } - } - } - - return methods; - } - - sinon.testCase = testCase; - return testCase; - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require == "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require, exports, module) { - var sinon = require("./util/core"); - require("./test"); - module.exports = makeApi(sinon); - } - - if (isAMD) { - define(loadDependencies); - } else if (isNode) { - loadDependencies(require, module.exports, module); - } else if (!sinon) { - return; - } else { - makeApi(sinon); - } -}(typeof sinon == "object" && sinon || null)); - -/** - * @depend times_in_words.js - * @depend util/core.js - * @depend match.js - * @depend format.js - */ -/** - * Assertions matching the test spy retrieval interface. - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ - -(function (sinon, global) { - var slice = Array.prototype.slice; - - function makeApi(sinon) { - var assert; - - function verifyIsStub() { - var method; - - for (var i = 0, l = arguments.length; i < l; ++i) { - method = arguments[i]; - - if (!method) { - assert.fail("fake is not a spy"); - } - - if (method.proxy && method.proxy.isSinonProxy) { - verifyIsStub(method.proxy); - } else { - if (typeof method != "function") { - assert.fail(method + " is not a function"); - } - - if (typeof method.getCall != "function") { - assert.fail(method + " is not stubbed"); - } - } - - } - } - - function failAssertion(object, msg) { - object = object || global; - var failMethod = object.fail || assert.fail; - failMethod.call(object, msg); - } - - function mirrorPropAsAssertion(name, method, message) { - if (arguments.length == 2) { - message = method; - method = name; - } - - assert[name] = function (fake) { - verifyIsStub(fake); - - var args = slice.call(arguments, 1); - var failed = false; - - if (typeof method == "function") { - failed = !method(fake); - } else { - failed = typeof fake[method] == "function" ? - !fake[method].apply(fake, args) : !fake[method]; - } - - if (failed) { - failAssertion(this, (fake.printf || fake.proxy.printf).apply(fake, [message].concat(args))); - } else { - assert.pass(name); - } - }; - } - - function exposedName(prefix, prop) { - return !prefix || /^fail/.test(prop) ? prop : - prefix + prop.slice(0, 1).toUpperCase() + prop.slice(1); - } - - assert = { - failException: "AssertError", - - fail: function fail(message) { - var error = new Error(message); - error.name = this.failException || assert.failException; - - throw error; - }, - - pass: function pass(assertion) {}, - - callOrder: function assertCallOrder() { - verifyIsStub.apply(null, arguments); - var expected = "", actual = ""; - - if (!sinon.calledInOrder(arguments)) { - try { - expected = [].join.call(arguments, ", "); - var calls = slice.call(arguments); - var i = calls.length; - while (i) { - if (!calls[--i].called) { - calls.splice(i, 1); - } - } - actual = sinon.orderByFirstCall(calls).join(", "); - } catch (e) { - // If this fails, we'll just fall back to the blank string - } - - failAssertion(this, "expected " + expected + " to be " + - "called in order but were called as " + actual); - } else { - assert.pass("callOrder"); - } - }, - - callCount: function assertCallCount(method, count) { - verifyIsStub(method); - - if (method.callCount != count) { - var msg = "expected %n to be called " + sinon.timesInWords(count) + - " but was called %c%C"; - failAssertion(this, method.printf(msg)); - } else { - assert.pass("callCount"); - } - }, - - expose: function expose(target, options) { - if (!target) { - throw new TypeError("target is null or undefined"); - } - - var o = options || {}; - var prefix = typeof o.prefix == "undefined" && "assert" || o.prefix; - var includeFail = typeof o.includeFail == "undefined" || !!o.includeFail; - - for (var method in this) { - if (method != "expose" && (includeFail || !/^(fail)/.test(method))) { - target[exposedName(prefix, method)] = this[method]; - } - } - - return target; - }, - - match: function match(actual, expectation) { - var matcher = sinon.match(expectation); - if (matcher.test(actual)) { - assert.pass("match"); - } else { - var formatted = [ - "expected value to match", - " expected = " + sinon.format(expectation), - " actual = " + sinon.format(actual) - ] - failAssertion(this, formatted.join("\n")); - } - } - }; - - mirrorPropAsAssertion("called", "expected %n to have been called at least once but was never called"); - mirrorPropAsAssertion("notCalled", function (spy) { - return !spy.called; - }, "expected %n to not have been called but was called %c%C"); - mirrorPropAsAssertion("calledOnce", "expected %n to be called once but was called %c%C"); - mirrorPropAsAssertion("calledTwice", "expected %n to be called twice but was called %c%C"); - mirrorPropAsAssertion("calledThrice", "expected %n to be called thrice but was called %c%C"); - mirrorPropAsAssertion("calledOn", "expected %n to be called with %1 as this but was called with %t"); - mirrorPropAsAssertion("alwaysCalledOn", "expected %n to always be called with %1 as this but was called with %t"); - mirrorPropAsAssertion("calledWithNew", "expected %n to be called with new"); - mirrorPropAsAssertion("alwaysCalledWithNew", "expected %n to always be called with new"); - mirrorPropAsAssertion("calledWith", "expected %n to be called with arguments %*%C"); - mirrorPropAsAssertion("calledWithMatch", "expected %n to be called with match %*%C"); - mirrorPropAsAssertion("alwaysCalledWith", "expected %n to always be called with arguments %*%C"); - mirrorPropAsAssertion("alwaysCalledWithMatch", "expected %n to always be called with match %*%C"); - mirrorPropAsAssertion("calledWithExactly", "expected %n to be called with exact arguments %*%C"); - mirrorPropAsAssertion("alwaysCalledWithExactly", "expected %n to always be called with exact arguments %*%C"); - mirrorPropAsAssertion("neverCalledWith", "expected %n to never be called with arguments %*%C"); - mirrorPropAsAssertion("neverCalledWithMatch", "expected %n to never be called with match %*%C"); - mirrorPropAsAssertion("threw", "%n did not throw exception%C"); - mirrorPropAsAssertion("alwaysThrew", "%n did not always throw exception%C"); - - sinon.assert = assert; - return assert; - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require == "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require, exports, module) { - var sinon = require("./util/core"); - require("./match"); - require("./format"); - module.exports = makeApi(sinon); - } - - if (isAMD) { - define(loadDependencies); - } else if (isNode) { - loadDependencies(require, module.exports, module); - } else if (!sinon) { - return; - } else { - makeApi(sinon); - } - -}(typeof sinon == "object" && sinon || null, typeof window != "undefined" ? window : (typeof self != "undefined") ? self : global)); - - return sinon; -})); diff --git a/resources/lib/sinonjs/sinon-1.17.3.js b/resources/lib/sinonjs/sinon-1.17.3.js new file mode 100644 index 0000000000..d77b317587 --- /dev/null +++ b/resources/lib/sinonjs/sinon-1.17.3.js @@ -0,0 +1,6437 @@ +/** + * Sinon.JS 1.17.3, 2016/01/27 + * + * @author Christian Johansen (christian@cjohansen.no) + * @author Contributors: https://github.com/cjohansen/Sinon.JS/blob/master/AUTHORS + * + * (The BSD License) + * + * Copyright (c) 2010-2014, Christian Johansen, christian@cjohansen.no + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * * Neither the name of Christian Johansen nor the names of his contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +(function (root, factory) { + 'use strict'; + if (typeof define === 'function' && define.amd) { + define('sinon', [], function () { + return (root.sinon = factory()); + }); + } else if (typeof exports === 'object') { + module.exports = factory(); + } else { + root.sinon = factory(); + } +}(this, function () { + 'use strict'; + var samsam, formatio, lolex; + (function () { + function define(mod, deps, fn) { + if (mod == "samsam") { + samsam = deps(); + } else if (typeof deps === "function" && mod.length === 0) { + lolex = deps(); + } else if (typeof fn === "function") { + formatio = fn(samsam); + } + } + define.amd = {}; +((typeof define === "function" && define.amd && function (m) { define("samsam", m); }) || + (typeof module === "object" && + function (m) { module.exports = m(); }) || // Node + function (m) { this.samsam = m(); } // Browser globals +)(function () { + var o = Object.prototype; + var div = typeof document !== "undefined" && document.createElement("div"); + + function isNaN(value) { + // Unlike global isNaN, this avoids type coercion + // typeof check avoids IE host object issues, hat tip to + // lodash + var val = value; // JsLint thinks value !== value is "weird" + return typeof value === "number" && value !== val; + } + + function getClass(value) { + // Returns the internal [[Class]] by calling Object.prototype.toString + // with the provided value as this. Return value is a string, naming the + // internal class, e.g. "Array" + return o.toString.call(value).split(/[ \]]/)[1]; + } + + /** + * @name samsam.isArguments + * @param Object object + * + * Returns ``true`` if ``object`` is an ``arguments`` object, + * ``false`` otherwise. + */ + function isArguments(object) { + if (getClass(object) === 'Arguments') { return true; } + if (typeof object !== "object" || typeof object.length !== "number" || + getClass(object) === "Array") { + return false; + } + if (typeof object.callee == "function") { return true; } + try { + object[object.length] = 6; + delete object[object.length]; + } catch (e) { + return true; + } + return false; + } + + /** + * @name samsam.isElement + * @param Object object + * + * Returns ``true`` if ``object`` is a DOM element node. Unlike + * Underscore.js/lodash, this function will return ``false`` if ``object`` + * is an *element-like* object, i.e. a regular object with a ``nodeType`` + * property that holds the value ``1``. + */ + function isElement(object) { + if (!object || object.nodeType !== 1 || !div) { return false; } + try { + object.appendChild(div); + object.removeChild(div); + } catch (e) { + return false; + } + return true; + } + + /** + * @name samsam.keys + * @param Object object + * + * Return an array of own property names. + */ + function keys(object) { + var ks = [], prop; + for (prop in object) { + if (o.hasOwnProperty.call(object, prop)) { ks.push(prop); } + } + return ks; + } + + /** + * @name samsam.isDate + * @param Object value + * + * Returns true if the object is a ``Date``, or *date-like*. Duck typing + * of date objects work by checking that the object has a ``getTime`` + * function whose return value equals the return value from the object's + * ``valueOf``. + */ + function isDate(value) { + return typeof value.getTime == "function" && + value.getTime() == value.valueOf(); + } + + /** + * @name samsam.isNegZero + * @param Object value + * + * Returns ``true`` if ``value`` is ``-0``. + */ + function isNegZero(value) { + return value === 0 && 1 / value === -Infinity; + } + + /** + * @name samsam.equal + * @param Object obj1 + * @param Object obj2 + * + * Returns ``true`` if two objects are strictly equal. Compared to + * ``===`` there are two exceptions: + * + * - NaN is considered equal to NaN + * - -0 and +0 are not considered equal + */ + function identical(obj1, obj2) { + if (obj1 === obj2 || (isNaN(obj1) && isNaN(obj2))) { + return obj1 !== 0 || isNegZero(obj1) === isNegZero(obj2); + } + } + + + /** + * @name samsam.deepEqual + * @param Object obj1 + * @param Object obj2 + * + * Deep equal comparison. Two values are "deep equal" if: + * + * - They are equal, according to samsam.identical + * - They are both date objects representing the same time + * - They are both arrays containing elements that are all deepEqual + * - They are objects with the same set of properties, and each property + * in ``obj1`` is deepEqual to the corresponding property in ``obj2`` + * + * Supports cyclic objects. + */ + function deepEqualCyclic(obj1, obj2) { + + // used for cyclic comparison + // contain already visited objects + var objects1 = [], + objects2 = [], + // contain pathes (position in the object structure) + // of the already visited objects + // indexes same as in objects arrays + paths1 = [], + paths2 = [], + // contains combinations of already compared objects + // in the manner: { "$1['ref']$2['ref']": true } + compared = {}; + + /** + * used to check, if the value of a property is an object + * (cyclic logic is only needed for objects) + * only needed for cyclic logic + */ + function isObject(value) { + + if (typeof value === 'object' && value !== null && + !(value instanceof Boolean) && + !(value instanceof Date) && + !(value instanceof Number) && + !(value instanceof RegExp) && + !(value instanceof String)) { + + return true; + } + + return false; + } + + /** + * returns the index of the given object in the + * given objects array, -1 if not contained + * only needed for cyclic logic + */ + function getIndex(objects, obj) { + + var i; + for (i = 0; i < objects.length; i++) { + if (objects[i] === obj) { + return i; + } + } + + return -1; + } + + // does the recursion for the deep equal check + return (function deepEqual(obj1, obj2, path1, path2) { + var type1 = typeof obj1; + var type2 = typeof obj2; + + // == null also matches undefined + if (obj1 === obj2 || + isNaN(obj1) || isNaN(obj2) || + obj1 == null || obj2 == null || + type1 !== "object" || type2 !== "object") { + + return identical(obj1, obj2); + } + + // Elements are only equal if identical(expected, actual) + if (isElement(obj1) || isElement(obj2)) { return false; } + + var isDate1 = isDate(obj1), isDate2 = isDate(obj2); + if (isDate1 || isDate2) { + if (!isDate1 || !isDate2 || obj1.getTime() !== obj2.getTime()) { + return false; + } + } + + if (obj1 instanceof RegExp && obj2 instanceof RegExp) { + if (obj1.toString() !== obj2.toString()) { return false; } + } + + var class1 = getClass(obj1); + var class2 = getClass(obj2); + var keys1 = keys(obj1); + var keys2 = keys(obj2); + + if (isArguments(obj1) || isArguments(obj2)) { + if (obj1.length !== obj2.length) { return false; } + } else { + if (type1 !== type2 || class1 !== class2 || + keys1.length !== keys2.length) { + return false; + } + } + + var key, i, l, + // following vars are used for the cyclic logic + value1, value2, + isObject1, isObject2, + index1, index2, + newPath1, newPath2; + + for (i = 0, l = keys1.length; i < l; i++) { + key = keys1[i]; + if (!o.hasOwnProperty.call(obj2, key)) { + return false; + } + + // Start of the cyclic logic + + value1 = obj1[key]; + value2 = obj2[key]; + + isObject1 = isObject(value1); + isObject2 = isObject(value2); + + // determine, if the objects were already visited + // (it's faster to check for isObject first, than to + // get -1 from getIndex for non objects) + index1 = isObject1 ? getIndex(objects1, value1) : -1; + index2 = isObject2 ? getIndex(objects2, value2) : -1; + + // determine the new pathes of the objects + // - for non cyclic objects the current path will be extended + // by current property name + // - for cyclic objects the stored path is taken + newPath1 = index1 !== -1 + ? paths1[index1] + : path1 + '[' + JSON.stringify(key) + ']'; + newPath2 = index2 !== -1 + ? paths2[index2] + : path2 + '[' + JSON.stringify(key) + ']'; + + // stop recursion if current objects are already compared + if (compared[newPath1 + newPath2]) { + return true; + } + + // remember the current objects and their pathes + if (index1 === -1 && isObject1) { + objects1.push(value1); + paths1.push(newPath1); + } + if (index2 === -1 && isObject2) { + objects2.push(value2); + paths2.push(newPath2); + } + + // remember that the current objects are already compared + if (isObject1 && isObject2) { + compared[newPath1 + newPath2] = true; + } + + // End of cyclic logic + + // neither value1 nor value2 is a cycle + // continue with next level + if (!deepEqual(value1, value2, newPath1, newPath2)) { + return false; + } + } + + return true; + + }(obj1, obj2, '$1', '$2')); + } + + var match; + + function arrayContains(array, subset) { + if (subset.length === 0) { return true; } + var i, l, j, k; + for (i = 0, l = array.length; i < l; ++i) { + if (match(array[i], subset[0])) { + for (j = 0, k = subset.length; j < k; ++j) { + if (!match(array[i + j], subset[j])) { return false; } + } + return true; + } + } + return false; + } + + /** + * @name samsam.match + * @param Object object + * @param Object matcher + * + * Compare arbitrary value ``object`` with matcher. + */ + match = function match(object, matcher) { + if (matcher && typeof matcher.test === "function") { + return matcher.test(object); + } + + if (typeof matcher === "function") { + return matcher(object) === true; + } + + if (typeof matcher === "string") { + matcher = matcher.toLowerCase(); + var notNull = typeof object === "string" || !!object; + return notNull && + (String(object)).toLowerCase().indexOf(matcher) >= 0; + } + + if (typeof matcher === "number") { + return matcher === object; + } + + if (typeof matcher === "boolean") { + return matcher === object; + } + + if (typeof(matcher) === "undefined") { + return typeof(object) === "undefined"; + } + + if (matcher === null) { + return object === null; + } + + if (getClass(object) === "Array" && getClass(matcher) === "Array") { + return arrayContains(object, matcher); + } + + if (matcher && typeof matcher === "object") { + if (matcher === object) { + return true; + } + var prop; + for (prop in matcher) { + var value = object[prop]; + if (typeof value === "undefined" && + typeof object.getAttribute === "function") { + value = object.getAttribute(prop); + } + if (matcher[prop] === null || typeof matcher[prop] === 'undefined') { + if (value !== matcher[prop]) { + return false; + } + } else if (typeof value === "undefined" || !match(value, matcher[prop])) { + return false; + } + } + return true; + } + + throw new Error("Matcher was not a string, a number, a " + + "function, a boolean or an object"); + }; + + return { + isArguments: isArguments, + isElement: isElement, + isDate: isDate, + isNegZero: isNegZero, + identical: identical, + deepEqual: deepEqualCyclic, + match: match, + keys: keys + }; +}); +((typeof define === "function" && define.amd && function (m) { + define("formatio", ["samsam"], m); +}) || (typeof module === "object" && function (m) { + module.exports = m(require("samsam")); +}) || function (m) { this.formatio = m(this.samsam); } +)(function (samsam) { + + var formatio = { + excludeConstructors: ["Object", /^.$/], + quoteStrings: true, + limitChildrenCount: 0 + }; + + var hasOwn = Object.prototype.hasOwnProperty; + + var specialObjects = []; + if (typeof global !== "undefined") { + specialObjects.push({ object: global, value: "[object global]" }); + } + if (typeof document !== "undefined") { + specialObjects.push({ + object: document, + value: "[object HTMLDocument]" + }); + } + if (typeof window !== "undefined") { + specialObjects.push({ object: window, value: "[object Window]" }); + } + + function functionName(func) { + if (!func) { return ""; } + if (func.displayName) { return func.displayName; } + if (func.name) { return func.name; } + var matches = func.toString().match(/function\s+([^\(]+)/m); + return (matches && matches[1]) || ""; + } + + function constructorName(f, object) { + var name = functionName(object && object.constructor); + var excludes = f.excludeConstructors || + formatio.excludeConstructors || []; + + var i, l; + for (i = 0, l = excludes.length; i < l; ++i) { + if (typeof excludes[i] === "string" && excludes[i] === name) { + return ""; + } else if (excludes[i].test && excludes[i].test(name)) { + return ""; + } + } + + return name; + } + + function isCircular(object, objects) { + if (typeof object !== "object") { return false; } + var i, l; + for (i = 0, l = objects.length; i < l; ++i) { + if (objects[i] === object) { return true; } + } + return false; + } + + function ascii(f, object, processed, indent) { + if (typeof object === "string") { + var qs = f.quoteStrings; + var quote = typeof qs !== "boolean" || qs; + return processed || quote ? '"' + object + '"' : object; + } + + if (typeof object === "function" && !(object instanceof RegExp)) { + return ascii.func(object); + } + + processed = processed || []; + + if (isCircular(object, processed)) { return "[Circular]"; } + + if (Object.prototype.toString.call(object) === "[object Array]") { + return ascii.array.call(f, object, processed); + } + + if (!object) { return String((1/object) === -Infinity ? "-0" : object); } + if (samsam.isElement(object)) { return ascii.element(object); } + + if (typeof object.toString === "function" && + object.toString !== Object.prototype.toString) { + return object.toString(); + } + + var i, l; + for (i = 0, l = specialObjects.length; i < l; i++) { + if (object === specialObjects[i].object) { + return specialObjects[i].value; + } + } + + return ascii.object.call(f, object, processed, indent); + } + + ascii.func = function (func) { + return "function " + functionName(func) + "() {}"; + }; + + ascii.array = function (array, processed) { + processed = processed || []; + processed.push(array); + var pieces = []; + var i, l; + l = (this.limitChildrenCount > 0) ? + Math.min(this.limitChildrenCount, array.length) : array.length; + + for (i = 0; i < l; ++i) { + pieces.push(ascii(this, array[i], processed)); + } + + if(l < array.length) + pieces.push("[... " + (array.length - l) + " more elements]"); + + return "[" + pieces.join(", ") + "]"; + }; + + ascii.object = function (object, processed, indent) { + processed = processed || []; + processed.push(object); + indent = indent || 0; + var pieces = [], properties = samsam.keys(object).sort(); + var length = 3; + var prop, str, obj, i, k, l; + l = (this.limitChildrenCount > 0) ? + Math.min(this.limitChildrenCount, properties.length) : properties.length; + + for (i = 0; i < l; ++i) { + prop = properties[i]; + obj = object[prop]; + + if (isCircular(obj, processed)) { + str = "[Circular]"; + } else { + str = ascii(this, obj, processed, indent + 2); + } + + str = (/\s/.test(prop) ? '"' + prop + '"' : prop) + ": " + str; + length += str.length; + pieces.push(str); + } + + var cons = constructorName(this, object); + var prefix = cons ? "[" + cons + "] " : ""; + var is = ""; + for (i = 0, k = indent; i < k; ++i) { is += " "; } + + if(l < properties.length) + pieces.push("[... " + (properties.length - l) + " more elements]"); + + if (length + indent > 80) { + return prefix + "{\n " + is + pieces.join(",\n " + is) + "\n" + + is + "}"; + } + return prefix + "{ " + pieces.join(", ") + " }"; + }; + + ascii.element = function (element) { + var tagName = element.tagName.toLowerCase(); + var attrs = element.attributes, attr, pairs = [], attrName, i, l, val; + + for (i = 0, l = attrs.length; i < l; ++i) { + attr = attrs.item(i); + attrName = attr.nodeName.toLowerCase().replace("html:", ""); + val = attr.nodeValue; + if (attrName !== "contenteditable" || val !== "inherit") { + if (!!val) { pairs.push(attrName + "=\"" + val + "\""); } + } + } + + var formatted = "<" + tagName + (pairs.length > 0 ? " " : ""); + var content = element.innerHTML; + + if (content.length > 20) { + content = content.substr(0, 20) + "[...]"; + } + + var res = formatted + pairs.join(" ") + ">" + content + + ""; + + return res.replace(/ contentEditable="inherit"/, ""); + }; + + function Formatio(options) { + for (var opt in options) { + this[opt] = options[opt]; + } + } + + Formatio.prototype = { + functionName: functionName, + + configure: function (options) { + return new Formatio(options); + }, + + constructorName: function (object) { + return constructorName(this, object); + }, + + ascii: function (object, processed, indent) { + return ascii(this, object, processed, indent); + } + }; + + return Formatio.prototype; +}); +!function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var f;"undefined"!=typeof window?f=window:"undefined"!=typeof global?f=global:"undefined"!=typeof self&&(f=self),f.lolex=e()}}(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o 3 || !/^(\d\d:){0,2}\d\d?$/.test(str)) { + throw new Error("tick only understands numbers, 'm:s' and 'h:m:s'. Each part must be two digits"); + } + + while (i--) { + parsed = parseInt(strings[i], 10); + + if (parsed >= 60) { + throw new Error("Invalid time " + str); + } + + ms += parsed * Math.pow(60, (l - i - 1)); + } + + return ms * 1000; + } + + /** + * Used to grok the `now` parameter to createClock. + */ + function getEpoch(epoch) { + if (!epoch) { return 0; } + if (typeof epoch.getTime === "function") { return epoch.getTime(); } + if (typeof epoch === "number") { return epoch; } + throw new TypeError("now should be milliseconds since UNIX epoch"); + } + + function inRange(from, to, timer) { + return timer && timer.callAt >= from && timer.callAt <= to; + } + + function mirrorDateProperties(target, source) { + var prop; + for (prop in source) { + if (source.hasOwnProperty(prop)) { + target[prop] = source[prop]; + } + } + + // set special now implementation + if (source.now) { + target.now = function now() { + return target.clock.now; + }; + } else { + delete target.now; + } + + // set special toSource implementation + if (source.toSource) { + target.toSource = function toSource() { + return source.toSource(); + }; + } else { + delete target.toSource; + } + + // set special toString implementation + target.toString = function toString() { + return source.toString(); + }; + + target.prototype = source.prototype; + target.parse = source.parse; + target.UTC = source.UTC; + target.prototype.toUTCString = source.prototype.toUTCString; + + return target; + } + + function createDate() { + function ClockDate(year, month, date, hour, minute, second, ms) { + // Defensive and verbose to avoid potential harm in passing + // explicit undefined when user does not pass argument + switch (arguments.length) { + case 0: + return new NativeDate(ClockDate.clock.now); + case 1: + return new NativeDate(year); + case 2: + return new NativeDate(year, month); + case 3: + return new NativeDate(year, month, date); + case 4: + return new NativeDate(year, month, date, hour); + case 5: + return new NativeDate(year, month, date, hour, minute); + case 6: + return new NativeDate(year, month, date, hour, minute, second); + default: + return new NativeDate(year, month, date, hour, minute, second, ms); + } + } + + return mirrorDateProperties(ClockDate, NativeDate); + } + + function addTimer(clock, timer) { + if (timer.func === undefined) { + throw new Error("Callback must be provided to timer calls"); + } + + if (!clock.timers) { + clock.timers = {}; + } + + timer.id = uniqueTimerId++; + timer.createdAt = clock.now; + timer.callAt = clock.now + (timer.delay || (clock.duringTick ? 1 : 0)); + + clock.timers[timer.id] = timer; + + if (addTimerReturnsObject) { + return { + id: timer.id, + ref: NOOP, + unref: NOOP + }; + } + + return timer.id; + } + + + function compareTimers(a, b) { + // Sort first by absolute timing + if (a.callAt < b.callAt) { + return -1; + } + if (a.callAt > b.callAt) { + return 1; + } + + // Sort next by immediate, immediate timers take precedence + if (a.immediate && !b.immediate) { + return -1; + } + if (!a.immediate && b.immediate) { + return 1; + } + + // Sort next by creation time, earlier-created timers take precedence + if (a.createdAt < b.createdAt) { + return -1; + } + if (a.createdAt > b.createdAt) { + return 1; + } + + // Sort next by id, lower-id timers take precedence + if (a.id < b.id) { + return -1; + } + if (a.id > b.id) { + return 1; + } + + // As timer ids are unique, no fallback `0` is necessary + } + + function firstTimerInRange(clock, from, to) { + var timers = clock.timers, + timer = null, + id, + isInRange; + + for (id in timers) { + if (timers.hasOwnProperty(id)) { + isInRange = inRange(from, to, timers[id]); + + if (isInRange && (!timer || compareTimers(timer, timers[id]) === 1)) { + timer = timers[id]; + } + } + } + + return timer; + } + + function firstTimer(clock) { + var timers = clock.timers, + timer = null, + id; + + for (id in timers) { + if (timers.hasOwnProperty(id)) { + if (!timer || compareTimers(timer, timers[id]) === 1) { + timer = timers[id]; + } + } + } + + return timer; + } + + function callTimer(clock, timer) { + var exception; + + if (typeof timer.interval === "number") { + clock.timers[timer.id].callAt += timer.interval; + } else { + delete clock.timers[timer.id]; + } + + try { + if (typeof timer.func === "function") { + timer.func.apply(null, timer.args); + } else { + eval(timer.func); + } + } catch (e) { + exception = e; + } + + if (!clock.timers[timer.id]) { + if (exception) { + throw exception; + } + return; + } + + if (exception) { + throw exception; + } + } + + function timerType(timer) { + if (timer.immediate) { + return "Immediate"; + } else if (typeof timer.interval !== "undefined") { + return "Interval"; + } else { + return "Timeout"; + } + } + + function clearTimer(clock, timerId, ttype) { + if (!timerId) { + // null appears to be allowed in most browsers, and appears to be + // relied upon by some libraries, like Bootstrap carousel + return; + } + + if (!clock.timers) { + clock.timers = []; + } + + // in Node, timerId is an object with .ref()/.unref(), and + // its .id field is the actual timer id. + if (typeof timerId === "object") { + timerId = timerId.id; + } + + if (clock.timers.hasOwnProperty(timerId)) { + // check that the ID matches a timer of the correct type + var timer = clock.timers[timerId]; + if (timerType(timer) === ttype) { + delete clock.timers[timerId]; + } else { + throw new Error("Cannot clear timer: timer created with set" + ttype + "() but cleared with clear" + timerType(timer) + "()"); + } + } + } + + function uninstall(clock, target) { + var method, + i, + l; + + for (i = 0, l = clock.methods.length; i < l; i++) { + method = clock.methods[i]; + + if (target[method].hadOwnProperty) { + target[method] = clock["_" + method]; + } else { + try { + delete target[method]; + } catch (ignore) {} + } + } + + // Prevent multiple executions which will completely remove these props + clock.methods = []; + } + + function hijackMethod(target, method, clock) { + var prop; + + clock[method].hadOwnProperty = Object.prototype.hasOwnProperty.call(target, method); + clock["_" + method] = target[method]; + + if (method === "Date") { + var date = mirrorDateProperties(clock[method], target[method]); + target[method] = date; + } else { + target[method] = function () { + return clock[method].apply(clock, arguments); + }; + + for (prop in clock[method]) { + if (clock[method].hasOwnProperty(prop)) { + target[method][prop] = clock[method][prop]; + } + } + } + + target[method].clock = clock; + } + + var timers = { + setTimeout: setTimeout, + clearTimeout: clearTimeout, + setImmediate: global.setImmediate, + clearImmediate: global.clearImmediate, + setInterval: setInterval, + clearInterval: clearInterval, + Date: Date + }; + + var keys = Object.keys || function (obj) { + var ks = [], + key; + + for (key in obj) { + if (obj.hasOwnProperty(key)) { + ks.push(key); + } + } + + return ks; + }; + + exports.timers = timers; + + function createClock(now) { + var clock = { + now: getEpoch(now), + timeouts: {}, + Date: createDate() + }; + + clock.Date.clock = clock; + + clock.setTimeout = function setTimeout(func, timeout) { + return addTimer(clock, { + func: func, + args: Array.prototype.slice.call(arguments, 2), + delay: timeout + }); + }; + + clock.clearTimeout = function clearTimeout(timerId) { + return clearTimer(clock, timerId, "Timeout"); + }; + + clock.setInterval = function setInterval(func, timeout) { + return addTimer(clock, { + func: func, + args: Array.prototype.slice.call(arguments, 2), + delay: timeout, + interval: timeout + }); + }; + + clock.clearInterval = function clearInterval(timerId) { + return clearTimer(clock, timerId, "Interval"); + }; + + clock.setImmediate = function setImmediate(func) { + return addTimer(clock, { + func: func, + args: Array.prototype.slice.call(arguments, 1), + immediate: true + }); + }; + + clock.clearImmediate = function clearImmediate(timerId) { + return clearTimer(clock, timerId, "Immediate"); + }; + + clock.tick = function tick(ms) { + ms = typeof ms === "number" ? ms : parseTime(ms); + var tickFrom = clock.now, tickTo = clock.now + ms, previous = clock.now; + var timer = firstTimerInRange(clock, tickFrom, tickTo); + var oldNow; + + clock.duringTick = true; + + var firstException; + while (timer && tickFrom <= tickTo) { + if (clock.timers[timer.id]) { + tickFrom = clock.now = timer.callAt; + try { + oldNow = clock.now; + callTimer(clock, timer); + // compensate for any setSystemTime() call during timer callback + if (oldNow !== clock.now) { + tickFrom += clock.now - oldNow; + tickTo += clock.now - oldNow; + previous += clock.now - oldNow; + } + } catch (e) { + firstException = firstException || e; + } + } + + timer = firstTimerInRange(clock, previous, tickTo); + previous = tickFrom; + } + + clock.duringTick = false; + clock.now = tickTo; + + if (firstException) { + throw firstException; + } + + return clock.now; + }; + + clock.next = function next() { + var timer = firstTimer(clock); + if (!timer) { + return clock.now; + } + + clock.duringTick = true; + try { + clock.now = timer.callAt; + callTimer(clock, timer); + return clock.now; + } finally { + clock.duringTick = false; + } + }; + + clock.reset = function reset() { + clock.timers = {}; + }; + + clock.setSystemTime = function setSystemTime(now) { + // determine time difference + var newNow = getEpoch(now); + var difference = newNow - clock.now; + + // update 'system clock' + clock.now = newNow; + + // update timers and intervals to keep them stable + for (var id in clock.timers) { + if (clock.timers.hasOwnProperty(id)) { + var timer = clock.timers[id]; + timer.createdAt += difference; + timer.callAt += difference; + } + } + }; + + return clock; + } + exports.createClock = createClock; + + exports.install = function install(target, now, toFake) { + var i, + l; + + if (typeof target === "number") { + toFake = now; + now = target; + target = null; + } + + if (!target) { + target = global; + } + + var clock = createClock(now); + + clock.uninstall = function () { + uninstall(clock, target); + }; + + clock.methods = toFake || []; + + if (clock.methods.length === 0) { + clock.methods = keys(timers); + } + + for (i = 0, l = clock.methods.length; i < l; i++) { + hijackMethod(target, clock.methods[i], clock); + } + + return clock; + }; + +}(global || this)); + +}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) +},{}]},{},[1])(1) +}); + })(); + var define; +/** + * Sinon core utilities. For internal use only. + * + * @author Christian Johansen (christian@cjohansen.no) + * @license BSD + * + * Copyright (c) 2010-2013 Christian Johansen + */ +var sinon = (function () { +"use strict"; + // eslint-disable-line no-unused-vars + + var sinonModule; + var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; + var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; + + function loadDependencies(require, exports, module) { + sinonModule = module.exports = require("./sinon/util/core"); + require("./sinon/extend"); + require("./sinon/walk"); + require("./sinon/typeOf"); + require("./sinon/times_in_words"); + require("./sinon/spy"); + require("./sinon/call"); + require("./sinon/behavior"); + require("./sinon/stub"); + require("./sinon/mock"); + require("./sinon/collection"); + require("./sinon/assert"); + require("./sinon/sandbox"); + require("./sinon/test"); + require("./sinon/test_case"); + require("./sinon/match"); + require("./sinon/format"); + require("./sinon/log_error"); + } + + if (isAMD) { + define(loadDependencies); + } else if (isNode) { + loadDependencies(require, module.exports, module); + sinonModule = module.exports; + } else { + sinonModule = {}; + } + + return sinonModule; +}()); + +/** + * @depend ../../sinon.js + */ +/** + * Sinon core utilities. For internal use only. + * + * @author Christian Johansen (christian@cjohansen.no) + * @license BSD + * + * Copyright (c) 2010-2013 Christian Johansen + */ +(function (sinonGlobal) { + + var div = typeof document !== "undefined" && document.createElement("div"); + var hasOwn = Object.prototype.hasOwnProperty; + + function isDOMNode(obj) { + var success = false; + + try { + obj.appendChild(div); + success = div.parentNode === obj; + } catch (e) { + return false; + } finally { + try { + obj.removeChild(div); + } catch (e) { + // Remove failed, not much we can do about that + } + } + + return success; + } + + function isElement(obj) { + return div && obj && obj.nodeType === 1 && isDOMNode(obj); + } + + function isFunction(obj) { + return typeof obj === "function" || !!(obj && obj.constructor && obj.call && obj.apply); + } + + function isReallyNaN(val) { + return typeof val === "number" && isNaN(val); + } + + function mirrorProperties(target, source) { + for (var prop in source) { + if (!hasOwn.call(target, prop)) { + target[prop] = source[prop]; + } + } + } + + function isRestorable(obj) { + return typeof obj === "function" && typeof obj.restore === "function" && obj.restore.sinon; + } + + // Cheap way to detect if we have ES5 support. + var hasES5Support = "keys" in Object; + + function makeApi(sinon) { + sinon.wrapMethod = function wrapMethod(object, property, method) { + if (!object) { + throw new TypeError("Should wrap property of object"); + } + + if (typeof method !== "function" && typeof method !== "object") { + throw new TypeError("Method wrapper should be a function or a property descriptor"); + } + + function checkWrappedMethod(wrappedMethod) { + var error; + + if (!isFunction(wrappedMethod)) { + error = new TypeError("Attempted to wrap " + (typeof wrappedMethod) + " property " + + property + " as function"); + } else if (wrappedMethod.restore && wrappedMethod.restore.sinon) { + error = new TypeError("Attempted to wrap " + property + " which is already wrapped"); + } else if (wrappedMethod.calledBefore) { + var verb = wrappedMethod.returns ? "stubbed" : "spied on"; + error = new TypeError("Attempted to wrap " + property + " which is already " + verb); + } + + if (error) { + if (wrappedMethod && wrappedMethod.stackTrace) { + error.stack += "\n--------------\n" + wrappedMethod.stackTrace; + } + throw error; + } + } + + var error, wrappedMethod, i; + + // IE 8 does not support hasOwnProperty on the window object and Firefox has a problem + // when using hasOwn.call on objects from other frames. + var owned = object.hasOwnProperty ? object.hasOwnProperty(property) : hasOwn.call(object, property); + + if (hasES5Support) { + var methodDesc = (typeof method === "function") ? {value: method} : method; + var wrappedMethodDesc = sinon.getPropertyDescriptor(object, property); + + if (!wrappedMethodDesc) { + error = new TypeError("Attempted to wrap " + (typeof wrappedMethod) + " property " + + property + " as function"); + } else if (wrappedMethodDesc.restore && wrappedMethodDesc.restore.sinon) { + error = new TypeError("Attempted to wrap " + property + " which is already wrapped"); + } + if (error) { + if (wrappedMethodDesc && wrappedMethodDesc.stackTrace) { + error.stack += "\n--------------\n" + wrappedMethodDesc.stackTrace; + } + throw error; + } + + var types = sinon.objectKeys(methodDesc); + for (i = 0; i < types.length; i++) { + wrappedMethod = wrappedMethodDesc[types[i]]; + checkWrappedMethod(wrappedMethod); + } + + mirrorProperties(methodDesc, wrappedMethodDesc); + for (i = 0; i < types.length; i++) { + mirrorProperties(methodDesc[types[i]], wrappedMethodDesc[types[i]]); + } + Object.defineProperty(object, property, methodDesc); + } else { + wrappedMethod = object[property]; + checkWrappedMethod(wrappedMethod); + object[property] = method; + method.displayName = property; + } + + method.displayName = property; + + // Set up a stack trace which can be used later to find what line of + // code the original method was created on. + method.stackTrace = (new Error("Stack Trace for original")).stack; + + method.restore = function () { + // For prototype properties try to reset by delete first. + // If this fails (ex: localStorage on mobile safari) then force a reset + // via direct assignment. + if (!owned) { + // In some cases `delete` may throw an error + try { + delete object[property]; + } catch (e) {} // eslint-disable-line no-empty + // For native code functions `delete` fails without throwing an error + // on Chrome < 43, PhantomJS, etc. + } else if (hasES5Support) { + Object.defineProperty(object, property, wrappedMethodDesc); + } + + // Use strict equality comparison to check failures then force a reset + // via direct assignment. + if (object[property] === method) { + object[property] = wrappedMethod; + } + }; + + method.restore.sinon = true; + + if (!hasES5Support) { + mirrorProperties(method, wrappedMethod); + } + + return method; + }; + + sinon.create = function create(proto) { + var F = function () {}; + F.prototype = proto; + return new F(); + }; + + sinon.deepEqual = function deepEqual(a, b) { + if (sinon.match && sinon.match.isMatcher(a)) { + return a.test(b); + } + + if (typeof a !== "object" || typeof b !== "object") { + return isReallyNaN(a) && isReallyNaN(b) || a === b; + } + + if (isElement(a) || isElement(b)) { + return a === b; + } + + if (a === b) { + return true; + } + + if ((a === null && b !== null) || (a !== null && b === null)) { + return false; + } + + if (a instanceof RegExp && b instanceof RegExp) { + return (a.source === b.source) && (a.global === b.global) && + (a.ignoreCase === b.ignoreCase) && (a.multiline === b.multiline); + } + + var aString = Object.prototype.toString.call(a); + if (aString !== Object.prototype.toString.call(b)) { + return false; + } + + if (aString === "[object Date]") { + return a.valueOf() === b.valueOf(); + } + + var prop; + var aLength = 0; + var bLength = 0; + + if (aString === "[object Array]" && a.length !== b.length) { + return false; + } + + for (prop in a) { + if (a.hasOwnProperty(prop)) { + aLength += 1; + + if (!(prop in b)) { + return false; + } + + if (!deepEqual(a[prop], b[prop])) { + return false; + } + } + } + + for (prop in b) { + if (b.hasOwnProperty(prop)) { + bLength += 1; + } + } + + return aLength === bLength; + }; + + sinon.functionName = function functionName(func) { + var name = func.displayName || func.name; + + // Use function decomposition as a last resort to get function + // name. Does not rely on function decomposition to work - if it + // doesn't debugging will be slightly less informative + // (i.e. toString will say 'spy' rather than 'myFunc'). + if (!name) { + var matches = func.toString().match(/function ([^\s\(]+)/); + name = matches && matches[1]; + } + + return name; + }; + + sinon.functionToString = function toString() { + if (this.getCall && this.callCount) { + var thisValue, + prop; + var i = this.callCount; + + while (i--) { + thisValue = this.getCall(i).thisValue; + + for (prop in thisValue) { + if (thisValue[prop] === this) { + return prop; + } + } + } + } + + return this.displayName || "sinon fake"; + }; + + sinon.objectKeys = function objectKeys(obj) { + if (obj !== Object(obj)) { + throw new TypeError("sinon.objectKeys called on a non-object"); + } + + var keys = []; + var key; + for (key in obj) { + if (hasOwn.call(obj, key)) { + keys.push(key); + } + } + + return keys; + }; + + sinon.getPropertyDescriptor = function getPropertyDescriptor(object, property) { + var proto = object; + var descriptor; + + while (proto && !(descriptor = Object.getOwnPropertyDescriptor(proto, property))) { + proto = Object.getPrototypeOf(proto); + } + return descriptor; + }; + + sinon.getConfig = function (custom) { + var config = {}; + custom = custom || {}; + var defaults = sinon.defaultConfig; + + for (var prop in defaults) { + if (defaults.hasOwnProperty(prop)) { + config[prop] = custom.hasOwnProperty(prop) ? custom[prop] : defaults[prop]; + } + } + + return config; + }; + + sinon.defaultConfig = { + injectIntoThis: true, + injectInto: null, + properties: ["spy", "stub", "mock", "clock", "server", "requests"], + useFakeTimers: true, + useFakeServer: true + }; + + sinon.timesInWords = function timesInWords(count) { + return count === 1 && "once" || + count === 2 && "twice" || + count === 3 && "thrice" || + (count || 0) + " times"; + }; + + sinon.calledInOrder = function (spies) { + for (var i = 1, l = spies.length; i < l; i++) { + if (!spies[i - 1].calledBefore(spies[i]) || !spies[i].called) { + return false; + } + } + + return true; + }; + + sinon.orderByFirstCall = function (spies) { + return spies.sort(function (a, b) { + // uuid, won't ever be equal + var aCall = a.getCall(0); + var bCall = b.getCall(0); + var aId = aCall && aCall.callId || -1; + var bId = bCall && bCall.callId || -1; + + return aId < bId ? -1 : 1; + }); + }; + + sinon.createStubInstance = function (constructor) { + if (typeof constructor !== "function") { + throw new TypeError("The constructor should be a function."); + } + return sinon.stub(sinon.create(constructor.prototype)); + }; + + sinon.restore = function (object) { + if (object !== null && typeof object === "object") { + for (var prop in object) { + if (isRestorable(object[prop])) { + object[prop].restore(); + } + } + } else if (isRestorable(object)) { + object.restore(); + } + }; + + return sinon; + } + + var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; + var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; + + function loadDependencies(require, exports) { + makeApi(exports); + } + + if (isAMD) { + define(loadDependencies); + return; + } + + if (isNode) { + loadDependencies(require, module.exports, module); + return; + } + + if (sinonGlobal) { + makeApi(sinonGlobal); + } +}( + typeof sinon === "object" && sinon // eslint-disable-line no-undef +)); + +/** + * @depend util/core.js + */ +(function (sinonGlobal) { + + function makeApi(sinon) { + + // Adapted from https://developer.mozilla.org/en/docs/ECMAScript_DontEnum_attribute#JScript_DontEnum_Bug + var hasDontEnumBug = (function () { + var obj = { + constructor: function () { + return "0"; + }, + toString: function () { + return "1"; + }, + valueOf: function () { + return "2"; + }, + toLocaleString: function () { + return "3"; + }, + prototype: function () { + return "4"; + }, + isPrototypeOf: function () { + return "5"; + }, + propertyIsEnumerable: function () { + return "6"; + }, + hasOwnProperty: function () { + return "7"; + }, + length: function () { + return "8"; + }, + unique: function () { + return "9"; + } + }; + + var result = []; + for (var prop in obj) { + if (obj.hasOwnProperty(prop)) { + result.push(obj[prop]()); + } + } + return result.join("") !== "0123456789"; + })(); + + /* Public: Extend target in place with all (own) properties from sources in-order. Thus, last source will + * override properties in previous sources. + * + * target - The Object to extend + * sources - Objects to copy properties from. + * + * Returns the extended target + */ + function extend(target /*, sources */) { + var sources = Array.prototype.slice.call(arguments, 1); + var source, i, prop; + + for (i = 0; i < sources.length; i++) { + source = sources[i]; + + for (prop in source) { + if (source.hasOwnProperty(prop)) { + target[prop] = source[prop]; + } + } + + // Make sure we copy (own) toString method even when in JScript with DontEnum bug + // See https://developer.mozilla.org/en/docs/ECMAScript_DontEnum_attribute#JScript_DontEnum_Bug + if (hasDontEnumBug && source.hasOwnProperty("toString") && source.toString !== target.toString) { + target.toString = source.toString; + } + } + + return target; + } + + sinon.extend = extend; + return sinon.extend; + } + + function loadDependencies(require, exports, module) { + var sinon = require("./util/core"); + module.exports = makeApi(sinon); + } + + var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; + var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; + + if (isAMD) { + define(loadDependencies); + return; + } + + if (isNode) { + loadDependencies(require, module.exports, module); + return; + } + + if (sinonGlobal) { + makeApi(sinonGlobal); + } +}( + typeof sinon === "object" && sinon // eslint-disable-line no-undef +)); + +/** + * @depend util/core.js + */ +(function (sinonGlobal) { + + function makeApi(sinon) { + + function timesInWords(count) { + switch (count) { + case 1: + return "once"; + case 2: + return "twice"; + case 3: + return "thrice"; + default: + return (count || 0) + " times"; + } + } + + sinon.timesInWords = timesInWords; + return sinon.timesInWords; + } + + function loadDependencies(require, exports, module) { + var core = require("./util/core"); + module.exports = makeApi(core); + } + + var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; + var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; + + if (isAMD) { + define(loadDependencies); + return; + } + + if (isNode) { + loadDependencies(require, module.exports, module); + return; + } + + if (sinonGlobal) { + makeApi(sinonGlobal); + } +}( + typeof sinon === "object" && sinon // eslint-disable-line no-undef +)); + +/** + * @depend util/core.js + */ +/** + * Format functions + * + * @author Christian Johansen (christian@cjohansen.no) + * @license BSD + * + * Copyright (c) 2010-2014 Christian Johansen + */ +(function (sinonGlobal) { + + function makeApi(sinon) { + function typeOf(value) { + if (value === null) { + return "null"; + } else if (value === undefined) { + return "undefined"; + } + var string = Object.prototype.toString.call(value); + return string.substring(8, string.length - 1).toLowerCase(); + } + + sinon.typeOf = typeOf; + return sinon.typeOf; + } + + function loadDependencies(require, exports, module) { + var core = require("./util/core"); + module.exports = makeApi(core); + } + + var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; + var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; + + if (isAMD) { + define(loadDependencies); + return; + } + + if (isNode) { + loadDependencies(require, module.exports, module); + return; + } + + if (sinonGlobal) { + makeApi(sinonGlobal); + } +}( + typeof sinon === "object" && sinon // eslint-disable-line no-undef +)); + +/** + * @depend util/core.js + * @depend typeOf.js + */ +/*jslint eqeqeq: false, onevar: false, plusplus: false*/ +/*global module, require, sinon*/ +/** + * Match functions + * + * @author Maximilian Antoni (mail@maxantoni.de) + * @license BSD + * + * Copyright (c) 2012 Maximilian Antoni + */ +(function (sinonGlobal) { + + function makeApi(sinon) { + function assertType(value, type, name) { + var actual = sinon.typeOf(value); + if (actual !== type) { + throw new TypeError("Expected type of " + name + " to be " + + type + ", but was " + actual); + } + } + + var matcher = { + toString: function () { + return this.message; + } + }; + + function isMatcher(object) { + return matcher.isPrototypeOf(object); + } + + function matchObject(expectation, actual) { + if (actual === null || actual === undefined) { + return false; + } + for (var key in expectation) { + if (expectation.hasOwnProperty(key)) { + var exp = expectation[key]; + var act = actual[key]; + if (isMatcher(exp)) { + if (!exp.test(act)) { + return false; + } + } else if (sinon.typeOf(exp) === "object") { + if (!matchObject(exp, act)) { + return false; + } + } else if (!sinon.deepEqual(exp, act)) { + return false; + } + } + } + return true; + } + + function match(expectation, message) { + var m = sinon.create(matcher); + var type = sinon.typeOf(expectation); + switch (type) { + case "object": + if (typeof expectation.test === "function") { + m.test = function (actual) { + return expectation.test(actual) === true; + }; + m.message = "match(" + sinon.functionName(expectation.test) + ")"; + return m; + } + var str = []; + for (var key in expectation) { + if (expectation.hasOwnProperty(key)) { + str.push(key + ": " + expectation[key]); + } + } + m.test = function (actual) { + return matchObject(expectation, actual); + }; + m.message = "match(" + str.join(", ") + ")"; + break; + case "number": + m.test = function (actual) { + // we need type coercion here + return expectation == actual; // eslint-disable-line eqeqeq + }; + break; + case "string": + m.test = function (actual) { + if (typeof actual !== "string") { + return false; + } + return actual.indexOf(expectation) !== -1; + }; + m.message = "match(\"" + expectation + "\")"; + break; + case "regexp": + m.test = function (actual) { + if (typeof actual !== "string") { + return false; + } + return expectation.test(actual); + }; + break; + case "function": + m.test = expectation; + if (message) { + m.message = message; + } else { + m.message = "match(" + sinon.functionName(expectation) + ")"; + } + break; + default: + m.test = function (actual) { + return sinon.deepEqual(expectation, actual); + }; + } + if (!m.message) { + m.message = "match(" + expectation + ")"; + } + return m; + } + + matcher.or = function (m2) { + if (!arguments.length) { + throw new TypeError("Matcher expected"); + } else if (!isMatcher(m2)) { + m2 = match(m2); + } + var m1 = this; + var or = sinon.create(matcher); + or.test = function (actual) { + return m1.test(actual) || m2.test(actual); + }; + or.message = m1.message + ".or(" + m2.message + ")"; + return or; + }; + + matcher.and = function (m2) { + if (!arguments.length) { + throw new TypeError("Matcher expected"); + } else if (!isMatcher(m2)) { + m2 = match(m2); + } + var m1 = this; + var and = sinon.create(matcher); + and.test = function (actual) { + return m1.test(actual) && m2.test(actual); + }; + and.message = m1.message + ".and(" + m2.message + ")"; + return and; + }; + + match.isMatcher = isMatcher; + + match.any = match(function () { + return true; + }, "any"); + + match.defined = match(function (actual) { + return actual !== null && actual !== undefined; + }, "defined"); + + match.truthy = match(function (actual) { + return !!actual; + }, "truthy"); + + match.falsy = match(function (actual) { + return !actual; + }, "falsy"); + + match.same = function (expectation) { + return match(function (actual) { + return expectation === actual; + }, "same(" + expectation + ")"); + }; + + match.typeOf = function (type) { + assertType(type, "string", "type"); + return match(function (actual) { + return sinon.typeOf(actual) === type; + }, "typeOf(\"" + type + "\")"); + }; + + match.instanceOf = function (type) { + assertType(type, "function", "type"); + return match(function (actual) { + return actual instanceof type; + }, "instanceOf(" + sinon.functionName(type) + ")"); + }; + + function createPropertyMatcher(propertyTest, messagePrefix) { + return function (property, value) { + assertType(property, "string", "property"); + var onlyProperty = arguments.length === 1; + var message = messagePrefix + "(\"" + property + "\""; + if (!onlyProperty) { + message += ", " + value; + } + message += ")"; + return match(function (actual) { + if (actual === undefined || actual === null || + !propertyTest(actual, property)) { + return false; + } + return onlyProperty || sinon.deepEqual(value, actual[property]); + }, message); + }; + } + + match.has = createPropertyMatcher(function (actual, property) { + if (typeof actual === "object") { + return property in actual; + } + return actual[property] !== undefined; + }, "has"); + + match.hasOwn = createPropertyMatcher(function (actual, property) { + return actual.hasOwnProperty(property); + }, "hasOwn"); + + match.bool = match.typeOf("boolean"); + match.number = match.typeOf("number"); + match.string = match.typeOf("string"); + match.object = match.typeOf("object"); + match.func = match.typeOf("function"); + match.array = match.typeOf("array"); + match.regexp = match.typeOf("regexp"); + match.date = match.typeOf("date"); + + sinon.match = match; + return match; + } + + var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; + var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; + + function loadDependencies(require, exports, module) { + var sinon = require("./util/core"); + require("./typeOf"); + module.exports = makeApi(sinon); + } + + if (isAMD) { + define(loadDependencies); + return; + } + + if (isNode) { + loadDependencies(require, module.exports, module); + return; + } + + if (sinonGlobal) { + makeApi(sinonGlobal); + } +}( + typeof sinon === "object" && sinon // eslint-disable-line no-undef +)); + +/** + * @depend util/core.js + */ +/** + * Format functions + * + * @author Christian Johansen (christian@cjohansen.no) + * @license BSD + * + * Copyright (c) 2010-2014 Christian Johansen + */ +(function (sinonGlobal, formatio) { + + function makeApi(sinon) { + function valueFormatter(value) { + return "" + value; + } + + function getFormatioFormatter() { + var formatter = formatio.configure({ + quoteStrings: false, + limitChildrenCount: 250 + }); + + function format() { + return formatter.ascii.apply(formatter, arguments); + } + + return format; + } + + function getNodeFormatter() { + try { + var util = require("util"); + } catch (e) { + /* Node, but no util module - would be very old, but better safe than sorry */ + } + + function format(v) { + var isObjectWithNativeToString = typeof v === "object" && v.toString === Object.prototype.toString; + return isObjectWithNativeToString ? util.inspect(v) : v; + } + + return util ? format : valueFormatter; + } + + var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; + var formatter; + + if (isNode) { + try { + formatio = require("formatio"); + } + catch (e) {} // eslint-disable-line no-empty + } + + if (formatio) { + formatter = getFormatioFormatter(); + } else if (isNode) { + formatter = getNodeFormatter(); + } else { + formatter = valueFormatter; + } + + sinon.format = formatter; + return sinon.format; + } + + function loadDependencies(require, exports, module) { + var sinon = require("./util/core"); + module.exports = makeApi(sinon); + } + + var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; + var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; + + if (isAMD) { + define(loadDependencies); + return; + } + + if (isNode) { + loadDependencies(require, module.exports, module); + return; + } + + if (sinonGlobal) { + makeApi(sinonGlobal); + } +}( + typeof sinon === "object" && sinon, // eslint-disable-line no-undef + typeof formatio === "object" && formatio // eslint-disable-line no-undef +)); + +/** + * @depend util/core.js + * @depend match.js + * @depend format.js + */ +/** + * Spy calls + * + * @author Christian Johansen (christian@cjohansen.no) + * @author Maximilian Antoni (mail@maxantoni.de) + * @license BSD + * + * Copyright (c) 2010-2013 Christian Johansen + * Copyright (c) 2013 Maximilian Antoni + */ +(function (sinonGlobal) { + + var slice = Array.prototype.slice; + + function makeApi(sinon) { + function throwYieldError(proxy, text, args) { + var msg = sinon.functionName(proxy) + text; + if (args.length) { + msg += " Received [" + slice.call(args).join(", ") + "]"; + } + throw new Error(msg); + } + + var callProto = { + calledOn: function calledOn(thisValue) { + if (sinon.match && sinon.match.isMatcher(thisValue)) { + return thisValue.test(this.thisValue); + } + return this.thisValue === thisValue; + }, + + calledWith: function calledWith() { + var l = arguments.length; + if (l > this.args.length) { + return false; + } + for (var i = 0; i < l; i += 1) { + if (!sinon.deepEqual(arguments[i], this.args[i])) { + return false; + } + } + + return true; + }, + + calledWithMatch: function calledWithMatch() { + var l = arguments.length; + if (l > this.args.length) { + return false; + } + for (var i = 0; i < l; i += 1) { + var actual = this.args[i]; + var expectation = arguments[i]; + if (!sinon.match || !sinon.match(expectation).test(actual)) { + return false; + } + } + return true; + }, + + calledWithExactly: function calledWithExactly() { + return arguments.length === this.args.length && + this.calledWith.apply(this, arguments); + }, + + notCalledWith: function notCalledWith() { + return !this.calledWith.apply(this, arguments); + }, + + notCalledWithMatch: function notCalledWithMatch() { + return !this.calledWithMatch.apply(this, arguments); + }, + + returned: function returned(value) { + return sinon.deepEqual(value, this.returnValue); + }, + + threw: function threw(error) { + if (typeof error === "undefined" || !this.exception) { + return !!this.exception; + } + + return this.exception === error || this.exception.name === error; + }, + + calledWithNew: function calledWithNew() { + return this.proxy.prototype && this.thisValue instanceof this.proxy; + }, + + calledBefore: function (other) { + return this.callId < other.callId; + }, + + calledAfter: function (other) { + return this.callId > other.callId; + }, + + callArg: function (pos) { + this.args[pos](); + }, + + callArgOn: function (pos, thisValue) { + this.args[pos].apply(thisValue); + }, + + callArgWith: function (pos) { + this.callArgOnWith.apply(this, [pos, null].concat(slice.call(arguments, 1))); + }, + + callArgOnWith: function (pos, thisValue) { + var args = slice.call(arguments, 2); + this.args[pos].apply(thisValue, args); + }, + + "yield": function () { + this.yieldOn.apply(this, [null].concat(slice.call(arguments, 0))); + }, + + yieldOn: function (thisValue) { + var args = this.args; + for (var i = 0, l = args.length; i < l; ++i) { + if (typeof args[i] === "function") { + args[i].apply(thisValue, slice.call(arguments, 1)); + return; + } + } + throwYieldError(this.proxy, " cannot yield since no callback was passed.", args); + }, + + yieldTo: function (prop) { + this.yieldToOn.apply(this, [prop, null].concat(slice.call(arguments, 1))); + }, + + yieldToOn: function (prop, thisValue) { + var args = this.args; + for (var i = 0, l = args.length; i < l; ++i) { + if (args[i] && typeof args[i][prop] === "function") { + args[i][prop].apply(thisValue, slice.call(arguments, 2)); + return; + } + } + throwYieldError(this.proxy, " cannot yield to '" + prop + + "' since no callback was passed.", args); + }, + + getStackFrames: function () { + // Omit the error message and the two top stack frames in sinon itself: + return this.stack && this.stack.split("\n").slice(3); + }, + + toString: function () { + var callStr = this.proxy ? this.proxy.toString() + "(" : ""; + var args = []; + + if (!this.args) { + return ":("; + } + + for (var i = 0, l = this.args.length; i < l; ++i) { + args.push(sinon.format(this.args[i])); + } + + callStr = callStr + args.join(", ") + ")"; + + if (typeof this.returnValue !== "undefined") { + callStr += " => " + sinon.format(this.returnValue); + } + + if (this.exception) { + callStr += " !" + this.exception.name; + + if (this.exception.message) { + callStr += "(" + this.exception.message + ")"; + } + } + if (this.stack) { + callStr += this.getStackFrames()[0].replace(/^\s*(?:at\s+|@)?/, " at "); + + } + + return callStr; + } + }; + + callProto.invokeCallback = callProto.yield; + + function createSpyCall(spy, thisValue, args, returnValue, exception, id, stack) { + if (typeof id !== "number") { + throw new TypeError("Call id is not a number"); + } + var proxyCall = sinon.create(callProto); + proxyCall.proxy = spy; + proxyCall.thisValue = thisValue; + proxyCall.args = args; + proxyCall.returnValue = returnValue; + proxyCall.exception = exception; + proxyCall.callId = id; + proxyCall.stack = stack; + + return proxyCall; + } + createSpyCall.toString = callProto.toString; // used by mocks + + sinon.spyCall = createSpyCall; + return createSpyCall; + } + + var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; + var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; + + function loadDependencies(require, exports, module) { + var sinon = require("./util/core"); + require("./match"); + require("./format"); + module.exports = makeApi(sinon); + } + + if (isAMD) { + define(loadDependencies); + return; + } + + if (isNode) { + loadDependencies(require, module.exports, module); + return; + } + + if (sinonGlobal) { + makeApi(sinonGlobal); + } +}( + typeof sinon === "object" && sinon // eslint-disable-line no-undef +)); + +/** + * @depend times_in_words.js + * @depend util/core.js + * @depend extend.js + * @depend call.js + * @depend format.js + */ +/** + * Spy functions + * + * @author Christian Johansen (christian@cjohansen.no) + * @license BSD + * + * Copyright (c) 2010-2013 Christian Johansen + */ +(function (sinonGlobal) { + + function makeApi(sinon) { + var push = Array.prototype.push; + var slice = Array.prototype.slice; + var callId = 0; + + function spy(object, property, types) { + if (!property && typeof object === "function") { + return spy.create(object); + } + + if (!object && !property) { + return spy.create(function () { }); + } + + if (types) { + var methodDesc = sinon.getPropertyDescriptor(object, property); + for (var i = 0; i < types.length; i++) { + methodDesc[types[i]] = spy.create(methodDesc[types[i]]); + } + return sinon.wrapMethod(object, property, methodDesc); + } + + return sinon.wrapMethod(object, property, spy.create(object[property])); + } + + function matchingFake(fakes, args, strict) { + if (!fakes) { + return undefined; + } + + for (var i = 0, l = fakes.length; i < l; i++) { + if (fakes[i].matches(args, strict)) { + return fakes[i]; + } + } + } + + function incrementCallCount() { + this.called = true; + this.callCount += 1; + this.notCalled = false; + this.calledOnce = this.callCount === 1; + this.calledTwice = this.callCount === 2; + this.calledThrice = this.callCount === 3; + } + + function createCallProperties() { + this.firstCall = this.getCall(0); + this.secondCall = this.getCall(1); + this.thirdCall = this.getCall(2); + this.lastCall = this.getCall(this.callCount - 1); + } + + var vars = "a,b,c,d,e,f,g,h,i,j,k,l"; + function createProxy(func, proxyLength) { + // Retain the function length: + var p; + if (proxyLength) { + eval("p = (function proxy(" + vars.substring(0, proxyLength * 2 - 1) + // eslint-disable-line no-eval + ") { return p.invoke(func, this, slice.call(arguments)); });"); + } else { + p = function proxy() { + return p.invoke(func, this, slice.call(arguments)); + }; + } + p.isSinonProxy = true; + return p; + } + + var uuid = 0; + + // Public API + var spyApi = { + reset: function () { + if (this.invoking) { + var err = new Error("Cannot reset Sinon function while invoking it. " + + "Move the call to .reset outside of the callback."); + err.name = "InvalidResetException"; + throw err; + } + + this.called = false; + this.notCalled = true; + this.calledOnce = false; + this.calledTwice = false; + this.calledThrice = false; + this.callCount = 0; + this.firstCall = null; + this.secondCall = null; + this.thirdCall = null; + this.lastCall = null; + this.args = []; + this.returnValues = []; + this.thisValues = []; + this.exceptions = []; + this.callIds = []; + this.stacks = []; + if (this.fakes) { + for (var i = 0; i < this.fakes.length; i++) { + this.fakes[i].reset(); + } + } + + return this; + }, + + create: function create(func, spyLength) { + var name; + + if (typeof func !== "function") { + func = function () { }; + } else { + name = sinon.functionName(func); + } + + if (!spyLength) { + spyLength = func.length; + } + + var proxy = createProxy(func, spyLength); + + sinon.extend(proxy, spy); + delete proxy.create; + sinon.extend(proxy, func); + + proxy.reset(); + proxy.prototype = func.prototype; + proxy.displayName = name || "spy"; + proxy.toString = sinon.functionToString; + proxy.instantiateFake = sinon.spy.create; + proxy.id = "spy#" + uuid++; + + return proxy; + }, + + invoke: function invoke(func, thisValue, args) { + var matching = matchingFake(this.fakes, args); + var exception, returnValue; + + incrementCallCount.call(this); + push.call(this.thisValues, thisValue); + push.call(this.args, args); + push.call(this.callIds, callId++); + + // Make call properties available from within the spied function: + createCallProperties.call(this); + + try { + this.invoking = true; + + if (matching) { + returnValue = matching.invoke(func, thisValue, args); + } else { + returnValue = (this.func || func).apply(thisValue, args); + } + + var thisCall = this.getCall(this.callCount - 1); + if (thisCall.calledWithNew() && typeof returnValue !== "object") { + returnValue = thisValue; + } + } catch (e) { + exception = e; + } finally { + delete this.invoking; + } + + push.call(this.exceptions, exception); + push.call(this.returnValues, returnValue); + push.call(this.stacks, new Error().stack); + + // Make return value and exception available in the calls: + createCallProperties.call(this); + + if (exception !== undefined) { + throw exception; + } + + return returnValue; + }, + + named: function named(name) { + this.displayName = name; + return this; + }, + + getCall: function getCall(i) { + if (i < 0 || i >= this.callCount) { + return null; + } + + return sinon.spyCall(this, this.thisValues[i], this.args[i], + this.returnValues[i], this.exceptions[i], + this.callIds[i], this.stacks[i]); + }, + + getCalls: function () { + var calls = []; + var i; + + for (i = 0; i < this.callCount; i++) { + calls.push(this.getCall(i)); + } + + return calls; + }, + + calledBefore: function calledBefore(spyFn) { + if (!this.called) { + return false; + } + + if (!spyFn.called) { + return true; + } + + return this.callIds[0] < spyFn.callIds[spyFn.callIds.length - 1]; + }, + + calledAfter: function calledAfter(spyFn) { + if (!this.called || !spyFn.called) { + return false; + } + + return this.callIds[this.callCount - 1] > spyFn.callIds[spyFn.callCount - 1]; + }, + + withArgs: function () { + var args = slice.call(arguments); + + if (this.fakes) { + var match = matchingFake(this.fakes, args, true); + + if (match) { + return match; + } + } else { + this.fakes = []; + } + + var original = this; + var fake = this.instantiateFake(); + fake.matchingAguments = args; + fake.parent = this; + push.call(this.fakes, fake); + + fake.withArgs = function () { + return original.withArgs.apply(original, arguments); + }; + + for (var i = 0; i < this.args.length; i++) { + if (fake.matches(this.args[i])) { + incrementCallCount.call(fake); + push.call(fake.thisValues, this.thisValues[i]); + push.call(fake.args, this.args[i]); + push.call(fake.returnValues, this.returnValues[i]); + push.call(fake.exceptions, this.exceptions[i]); + push.call(fake.callIds, this.callIds[i]); + } + } + createCallProperties.call(fake); + + return fake; + }, + + matches: function (args, strict) { + var margs = this.matchingAguments; + + if (margs.length <= args.length && + sinon.deepEqual(margs, args.slice(0, margs.length))) { + return !strict || margs.length === args.length; + } + }, + + printf: function (format) { + var spyInstance = this; + var args = slice.call(arguments, 1); + var formatter; + + return (format || "").replace(/%(.)/g, function (match, specifyer) { + formatter = spyApi.formatters[specifyer]; + + if (typeof formatter === "function") { + return formatter.call(null, spyInstance, args); + } else if (!isNaN(parseInt(specifyer, 10))) { + return sinon.format(args[specifyer - 1]); + } + + return "%" + specifyer; + }); + } + }; + + function delegateToCalls(method, matchAny, actual, notCalled) { + spyApi[method] = function () { + if (!this.called) { + if (notCalled) { + return notCalled.apply(this, arguments); + } + return false; + } + + var currentCall; + var matches = 0; + + for (var i = 0, l = this.callCount; i < l; i += 1) { + currentCall = this.getCall(i); + + if (currentCall[actual || method].apply(currentCall, arguments)) { + matches += 1; + + if (matchAny) { + return true; + } + } + } + + return matches === this.callCount; + }; + } + + delegateToCalls("calledOn", true); + delegateToCalls("alwaysCalledOn", false, "calledOn"); + delegateToCalls("calledWith", true); + delegateToCalls("calledWithMatch", true); + delegateToCalls("alwaysCalledWith", false, "calledWith"); + delegateToCalls("alwaysCalledWithMatch", false, "calledWithMatch"); + delegateToCalls("calledWithExactly", true); + delegateToCalls("alwaysCalledWithExactly", false, "calledWithExactly"); + delegateToCalls("neverCalledWith", false, "notCalledWith", function () { + return true; + }); + delegateToCalls("neverCalledWithMatch", false, "notCalledWithMatch", function () { + return true; + }); + delegateToCalls("threw", true); + delegateToCalls("alwaysThrew", false, "threw"); + delegateToCalls("returned", true); + delegateToCalls("alwaysReturned", false, "returned"); + delegateToCalls("calledWithNew", true); + delegateToCalls("alwaysCalledWithNew", false, "calledWithNew"); + delegateToCalls("callArg", false, "callArgWith", function () { + throw new Error(this.toString() + " cannot call arg since it was not yet invoked."); + }); + spyApi.callArgWith = spyApi.callArg; + delegateToCalls("callArgOn", false, "callArgOnWith", function () { + throw new Error(this.toString() + " cannot call arg since it was not yet invoked."); + }); + spyApi.callArgOnWith = spyApi.callArgOn; + delegateToCalls("yield", false, "yield", function () { + throw new Error(this.toString() + " cannot yield since it was not yet invoked."); + }); + // "invokeCallback" is an alias for "yield" since "yield" is invalid in strict mode. + spyApi.invokeCallback = spyApi.yield; + delegateToCalls("yieldOn", false, "yieldOn", function () { + throw new Error(this.toString() + " cannot yield since it was not yet invoked."); + }); + delegateToCalls("yieldTo", false, "yieldTo", function (property) { + throw new Error(this.toString() + " cannot yield to '" + property + + "' since it was not yet invoked."); + }); + delegateToCalls("yieldToOn", false, "yieldToOn", function (property) { + throw new Error(this.toString() + " cannot yield to '" + property + + "' since it was not yet invoked."); + }); + + spyApi.formatters = { + c: function (spyInstance) { + return sinon.timesInWords(spyInstance.callCount); + }, + + n: function (spyInstance) { + return spyInstance.toString(); + }, + + C: function (spyInstance) { + var calls = []; + + for (var i = 0, l = spyInstance.callCount; i < l; ++i) { + var stringifiedCall = " " + spyInstance.getCall(i).toString(); + if (/\n/.test(calls[i - 1])) { + stringifiedCall = "\n" + stringifiedCall; + } + push.call(calls, stringifiedCall); + } + + return calls.length > 0 ? "\n" + calls.join("\n") : ""; + }, + + t: function (spyInstance) { + var objects = []; + + for (var i = 0, l = spyInstance.callCount; i < l; ++i) { + push.call(objects, sinon.format(spyInstance.thisValues[i])); + } + + return objects.join(", "); + }, + + "*": function (spyInstance, args) { + var formatted = []; + + for (var i = 0, l = args.length; i < l; ++i) { + push.call(formatted, sinon.format(args[i])); + } + + return formatted.join(", "); + } + }; + + sinon.extend(spy, spyApi); + + spy.spyCall = sinon.spyCall; + sinon.spy = spy; + + return spy; + } + + var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; + var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; + + function loadDependencies(require, exports, module) { + var core = require("./util/core"); + require("./call"); + require("./extend"); + require("./times_in_words"); + require("./format"); + module.exports = makeApi(core); + } + + if (isAMD) { + define(loadDependencies); + return; + } + + if (isNode) { + loadDependencies(require, module.exports, module); + return; + } + + if (sinonGlobal) { + makeApi(sinonGlobal); + } +}( + typeof sinon === "object" && sinon // eslint-disable-line no-undef +)); + +/** + * @depend util/core.js + * @depend extend.js + */ +/** + * Stub behavior + * + * @author Christian Johansen (christian@cjohansen.no) + * @author Tim Fischbach (mail@timfischbach.de) + * @license BSD + * + * Copyright (c) 2010-2013 Christian Johansen + */ +(function (sinonGlobal) { + + var slice = Array.prototype.slice; + var join = Array.prototype.join; + var useLeftMostCallback = -1; + var useRightMostCallback = -2; + + var nextTick = (function () { + if (typeof process === "object" && typeof process.nextTick === "function") { + return process.nextTick; + } + + if (typeof setImmediate === "function") { + return setImmediate; + } + + return function (callback) { + setTimeout(callback, 0); + }; + })(); + + function throwsException(error, message) { + if (typeof error === "string") { + this.exception = new Error(message || ""); + this.exception.name = error; + } else if (!error) { + this.exception = new Error("Error"); + } else { + this.exception = error; + } + + return this; + } + + function getCallback(behavior, args) { + var callArgAt = behavior.callArgAt; + + if (callArgAt >= 0) { + return args[callArgAt]; + } + + var argumentList; + + if (callArgAt === useLeftMostCallback) { + argumentList = args; + } + + if (callArgAt === useRightMostCallback) { + argumentList = slice.call(args).reverse(); + } + + var callArgProp = behavior.callArgProp; + + for (var i = 0, l = argumentList.length; i < l; ++i) { + if (!callArgProp && typeof argumentList[i] === "function") { + return argumentList[i]; + } + + if (callArgProp && argumentList[i] && + typeof argumentList[i][callArgProp] === "function") { + return argumentList[i][callArgProp]; + } + } + + return null; + } + + function makeApi(sinon) { + function getCallbackError(behavior, func, args) { + if (behavior.callArgAt < 0) { + var msg; + + if (behavior.callArgProp) { + msg = sinon.functionName(behavior.stub) + + " expected to yield to '" + behavior.callArgProp + + "', but no object with such a property was passed."; + } else { + msg = sinon.functionName(behavior.stub) + + " expected to yield, but no callback was passed."; + } + + if (args.length > 0) { + msg += " Received [" + join.call(args, ", ") + "]"; + } + + return msg; + } + + return "argument at index " + behavior.callArgAt + " is not a function: " + func; + } + + function callCallback(behavior, args) { + if (typeof behavior.callArgAt === "number") { + var func = getCallback(behavior, args); + + if (typeof func !== "function") { + throw new TypeError(getCallbackError(behavior, func, args)); + } + + if (behavior.callbackAsync) { + nextTick(function () { + func.apply(behavior.callbackContext, behavior.callbackArguments); + }); + } else { + func.apply(behavior.callbackContext, behavior.callbackArguments); + } + } + } + + var proto = { + create: function create(stub) { + var behavior = sinon.extend({}, sinon.behavior); + delete behavior.create; + behavior.stub = stub; + + return behavior; + }, + + isPresent: function isPresent() { + return (typeof this.callArgAt === "number" || + this.exception || + typeof this.returnArgAt === "number" || + this.returnThis || + this.returnValueDefined); + }, + + invoke: function invoke(context, args) { + callCallback(this, args); + + if (this.exception) { + throw this.exception; + } else if (typeof this.returnArgAt === "number") { + return args[this.returnArgAt]; + } else if (this.returnThis) { + return context; + } + + return this.returnValue; + }, + + onCall: function onCall(index) { + return this.stub.onCall(index); + }, + + onFirstCall: function onFirstCall() { + return this.stub.onFirstCall(); + }, + + onSecondCall: function onSecondCall() { + return this.stub.onSecondCall(); + }, + + onThirdCall: function onThirdCall() { + return this.stub.onThirdCall(); + }, + + withArgs: function withArgs(/* arguments */) { + throw new Error( + "Defining a stub by invoking \"stub.onCall(...).withArgs(...)\" " + + "is not supported. Use \"stub.withArgs(...).onCall(...)\" " + + "to define sequential behavior for calls with certain arguments." + ); + }, + + callsArg: function callsArg(pos) { + if (typeof pos !== "number") { + throw new TypeError("argument index is not number"); + } + + this.callArgAt = pos; + this.callbackArguments = []; + this.callbackContext = undefined; + this.callArgProp = undefined; + this.callbackAsync = false; + + return this; + }, + + callsArgOn: function callsArgOn(pos, context) { + if (typeof pos !== "number") { + throw new TypeError("argument index is not number"); + } + if (typeof context !== "object") { + throw new TypeError("argument context is not an object"); + } + + this.callArgAt = pos; + this.callbackArguments = []; + this.callbackContext = context; + this.callArgProp = undefined; + this.callbackAsync = false; + + return this; + }, + + callsArgWith: function callsArgWith(pos) { + if (typeof pos !== "number") { + throw new TypeError("argument index is not number"); + } + + this.callArgAt = pos; + this.callbackArguments = slice.call(arguments, 1); + this.callbackContext = undefined; + this.callArgProp = undefined; + this.callbackAsync = false; + + return this; + }, + + callsArgOnWith: function callsArgWith(pos, context) { + if (typeof pos !== "number") { + throw new TypeError("argument index is not number"); + } + if (typeof context !== "object") { + throw new TypeError("argument context is not an object"); + } + + this.callArgAt = pos; + this.callbackArguments = slice.call(arguments, 2); + this.callbackContext = context; + this.callArgProp = undefined; + this.callbackAsync = false; + + return this; + }, + + yields: function () { + this.callArgAt = useLeftMostCallback; + this.callbackArguments = slice.call(arguments, 0); + this.callbackContext = undefined; + this.callArgProp = undefined; + this.callbackAsync = false; + + return this; + }, + + yieldsRight: function () { + this.callArgAt = useRightMostCallback; + this.callbackArguments = slice.call(arguments, 0); + this.callbackContext = undefined; + this.callArgProp = undefined; + this.callbackAsync = false; + + return this; + }, + + yieldsOn: function (context) { + if (typeof context !== "object") { + throw new TypeError("argument context is not an object"); + } + + this.callArgAt = useLeftMostCallback; + this.callbackArguments = slice.call(arguments, 1); + this.callbackContext = context; + this.callArgProp = undefined; + this.callbackAsync = false; + + return this; + }, + + yieldsTo: function (prop) { + this.callArgAt = useLeftMostCallback; + this.callbackArguments = slice.call(arguments, 1); + this.callbackContext = undefined; + this.callArgProp = prop; + this.callbackAsync = false; + + return this; + }, + + yieldsToOn: function (prop, context) { + if (typeof context !== "object") { + throw new TypeError("argument context is not an object"); + } + + this.callArgAt = useLeftMostCallback; + this.callbackArguments = slice.call(arguments, 2); + this.callbackContext = context; + this.callArgProp = prop; + this.callbackAsync = false; + + return this; + }, + + throws: throwsException, + throwsException: throwsException, + + returns: function returns(value) { + this.returnValue = value; + this.returnValueDefined = true; + this.exception = undefined; + + return this; + }, + + returnsArg: function returnsArg(pos) { + if (typeof pos !== "number") { + throw new TypeError("argument index is not number"); + } + + this.returnArgAt = pos; + + return this; + }, + + returnsThis: function returnsThis() { + this.returnThis = true; + + return this; + } + }; + + function createAsyncVersion(syncFnName) { + return function () { + var result = this[syncFnName].apply(this, arguments); + this.callbackAsync = true; + return result; + }; + } + + // create asynchronous versions of callsArg* and yields* methods + for (var method in proto) { + // need to avoid creating anotherasync versions of the newly added async methods + if (proto.hasOwnProperty(method) && method.match(/^(callsArg|yields)/) && !method.match(/Async/)) { + proto[method + "Async"] = createAsyncVersion(method); + } + } + + sinon.behavior = proto; + return proto; + } + + var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; + var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; + + function loadDependencies(require, exports, module) { + var sinon = require("./util/core"); + require("./extend"); + module.exports = makeApi(sinon); + } + + if (isAMD) { + define(loadDependencies); + return; + } + + if (isNode) { + loadDependencies(require, module.exports, module); + return; + } + + if (sinonGlobal) { + makeApi(sinonGlobal); + } +}( + typeof sinon === "object" && sinon // eslint-disable-line no-undef +)); + +/** + * @depend util/core.js + */ +(function (sinonGlobal) { + + function makeApi(sinon) { + function walkInternal(obj, iterator, context, originalObj, seen) { + var proto, prop; + + if (typeof Object.getOwnPropertyNames !== "function") { + // We explicitly want to enumerate through all of the prototype's properties + // in this case, therefore we deliberately leave out an own property check. + /* eslint-disable guard-for-in */ + for (prop in obj) { + iterator.call(context, obj[prop], prop, obj); + } + /* eslint-enable guard-for-in */ + + return; + } + + Object.getOwnPropertyNames(obj).forEach(function (k) { + if (!seen[k]) { + seen[k] = true; + var target = typeof Object.getOwnPropertyDescriptor(obj, k).get === "function" ? + originalObj : obj; + iterator.call(context, target[k], k, target); + } + }); + + proto = Object.getPrototypeOf(obj); + if (proto) { + walkInternal(proto, iterator, context, originalObj, seen); + } + } + + /* Public: walks the prototype chain of an object and iterates over every own property + * name encountered. The iterator is called in the same fashion that Array.prototype.forEach + * works, where it is passed the value, key, and own object as the 1st, 2nd, and 3rd positional + * argument, respectively. In cases where Object.getOwnPropertyNames is not available, walk will + * default to using a simple for..in loop. + * + * obj - The object to walk the prototype chain for. + * iterator - The function to be called on each pass of the walk. + * context - (Optional) When given, the iterator will be called with this object as the receiver. + */ + function walk(obj, iterator, context) { + return walkInternal(obj, iterator, context, obj, {}); + } + + sinon.walk = walk; + return sinon.walk; + } + + function loadDependencies(require, exports, module) { + var sinon = require("./util/core"); + module.exports = makeApi(sinon); + } + + var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; + var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; + + if (isAMD) { + define(loadDependencies); + return; + } + + if (isNode) { + loadDependencies(require, module.exports, module); + return; + } + + if (sinonGlobal) { + makeApi(sinonGlobal); + } +}( + typeof sinon === "object" && sinon // eslint-disable-line no-undef +)); + +/** + * @depend util/core.js + * @depend extend.js + * @depend spy.js + * @depend behavior.js + * @depend walk.js + */ +/** + * Stub functions + * + * @author Christian Johansen (christian@cjohansen.no) + * @license BSD + * + * Copyright (c) 2010-2013 Christian Johansen + */ +(function (sinonGlobal) { + + function makeApi(sinon) { + function stub(object, property, func) { + if (!!func && typeof func !== "function" && typeof func !== "object") { + throw new TypeError("Custom stub should be a function or a property descriptor"); + } + + var wrapper; + + if (func) { + if (typeof func === "function") { + wrapper = sinon.spy && sinon.spy.create ? sinon.spy.create(func) : func; + } else { + wrapper = func; + if (sinon.spy && sinon.spy.create) { + var types = sinon.objectKeys(wrapper); + for (var i = 0; i < types.length; i++) { + wrapper[types[i]] = sinon.spy.create(wrapper[types[i]]); + } + } + } + } else { + var stubLength = 0; + if (typeof object === "object" && typeof object[property] === "function") { + stubLength = object[property].length; + } + wrapper = stub.create(stubLength); + } + + if (!object && typeof property === "undefined") { + return sinon.stub.create(); + } + + if (typeof property === "undefined" && typeof object === "object") { + sinon.walk(object || {}, function (value, prop, propOwner) { + // we don't want to stub things like toString(), valueOf(), etc. so we only stub if the object + // is not Object.prototype + if ( + propOwner !== Object.prototype && + prop !== "constructor" && + typeof sinon.getPropertyDescriptor(propOwner, prop).value === "function" + ) { + stub(object, prop); + } + }); + + return object; + } + + return sinon.wrapMethod(object, property, wrapper); + } + + + /*eslint-disable no-use-before-define*/ + function getParentBehaviour(stubInstance) { + return (stubInstance.parent && getCurrentBehavior(stubInstance.parent)); + } + + function getDefaultBehavior(stubInstance) { + return stubInstance.defaultBehavior || + getParentBehaviour(stubInstance) || + sinon.behavior.create(stubInstance); + } + + function getCurrentBehavior(stubInstance) { + var behavior = stubInstance.behaviors[stubInstance.callCount - 1]; + return behavior && behavior.isPresent() ? behavior : getDefaultBehavior(stubInstance); + } + /*eslint-enable no-use-before-define*/ + + var uuid = 0; + + var proto = { + create: function create(stubLength) { + var functionStub = function () { + return getCurrentBehavior(functionStub).invoke(this, arguments); + }; + + functionStub.id = "stub#" + uuid++; + var orig = functionStub; + functionStub = sinon.spy.create(functionStub, stubLength); + functionStub.func = orig; + + sinon.extend(functionStub, stub); + functionStub.instantiateFake = sinon.stub.create; + functionStub.displayName = "stub"; + functionStub.toString = sinon.functionToString; + + functionStub.defaultBehavior = null; + functionStub.behaviors = []; + + return functionStub; + }, + + resetBehavior: function () { + var i; + + this.defaultBehavior = null; + this.behaviors = []; + + delete this.returnValue; + delete this.returnArgAt; + this.returnThis = false; + + if (this.fakes) { + for (i = 0; i < this.fakes.length; i++) { + this.fakes[i].resetBehavior(); + } + } + }, + + onCall: function onCall(index) { + if (!this.behaviors[index]) { + this.behaviors[index] = sinon.behavior.create(this); + } + + return this.behaviors[index]; + }, + + onFirstCall: function onFirstCall() { + return this.onCall(0); + }, + + onSecondCall: function onSecondCall() { + return this.onCall(1); + }, + + onThirdCall: function onThirdCall() { + return this.onCall(2); + } + }; + + function createBehavior(behaviorMethod) { + return function () { + this.defaultBehavior = this.defaultBehavior || sinon.behavior.create(this); + this.defaultBehavior[behaviorMethod].apply(this.defaultBehavior, arguments); + return this; + }; + } + + for (var method in sinon.behavior) { + if (sinon.behavior.hasOwnProperty(method) && + !proto.hasOwnProperty(method) && + method !== "create" && + method !== "withArgs" && + method !== "invoke") { + proto[method] = createBehavior(method); + } + } + + sinon.extend(stub, proto); + sinon.stub = stub; + + return stub; + } + + var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; + var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; + + function loadDependencies(require, exports, module) { + var core = require("./util/core"); + require("./behavior"); + require("./spy"); + require("./extend"); + module.exports = makeApi(core); + } + + if (isAMD) { + define(loadDependencies); + return; + } + + if (isNode) { + loadDependencies(require, module.exports, module); + return; + } + + if (sinonGlobal) { + makeApi(sinonGlobal); + } +}( + typeof sinon === "object" && sinon // eslint-disable-line no-undef +)); + +/** + * @depend times_in_words.js + * @depend util/core.js + * @depend call.js + * @depend extend.js + * @depend match.js + * @depend spy.js + * @depend stub.js + * @depend format.js + */ +/** + * Mock functions. + * + * @author Christian Johansen (christian@cjohansen.no) + * @license BSD + * + * Copyright (c) 2010-2013 Christian Johansen + */ +(function (sinonGlobal) { + + function makeApi(sinon) { + var push = [].push; + var match = sinon.match; + + function mock(object) { + // if (typeof console !== undefined && console.warn) { + // console.warn("mock will be removed from Sinon.JS v2.0"); + // } + + if (!object) { + return sinon.expectation.create("Anonymous mock"); + } + + return mock.create(object); + } + + function each(collection, callback) { + if (!collection) { + return; + } + + for (var i = 0, l = collection.length; i < l; i += 1) { + callback(collection[i]); + } + } + + function arrayEquals(arr1, arr2, compareLength) { + if (compareLength && (arr1.length !== arr2.length)) { + return false; + } + + for (var i = 0, l = arr1.length; i < l; i++) { + if (!sinon.deepEqual(arr1[i], arr2[i])) { + return false; + } + } + return true; + } + + sinon.extend(mock, { + create: function create(object) { + if (!object) { + throw new TypeError("object is null"); + } + + var mockObject = sinon.extend({}, mock); + mockObject.object = object; + delete mockObject.create; + + return mockObject; + }, + + expects: function expects(method) { + if (!method) { + throw new TypeError("method is falsy"); + } + + if (!this.expectations) { + this.expectations = {}; + this.proxies = []; + } + + if (!this.expectations[method]) { + this.expectations[method] = []; + var mockObject = this; + + sinon.wrapMethod(this.object, method, function () { + return mockObject.invokeMethod(method, this, arguments); + }); + + push.call(this.proxies, method); + } + + var expectation = sinon.expectation.create(method); + push.call(this.expectations[method], expectation); + + return expectation; + }, + + restore: function restore() { + var object = this.object; + + each(this.proxies, function (proxy) { + if (typeof object[proxy].restore === "function") { + object[proxy].restore(); + } + }); + }, + + verify: function verify() { + var expectations = this.expectations || {}; + var messages = []; + var met = []; + + each(this.proxies, function (proxy) { + each(expectations[proxy], function (expectation) { + if (!expectation.met()) { + push.call(messages, expectation.toString()); + } else { + push.call(met, expectation.toString()); + } + }); + }); + + this.restore(); + + if (messages.length > 0) { + sinon.expectation.fail(messages.concat(met).join("\n")); + } else if (met.length > 0) { + sinon.expectation.pass(messages.concat(met).join("\n")); + } + + return true; + }, + + invokeMethod: function invokeMethod(method, thisValue, args) { + var expectations = this.expectations && this.expectations[method] ? this.expectations[method] : []; + var expectationsWithMatchingArgs = []; + var currentArgs = args || []; + var i, available; + + for (i = 0; i < expectations.length; i += 1) { + var expectedArgs = expectations[i].expectedArguments || []; + if (arrayEquals(expectedArgs, currentArgs, expectations[i].expectsExactArgCount)) { + expectationsWithMatchingArgs.push(expectations[i]); + } + } + + for (i = 0; i < expectationsWithMatchingArgs.length; i += 1) { + if (!expectationsWithMatchingArgs[i].met() && + expectationsWithMatchingArgs[i].allowsCall(thisValue, args)) { + return expectationsWithMatchingArgs[i].apply(thisValue, args); + } + } + + var messages = []; + var exhausted = 0; + + for (i = 0; i < expectationsWithMatchingArgs.length; i += 1) { + if (expectationsWithMatchingArgs[i].allowsCall(thisValue, args)) { + available = available || expectationsWithMatchingArgs[i]; + } else { + exhausted += 1; + } + } + + if (available && exhausted === 0) { + return available.apply(thisValue, args); + } + + for (i = 0; i < expectations.length; i += 1) { + push.call(messages, " " + expectations[i].toString()); + } + + messages.unshift("Unexpected call: " + sinon.spyCall.toString.call({ + proxy: method, + args: args + })); + + sinon.expectation.fail(messages.join("\n")); + } + }); + + var times = sinon.timesInWords; + var slice = Array.prototype.slice; + + function callCountInWords(callCount) { + if (callCount === 0) { + return "never called"; + } + + return "called " + times(callCount); + } + + function expectedCallCountInWords(expectation) { + var min = expectation.minCalls; + var max = expectation.maxCalls; + + if (typeof min === "number" && typeof max === "number") { + var str = times(min); + + if (min !== max) { + str = "at least " + str + " and at most " + times(max); + } + + return str; + } + + if (typeof min === "number") { + return "at least " + times(min); + } + + return "at most " + times(max); + } + + function receivedMinCalls(expectation) { + var hasMinLimit = typeof expectation.minCalls === "number"; + return !hasMinLimit || expectation.callCount >= expectation.minCalls; + } + + function receivedMaxCalls(expectation) { + if (typeof expectation.maxCalls !== "number") { + return false; + } + + return expectation.callCount === expectation.maxCalls; + } + + function verifyMatcher(possibleMatcher, arg) { + var isMatcher = match && match.isMatcher(possibleMatcher); + + return isMatcher && possibleMatcher.test(arg) || true; + } + + sinon.expectation = { + minCalls: 1, + maxCalls: 1, + + create: function create(methodName) { + var expectation = sinon.extend(sinon.stub.create(), sinon.expectation); + delete expectation.create; + expectation.method = methodName; + + return expectation; + }, + + invoke: function invoke(func, thisValue, args) { + this.verifyCallAllowed(thisValue, args); + + return sinon.spy.invoke.apply(this, arguments); + }, + + atLeast: function atLeast(num) { + if (typeof num !== "number") { + throw new TypeError("'" + num + "' is not number"); + } + + if (!this.limitsSet) { + this.maxCalls = null; + this.limitsSet = true; + } + + this.minCalls = num; + + return this; + }, + + atMost: function atMost(num) { + if (typeof num !== "number") { + throw new TypeError("'" + num + "' is not number"); + } + + if (!this.limitsSet) { + this.minCalls = null; + this.limitsSet = true; + } + + this.maxCalls = num; + + return this; + }, + + never: function never() { + return this.exactly(0); + }, + + once: function once() { + return this.exactly(1); + }, + + twice: function twice() { + return this.exactly(2); + }, + + thrice: function thrice() { + return this.exactly(3); + }, + + exactly: function exactly(num) { + if (typeof num !== "number") { + throw new TypeError("'" + num + "' is not a number"); + } + + this.atLeast(num); + return this.atMost(num); + }, + + met: function met() { + return !this.failed && receivedMinCalls(this); + }, + + verifyCallAllowed: function verifyCallAllowed(thisValue, args) { + if (receivedMaxCalls(this)) { + this.failed = true; + sinon.expectation.fail(this.method + " already called " + times(this.maxCalls)); + } + + if ("expectedThis" in this && this.expectedThis !== thisValue) { + sinon.expectation.fail(this.method + " called with " + thisValue + " as thisValue, expected " + + this.expectedThis); + } + + if (!("expectedArguments" in this)) { + return; + } + + if (!args) { + sinon.expectation.fail(this.method + " received no arguments, expected " + + sinon.format(this.expectedArguments)); + } + + if (args.length < this.expectedArguments.length) { + sinon.expectation.fail(this.method + " received too few arguments (" + sinon.format(args) + + "), expected " + sinon.format(this.expectedArguments)); + } + + if (this.expectsExactArgCount && + args.length !== this.expectedArguments.length) { + sinon.expectation.fail(this.method + " received too many arguments (" + sinon.format(args) + + "), expected " + sinon.format(this.expectedArguments)); + } + + for (var i = 0, l = this.expectedArguments.length; i < l; i += 1) { + + if (!verifyMatcher(this.expectedArguments[i], args[i])) { + sinon.expectation.fail(this.method + " received wrong arguments " + sinon.format(args) + + ", didn't match " + this.expectedArguments.toString()); + } + + if (!sinon.deepEqual(this.expectedArguments[i], args[i])) { + sinon.expectation.fail(this.method + " received wrong arguments " + sinon.format(args) + + ", expected " + sinon.format(this.expectedArguments)); + } + } + }, + + allowsCall: function allowsCall(thisValue, args) { + if (this.met() && receivedMaxCalls(this)) { + return false; + } + + if ("expectedThis" in this && this.expectedThis !== thisValue) { + return false; + } + + if (!("expectedArguments" in this)) { + return true; + } + + args = args || []; + + if (args.length < this.expectedArguments.length) { + return false; + } + + if (this.expectsExactArgCount && + args.length !== this.expectedArguments.length) { + return false; + } + + for (var i = 0, l = this.expectedArguments.length; i < l; i += 1) { + if (!verifyMatcher(this.expectedArguments[i], args[i])) { + return false; + } + + if (!sinon.deepEqual(this.expectedArguments[i], args[i])) { + return false; + } + } + + return true; + }, + + withArgs: function withArgs() { + this.expectedArguments = slice.call(arguments); + return this; + }, + + withExactArgs: function withExactArgs() { + this.withArgs.apply(this, arguments); + this.expectsExactArgCount = true; + return this; + }, + + on: function on(thisValue) { + this.expectedThis = thisValue; + return this; + }, + + toString: function () { + var args = (this.expectedArguments || []).slice(); + + if (!this.expectsExactArgCount) { + push.call(args, "[...]"); + } + + var callStr = sinon.spyCall.toString.call({ + proxy: this.method || "anonymous mock expectation", + args: args + }); + + var message = callStr.replace(", [...", "[, ...") + " " + + expectedCallCountInWords(this); + + if (this.met()) { + return "Expectation met: " + message; + } + + return "Expected " + message + " (" + + callCountInWords(this.callCount) + ")"; + }, + + verify: function verify() { + if (!this.met()) { + sinon.expectation.fail(this.toString()); + } else { + sinon.expectation.pass(this.toString()); + } + + return true; + }, + + pass: function pass(message) { + sinon.assert.pass(message); + }, + + fail: function fail(message) { + var exception = new Error(message); + exception.name = "ExpectationError"; + + throw exception; + } + }; + + sinon.mock = mock; + return mock; + } + + var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; + var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; + + function loadDependencies(require, exports, module) { + var sinon = require("./util/core"); + require("./times_in_words"); + require("./call"); + require("./extend"); + require("./match"); + require("./spy"); + require("./stub"); + require("./format"); + + module.exports = makeApi(sinon); + } + + if (isAMD) { + define(loadDependencies); + return; + } + + if (isNode) { + loadDependencies(require, module.exports, module); + return; + } + + if (sinonGlobal) { + makeApi(sinonGlobal); + } +}( + typeof sinon === "object" && sinon // eslint-disable-line no-undef +)); + +/** + * @depend util/core.js + * @depend spy.js + * @depend stub.js + * @depend mock.js + */ +/** + * Collections of stubs, spies and mocks. + * + * @author Christian Johansen (christian@cjohansen.no) + * @license BSD + * + * Copyright (c) 2010-2013 Christian Johansen + */ +(function (sinonGlobal) { + + var push = [].push; + var hasOwnProperty = Object.prototype.hasOwnProperty; + + function getFakes(fakeCollection) { + if (!fakeCollection.fakes) { + fakeCollection.fakes = []; + } + + return fakeCollection.fakes; + } + + function each(fakeCollection, method) { + var fakes = getFakes(fakeCollection); + + for (var i = 0, l = fakes.length; i < l; i += 1) { + if (typeof fakes[i][method] === "function") { + fakes[i][method](); + } + } + } + + function compact(fakeCollection) { + var fakes = getFakes(fakeCollection); + var i = 0; + while (i < fakes.length) { + fakes.splice(i, 1); + } + } + + function makeApi(sinon) { + var collection = { + verify: function resolve() { + each(this, "verify"); + }, + + restore: function restore() { + each(this, "restore"); + compact(this); + }, + + reset: function restore() { + each(this, "reset"); + }, + + verifyAndRestore: function verifyAndRestore() { + var exception; + + try { + this.verify(); + } catch (e) { + exception = e; + } + + this.restore(); + + if (exception) { + throw exception; + } + }, + + add: function add(fake) { + push.call(getFakes(this), fake); + return fake; + }, + + spy: function spy() { + return this.add(sinon.spy.apply(sinon, arguments)); + }, + + stub: function stub(object, property, value) { + if (property) { + var original = object[property]; + + if (typeof original !== "function") { + if (!hasOwnProperty.call(object, property)) { + throw new TypeError("Cannot stub non-existent own property " + property); + } + + object[property] = value; + + return this.add({ + restore: function () { + object[property] = original; + } + }); + } + } + if (!property && !!object && typeof object === "object") { + var stubbedObj = sinon.stub.apply(sinon, arguments); + + for (var prop in stubbedObj) { + if (typeof stubbedObj[prop] === "function") { + this.add(stubbedObj[prop]); + } + } + + return stubbedObj; + } + + return this.add(sinon.stub.apply(sinon, arguments)); + }, + + mock: function mock() { + return this.add(sinon.mock.apply(sinon, arguments)); + }, + + inject: function inject(obj) { + var col = this; + + obj.spy = function () { + return col.spy.apply(col, arguments); + }; + + obj.stub = function () { + return col.stub.apply(col, arguments); + }; + + obj.mock = function () { + return col.mock.apply(col, arguments); + }; + + return obj; + } + }; + + sinon.collection = collection; + return collection; + } + + var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; + var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; + + function loadDependencies(require, exports, module) { + var sinon = require("./util/core"); + require("./mock"); + require("./spy"); + require("./stub"); + module.exports = makeApi(sinon); + } + + if (isAMD) { + define(loadDependencies); + return; + } + + if (isNode) { + loadDependencies(require, module.exports, module); + return; + } + + if (sinonGlobal) { + makeApi(sinonGlobal); + } +}( + typeof sinon === "object" && sinon // eslint-disable-line no-undef +)); + +/** + * Fake timer API + * setTimeout + * setInterval + * clearTimeout + * clearInterval + * tick + * reset + * Date + * + * Inspired by jsUnitMockTimeOut from JsUnit + * + * @author Christian Johansen (christian@cjohansen.no) + * @license BSD + * + * Copyright (c) 2010-2013 Christian Johansen + */ +(function () { + + function makeApi(s, lol) { + /*global lolex */ + var llx = typeof lolex !== "undefined" ? lolex : lol; + + s.useFakeTimers = function () { + var now; + var methods = Array.prototype.slice.call(arguments); + + if (typeof methods[0] === "string") { + now = 0; + } else { + now = methods.shift(); + } + + var clock = llx.install(now || 0, methods); + clock.restore = clock.uninstall; + return clock; + }; + + s.clock = { + create: function (now) { + return llx.createClock(now); + } + }; + + s.timers = { + setTimeout: setTimeout, + clearTimeout: clearTimeout, + setImmediate: (typeof setImmediate !== "undefined" ? setImmediate : undefined), + clearImmediate: (typeof clearImmediate !== "undefined" ? clearImmediate : undefined), + setInterval: setInterval, + clearInterval: clearInterval, + Date: Date + }; + } + + var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; + var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; + + function loadDependencies(require, epxorts, module, lolex) { + var core = require("./core"); + makeApi(core, lolex); + module.exports = core; + } + + if (isAMD) { + define(loadDependencies); + } else if (isNode) { + loadDependencies(require, module.exports, module, require("lolex")); + } else { + makeApi(sinon); // eslint-disable-line no-undef + } +}()); + +/** + * Minimal Event interface implementation + * + * Original implementation by Sven Fuchs: https://gist.github.com/995028 + * Modifications and tests by Christian Johansen. + * + * @author Sven Fuchs (svenfuchs@artweb-design.de) + * @author Christian Johansen (christian@cjohansen.no) + * @license BSD + * + * Copyright (c) 2011 Sven Fuchs, Christian Johansen + */ +if (typeof sinon === "undefined") { + this.sinon = {}; +} + +(function () { + + var push = [].push; + + function makeApi(sinon) { + sinon.Event = function Event(type, bubbles, cancelable, target) { + this.initEvent(type, bubbles, cancelable, target); + }; + + sinon.Event.prototype = { + initEvent: function (type, bubbles, cancelable, target) { + this.type = type; + this.bubbles = bubbles; + this.cancelable = cancelable; + this.target = target; + }, + + stopPropagation: function () {}, + + preventDefault: function () { + this.defaultPrevented = true; + } + }; + + sinon.ProgressEvent = function ProgressEvent(type, progressEventRaw, target) { + this.initEvent(type, false, false, target); + this.loaded = progressEventRaw.loaded || null; + this.total = progressEventRaw.total || null; + this.lengthComputable = !!progressEventRaw.total; + }; + + sinon.ProgressEvent.prototype = new sinon.Event(); + + sinon.ProgressEvent.prototype.constructor = sinon.ProgressEvent; + + sinon.CustomEvent = function CustomEvent(type, customData, target) { + this.initEvent(type, false, false, target); + this.detail = customData.detail || null; + }; + + sinon.CustomEvent.prototype = new sinon.Event(); + + sinon.CustomEvent.prototype.constructor = sinon.CustomEvent; + + sinon.EventTarget = { + addEventListener: function addEventListener(event, listener) { + this.eventListeners = this.eventListeners || {}; + this.eventListeners[event] = this.eventListeners[event] || []; + push.call(this.eventListeners[event], listener); + }, + + removeEventListener: function removeEventListener(event, listener) { + var listeners = this.eventListeners && this.eventListeners[event] || []; + + for (var i = 0, l = listeners.length; i < l; ++i) { + if (listeners[i] === listener) { + return listeners.splice(i, 1); + } + } + }, + + dispatchEvent: function dispatchEvent(event) { + var type = event.type; + var listeners = this.eventListeners && this.eventListeners[type] || []; + + for (var i = 0; i < listeners.length; i++) { + if (typeof listeners[i] === "function") { + listeners[i].call(this, event); + } else { + listeners[i].handleEvent(event); + } + } + + return !!event.defaultPrevented; + } + }; + } + + var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; + var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; + + function loadDependencies(require) { + var sinon = require("./core"); + makeApi(sinon); + } + + if (isAMD) { + define(loadDependencies); + } else if (isNode) { + loadDependencies(require); + } else { + makeApi(sinon); // eslint-disable-line no-undef + } +}()); + +/** + * @depend util/core.js + */ +/** + * Logs errors + * + * @author Christian Johansen (christian@cjohansen.no) + * @license BSD + * + * Copyright (c) 2010-2014 Christian Johansen + */ +(function (sinonGlobal) { + + // cache a reference to setTimeout, so that our reference won't be stubbed out + // when using fake timers and errors will still get logged + // https://github.com/cjohansen/Sinon.JS/issues/381 + var realSetTimeout = setTimeout; + + function makeApi(sinon) { + + function log() {} + + function logError(label, err) { + var msg = label + " threw exception: "; + + function throwLoggedError() { + err.message = msg + err.message; + throw err; + } + + sinon.log(msg + "[" + err.name + "] " + err.message); + + if (err.stack) { + sinon.log(err.stack); + } + + if (logError.useImmediateExceptions) { + throwLoggedError(); + } else { + logError.setTimeout(throwLoggedError, 0); + } + } + + // When set to true, any errors logged will be thrown immediately; + // If set to false, the errors will be thrown in separate execution frame. + logError.useImmediateExceptions = false; + + // wrap realSetTimeout with something we can stub in tests + logError.setTimeout = function (func, timeout) { + realSetTimeout(func, timeout); + }; + + var exports = {}; + exports.log = sinon.log = log; + exports.logError = sinon.logError = logError; + + return exports; + } + + function loadDependencies(require, exports, module) { + var sinon = require("./util/core"); + module.exports = makeApi(sinon); + } + + var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; + var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; + + if (isAMD) { + define(loadDependencies); + return; + } + + if (isNode) { + loadDependencies(require, module.exports, module); + return; + } + + if (sinonGlobal) { + makeApi(sinonGlobal); + } +}( + typeof sinon === "object" && sinon // eslint-disable-line no-undef +)); + +/** + * @depend core.js + * @depend ../extend.js + * @depend event.js + * @depend ../log_error.js + */ +/** + * Fake XDomainRequest object + */ + +/** + * Returns the global to prevent assigning values to 'this' when this is undefined. + * This can occur when files are interpreted by node in strict mode. + * @private + */ +function getGlobal() { + + return typeof window !== "undefined" ? window : global; +} + +if (typeof sinon === "undefined") { + if (typeof this === "undefined") { + getGlobal().sinon = {}; + } else { + this.sinon = {}; + } +} + +// wrapper for global +(function (global) { + + var xdr = { XDomainRequest: global.XDomainRequest }; + xdr.GlobalXDomainRequest = global.XDomainRequest; + xdr.supportsXDR = typeof xdr.GlobalXDomainRequest !== "undefined"; + xdr.workingXDR = xdr.supportsXDR ? xdr.GlobalXDomainRequest : false; + + function makeApi(sinon) { + sinon.xdr = xdr; + + function FakeXDomainRequest() { + this.readyState = FakeXDomainRequest.UNSENT; + this.requestBody = null; + this.requestHeaders = {}; + this.status = 0; + this.timeout = null; + + if (typeof FakeXDomainRequest.onCreate === "function") { + FakeXDomainRequest.onCreate(this); + } + } + + function verifyState(x) { + if (x.readyState !== FakeXDomainRequest.OPENED) { + throw new Error("INVALID_STATE_ERR"); + } + + if (x.sendFlag) { + throw new Error("INVALID_STATE_ERR"); + } + } + + function verifyRequestSent(x) { + if (x.readyState === FakeXDomainRequest.UNSENT) { + throw new Error("Request not sent"); + } + if (x.readyState === FakeXDomainRequest.DONE) { + throw new Error("Request done"); + } + } + + function verifyResponseBodyType(body) { + if (typeof body !== "string") { + var error = new Error("Attempted to respond to fake XDomainRequest with " + + body + ", which is not a string."); + error.name = "InvalidBodyException"; + throw error; + } + } + + sinon.extend(FakeXDomainRequest.prototype, sinon.EventTarget, { + open: function open(method, url) { + this.method = method; + this.url = url; + + this.responseText = null; + this.sendFlag = false; + + this.readyStateChange(FakeXDomainRequest.OPENED); + }, + + readyStateChange: function readyStateChange(state) { + this.readyState = state; + var eventName = ""; + switch (this.readyState) { + case FakeXDomainRequest.UNSENT: + break; + case FakeXDomainRequest.OPENED: + break; + case FakeXDomainRequest.LOADING: + if (this.sendFlag) { + //raise the progress event + eventName = "onprogress"; + } + break; + case FakeXDomainRequest.DONE: + if (this.isTimeout) { + eventName = "ontimeout"; + } else if (this.errorFlag || (this.status < 200 || this.status > 299)) { + eventName = "onerror"; + } else { + eventName = "onload"; + } + break; + } + + // raising event (if defined) + if (eventName) { + if (typeof this[eventName] === "function") { + try { + this[eventName](); + } catch (e) { + sinon.logError("Fake XHR " + eventName + " handler", e); + } + } + } + }, + + send: function send(data) { + verifyState(this); + + if (!/^(get|head)$/i.test(this.method)) { + this.requestBody = data; + } + this.requestHeaders["Content-Type"] = "text/plain;charset=utf-8"; + + this.errorFlag = false; + this.sendFlag = true; + this.readyStateChange(FakeXDomainRequest.OPENED); + + if (typeof this.onSend === "function") { + this.onSend(this); + } + }, + + abort: function abort() { + this.aborted = true; + this.responseText = null; + this.errorFlag = true; + + if (this.readyState > sinon.FakeXDomainRequest.UNSENT && this.sendFlag) { + this.readyStateChange(sinon.FakeXDomainRequest.DONE); + this.sendFlag = false; + } + }, + + setResponseBody: function setResponseBody(body) { + verifyRequestSent(this); + verifyResponseBodyType(body); + + var chunkSize = this.chunkSize || 10; + var index = 0; + this.responseText = ""; + + do { + this.readyStateChange(FakeXDomainRequest.LOADING); + this.responseText += body.substring(index, index + chunkSize); + index += chunkSize; + } while (index < body.length); + + this.readyStateChange(FakeXDomainRequest.DONE); + }, + + respond: function respond(status, contentType, body) { + // content-type ignored, since XDomainRequest does not carry this + // we keep the same syntax for respond(...) as for FakeXMLHttpRequest to ease + // test integration across browsers + this.status = typeof status === "number" ? status : 200; + this.setResponseBody(body || ""); + }, + + simulatetimeout: function simulatetimeout() { + this.status = 0; + this.isTimeout = true; + // Access to this should actually throw an error + this.responseText = undefined; + this.readyStateChange(FakeXDomainRequest.DONE); + } + }); + + sinon.extend(FakeXDomainRequest, { + UNSENT: 0, + OPENED: 1, + LOADING: 3, + DONE: 4 + }); + + sinon.useFakeXDomainRequest = function useFakeXDomainRequest() { + sinon.FakeXDomainRequest.restore = function restore(keepOnCreate) { + if (xdr.supportsXDR) { + global.XDomainRequest = xdr.GlobalXDomainRequest; + } + + delete sinon.FakeXDomainRequest.restore; + + if (keepOnCreate !== true) { + delete sinon.FakeXDomainRequest.onCreate; + } + }; + if (xdr.supportsXDR) { + global.XDomainRequest = sinon.FakeXDomainRequest; + } + return sinon.FakeXDomainRequest; + }; + + sinon.FakeXDomainRequest = FakeXDomainRequest; + } + + var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; + var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; + + function loadDependencies(require, exports, module) { + var sinon = require("./core"); + require("../extend"); + require("./event"); + require("../log_error"); + makeApi(sinon); + module.exports = sinon; + } + + if (isAMD) { + define(loadDependencies); + } else if (isNode) { + loadDependencies(require, module.exports, module); + } else { + makeApi(sinon); // eslint-disable-line no-undef + } +})(typeof global !== "undefined" ? global : self); + +/** + * @depend core.js + * @depend ../extend.js + * @depend event.js + * @depend ../log_error.js + */ +/** + * Fake XMLHttpRequest object + * + * @author Christian Johansen (christian@cjohansen.no) + * @license BSD + * + * Copyright (c) 2010-2013 Christian Johansen + */ +(function (sinonGlobal, global) { + + function getWorkingXHR(globalScope) { + var supportsXHR = typeof globalScope.XMLHttpRequest !== "undefined"; + if (supportsXHR) { + return globalScope.XMLHttpRequest; + } + + var supportsActiveX = typeof globalScope.ActiveXObject !== "undefined"; + if (supportsActiveX) { + return function () { + return new globalScope.ActiveXObject("MSXML2.XMLHTTP.3.0"); + }; + } + + return false; + } + + var supportsProgress = typeof ProgressEvent !== "undefined"; + var supportsCustomEvent = typeof CustomEvent !== "undefined"; + var supportsFormData = typeof FormData !== "undefined"; + var supportsArrayBuffer = typeof ArrayBuffer !== "undefined"; + var supportsBlob = typeof Blob === "function"; + var sinonXhr = { XMLHttpRequest: global.XMLHttpRequest }; + sinonXhr.GlobalXMLHttpRequest = global.XMLHttpRequest; + sinonXhr.GlobalActiveXObject = global.ActiveXObject; + sinonXhr.supportsActiveX = typeof sinonXhr.GlobalActiveXObject !== "undefined"; + sinonXhr.supportsXHR = typeof sinonXhr.GlobalXMLHttpRequest !== "undefined"; + sinonXhr.workingXHR = getWorkingXHR(global); + sinonXhr.supportsCORS = sinonXhr.supportsXHR && "withCredentials" in (new sinonXhr.GlobalXMLHttpRequest()); + + var unsafeHeaders = { + "Accept-Charset": true, + "Accept-Encoding": true, + Connection: true, + "Content-Length": true, + Cookie: true, + Cookie2: true, + "Content-Transfer-Encoding": true, + Date: true, + Expect: true, + Host: true, + "Keep-Alive": true, + Referer: true, + TE: true, + Trailer: true, + "Transfer-Encoding": true, + Upgrade: true, + "User-Agent": true, + Via: true + }; + + // An upload object is created for each + // FakeXMLHttpRequest and allows upload + // events to be simulated using uploadProgress + // and uploadError. + function UploadProgress() { + this.eventListeners = { + progress: [], + load: [], + abort: [], + error: [] + }; + } + + UploadProgress.prototype.addEventListener = function addEventListener(event, listener) { + this.eventListeners[event].push(listener); + }; + + UploadProgress.prototype.removeEventListener = function removeEventListener(event, listener) { + var listeners = this.eventListeners[event] || []; + + for (var i = 0, l = listeners.length; i < l; ++i) { + if (listeners[i] === listener) { + return listeners.splice(i, 1); + } + } + }; + + UploadProgress.prototype.dispatchEvent = function dispatchEvent(event) { + var listeners = this.eventListeners[event.type] || []; + + for (var i = 0, listener; (listener = listeners[i]) != null; i++) { + listener(event); + } + }; + + // Note that for FakeXMLHttpRequest to work pre ES5 + // we lose some of the alignment with the spec. + // To ensure as close a match as possible, + // set responseType before calling open, send or respond; + function FakeXMLHttpRequest() { + this.readyState = FakeXMLHttpRequest.UNSENT; + this.requestHeaders = {}; + this.requestBody = null; + this.status = 0; + this.statusText = ""; + this.upload = new UploadProgress(); + this.responseType = ""; + this.response = ""; + if (sinonXhr.supportsCORS) { + this.withCredentials = false; + } + + var xhr = this; + var events = ["loadstart", "load", "abort", "loadend"]; + + function addEventListener(eventName) { + xhr.addEventListener(eventName, function (event) { + var listener = xhr["on" + eventName]; + + if (listener && typeof listener === "function") { + listener.call(this, event); + } + }); + } + + for (var i = events.length - 1; i >= 0; i--) { + addEventListener(events[i]); + } + + if (typeof FakeXMLHttpRequest.onCreate === "function") { + FakeXMLHttpRequest.onCreate(this); + } + } + + function verifyState(xhr) { + if (xhr.readyState !== FakeXMLHttpRequest.OPENED) { + throw new Error("INVALID_STATE_ERR"); + } + + if (xhr.sendFlag) { + throw new Error("INVALID_STATE_ERR"); + } + } + + function getHeader(headers, header) { + header = header.toLowerCase(); + + for (var h in headers) { + if (h.toLowerCase() === header) { + return h; + } + } + + return null; + } + + // filtering to enable a white-list version of Sinon FakeXhr, + // where whitelisted requests are passed through to real XHR + function each(collection, callback) { + if (!collection) { + return; + } + + for (var i = 0, l = collection.length; i < l; i += 1) { + callback(collection[i]); + } + } + function some(collection, callback) { + for (var index = 0; index < collection.length; index++) { + if (callback(collection[index]) === true) { + return true; + } + } + return false; + } + // largest arity in XHR is 5 - XHR#open + var apply = function (obj, method, args) { + switch (args.length) { + case 0: return obj[method](); + case 1: return obj[method](args[0]); + case 2: return obj[method](args[0], args[1]); + case 3: return obj[method](args[0], args[1], args[2]); + case 4: return obj[method](args[0], args[1], args[2], args[3]); + case 5: return obj[method](args[0], args[1], args[2], args[3], args[4]); + } + }; + + FakeXMLHttpRequest.filters = []; + FakeXMLHttpRequest.addFilter = function addFilter(fn) { + this.filters.push(fn); + }; + var IE6Re = /MSIE 6/; + FakeXMLHttpRequest.defake = function defake(fakeXhr, xhrArgs) { + var xhr = new sinonXhr.workingXHR(); // eslint-disable-line new-cap + + each([ + "open", + "setRequestHeader", + "send", + "abort", + "getResponseHeader", + "getAllResponseHeaders", + "addEventListener", + "overrideMimeType", + "removeEventListener" + ], function (method) { + fakeXhr[method] = function () { + return apply(xhr, method, arguments); + }; + }); + + var copyAttrs = function (args) { + each(args, function (attr) { + try { + fakeXhr[attr] = xhr[attr]; + } catch (e) { + if (!IE6Re.test(navigator.userAgent)) { + throw e; + } + } + }); + }; + + var stateChange = function stateChange() { + fakeXhr.readyState = xhr.readyState; + if (xhr.readyState >= FakeXMLHttpRequest.HEADERS_RECEIVED) { + copyAttrs(["status", "statusText"]); + } + if (xhr.readyState >= FakeXMLHttpRequest.LOADING) { + copyAttrs(["responseText", "response"]); + } + if (xhr.readyState === FakeXMLHttpRequest.DONE) { + copyAttrs(["responseXML"]); + } + if (fakeXhr.onreadystatechange) { + fakeXhr.onreadystatechange.call(fakeXhr, { target: fakeXhr }); + } + }; + + if (xhr.addEventListener) { + for (var event in fakeXhr.eventListeners) { + if (fakeXhr.eventListeners.hasOwnProperty(event)) { + + /*eslint-disable no-loop-func*/ + each(fakeXhr.eventListeners[event], function (handler) { + xhr.addEventListener(event, handler); + }); + /*eslint-enable no-loop-func*/ + } + } + xhr.addEventListener("readystatechange", stateChange); + } else { + xhr.onreadystatechange = stateChange; + } + apply(xhr, "open", xhrArgs); + }; + FakeXMLHttpRequest.useFilters = false; + + function verifyRequestOpened(xhr) { + if (xhr.readyState !== FakeXMLHttpRequest.OPENED) { + throw new Error("INVALID_STATE_ERR - " + xhr.readyState); + } + } + + function verifyRequestSent(xhr) { + if (xhr.readyState === FakeXMLHttpRequest.DONE) { + throw new Error("Request done"); + } + } + + function verifyHeadersReceived(xhr) { + if (xhr.async && xhr.readyState !== FakeXMLHttpRequest.HEADERS_RECEIVED) { + throw new Error("No headers received"); + } + } + + function verifyResponseBodyType(body) { + if (typeof body !== "string") { + var error = new Error("Attempted to respond to fake XMLHttpRequest with " + + body + ", which is not a string."); + error.name = "InvalidBodyException"; + throw error; + } + } + + function convertToArrayBuffer(body) { + var buffer = new ArrayBuffer(body.length); + var view = new Uint8Array(buffer); + for (var i = 0; i < body.length; i++) { + var charCode = body.charCodeAt(i); + if (charCode >= 256) { + throw new TypeError("arraybuffer or blob responseTypes require binary string, " + + "invalid character " + body[i] + " found."); + } + view[i] = charCode; + } + return buffer; + } + + function isXmlContentType(contentType) { + return !contentType || /(text\/xml)|(application\/xml)|(\+xml)/.test(contentType); + } + + function convertResponseBody(responseType, contentType, body) { + if (responseType === "" || responseType === "text") { + return body; + } else if (supportsArrayBuffer && responseType === "arraybuffer") { + return convertToArrayBuffer(body); + } else if (responseType === "json") { + try { + return JSON.parse(body); + } catch (e) { + // Return parsing failure as null + return null; + } + } else if (supportsBlob && responseType === "blob") { + var blobOptions = {}; + if (contentType) { + blobOptions.type = contentType; + } + return new Blob([convertToArrayBuffer(body)], blobOptions); + } else if (responseType === "document") { + if (isXmlContentType(contentType)) { + return FakeXMLHttpRequest.parseXML(body); + } + return null; + } + throw new Error("Invalid responseType " + responseType); + } + + function clearResponse(xhr) { + if (xhr.responseType === "" || xhr.responseType === "text") { + xhr.response = xhr.responseText = ""; + } else { + xhr.response = xhr.responseText = null; + } + xhr.responseXML = null; + } + + FakeXMLHttpRequest.parseXML = function parseXML(text) { + // Treat empty string as parsing failure + if (text !== "") { + try { + if (typeof DOMParser !== "undefined") { + var parser = new DOMParser(); + return parser.parseFromString(text, "text/xml"); + } + var xmlDoc = new window.ActiveXObject("Microsoft.XMLDOM"); + xmlDoc.async = "false"; + xmlDoc.loadXML(text); + return xmlDoc; + } catch (e) { + // Unable to parse XML - no biggie + } + } + + return null; + }; + + FakeXMLHttpRequest.statusCodes = { + 100: "Continue", + 101: "Switching Protocols", + 200: "OK", + 201: "Created", + 202: "Accepted", + 203: "Non-Authoritative Information", + 204: "No Content", + 205: "Reset Content", + 206: "Partial Content", + 207: "Multi-Status", + 300: "Multiple Choice", + 301: "Moved Permanently", + 302: "Found", + 303: "See Other", + 304: "Not Modified", + 305: "Use Proxy", + 307: "Temporary Redirect", + 400: "Bad Request", + 401: "Unauthorized", + 402: "Payment Required", + 403: "Forbidden", + 404: "Not Found", + 405: "Method Not Allowed", + 406: "Not Acceptable", + 407: "Proxy Authentication Required", + 408: "Request Timeout", + 409: "Conflict", + 410: "Gone", + 411: "Length Required", + 412: "Precondition Failed", + 413: "Request Entity Too Large", + 414: "Request-URI Too Long", + 415: "Unsupported Media Type", + 416: "Requested Range Not Satisfiable", + 417: "Expectation Failed", + 422: "Unprocessable Entity", + 500: "Internal Server Error", + 501: "Not Implemented", + 502: "Bad Gateway", + 503: "Service Unavailable", + 504: "Gateway Timeout", + 505: "HTTP Version Not Supported" + }; + + function makeApi(sinon) { + sinon.xhr = sinonXhr; + + sinon.extend(FakeXMLHttpRequest.prototype, sinon.EventTarget, { + async: true, + + open: function open(method, url, async, username, password) { + this.method = method; + this.url = url; + this.async = typeof async === "boolean" ? async : true; + this.username = username; + this.password = password; + clearResponse(this); + this.requestHeaders = {}; + this.sendFlag = false; + + if (FakeXMLHttpRequest.useFilters === true) { + var xhrArgs = arguments; + var defake = some(FakeXMLHttpRequest.filters, function (filter) { + return filter.apply(this, xhrArgs); + }); + if (defake) { + return FakeXMLHttpRequest.defake(this, arguments); + } + } + this.readyStateChange(FakeXMLHttpRequest.OPENED); + }, + + readyStateChange: function readyStateChange(state) { + this.readyState = state; + + var readyStateChangeEvent = new sinon.Event("readystatechange", false, false, this); + + if (typeof this.onreadystatechange === "function") { + try { + this.onreadystatechange(readyStateChangeEvent); + } catch (e) { + sinon.logError("Fake XHR onreadystatechange handler", e); + } + } + + switch (this.readyState) { + case FakeXMLHttpRequest.DONE: + if (supportsProgress) { + this.upload.dispatchEvent(new sinon.ProgressEvent("progress", {loaded: 100, total: 100})); + this.dispatchEvent(new sinon.ProgressEvent("progress", {loaded: 100, total: 100})); + } + this.upload.dispatchEvent(new sinon.Event("load", false, false, this)); + this.dispatchEvent(new sinon.Event("load", false, false, this)); + this.dispatchEvent(new sinon.Event("loadend", false, false, this)); + break; + } + + this.dispatchEvent(readyStateChangeEvent); + }, + + setRequestHeader: function setRequestHeader(header, value) { + verifyState(this); + + if (unsafeHeaders[header] || /^(Sec-|Proxy-)/.test(header)) { + throw new Error("Refused to set unsafe header \"" + header + "\""); + } + + if (this.requestHeaders[header]) { + this.requestHeaders[header] += "," + value; + } else { + this.requestHeaders[header] = value; + } + }, + + // Helps testing + setResponseHeaders: function setResponseHeaders(headers) { + verifyRequestOpened(this); + this.responseHeaders = {}; + + for (var header in headers) { + if (headers.hasOwnProperty(header)) { + this.responseHeaders[header] = headers[header]; + } + } + + if (this.async) { + this.readyStateChange(FakeXMLHttpRequest.HEADERS_RECEIVED); + } else { + this.readyState = FakeXMLHttpRequest.HEADERS_RECEIVED; + } + }, + + // Currently treats ALL data as a DOMString (i.e. no Document) + send: function send(data) { + verifyState(this); + + if (!/^(get|head)$/i.test(this.method)) { + var contentType = getHeader(this.requestHeaders, "Content-Type"); + if (this.requestHeaders[contentType]) { + var value = this.requestHeaders[contentType].split(";"); + this.requestHeaders[contentType] = value[0] + ";charset=utf-8"; + } else if (supportsFormData && !(data instanceof FormData)) { + this.requestHeaders["Content-Type"] = "text/plain;charset=utf-8"; + } + + this.requestBody = data; + } + + this.errorFlag = false; + this.sendFlag = this.async; + clearResponse(this); + this.readyStateChange(FakeXMLHttpRequest.OPENED); + + if (typeof this.onSend === "function") { + this.onSend(this); + } + + this.dispatchEvent(new sinon.Event("loadstart", false, false, this)); + }, + + abort: function abort() { + this.aborted = true; + clearResponse(this); + this.errorFlag = true; + this.requestHeaders = {}; + this.responseHeaders = {}; + + if (this.readyState > FakeXMLHttpRequest.UNSENT && this.sendFlag) { + this.readyStateChange(FakeXMLHttpRequest.DONE); + this.sendFlag = false; + } + + this.readyState = FakeXMLHttpRequest.UNSENT; + + this.dispatchEvent(new sinon.Event("abort", false, false, this)); + + this.upload.dispatchEvent(new sinon.Event("abort", false, false, this)); + + if (typeof this.onerror === "function") { + this.onerror(); + } + }, + + getResponseHeader: function getResponseHeader(header) { + if (this.readyState < FakeXMLHttpRequest.HEADERS_RECEIVED) { + return null; + } + + if (/^Set-Cookie2?$/i.test(header)) { + return null; + } + + header = getHeader(this.responseHeaders, header); + + return this.responseHeaders[header] || null; + }, + + getAllResponseHeaders: function getAllResponseHeaders() { + if (this.readyState < FakeXMLHttpRequest.HEADERS_RECEIVED) { + return ""; + } + + var headers = ""; + + for (var header in this.responseHeaders) { + if (this.responseHeaders.hasOwnProperty(header) && + !/^Set-Cookie2?$/i.test(header)) { + headers += header + ": " + this.responseHeaders[header] + "\r\n"; + } + } + + return headers; + }, + + setResponseBody: function setResponseBody(body) { + verifyRequestSent(this); + verifyHeadersReceived(this); + verifyResponseBodyType(body); + var contentType = this.getResponseHeader("Content-Type"); + + var isTextResponse = this.responseType === "" || this.responseType === "text"; + clearResponse(this); + if (this.async) { + var chunkSize = this.chunkSize || 10; + var index = 0; + + do { + this.readyStateChange(FakeXMLHttpRequest.LOADING); + + if (isTextResponse) { + this.responseText = this.response += body.substring(index, index + chunkSize); + } + index += chunkSize; + } while (index < body.length); + } + + this.response = convertResponseBody(this.responseType, contentType, body); + if (isTextResponse) { + this.responseText = this.response; + } + + if (this.responseType === "document") { + this.responseXML = this.response; + } else if (this.responseType === "" && isXmlContentType(contentType)) { + this.responseXML = FakeXMLHttpRequest.parseXML(this.responseText); + } + this.readyStateChange(FakeXMLHttpRequest.DONE); + }, + + respond: function respond(status, headers, body) { + this.status = typeof status === "number" ? status : 200; + this.statusText = FakeXMLHttpRequest.statusCodes[this.status]; + this.setResponseHeaders(headers || {}); + this.setResponseBody(body || ""); + }, + + uploadProgress: function uploadProgress(progressEventRaw) { + if (supportsProgress) { + this.upload.dispatchEvent(new sinon.ProgressEvent("progress", progressEventRaw)); + } + }, + + downloadProgress: function downloadProgress(progressEventRaw) { + if (supportsProgress) { + this.dispatchEvent(new sinon.ProgressEvent("progress", progressEventRaw)); + } + }, + + uploadError: function uploadError(error) { + if (supportsCustomEvent) { + this.upload.dispatchEvent(new sinon.CustomEvent("error", {detail: error})); + } + } + }); + + sinon.extend(FakeXMLHttpRequest, { + UNSENT: 0, + OPENED: 1, + HEADERS_RECEIVED: 2, + LOADING: 3, + DONE: 4 + }); + + sinon.useFakeXMLHttpRequest = function () { + FakeXMLHttpRequest.restore = function restore(keepOnCreate) { + if (sinonXhr.supportsXHR) { + global.XMLHttpRequest = sinonXhr.GlobalXMLHttpRequest; + } + + if (sinonXhr.supportsActiveX) { + global.ActiveXObject = sinonXhr.GlobalActiveXObject; + } + + delete FakeXMLHttpRequest.restore; + + if (keepOnCreate !== true) { + delete FakeXMLHttpRequest.onCreate; + } + }; + if (sinonXhr.supportsXHR) { + global.XMLHttpRequest = FakeXMLHttpRequest; + } + + if (sinonXhr.supportsActiveX) { + global.ActiveXObject = function ActiveXObject(objId) { + if (objId === "Microsoft.XMLHTTP" || /^Msxml2\.XMLHTTP/i.test(objId)) { + + return new FakeXMLHttpRequest(); + } + + return new sinonXhr.GlobalActiveXObject(objId); + }; + } + + return FakeXMLHttpRequest; + }; + + sinon.FakeXMLHttpRequest = FakeXMLHttpRequest; + } + + var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; + var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; + + function loadDependencies(require, exports, module) { + var sinon = require("./core"); + require("../extend"); + require("./event"); + require("../log_error"); + makeApi(sinon); + module.exports = sinon; + } + + if (isAMD) { + define(loadDependencies); + return; + } + + if (isNode) { + loadDependencies(require, module.exports, module); + return; + } + + if (sinonGlobal) { + makeApi(sinonGlobal); + } +}( + typeof sinon === "object" && sinon, // eslint-disable-line no-undef + typeof global !== "undefined" ? global : self +)); + +/** + * @depend fake_xdomain_request.js + * @depend fake_xml_http_request.js + * @depend ../format.js + * @depend ../log_error.js + */ +/** + * The Sinon "server" mimics a web server that receives requests from + * sinon.FakeXMLHttpRequest and provides an API to respond to those requests, + * both synchronously and asynchronously. To respond synchronuously, canned + * answers have to be provided upfront. + * + * @author Christian Johansen (christian@cjohansen.no) + * @license BSD + * + * Copyright (c) 2010-2013 Christian Johansen + */ +(function () { + + var push = [].push; + + function responseArray(handler) { + var response = handler; + + if (Object.prototype.toString.call(handler) !== "[object Array]") { + response = [200, {}, handler]; + } + + if (typeof response[2] !== "string") { + throw new TypeError("Fake server response body should be string, but was " + + typeof response[2]); + } + + return response; + } + + var wloc = typeof window !== "undefined" ? window.location : {}; + var rCurrLoc = new RegExp("^" + wloc.protocol + "//" + wloc.host); + + function matchOne(response, reqMethod, reqUrl) { + var rmeth = response.method; + var matchMethod = !rmeth || rmeth.toLowerCase() === reqMethod.toLowerCase(); + var url = response.url; + var matchUrl = !url || url === reqUrl || (typeof url.test === "function" && url.test(reqUrl)); + + return matchMethod && matchUrl; + } + + function match(response, request) { + var requestUrl = request.url; + + if (!/^https?:\/\//.test(requestUrl) || rCurrLoc.test(requestUrl)) { + requestUrl = requestUrl.replace(rCurrLoc, ""); + } + + if (matchOne(response, this.getHTTPMethod(request), requestUrl)) { + if (typeof response.response === "function") { + var ru = response.url; + var args = [request].concat(ru && typeof ru.exec === "function" ? ru.exec(requestUrl).slice(1) : []); + return response.response.apply(response, args); + } + + return true; + } + + return false; + } + + function makeApi(sinon) { + sinon.fakeServer = { + create: function (config) { + var server = sinon.create(this); + server.configure(config); + if (!sinon.xhr.supportsCORS) { + this.xhr = sinon.useFakeXDomainRequest(); + } else { + this.xhr = sinon.useFakeXMLHttpRequest(); + } + server.requests = []; + + this.xhr.onCreate = function (xhrObj) { + server.addRequest(xhrObj); + }; + + return server; + }, + configure: function (config) { + var whitelist = { + "autoRespond": true, + "autoRespondAfter": true, + "respondImmediately": true, + "fakeHTTPMethods": true + }; + var setting; + + config = config || {}; + for (setting in config) { + if (whitelist.hasOwnProperty(setting) && config.hasOwnProperty(setting)) { + this[setting] = config[setting]; + } + } + }, + addRequest: function addRequest(xhrObj) { + var server = this; + push.call(this.requests, xhrObj); + + xhrObj.onSend = function () { + server.handleRequest(this); + + if (server.respondImmediately) { + server.respond(); + } else if (server.autoRespond && !server.responding) { + setTimeout(function () { + server.responding = false; + server.respond(); + }, server.autoRespondAfter || 10); + + server.responding = true; + } + }; + }, + + getHTTPMethod: function getHTTPMethod(request) { + if (this.fakeHTTPMethods && /post/i.test(request.method)) { + var matches = (request.requestBody || "").match(/_method=([^\b;]+)/); + return matches ? matches[1] : request.method; + } + + return request.method; + }, + + handleRequest: function handleRequest(xhr) { + if (xhr.async) { + if (!this.queue) { + this.queue = []; + } + + push.call(this.queue, xhr); + } else { + this.processRequest(xhr); + } + }, + + log: function log(response, request) { + var str; + + str = "Request:\n" + sinon.format(request) + "\n\n"; + str += "Response:\n" + sinon.format(response) + "\n\n"; + + sinon.log(str); + }, + + respondWith: function respondWith(method, url, body) { + if (arguments.length === 1 && typeof method !== "function") { + this.response = responseArray(method); + return; + } + + if (!this.responses) { + this.responses = []; + } + + if (arguments.length === 1) { + body = method; + url = method = null; + } + + if (arguments.length === 2) { + body = url; + url = method; + method = null; + } + + push.call(this.responses, { + method: method, + url: url, + response: typeof body === "function" ? body : responseArray(body) + }); + }, + + respond: function respond() { + if (arguments.length > 0) { + this.respondWith.apply(this, arguments); + } + + var queue = this.queue || []; + var requests = queue.splice(0, queue.length); + + for (var i = 0; i < requests.length; i++) { + this.processRequest(requests[i]); + } + }, + + processRequest: function processRequest(request) { + try { + if (request.aborted) { + return; + } + + var response = this.response || [404, {}, ""]; + + if (this.responses) { + for (var l = this.responses.length, i = l - 1; i >= 0; i--) { + if (match.call(this, this.responses[i], request)) { + response = this.responses[i].response; + break; + } + } + } + + if (request.readyState !== 4) { + this.log(response, request); + + request.respond(response[0], response[1], response[2]); + } + } catch (e) { + sinon.logError("Fake server request processing", e); + } + }, + + restore: function restore() { + return this.xhr.restore && this.xhr.restore.apply(this.xhr, arguments); + } + }; + } + + var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; + var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; + + function loadDependencies(require, exports, module) { + var sinon = require("./core"); + require("./fake_xdomain_request"); + require("./fake_xml_http_request"); + require("../format"); + makeApi(sinon); + module.exports = sinon; + } + + if (isAMD) { + define(loadDependencies); + } else if (isNode) { + loadDependencies(require, module.exports, module); + } else { + makeApi(sinon); // eslint-disable-line no-undef + } +}()); + +/** + * @depend fake_server.js + * @depend fake_timers.js + */ +/** + * Add-on for sinon.fakeServer that automatically handles a fake timer along with + * the FakeXMLHttpRequest. The direct inspiration for this add-on is jQuery + * 1.3.x, which does not use xhr object's onreadystatehandler at all - instead, + * it polls the object for completion with setInterval. Dispite the direct + * motivation, there is nothing jQuery-specific in this file, so it can be used + * in any environment where the ajax implementation depends on setInterval or + * setTimeout. + * + * @author Christian Johansen (christian@cjohansen.no) + * @license BSD + * + * Copyright (c) 2010-2013 Christian Johansen + */ +(function () { + + function makeApi(sinon) { + function Server() {} + Server.prototype = sinon.fakeServer; + + sinon.fakeServerWithClock = new Server(); + + sinon.fakeServerWithClock.addRequest = function addRequest(xhr) { + if (xhr.async) { + if (typeof setTimeout.clock === "object") { + this.clock = setTimeout.clock; + } else { + this.clock = sinon.useFakeTimers(); + this.resetClock = true; + } + + if (!this.longestTimeout) { + var clockSetTimeout = this.clock.setTimeout; + var clockSetInterval = this.clock.setInterval; + var server = this; + + this.clock.setTimeout = function (fn, timeout) { + server.longestTimeout = Math.max(timeout, server.longestTimeout || 0); + + return clockSetTimeout.apply(this, arguments); + }; + + this.clock.setInterval = function (fn, timeout) { + server.longestTimeout = Math.max(timeout, server.longestTimeout || 0); + + return clockSetInterval.apply(this, arguments); + }; + } + } + + return sinon.fakeServer.addRequest.call(this, xhr); + }; + + sinon.fakeServerWithClock.respond = function respond() { + var returnVal = sinon.fakeServer.respond.apply(this, arguments); + + if (this.clock) { + this.clock.tick(this.longestTimeout || 0); + this.longestTimeout = 0; + + if (this.resetClock) { + this.clock.restore(); + this.resetClock = false; + } + } + + return returnVal; + }; + + sinon.fakeServerWithClock.restore = function restore() { + if (this.clock) { + this.clock.restore(); + } + + return sinon.fakeServer.restore.apply(this, arguments); + }; + } + + var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; + var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; + + function loadDependencies(require) { + var sinon = require("./core"); + require("./fake_server"); + require("./fake_timers"); + makeApi(sinon); + } + + if (isAMD) { + define(loadDependencies); + } else if (isNode) { + loadDependencies(require); + } else { + makeApi(sinon); // eslint-disable-line no-undef + } +}()); + +/** + * @depend util/core.js + * @depend extend.js + * @depend collection.js + * @depend util/fake_timers.js + * @depend util/fake_server_with_clock.js + */ +/** + * Manages fake collections as well as fake utilities such as Sinon's + * timers and fake XHR implementation in one convenient object. + * + * @author Christian Johansen (christian@cjohansen.no) + * @license BSD + * + * Copyright (c) 2010-2013 Christian Johansen + */ +(function (sinonGlobal) { + + function makeApi(sinon) { + var push = [].push; + + function exposeValue(sandbox, config, key, value) { + if (!value) { + return; + } + + if (config.injectInto && !(key in config.injectInto)) { + config.injectInto[key] = value; + sandbox.injectedKeys.push(key); + } else { + push.call(sandbox.args, value); + } + } + + function prepareSandboxFromConfig(config) { + var sandbox = sinon.create(sinon.sandbox); + + if (config.useFakeServer) { + if (typeof config.useFakeServer === "object") { + sandbox.serverPrototype = config.useFakeServer; + } + + sandbox.useFakeServer(); + } + + if (config.useFakeTimers) { + if (typeof config.useFakeTimers === "object") { + sandbox.useFakeTimers.apply(sandbox, config.useFakeTimers); + } else { + sandbox.useFakeTimers(); + } + } + + return sandbox; + } + + sinon.sandbox = sinon.extend(sinon.create(sinon.collection), { + useFakeTimers: function useFakeTimers() { + this.clock = sinon.useFakeTimers.apply(sinon, arguments); + + return this.add(this.clock); + }, + + serverPrototype: sinon.fakeServer, + + useFakeServer: function useFakeServer() { + var proto = this.serverPrototype || sinon.fakeServer; + + if (!proto || !proto.create) { + return null; + } + + this.server = proto.create(); + return this.add(this.server); + }, + + inject: function (obj) { + sinon.collection.inject.call(this, obj); + + if (this.clock) { + obj.clock = this.clock; + } + + if (this.server) { + obj.server = this.server; + obj.requests = this.server.requests; + } + + obj.match = sinon.match; + + return obj; + }, + + restore: function () { + sinon.collection.restore.apply(this, arguments); + this.restoreContext(); + }, + + restoreContext: function () { + if (this.injectedKeys) { + for (var i = 0, j = this.injectedKeys.length; i < j; i++) { + delete this.injectInto[this.injectedKeys[i]]; + } + this.injectedKeys = []; + } + }, + + create: function (config) { + if (!config) { + return sinon.create(sinon.sandbox); + } + + var sandbox = prepareSandboxFromConfig(config); + sandbox.args = sandbox.args || []; + sandbox.injectedKeys = []; + sandbox.injectInto = config.injectInto; + var prop, + value; + var exposed = sandbox.inject({}); + + if (config.properties) { + for (var i = 0, l = config.properties.length; i < l; i++) { + prop = config.properties[i]; + value = exposed[prop] || prop === "sandbox" && sandbox; + exposeValue(sandbox, config, prop, value); + } + } else { + exposeValue(sandbox, config, "sandbox", value); + } + + return sandbox; + }, + + match: sinon.match + }); + + sinon.sandbox.useFakeXMLHttpRequest = sinon.sandbox.useFakeServer; + + return sinon.sandbox; + } + + var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; + var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; + + function loadDependencies(require, exports, module) { + var sinon = require("./util/core"); + require("./extend"); + require("./util/fake_server_with_clock"); + require("./util/fake_timers"); + require("./collection"); + module.exports = makeApi(sinon); + } + + if (isAMD) { + define(loadDependencies); + return; + } + + if (isNode) { + loadDependencies(require, module.exports, module); + return; + } + + if (sinonGlobal) { + makeApi(sinonGlobal); + } +}( + typeof sinon === "object" && sinon // eslint-disable-line no-undef +)); + +/** + * @depend util/core.js + * @depend sandbox.js + */ +/** + * Test function, sandboxes fakes + * + * @author Christian Johansen (christian@cjohansen.no) + * @license BSD + * + * Copyright (c) 2010-2013 Christian Johansen + */ +(function (sinonGlobal) { + + function makeApi(sinon) { + var slice = Array.prototype.slice; + + function test(callback) { + var type = typeof callback; + + if (type !== "function") { + throw new TypeError("sinon.test needs to wrap a test function, got " + type); + } + + function sinonSandboxedTest() { + var config = sinon.getConfig(sinon.config); + config.injectInto = config.injectIntoThis && this || config.injectInto; + var sandbox = sinon.sandbox.create(config); + var args = slice.call(arguments); + var oldDone = args.length && args[args.length - 1]; + var exception, result; + + if (typeof oldDone === "function") { + args[args.length - 1] = function sinonDone(res) { + if (res) { + sandbox.restore(); + } else { + sandbox.verifyAndRestore(); + } + oldDone(res); + }; + } + + try { + result = callback.apply(this, args.concat(sandbox.args)); + } catch (e) { + exception = e; + } + + if (typeof oldDone !== "function") { + if (typeof exception !== "undefined") { + sandbox.restore(); + throw exception; + } else { + sandbox.verifyAndRestore(); + } + } + + return result; + } + + if (callback.length) { + return function sinonAsyncSandboxedTest(done) { // eslint-disable-line no-unused-vars + return sinonSandboxedTest.apply(this, arguments); + }; + } + + return sinonSandboxedTest; + } + + test.config = { + injectIntoThis: true, + injectInto: null, + properties: ["spy", "stub", "mock", "clock", "server", "requests"], + useFakeTimers: true, + useFakeServer: true + }; + + sinon.test = test; + return test; + } + + var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; + var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; + + function loadDependencies(require, exports, module) { + var core = require("./util/core"); + require("./sandbox"); + module.exports = makeApi(core); + } + + if (isAMD) { + define(loadDependencies); + } else if (isNode) { + loadDependencies(require, module.exports, module); + } else if (sinonGlobal) { + makeApi(sinonGlobal); + } +}(typeof sinon === "object" && sinon || null)); // eslint-disable-line no-undef + +/** + * @depend util/core.js + * @depend test.js + */ +/** + * Test case, sandboxes all test functions + * + * @author Christian Johansen (christian@cjohansen.no) + * @license BSD + * + * Copyright (c) 2010-2013 Christian Johansen + */ +(function (sinonGlobal) { + + function createTest(property, setUp, tearDown) { + return function () { + if (setUp) { + setUp.apply(this, arguments); + } + + var exception, result; + + try { + result = property.apply(this, arguments); + } catch (e) { + exception = e; + } + + if (tearDown) { + tearDown.apply(this, arguments); + } + + if (exception) { + throw exception; + } + + return result; + }; + } + + function makeApi(sinon) { + function testCase(tests, prefix) { + if (!tests || typeof tests !== "object") { + throw new TypeError("sinon.testCase needs an object with test functions"); + } + + prefix = prefix || "test"; + var rPrefix = new RegExp("^" + prefix); + var methods = {}; + var setUp = tests.setUp; + var tearDown = tests.tearDown; + var testName, + property, + method; + + for (testName in tests) { + if (tests.hasOwnProperty(testName) && !/^(setUp|tearDown)$/.test(testName)) { + property = tests[testName]; + + if (typeof property === "function" && rPrefix.test(testName)) { + method = property; + + if (setUp || tearDown) { + method = createTest(property, setUp, tearDown); + } + + methods[testName] = sinon.test(method); + } else { + methods[testName] = tests[testName]; + } + } + } + + return methods; + } + + sinon.testCase = testCase; + return testCase; + } + + var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; + var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; + + function loadDependencies(require, exports, module) { + var core = require("./util/core"); + require("./test"); + module.exports = makeApi(core); + } + + if (isAMD) { + define(loadDependencies); + return; + } + + if (isNode) { + loadDependencies(require, module.exports, module); + return; + } + + if (sinonGlobal) { + makeApi(sinonGlobal); + } +}( + typeof sinon === "object" && sinon // eslint-disable-line no-undef +)); + +/** + * @depend times_in_words.js + * @depend util/core.js + * @depend match.js + * @depend format.js + */ +/** + * Assertions matching the test spy retrieval interface. + * + * @author Christian Johansen (christian@cjohansen.no) + * @license BSD + * + * Copyright (c) 2010-2013 Christian Johansen + */ +(function (sinonGlobal, global) { + + var slice = Array.prototype.slice; + + function makeApi(sinon) { + var assert; + + function verifyIsStub() { + var method; + + for (var i = 0, l = arguments.length; i < l; ++i) { + method = arguments[i]; + + if (!method) { + assert.fail("fake is not a spy"); + } + + if (method.proxy && method.proxy.isSinonProxy) { + verifyIsStub(method.proxy); + } else { + if (typeof method !== "function") { + assert.fail(method + " is not a function"); + } + + if (typeof method.getCall !== "function") { + assert.fail(method + " is not stubbed"); + } + } + + } + } + + function failAssertion(object, msg) { + object = object || global; + var failMethod = object.fail || assert.fail; + failMethod.call(object, msg); + } + + function mirrorPropAsAssertion(name, method, message) { + if (arguments.length === 2) { + message = method; + method = name; + } + + assert[name] = function (fake) { + verifyIsStub(fake); + + var args = slice.call(arguments, 1); + var failed = false; + + if (typeof method === "function") { + failed = !method(fake); + } else { + failed = typeof fake[method] === "function" ? + !fake[method].apply(fake, args) : !fake[method]; + } + + if (failed) { + failAssertion(this, (fake.printf || fake.proxy.printf).apply(fake, [message].concat(args))); + } else { + assert.pass(name); + } + }; + } + + function exposedName(prefix, prop) { + return !prefix || /^fail/.test(prop) ? prop : + prefix + prop.slice(0, 1).toUpperCase() + prop.slice(1); + } + + assert = { + failException: "AssertError", + + fail: function fail(message) { + var error = new Error(message); + error.name = this.failException || assert.failException; + + throw error; + }, + + pass: function pass() {}, + + callOrder: function assertCallOrder() { + verifyIsStub.apply(null, arguments); + var expected = ""; + var actual = ""; + + if (!sinon.calledInOrder(arguments)) { + try { + expected = [].join.call(arguments, ", "); + var calls = slice.call(arguments); + var i = calls.length; + while (i) { + if (!calls[--i].called) { + calls.splice(i, 1); + } + } + actual = sinon.orderByFirstCall(calls).join(", "); + } catch (e) { + // If this fails, we'll just fall back to the blank string + } + + failAssertion(this, "expected " + expected + " to be " + + "called in order but were called as " + actual); + } else { + assert.pass("callOrder"); + } + }, + + callCount: function assertCallCount(method, count) { + verifyIsStub(method); + + if (method.callCount !== count) { + var msg = "expected %n to be called " + sinon.timesInWords(count) + + " but was called %c%C"; + failAssertion(this, method.printf(msg)); + } else { + assert.pass("callCount"); + } + }, + + expose: function expose(target, options) { + if (!target) { + throw new TypeError("target is null or undefined"); + } + + var o = options || {}; + var prefix = typeof o.prefix === "undefined" && "assert" || o.prefix; + var includeFail = typeof o.includeFail === "undefined" || !!o.includeFail; + + for (var method in this) { + if (method !== "expose" && (includeFail || !/^(fail)/.test(method))) { + target[exposedName(prefix, method)] = this[method]; + } + } + + return target; + }, + + match: function match(actual, expectation) { + var matcher = sinon.match(expectation); + if (matcher.test(actual)) { + assert.pass("match"); + } else { + var formatted = [ + "expected value to match", + " expected = " + sinon.format(expectation), + " actual = " + sinon.format(actual) + ]; + + failAssertion(this, formatted.join("\n")); + } + } + }; + + mirrorPropAsAssertion("called", "expected %n to have been called at least once but was never called"); + mirrorPropAsAssertion("notCalled", function (spy) { + return !spy.called; + }, "expected %n to not have been called but was called %c%C"); + mirrorPropAsAssertion("calledOnce", "expected %n to be called once but was called %c%C"); + mirrorPropAsAssertion("calledTwice", "expected %n to be called twice but was called %c%C"); + mirrorPropAsAssertion("calledThrice", "expected %n to be called thrice but was called %c%C"); + mirrorPropAsAssertion("calledOn", "expected %n to be called with %1 as this but was called with %t"); + mirrorPropAsAssertion( + "alwaysCalledOn", + "expected %n to always be called with %1 as this but was called with %t" + ); + mirrorPropAsAssertion("calledWithNew", "expected %n to be called with new"); + mirrorPropAsAssertion("alwaysCalledWithNew", "expected %n to always be called with new"); + mirrorPropAsAssertion("calledWith", "expected %n to be called with arguments %*%C"); + mirrorPropAsAssertion("calledWithMatch", "expected %n to be called with match %*%C"); + mirrorPropAsAssertion("alwaysCalledWith", "expected %n to always be called with arguments %*%C"); + mirrorPropAsAssertion("alwaysCalledWithMatch", "expected %n to always be called with match %*%C"); + mirrorPropAsAssertion("calledWithExactly", "expected %n to be called with exact arguments %*%C"); + mirrorPropAsAssertion("alwaysCalledWithExactly", "expected %n to always be called with exact arguments %*%C"); + mirrorPropAsAssertion("neverCalledWith", "expected %n to never be called with arguments %*%C"); + mirrorPropAsAssertion("neverCalledWithMatch", "expected %n to never be called with match %*%C"); + mirrorPropAsAssertion("threw", "%n did not throw exception%C"); + mirrorPropAsAssertion("alwaysThrew", "%n did not always throw exception%C"); + + sinon.assert = assert; + return assert; + } + + var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; + var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; + + function loadDependencies(require, exports, module) { + var sinon = require("./util/core"); + require("./match"); + require("./format"); + module.exports = makeApi(sinon); + } + + if (isAMD) { + define(loadDependencies); + return; + } + + if (isNode) { + loadDependencies(require, module.exports, module); + return; + } + + if (sinonGlobal) { + makeApi(sinonGlobal); + } +}( + typeof sinon === "object" && sinon, // eslint-disable-line no-undef + typeof global !== "undefined" ? global : self +)); + + return sinon; +})); diff --git a/resources/lib/sinonjs/sinon-ie-1.15.4.js b/resources/lib/sinonjs/sinon-ie-1.15.4.js deleted file mode 100644 index 9eac9580a2..0000000000 --- a/resources/lib/sinonjs/sinon-ie-1.15.4.js +++ /dev/null @@ -1,103 +0,0 @@ -/** - * Sinon.JS 1.15.4, 2015/06/27 - * - * @author Christian Johansen (christian@cjohansen.no) - * @author Contributors: https://github.com/cjohansen/Sinon.JS/blob/master/AUTHORS - * - * (The BSD License) - * - * Copyright (c) 2010-2014, Christian Johansen, christian@cjohansen.no - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * * Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * * Neither the name of Christian Johansen nor the names of his contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -/** - * Helps IE run the fake timers. By defining global functions, IE allows - * them to be overwritten at a later point. If these are not defined like - * this, overwriting them will result in anything from an exception to browser - * crash. - * - * If you don't require fake timers to work in IE, don't include this file. - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ -if (typeof window !== "undefined") { - function setTimeout() {} - function clearTimeout() {} - function setImmediate() {} - function clearImmediate() {} - function setInterval() {} - function clearInterval() {} - function Date() {} - - // Reassign the original functions. Now their writable attribute - // should be true. Hackish, I know, but it works. - setTimeout = sinon.timers.setTimeout; - clearTimeout = sinon.timers.clearTimeout; - setImmediate = sinon.timers.setImmediate; - clearImmediate = sinon.timers.clearImmediate; - setInterval = sinon.timers.setInterval; - clearInterval = sinon.timers.clearInterval; - Date = sinon.timers.Date; -} - -/** - * Helps IE run the fake XMLHttpRequest. By defining global functions, IE allows - * them to be overwritten at a later point. If these are not defined like - * this, overwriting them will result in anything from an exception to browser - * crash. - * - * If you don't require fake XHR to work in IE, don't include this file. - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ -if (typeof window !== "undefined") { - function XMLHttpRequest() {} - - // Reassign the original function. Now its writable attribute - // should be true. Hackish, I know, but it works. - XMLHttpRequest = sinon.xhr.XMLHttpRequest || undefined; -} -/** - * Helps IE run the fake XDomainRequest. By defining global functions, IE allows - * them to be overwritten at a later point. If these are not defined like - * this, overwriting them will result in anything from an exception to browser - * crash. - * - * If you don't require fake XDR to work in IE, don't include this file. - */ -if (typeof window !== "undefined") { - function XDomainRequest() {} - - // Reassign the original function. Now its writable attribute - // should be true. Hackish, I know, but it works. - XDomainRequest = sinon.xdr.XDomainRequest || undefined; -} diff --git a/resources/src/jquery/jquery.makeCollapsible.js b/resources/src/jquery/jquery.makeCollapsible.js index 19fdb2635d..79e87316e0 100644 --- a/resources/src/jquery/jquery.makeCollapsible.js +++ b/resources/src/jquery/jquery.makeCollapsible.js @@ -163,6 +163,7 @@ e.type === 'click' && options.linksPassthru && $.nodeName( e.target, 'a' ) && + $( e.target ).attr( 'href' ) && $( e.target ).attr( 'href' ) !== '#' ) { // Don't fire if a link with href !== '#' was clicked, if requested (for premade togglers by default) @@ -244,7 +245,7 @@ options = {}; } - return this.each( function () { + this.each( function () { var $collapsible, collapseText, expandText, $caption, $toggle, actionHandler, buildDefaultToggleLink, premadeToggleHandler, $toggleLink, $firstItem, collapsibleId, $customTogglers, firstval; @@ -392,13 +393,39 @@ } } + $( this ).data( 'mw-collapsible', { + collapse: function () { + actionHandler.call( $toggleLink.get( 0 ), null, { instantHide: true, wasCollapsed: false } ); + }, + expand: function () { + actionHandler.call( $toggleLink.get( 0 ), null, { instantHide: true, wasCollapsed: true } ); + }, + toggle: function () { + actionHandler.call( $toggleLink.get( 0 ), null, null ); + } + } ); + // Initial state if ( options.collapsed || $collapsible.hasClass( 'mw-collapsed' ) ) { // One toggler can hook to multiple elements, and one element can have // multiple togglers. This is the sanest way to handle that. actionHandler.call( $toggleLink.get( 0 ), null, { instantHide: true, wasCollapsed: false } ); } + } ); + + /** + * Fired after collapsible content has been initialized + * + * This gives an option to modify the collapsible behavior. + * + * @event wikipage_collapsibleContent + * @member mw.hook + * @param {jQuery} $content All the elements that have been made collapsible + */ + mw.hook( 'wikipage.collapsibleContent' ).fire( this ); + + return this; }; /** diff --git a/resources/src/jquery/jquery.suggestions.js b/resources/src/jquery/jquery.suggestions.js index 1f977bf910..38e5a1f6b4 100644 --- a/resources/src/jquery/jquery.suggestions.js +++ b/resources/src/jquery/jquery.suggestions.js @@ -14,7 +14,7 @@ * * $( '#textbox' ).suggestions(); * - * Uses jQuery.suggestions singleteon internally. + * Uses jQuery.suggestions singleton internally. * * @class jQuery.plugin.suggestions */ diff --git a/resources/src/mediawiki.action/mediawiki.action.edit.stash.js b/resources/src/mediawiki.action/mediawiki.action.edit.stash.js index abe912de10..20bfa0eaee 100644 --- a/resources/src/mediawiki.action/mediawiki.action.edit.stash.js +++ b/resources/src/mediawiki.action/mediawiki.action.edit.stash.js @@ -44,7 +44,7 @@ pending.abort(); } - api.getToken( 'edit' ).then( stashEdit ); + api.getToken( 'csrf' ).then( stashEdit ); } function onKeyPress( e ) { diff --git a/resources/src/mediawiki.language/mediawiki.language.js b/resources/src/mediawiki.language/mediawiki.language.js index 0d324ed358..cf3ef79746 100644 --- a/resources/src/mediawiki.language/mediawiki.language.js +++ b/resources/src/mediawiki.language/mediawiki.language.js @@ -47,7 +47,7 @@ $.extend( mw.language, { var pluralRules, pluralFormIndex = 0; - if ( explicitPluralForms && explicitPluralForms[ count ] ) { + if ( explicitPluralForms && ( explicitPluralForms[ count ] !== undefined ) ) { return explicitPluralForms[ count ]; } diff --git a/resources/src/mediawiki.language/specialcharacters.json b/resources/src/mediawiki.language/specialcharacters.json index d4446ab87a..0dffd7dd05 100644 --- a/resources/src/mediawiki.language/specialcharacters.json +++ b/resources/src/mediawiki.language/specialcharacters.json @@ -90,6 +90,9 @@ "greek": [ "Α", "Ά", "α", "ά", "Β", "β", "Γ", "γ", "Δ", "δ", "Ε", "Έ", "ε", "έ", "Ζ", "ζ", "Η", "Ή", "η", "ή", "Θ", "θ", "Ι", "Ί", "ι", "ί", "Κ", "κ", "Λ", "λ", "Μ", "μ", "Ν", "ν", "Ξ", "ξ", "Ο", "Ό", "ο", "ό", "Π", "π", "Ρ", "ρ", "Σ", "σ", "ς", "Τ", "τ", "Υ", "Ύ", "υ", "ύ", "Φ", "φ", "Χ", "χ", "Ψ", "ψ", "Ω", "Ώ", "ω", "ώ" ], + "greekextended": [ + "ἀ", "ἁ", "ἂ", "ἃ", "ἄ", "ἅ", "ἆ", "ἇ", "Ἀ", "Ἁ", "Ἂ", "Ἃ", "Ἄ", "Ἅ", "Ἆ", "Ἇ", "ἐ", "ἑ", "ἒ", "ἓ", "ἔ", "ἕ", "Ἐ", "Ἑ", "Ἒ", "Ἓ", "Ἔ", "Ἕ", "ἠ", "ἡ", "ἢ", "ἣ", "ἤ", "ἥ", "ἦ", "ἧ", "Ἠ", "Ἡ", "Ἢ", "Ἣ", "Ἤ", "Ἥ", "Ἦ", "Ἧ", "ἰ", "ἱ", "ἲ", "ἳ", "ἴ", "ἵ", "ἶ", "ἷ", "Ἰ", "Ἱ", "Ἲ", "Ἳ", "Ἴ", "Ἵ", "Ἶ", "Ἷ", "ὀ", "ὁ", "ὂ", "ὃ", "ὄ", "ὅ", "Ὀ", "Ὁ", "Ὂ", "Ὃ", "Ὄ", "Ὅ", "ὐ", "ὑ", "ὒ", "ὓ", "ὔ", "ὕ", "ὖ", "ὗ", "Ὑ", "Ὓ", "Ὕ", "Ὗ", "ὠ", "ὡ", "ὢ", "ὣ", "ὤ", "ὥ", "ὦ", "ὧ", "Ὠ", "Ὡ", "Ὢ", "Ὣ", "Ὤ", "Ὥ", "Ὦ", "Ὧ", "ὰ", "ά", "ὲ", "έ", "ὴ", "ή", "ὶ", "ί", "ὸ", "ό", "ὺ", "ύ", "ὼ", "ώ", "ᾀ", "ᾁ", "ᾂ", "ᾃ", "ᾄ", "ᾅ", "ᾆ", "ᾇ", "ᾈ", "ᾉ", "ᾊ", "ᾋ", "ᾌ", "ᾍ", "ᾎ", "ᾏ", "ᾐ", "ᾑ", "ᾒ", "ᾓ", "ᾔ", "ᾕ", "ᾖ", "ᾗ", "ᾘ", "ᾙ", "ᾚ", "ᾛ", "ᾜ", "ᾝ", "ᾞ", "ᾟ", "ᾠ", "ᾡ", "ᾢ", "ᾣ", "ᾤ", "ᾥ", "ᾦ", "ᾧ", "ᾨ", "ᾩ", "ᾪ", "ᾫ", "ᾬ", "ᾭ", "ᾮ", "ᾯ", "ᾰ", "ᾱ", "ᾲ", "ᾳ", "ᾴ", "ᾶ", "ᾷ", "Ᾰ", "Ᾱ", "Ὰ", "Ά", "ᾼ", "᾽", "ι", "᾿", "῀", "῁", "ῂ", "ῃ", "ῄ", "ῆ", "ῇ", "Ὲ", "Έ", "Ὴ", "Ή", "ῌ", "῍", "῎", "῏", "ῐ", "ῑ", "ῒ", "ΐ", "ῖ", "ῗ", "Ῐ", "Ῑ", "Ὶ", "Ί", "῝", "῞", "῟", "ῠ", "ῡ", "ῢ", "ΰ", "ῤ", "ῥ", "ῦ", "ῧ", "Ῠ", "Ῡ", "Ὺ", "Ύ", "Ῥ", "῭", "΅", "`", "ῲ", "ῳ", "ῴ", "ῶ", "ῷ", "Ὸ", "Ό", "Ὼ", "Ώ", "ῼ", "´", "῾" + ], "cyrillic": [ "А", "а", "Ӑ", "ӑ", "Ӓ", "ӓ", "Ә", "ә", "Ӛ", "ӛ", "Б", "б", "В", "в", "Г", "г", "Ґ", "ґ", "Ӷ", "ӷ", "Ѓ", "ѓ", "Ӻ", "ӻ", "Ғ", "ғ", "Ҕ", "ҕ", "Д", "д", "Ԁ", "ԁ", "Ԃ", "ԃ", "Ђ", "ђ", "Е", "е", "Ѐ", "ѐ", "Є", "є", "Ё", "ё", "Ӗ", "ӗ", "Ҽ", "ҽ", "Ҿ", "ҿ", "Ж", "ж", "Җ", "җ", "Ӂ", "ӂ", "Ӝ", "ӝ", "З", "з", "Ҙ", "ҙ", "Ӟ", "ӟ", "Ԑ", "ԑ", "Ӡ", "ӡ", "Ѕ", "ѕ", "Ԅ", "ԅ", "Ԇ", "ԇ", "И", "и", "І", "і", "Ї", "ї", [ diff --git a/resources/src/mediawiki.legacy/commonPrint.css b/resources/src/mediawiki.legacy/commonPrint.css index 77ecfcba41..3e6ee56bff 100644 --- a/resources/src/mediawiki.legacy/commonPrint.css +++ b/resources/src/mediawiki.legacy/commonPrint.css @@ -243,7 +243,6 @@ div.thumbinner { background-color: White; font-size: 94%; text-align: center; - overflow: hidden; } html .thumbimage { @@ -256,6 +255,8 @@ html .thumbcaption { line-height: 1.4em; padding: 3px !important; font-size: 94%; + overflow: hidden; + word-wrap: break-word; } div.magnify { diff --git a/resources/src/mediawiki.legacy/oldshared.css b/resources/src/mediawiki.legacy/oldshared.css index 5d637da087..9adfba186f 100644 --- a/resources/src/mediawiki.legacy/oldshared.css +++ b/resources/src/mediawiki.legacy/oldshared.css @@ -90,7 +90,6 @@ div.thumbinner { background-color: #f9f9f9; font-size: 94%; text-align: center; - overflow: hidden; } html .thumbimage { @@ -103,6 +102,8 @@ html .thumbcaption { padding: 3px; font-size: 94%; text-align: left; + overflow: hidden; + word-wrap: break-word; } div.magnify { diff --git a/resources/src/mediawiki.libs/CLDRPluralRuleParser.js b/resources/src/mediawiki.libs/CLDRPluralRuleParser.js index 31c8fef92a..549a9ab3da 100644 --- a/resources/src/mediawiki.libs/CLDRPluralRuleParser.js +++ b/resources/src/mediawiki.libs/CLDRPluralRuleParser.js @@ -591,5 +591,6 @@ function pluralRuleParser(rule, number) { /* pluralRuleParser ends here */ mw.libs.pluralRuleParser = pluralRuleParser; +module.exports = pluralRuleParser; } )( mediaWiki ); diff --git a/resources/src/mediawiki.skinning/content.css b/resources/src/mediawiki.skinning/content.css index e6f92a5c71..89f8745365 100644 --- a/resources/src/mediawiki.skinning/content.css +++ b/resources/src/mediawiki.skinning/content.css @@ -152,7 +152,6 @@ div.thumbinner { background-color: #f9f9f9; font-size: 94%; text-align: center; - overflow: hidden; } html .thumbimage { @@ -164,6 +163,8 @@ html .thumbcaption { line-height: 1.4em; padding: 3px; font-size: 94%; + overflow: hidden; + word-wrap: break-word; /* Default styles when there's no .mw-content-ltr or .mw-content-rtl, overridden below */ text-align: left; } diff --git a/resources/src/mediawiki.special/mediawiki.special.apisandbox.js b/resources/src/mediawiki.special/mediawiki.special.apisandbox.js index a2d106dec7..3cfc52c51b 100644 --- a/resources/src/mediawiki.special/mediawiki.special.apisandbox.js +++ b/resources/src/mediawiki.special/mediawiki.special.apisandbox.js @@ -906,6 +906,15 @@ return xhr; } } ) + .then( null, function ( code, data, result, jqXHR ) { + if ( code !== 'http' ) { + // Not really an error, work around mw.Api thinking it is. + return $.Deferred() + .resolve( result, jqXHR ) + .promise(); + } + return this; + } ) .fail( function ( code, data ) { var details = 'HTTP error: ' + data.exception; $result.empty() diff --git a/resources/src/mediawiki.special/mediawiki.special.search.js b/resources/src/mediawiki.special/mediawiki.special.search.js index ab83e1af2f..e809f2ea93 100644 --- a/resources/src/mediawiki.special/mediawiki.special.search.js +++ b/resources/src/mediawiki.special/mediawiki.special.search.js @@ -3,7 +3,7 @@ */ ( function ( mw, $ ) { $( function () { - var $checkboxes, $headerLinks; + var $checkboxes, $headerLinks, updateHeaderLinks, searchWidget; // Emulate HTML5 autofocus behavior in non HTML5 compliant browsers if ( !( 'autofocus' in document.createElement( 'input' ) ) ) { @@ -33,8 +33,8 @@ // Change the header search links to what user entered $headerLinks = $( '.search-types a' ); - $( '#searchText, #powerSearchText' ).change( function () { - var searchterm = $( this ).val(); + searchWidget = OO.ui.infuse( 'searchText' ); + updateHeaderLinks = function ( value ) { $headerLinks.each( function () { var parts = $( this ).attr( 'href' ).split( 'search=' ), lastpart = '', @@ -44,9 +44,11 @@ } else { prefix = '&search='; } - this.href = parts[ 0 ] + prefix + encodeURIComponent( searchterm ) + lastpart; + this.href = parts[ 0 ] + prefix + encodeURIComponent( value ) + lastpart; } ); - } ).trigger( 'change' ); + }; + searchWidget.on( 'change', updateHeaderLinks ); + updateHeaderLinks( searchWidget.getValue() ); // When saving settings, use the proper request method (POST instead of GET). $( '#mw-search-powersearch-remember' ).change( function () { diff --git a/resources/src/mediawiki.special/mediawiki.special.upload.js b/resources/src/mediawiki.special/mediawiki.special.upload.js index 8c89ed97d8..49af809011 100644 --- a/resources/src/mediawiki.special/mediawiki.special.upload.js +++ b/resources/src/mediawiki.special/mediawiki.special.upload.js @@ -57,22 +57,28 @@ }, timeout: function () { - var $spinnerDestCheck; + var $spinnerDestCheck, title; if ( !ajaxUploadDestCheck || this.nameToCheck === '' ) { return; } $spinnerDestCheck = $.createSpinner().insertAfter( '#wpDestFile' ); + title = mw.Title.newFromText( this.nameToCheck, mw.config.get( 'wgNamespaceIds' ).file ); ( new mw.Api() ).get( { + formatversion: 2, action: 'query', - titles: ( new mw.Title( this.nameToCheck, mw.config.get( 'wgNamespaceIds' ).file ) ).getPrefixedText(), + // If title is empty, user input is invalid, the API call will produce details about why + titles: title ? title.getPrefixedText() : this.nameToCheck, prop: 'imageinfo', - iiprop: 'uploadwarning', - indexpageids: true + iiprop: 'uploadwarning' } ).done( function ( result ) { - var resultOut = ''; - if ( result.query ) { - resultOut = result.query.pages[ result.query.pageids[ 0 ] ].imageinfo[ 0 ]; + var + resultOut = '', + page = result.query.pages[ 0 ]; + if ( page.imageinfo ) { + resultOut = page.imageinfo[ 0 ].html; + } else if ( page.invalidreason ) { + resultOut = mw.html.escape( page.invalidreason ); } $spinnerDestCheck.remove(); uploadWarning.processResult( resultOut, uploadWarning.nameToCheck ); @@ -80,8 +86,8 @@ }, processResult: function ( result, fileName ) { - this.setWarning( result.html ); - this.responseCache[ fileName ] = result.html; + this.setWarning( result ); + this.responseCache[ fileName ] = result; }, setWarning: function ( warning ) { @@ -117,6 +123,7 @@ $spinnerLicense = $.createSpinner().insertAfter( '#wpLicense' ); ( new mw.Api() ).get( { + formatversion: 2, action: 'parse', text: '{{' + license + '}}', title: $( '#wpDestFile' ).val() || 'File:Sample.jpg', @@ -129,7 +136,7 @@ }, processResult: function ( result, license ) { - this.responseCache[ license ] = result.parse.text[ '*' ]; + this.responseCache[ license ] = result.parse.text; this.showPreview( this.responseCache[ license ] ); }, @@ -401,6 +408,10 @@ $( '#mw-upload-thumbnail .fileinfo' ).text( info ); }; + img.onerror = function () { + // Can happen for example for invalid SVG files + clearPreview(); + }; img.src = dataURL; }, mw.config.get( 'wgFileCanRotate' ) ? function ( data ) { try { diff --git a/resources/src/mediawiki.special/mediawiki.special.userlogin.common.css b/resources/src/mediawiki.special/mediawiki.special.userlogin.common.css index fd907ac252..9da6c83458 100644 --- a/resources/src/mediawiki.special/mediawiki.special.userlogin.common.css +++ b/resources/src/mediawiki.special/mediawiki.special.userlogin.common.css @@ -1,5 +1,5 @@ -/* Styles for user login and signup forms */ -.mw-form-related-link-container { +/* User login and signup forms */ +.mw-ui-vform .mw-form-related-link-container { margin-bottom: 0.5em; text-align: center; } diff --git a/resources/src/mediawiki.special/mediawiki.special.userlogin.login.css b/resources/src/mediawiki.special/mediawiki.special.userlogin.login.css index 42d56936d2..620c83ab84 100644 --- a/resources/src/mediawiki.special/mediawiki.special.userlogin.login.css +++ b/resources/src/mediawiki.special/mediawiki.special.userlogin.login.css @@ -5,4 +5,29 @@ background: url( images/glyph-people-large.png ) no-repeat 50%; margin: 0 auto; padding-top: 7.8em; + font-weight: bold; +} + +/* Login Button, following `ButtonWidget (progressive)‎` from OOjs UI */ +#mw-createaccount-join { + color: #347bff; +} +#mw-createaccount-join:hover { + background-color: #ebf2ff; /* rgba(52, 123, 255, 0.1); */ + border-color: #859ecc; + box-shadow: none; +} +#mw-createaccount-join:active { + background-color: #ebf2ff; + color: #1f4999; + border-color: #1f4999; +} +#mw-createaccount-join:focus { + background-color: #fff; + color: #1f4999; + border-color: #1f4999; + box-shadow: inset 0 0 0 1px #1f4999; +} +#mw-createaccount-join:active:focus { + background-color: #ebf2ff; } diff --git a/resources/src/mediawiki.ui/components/inputs.less b/resources/src/mediawiki.ui/components/inputs.less index d0633aef68..579bd5f9f0 100644 --- a/resources/src/mediawiki.ui/components/inputs.less +++ b/resources/src/mediawiki.ui/components/inputs.less @@ -27,8 +27,6 @@ // // Styleguide 1.1. .mw-ui-input { - // turn off default input styling for input[type="search"] fields - -webkit-appearance: none; .box-sizing( border-box ); display: block; width: 100%; @@ -74,6 +72,23 @@ border-color: @colorGray14; color: @colorGray12; } + + // Normalize styling for `` + &[type="search"] { + // Correct the odd appearance in Chrome and Safari 5 + -webkit-appearance: textfield; + + // Remove proprietary clear button in IE 10-11 + &::-ms-clear { + display: none; + } + + // Remove the inner padding and cancel buttons in Chrome on OS X and Safari on OS X + &::-webkit-search-cancel-button, + &::-webkit-search-decoration { + -webkit-appearance: none; + } + } } textarea.mw-ui-input { diff --git a/resources/src/mediawiki.widgets.datetime/DateTimeInputWidget.js b/resources/src/mediawiki.widgets.datetime/DateTimeInputWidget.js index 7f36137e5d..01d3442798 100644 --- a/resources/src/mediawiki.widgets.datetime/DateTimeInputWidget.js +++ b/resources/src/mediawiki.widgets.datetime/DateTimeInputWidget.js @@ -55,6 +55,9 @@ config.formatter.format = '@' + config.type; } + // Early properties + this.type = config.type; + // Parent constructor mw.widgets.datetime.DateTimeInputWidget[ 'super' ].call( this, config ); @@ -64,7 +67,6 @@ OO.ui.mixin.PendingElement.call( this, config ); // Properties - this.type = config.type; this.$handle = $( '' ); this.$fields = $( '' ); this.fields = []; diff --git a/resources/src/mediawiki.widgets/mw.widgets.CategoryCapsuleItemWidget.js b/resources/src/mediawiki.widgets/mw.widgets.CategoryCapsuleItemWidget.js index 29eaaad126..58115c3140 100644 --- a/resources/src/mediawiki.widgets/mw.widgets.CategoryCapsuleItemWidget.js +++ b/resources/src/mediawiki.widgets/mw.widgets.CategoryCapsuleItemWidget.js @@ -25,23 +25,24 @@ * @private */ PageExistenceCache.prototype.processExistenceCheckQueue = function () { - var queue, titles; + var queue, titles, + cache = this; if ( this.currentRequest ) { // Don't fire off a million requests at the same time this.currentRequest.always( function () { - this.currentRequest = null; - this.processExistenceCheckQueueDebounced(); - }.bind( this ) ); + cache.currentRequest = null; + cache.processExistenceCheckQueueDebounced(); + } ); return; } queue = this.existenceCheckQueue; this.existenceCheckQueue = {}; titles = Object.keys( queue ).filter( function ( title ) { - if ( this.existenceCache.hasOwnProperty( title ) ) { - queue[ title ].resolve( this.existenceCache[ title ] ); + if ( cache.existenceCache.hasOwnProperty( title ) ) { + queue[ title ].resolve( cache.existenceCache[ title ] ); } - return !this.existenceCache.hasOwnProperty( title ); - }.bind( this ) ); + return !cache.existenceCache.hasOwnProperty( title ); + } ); if ( !titles.length ) { return; } @@ -53,10 +54,10 @@ } ).done( function ( response ) { $.each( response.query.pages, function ( index, page ) { var title = new ForeignTitle( page.title ).getPrefixedText(); - this.existenceCache[ title ] = !page.missing; - queue[ title ].resolve( this.existenceCache[ title ] ); + cache.existenceCache[ title ] = !page.missing; + queue[ title ].resolve( cache.existenceCache[ title ] ); } ); - }.bind( this ) ); + } ); }; /** @@ -107,6 +108,7 @@ * @cfg {string} [apiUrl] API URL, if not the current wiki's API */ mw.widgets.CategoryCapsuleItemWidget = function MWWCategoryCapsuleItemWidget( config ) { + var widget = this; // Parent constructor mw.widgets.CategoryCapsuleItemWidget.parent.call( this, $.extend( { data: config.title.getMainText(), @@ -137,8 +139,8 @@ this.constructor.static.pageExistenceCaches[ this.apiUrl ] .checkPageExistence( new ForeignTitle( this.title.getPrefixedText() ) ) .done( function ( exists ) { - this.setMissing( !exists ); - }.bind( this ) ); + widget.setMissing( !exists ); + } ); /*jshint +W024*/ }; diff --git a/resources/src/mediawiki.widgets/mw.widgets.SearchInputWidget.js b/resources/src/mediawiki.widgets/mw.widgets.SearchInputWidget.js index 1f526e254c..8c2b53af26 100644 --- a/resources/src/mediawiki.widgets/mw.widgets.SearchInputWidget.js +++ b/resources/src/mediawiki.widgets/mw.widgets.SearchInputWidget.js @@ -15,12 +15,16 @@ * @constructor * @cfg {boolean} [pushPending=true] Visually mark the input field as "pending", while * requesting suggestions. + * @cfg {boolean} [performSearchOnClick=true] If true, the script will start a search when- + * ever a user hits a suggestion. If false, the text of the suggestion is inserted into the + * text field only. */ mw.widgets.SearchInputWidget = function MwWidgetsSearchInputWidget( config ) { config = $.extend( { type: 'search', icon: 'search', - maxLength: undefined + maxLength: undefined, + performSearchOnClick: true }, config ); // Parent constructor @@ -32,6 +36,12 @@ if ( !config.pushPending ) { this.pushPending = false; } + if ( config.dataLocation ) { + this.dataLocation = config.dataLocation; + } + if ( config.performSearchOnClick ) { + this.performSearchOnClick = config.performSearchOnClick; + } this.setLookupsDisabled( !this.suggestions ); }; @@ -45,19 +55,39 @@ * @inheritdoc mw.widgets.TitleWidget */ mw.widgets.SearchInputWidget.prototype.getSuggestionsPromise = function () { - var api = new mw.Api(); + var api = new mw.Api(), + promise, + self = this; // reuse the searchSuggest function from mw.searchSuggest - return mw.searchSuggest.request( api, this.getQueryValue(), $.noop, this.limit ); + promise = mw.searchSuggest.request( api, this.getQueryValue(), $.noop, this.limit ); + + // tracking purposes + promise.done( function ( data, jqXHR ) { + self.requestType = jqXHR.getResponseHeader( 'X-OpenSearch-Type' ); + } ); + + return promise; }; /** * @inheritdoc mw.widgets.TitleInputWidget */ mw.widgets.SearchInputWidget.prototype.getLookupCacheDataFromResponse = function ( response ) { + var resp; + // mw.widgets.TitleInputWidget uses response.query, which doesn't exist for opensearch, // so return the whole response (titles only, and links) - return response || {}; + resp = { + data: response || {}, + metadata: { + type: this.requestType || 'unknown', + query: this.getQueryValue() + } + }; + this.requestType = undefined; + + return resp; }; /** @@ -70,17 +100,19 @@ // mw.widgets.TitleWidget does a lot more work here, because the TitleOptionWidgets can // differ a lot, depending on the returned data from the request. With the request used here // we get only the search results. - $.each( data[ 1 ], function ( i, result ) { + $.each( data.data[ 1 ], function ( i, result ) { items.push( new mw.widgets.TitleOptionWidget( // data[ 3 ][ i ] is the link for this result - self.getOptionWidgetData( result, null, data[ 3 ][ i ] ) + self.getOptionWidgetData( result, null, data.data[ 3 ][ i ] ) ) ); } ); mw.track( 'mw.widgets.SearchInputWidget', { action: 'impression-results', numberOfResults: items.length, - resultSetType: mw.searchSuggest.type + resultSetType: data.metadata.type, + query: data.metadata.query, + inputLocation: this.dataLocation || 'header' } ); return items; @@ -108,4 +140,26 @@ }; }; + /** + * @inheritdoc + */ + mw.widgets.SearchInputWidget.prototype.onLookupMenuItemChoose = function ( item ) { + var items; + + // get items which was suggested before the input changes + items = this.lookupMenu.items; + + mw.widgets.SearchInputWidget.parent.prototype.onLookupMenuItemChoose.apply( this, arguments ); + + mw.track( 'mw.widgets.SearchInputWidget', { + action: 'click-result', + numberOfResults: items.length, + clickIndex: items.indexOf( item ) + 1 + } ); + + if ( this.performSearchOnClick ) { + this.$element.closest( 'form' ).submit(); + } + }; + }( jQuery, mediaWiki ) ); diff --git a/resources/src/mediawiki.widgets/mw.widgets.StashedFileWidget.js b/resources/src/mediawiki.widgets/mw.widgets.StashedFileWidget.js new file mode 100644 index 0000000000..cdcf5a23a8 --- /dev/null +++ b/resources/src/mediawiki.widgets/mw.widgets.StashedFileWidget.js @@ -0,0 +1,158 @@ +/*! + * MediaWiki Widgets - StashedFileWidget class. + * + * @copyright 2011-2016 MediaWiki Widgets Team and others; see AUTHORS.txt + * @license The MIT License (MIT); see LICENSE.txt + */ +( function ( $, mw, OO ) { + + /** + * Accepts a stashed file and displays the information for purposes of + * publishing the file at the behest of the user. + * + * Example use: + * var widget = new mw.widgets.StashedFileWidget( { + * filekey: '12r9e4rugeec.ddtmmp.1.jpg', + * } ); + * + * widget.getValue(); // '12r9e4rugeec.ddtmmp.1.jpg' + * widget.setValue( '12r9epfbnskk.knfiy7.1.jpg' ); + * widget.getValue(); // '12r9epfbnskk.knfiy7.1.jpg' + * + * Note that this widget will not finish an upload for you. Use mw.Upload + * and mw.Upload#setFilekey, then mw.Upload#finishStashUpload to accomplish + * that. + * + * @class mw.widgets.StashedFileWidget + * @extends OO.ui.Widget + */ + + /** + * @constructor + * @param {Object} config Configuration options + * @cfg {string} filekey The filekey of the stashed file. + * @cfg {Object} [api] API to use for thumbnails. + */ + mw.widgets.StashedFileWidget = function MWWStashedFileWidget( config ) { + if ( !config.api ) { + config.api = new mw.Api(); + } + + // Parent constructor + mw.widgets.StashedFileWidget.parent.call( this, config ); + + // Mixin constructors + OO.ui.mixin.IconElement.call( this, config ); + OO.ui.mixin.LabelElement.call( this, config ); + OO.ui.mixin.PendingElement.call( this, config ); + + // Properties + this.api = config.api; + this.$info = $( '' ); + this.setValue( config.filekey ); + this.$label.addClass( 'mw-widgets-stashedFileWidget-label' ); + this.$info + .addClass( 'mw-widgets-stashedFileWidget-info' ) + .append( this.$icon, this.$label ); + + this.$thumbnail = $( '
' ).addClass( 'mw-widgets-stashedFileWidget-thumbnail' ); + this.setPendingElement( this.$thumbnail ); + + this.$thumbContain = $( '
' ) + .addClass( 'mw-widgets-stashedFileWidget-thumbnail-container' ) + .append( this.$thumbnail, this.$info ); + + this.$element + .addClass( 'mw-widgets-stashedFileWidget' ) + .append( this.$thumbContain ); + + this.updateUI(); + }; + + OO.inheritClass( mw.widgets.StashedFileWidget, OO.ui.Widget ); + OO.mixinClass( mw.widgets.StashedFileWidget, OO.ui.mixin.IconElement ); + OO.mixinClass( mw.widgets.StashedFileWidget, OO.ui.mixin.LabelElement ); + OO.mixinClass( mw.widgets.StashedFileWidget, OO.ui.mixin.PendingElement ); + + /** + * Get the current filekey. + * + * @return {string|null} + */ + mw.widgets.StashedFileWidget.prototype.getValue = function () { + return this.filekey; + }; + + /** + * Set the filekey. + * + * @param {string|null} filekey + */ + mw.widgets.StashedFileWidget.prototype.setValue = function ( filekey ) { + if ( filekey !== this.filekey ) { + this.filekey = filekey; + this.updateUI(); + this.emit( 'change', this.filekey ); + } + }; + + mw.widgets.StashedFileWidget.prototype.updateUI = function () { + var $label, $filetype; + + if ( this.filekey ) { + this.$element.removeClass( 'mw-widgets-stashedFileWidget-empty' ); + $label = $( [] ); + $filetype = $( '' ) + .addClass( 'mw-widgets-stashedFileWidget-fileType' ); + + $label = $label.add( + $( '' ) + .addClass( 'mw-widgets-stashedFileWidget-filekey' ) + .text( this.filekey ) + ).add( $filetype ); + + this.setLabel( $label ); + + this.pushPending(); + this.loadAndGetImageUrl().done( function ( url, mime ) { + this.$thumbnail.css( 'background-image', 'url( ' + url + ' )' ); + if ( mime ) { + $filetype.text( mime ); + this.setLabel( $label ); + } + }.bind( this ) ).fail( function () { + this.$thumbnail.append( + new OO.ui.IconWidget( { + icon: 'attachment', + classes: [ 'mw-widgets-stashedFileWidget-noThumbnail-icon' ] + } ).$element + ); + }.bind( this ) ).always( function () { + this.popPending(); + }.bind( this ) ); + } else { + this.$element.addClass( 'mw-widgets-stashedFileWidget-empty' ); + this.setLabel( '' ); + } + }; + + mw.widgets.StashedFileWidget.prototype.loadAndGetImageUrl = function () { + var filekey = this.filekey; + + if ( filekey ) { + return this.api.get( { + action: 'query', + prop: 'stashimageinfo', + siifilekey: filekey, + siiprop: [ 'size', 'url', 'mime' ], + siiurlwidth: 220 + } ).then( function ( data ) { + var sii = data.query.stashimageinfo[ 0 ]; + + return $.Deferred().resolve( sii.thumburl, sii.mime ); + } ); + } + + return $.Deferred().reject( 'No filekey' ); + }; +}( jQuery, mediaWiki, OO ) ); diff --git a/resources/src/mediawiki.widgets/mw.widgets.StashedFileWidget.less b/resources/src/mediawiki.widgets/mw.widgets.StashedFileWidget.less new file mode 100644 index 0000000000..cf9496f91b --- /dev/null +++ b/resources/src/mediawiki.widgets/mw.widgets.StashedFileWidget.less @@ -0,0 +1,172 @@ +.mw-widgets-stashedFileWidget { + display: inline-block; + vertical-align: middle; + width: 100%; + max-width: 50em; + margin-right: 0.5em; + + &:last-child { + margin-right: 0; + } + + &.oo-ui-iconElement .mw-widgets-stashedFileWidget-info .mw-widgets-stashedFileWidget-label { + left: 2.875em; + } + + &.oo-ui-indicatorElement .mw-widgets-stashedFileWidget-info .mw-widgets-stashedFileWidget-label { + right: 4.4625em; + } +} + +.mw-widgets-stashedFileWidget-info { + height: 2.4em; + background-color: #ffffff; + border: 1px solid #cccccc; + border-radius: 2px; + width: 100%; + display: table-cell; + vertical-align: middle; + position: relative; + overflow: hidden; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + + > .mw-widgets-stashedFileWidget-label { + line-height: 2.3em; + margin: 0; + overflow: hidden; + white-space: nowrap; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + text-overflow: ellipsis; + left: 0.5em; + right: 2.375em; + position: absolute; + top: 0; + bottom: 0; + + > .mw-widgets-stashedFileWidget-fileName { + float: left; + } + > .mw-widgets-stashedFileWidget-fileType { + color: #888888; + float: right; + } + } + + > .oo-ui-indicatorElement-indicator, + > .oo-ui-iconElement-icon { + position: absolute; + } + + > .oo-ui-indicatorElement-indicator { + right: 0; + top: 0; + width: 0.9375em; + height: 2.3em; + margin-right: 0.775em; + } + + > .oo-ui-iconElement-icon { + top: 0; + width: 1.875em; + height: 2.3em; + margin-left: 0.5em; + left: 0; + } + + &.oo-ui-widget-disabled { + .mw-widgets-stashedFileWidget-info { + color: #cccccc; + text-shadow: 0 1px 1px #ffffff; + border-color: #dddddd; + background-color: #f3f3f3; + + > .oo-ui-iconElement-icon, + > .oo-ui-indicatorElement-indicator { + opacity: 0.2; + } + } + } +} + +.mw-widgets-stashedFileWidget-thumbnail-container { + cursor: default; + height: 5.5em; + text-align: left; + padding: 0; + background-color: #ffffff; + border: 1px solid #cccccc; + margin-bottom: 0.5em; + vertical-align: middle; + overflow: hidden; + border-radius: 2px; + + .mw-widgets-stashedFileWidget-thumbnail { + height: 5.5em; + width: 5.5em; + position: absolute; + background-size: cover; + background-position: center center; + + &.oo-ui-pendingElement-pending { + background-size: auto; + } + + > .mw-widgets-stashedFileWidget-noThumbnail-icon { + opacity: 0.4; + background-color: #cccccc; + height: 5.5em; + width: 5.5em; + } + } + + .mw-widgets-stashedFileWidget-info { + border: none; + background: none; + display: block; + height: 100%; + width: auto; + margin-left: 5.5em; + + > .mw-widgets-stashedFileWidget-label { + position: relative; + + > .mw-widgets-stashedFileWidget-fileName { + display: block; + float: none; + } + + > .mw-widgets-stashedFileWidget-fileType { + display: block; + float: none; + } + } + } +} + + +.mw-widgets-stashedFileWidget-empty { + .mw-widgets-stashedFileWidget-thumbnail-container { + text-align: center; + + .mw-widgets-stashedFileWidget-thumbnail, + .mw-widgets-stashedFileWidget-info { + margin: 0; + display: none; + } + } + + .mw-widgets-stashedFileWidget-label { + color: #cccccc; + right: 0.5em; + } + + &.oo-ui-indicatorElement { + .mw-widgets-stashedFileWidget-label { + right: 2em; + } + } +} diff --git a/resources/src/mediawiki.widgets/mw.widgets.TitleWidget.js b/resources/src/mediawiki.widgets/mw.widgets.TitleWidget.js index b805e65516..3d9771116c 100644 --- a/resources/src/mediawiki.widgets/mw.widgets.TitleWidget.js +++ b/resources/src/mediawiki.widgets/mw.widgets.TitleWidget.js @@ -6,6 +6,16 @@ */ ( function ( $, mw ) { + var interwikiPrefixesPromise = new mw.Api().get( { + action: 'query', + meta: 'siteinfo', + siprop: 'interwikimap' + } ).then( function ( data ) { + return $.map( data.query.interwikimap, function ( interwiki ) { + return interwiki.prefix; + } ); + } ); + /** * Mixin for title widgets * @@ -28,8 +38,6 @@ * @cfg {Object} [cache] Result cache which implements a 'set' method, taking keyed values as an argument */ mw.widgets.TitleWidget = function MwWidgetsTitleWidget( config ) { - var widget = this; - // Config initialization config = $.extend( { maxLength: 255, @@ -51,16 +59,6 @@ // Initialization this.$element.addClass( 'mw-widget-titleWidget' ); - this.interwikiPrefixes = []; - this.interwikiPrefixesPromise = new mw.Api().get( { - action: 'query', - meta: 'siteinfo', - siprop: 'interwikimap' - } ).done( function ( data ) { - $.each( data.query.interwikimap, function ( index, interwiki ) { - widget.interwikiPrefixes.push( interwiki.prefix ); - } ); - } ); }; /* Setup */ @@ -108,12 +106,12 @@ } }; if ( mw.Title.newFromText( query ) ) { - return this.interwikiPrefixesPromise.then( function () { + return interwikiPrefixesPromise.then( function ( interwikiPrefixes ) { var params, interwiki = query.substring( 0, query.indexOf( ':' ) ); if ( interwiki && interwiki !== '' && - widget.interwikiPrefixes.indexOf( interwiki ) !== -1 + interwikiPrefixes.indexOf( interwiki ) !== -1 ) { return $.Deferred().resolve( { query: { pages: [ { diff --git a/resources/src/mediawiki/api.js b/resources/src/mediawiki/api.js index 10e0c56387..b4ff40ab0f 100644 --- a/resources/src/mediawiki/api.js +++ b/resources/src/mediawiki/api.js @@ -39,7 +39,12 @@ 'import', 'options' ]; - return $.inArray( action, csrfActions ) !== -1 ? 'csrf' : action; + if ( $.inArray( action, csrfActions ) !== -1 ) { + mw.track( 'mw.deprecate', 'apitoken_' + action ); + mw.log.warn( 'Use of the "' + action + '" token is deprecated. Use "csrf" instead.' ); + return 'csrf'; + } + return action; } // Pre-populate with fake ajax promises to save http requests for tokens @@ -47,7 +52,7 @@ promises[ defaultOptions.ajax.url ] = {}; $.each( mw.user.tokens.get(), function ( key, value ) { // This requires #getToken to use the same key as user.tokens. - // Format: token-type + "Token" (eg. editToken, patrolToken, watchToken). + // Format: token-type + "Token" (eg. csrfToken, patrolToken, watchToken). promises[ defaultOptions.ajax.url ][ key ] = $.Deferred() .resolve( value ) .promise( { abort: function () {} } ); @@ -239,11 +244,13 @@ .done( function ( result, textStatus, jqXHR ) { if ( result === undefined || result === null || result === '' ) { apiDeferred.reject( 'ok-but-empty', - 'OK response but empty result (check HTTP headers?)' + 'OK response but empty result (check HTTP headers?)', + result, + jqXHR ); } else if ( result.error ) { var code = result.error.code === undefined ? 'unknown' : result.error.code; - apiDeferred.reject( code, result ); + apiDeferred.reject( code, result, result, jqXHR ); } else { apiDeferred.resolve( result, jqXHR ); } @@ -267,7 +274,7 @@ * If we have a cached token try using that, and if it fails, blank out the * cached token and start over. For example to change an user option you could do: * - * new mw.Api().postWithToken( 'options', { + * new mw.Api().postWithToken( 'csrf', { * action: 'options', * optionname: 'gender', * optionvalue: 'female' diff --git a/resources/src/mediawiki/api/edit.js b/resources/src/mediawiki/api/edit.js index 22affb1dab..60276cd0bc 100644 --- a/resources/src/mediawiki/api/edit.js +++ b/resources/src/mediawiki/api/edit.js @@ -6,7 +6,7 @@ $.extend( mw.Api.prototype, { /** - * Post to API with edit token. If we have no token, get one and try to post. + * Post to API with csrf token. If we have no token, get one and try to post. * If we have a cached token try using that, and if it fails, blank out the * cached token and start over. * @@ -15,18 +15,18 @@ * @return {jQuery.Promise} See #post */ postWithEditToken: function ( params, ajaxOptions ) { - return this.postWithToken( 'edit', params, ajaxOptions ); + return this.postWithToken( 'csrf', params, ajaxOptions ); }, /** - * API helper to grab an edit token. + * API helper to grab a csrf token. * * @return {jQuery.Promise} * @return {Function} return.done * @return {string} return.done.token Received token. */ getEditToken: function () { - return this.getToken( 'edit' ); + return this.getToken( 'csrf' ); }, /** diff --git a/resources/src/mediawiki/api/options.js b/resources/src/mediawiki/api/options.js index bd6fa06808..0af2a754b7 100644 --- a/resources/src/mediawiki/api/options.js +++ b/resources/src/mediawiki/api/options.js @@ -54,7 +54,7 @@ } } else { if ( value !== null ) { - deferreds.push( this.postWithToken( 'options', { + deferreds.push( this.postWithToken( 'csrf', { formatversion: 2, action: 'options', optionname: name, @@ -62,7 +62,7 @@ } ) ); } else { // Omitting value resets the option - deferreds.push( this.postWithToken( 'options', { + deferreds.push( this.postWithToken( 'csrf', { formatversion: 2, action: 'options', optionname: name @@ -72,7 +72,7 @@ } if ( grouped.length ) { - deferreds.push( this.postWithToken( 'options', { + deferreds.push( this.postWithToken( 'csrf', { formatversion: 2, action: 'options', change: grouped diff --git a/resources/src/mediawiki/api/parse.js b/resources/src/mediawiki/api/parse.js index 02528dcfff..418fd2306f 100644 --- a/resources/src/mediawiki/api/parse.js +++ b/resources/src/mediawiki/api/parse.js @@ -22,12 +22,12 @@ contentmodel: 'wikitext' }, additionalParams ); - if ( typeof content === 'string' ) { - // Wikitext - config.text = content; - } else { - // mw.Title + if ( mw.Title && content instanceof mw.Title ) { + // Parse existing page config.page = content.getPrefixedDb(); + } else { + // Parse wikitext from input + config.text = String( content ); } apiPromise = this.get( config ); diff --git a/resources/src/mediawiki/api/upload.js b/resources/src/mediawiki/api/upload.js index 981a2e93c4..3c8b3f6571 100644 --- a/resources/src/mediawiki/api/upload.js +++ b/resources/src/mediawiki/api/upload.js @@ -204,7 +204,7 @@ deferred.reject( 'ok-but-empty', 'No response from API on upload attempt.' ); } else if ( result.error ) { if ( result.error.code === 'badtoken' ) { - api.badToken( 'edit' ); + api.badToken( 'csrf' ); } deferred.reject( result.error.code, result ); @@ -347,21 +347,7 @@ } function finishUpload( moreData ) { - data = $.extend( data, moreData ); - data.filekey = filekey; - data.action = 'upload'; - data.format = 'json'; - - if ( !data.filename ) { - throw new Error( 'Filename not included in file data.' ); - } - - return api.postWithEditToken( data ).then( function ( result ) { - if ( result.upload && result.upload.warnings ) { - return $.Deferred().reject( getFirstKey( result.upload.warnings ), result ).promise(); - } - return result; - } ); + api.uploadFromStash( filekey, $.extend( data, moreData ) ); } return this.upload( file, { stash: true, filename: data.filename } ).then( @@ -380,6 +366,29 @@ ); }, + /** + * Finish an upload in the stash. + * + * @param {string} filekey + * @param {Object} data + */ + uploadFromStash: function ( filekey, data ) { + data.filekey = filekey; + data.action = 'upload'; + data.format = 'json'; + + if ( !data.filename ) { + throw new Error( 'Filename not included in file data.' ); + } + + return this.postWithEditToken( data ).then( function ( result ) { + if ( result.upload && result.upload.warnings ) { + return $.Deferred().reject( getFirstKey( result.upload.warnings ), result ).promise(); + } + return result; + } ); + }, + needToken: function () { return true; } diff --git a/resources/src/mediawiki/mediawiki.Title.js b/resources/src/mediawiki/mediawiki.Title.js index c438d058ab..68595926a7 100644 --- a/resources/src/mediawiki/mediawiki.Title.js +++ b/resources/src/mediawiki/mediawiki.Title.js @@ -960,7 +960,7 @@ getUrl: function ( params ) { var fragment = this.getFragment(); if ( fragment ) { - return mw.util.getUrl( this.toString() + '#' + this.getFragment(), params ); + return mw.util.getUrl( this.toString() + '#' + fragment, params ); } else { return mw.util.getUrl( this.toString(), params ); } diff --git a/resources/src/mediawiki/mediawiki.Upload.BookletLayout.js b/resources/src/mediawiki/mediawiki.Upload.BookletLayout.js index 33b10bdd30..2b28cb4cf0 100644 --- a/resources/src/mediawiki/mediawiki.Upload.BookletLayout.js +++ b/resources/src/mediawiki/mediawiki.Upload.BookletLayout.js @@ -61,6 +61,7 @@ * @constructor * @param {Object} config Configuration options * @cfg {jQuery} [$overlay] Overlay to use for widgets in the booklet + * @cfg {string} [filekey] Sets the stashed file to finish uploading. Overrides most of the file selection process, and fetches a thumbnail from the server. */ mw.Upload.BookletLayout = function ( config ) { // Parent constructor @@ -68,6 +69,8 @@ this.$overlay = config.$overlay; + this.filekey = config.filekey; + this.renderUploadForm(); this.renderInfoForm(); this.renderInsertForm(); @@ -164,8 +167,13 @@ this.clear(); this.upload = this.createUpload(); + this.setPage( 'upload' ); + if ( this.filekey ) { + this.setFilekey( this.filekey ); + } + return this.upload.getApi().then( function ( api ) { // If the user can't upload anything, don't give them the option to. @@ -217,10 +225,23 @@ layout = this, file = this.getFile(); - this.setFilename( file.name ); - this.setPage( 'info' ); + if ( this.filekey ) { + if ( file === null ) { + // Someone gonna get-a hurt real bad + throw new Error( 'filekey not passed into file select widget, which is impossible. Quitting while we\'re behind.' ); + } + + // Stashed file already uploaded. + deferred.resolve(); + this.uploadPromise = deferred; + this.emit( 'fileUploaded' ); + return deferred; + } + + this.setFilename( file.name ); + this.upload.setFile( file ); // The original file name might contain invalid characters, so use our sanitized one this.upload.setFilename( this.getFilename() ); @@ -322,9 +343,13 @@ ); } - message = mw.message( 'api-error-' + error.code ); - if ( !message.exists() ) { - message = mw.message( 'api-error-unknownerror', JSON.stringify( stateDetails ) ); + if ( error.code === 'protectedpage' ) { + message = mw.message( 'protectedpagetext' ); + } else { + message = mw.message( 'api-error-' + error.code ); + if ( !message.exists() ) { + message = mw.message( 'api-error-unknownerror', JSON.stringify( stateDetails ) ); + } } return new OO.ui.Error( $( '

' ).append( message.parseDom() ), @@ -346,6 +371,11 @@ $( '

' ).msg( 'fileexists', 'File:' + warnings.exists ), { recoverable: false } ); + } else if ( warnings[ 'exists-normalized' ] !== undefined ) { + return new OO.ui.Error( + $( '

' ).msg( 'fileexists', 'File:' + warnings[ 'exists-normalized' ] ), + { recoverable: false } + ); } else if ( warnings[ 'page-exists' ] !== undefined ) { return new OO.ui.Error( $( '

' ).msg( 'filepageexists', 'File:' + warnings[ 'page-exists' ] ), @@ -371,6 +401,11 @@ $( '

' ).msg( 'api-error-duplicate-archive', 1 ), { recoverable: false } ); + } else if ( warnings[ 'was-deleted' ] !== undefined ) { + return new OO.ui.Error( + $( '

' ).msg( 'api-error-was-deleted' ), + { recoverable: false } + ); } else if ( warnings.badfilename !== undefined ) { // Change the name if the current name isn't acceptable // TODO This might not really be the best place to do this @@ -402,14 +437,12 @@ var fieldset, layout = this; - this.selectFileWidget = new OO.ui.SelectFileWidget( { - showDropTarget: true - } ); + this.selectFileWidget = this.getFileWidget(); fieldset = new OO.ui.FieldsetLayout(); fieldset.addItems( [ this.selectFileWidget ] ); this.uploadForm = new OO.ui.FormLayout( { items: [ fieldset ] } ); - // Validation + // Validation (if the SFW is for a stashed file, this never fires) this.selectFileWidget.on( 'change', this.onUploadFormChange.bind( this ) ); this.selectFileWidget.on( 'change', function () { @@ -419,6 +452,23 @@ return this.uploadForm; }; + /** + * Gets the widget for displaying or inputting the file to upload. + * + * @return {OO.ui.SelectFileWidget|mw.widgets.StashedFileWidget} + */ + mw.Upload.BookletLayout.prototype.getFileWidget = function () { + if ( this.filekey ) { + return new mw.widgets.StashedFileWidget( { + filekey: this.filekey + } ); + } + + return new OO.ui.SelectFileWidget( { + showDropTarget: true + } ); + }; + /** * Updates the file preview on the info form when a file is added. * @@ -626,6 +676,20 @@ this.selectFileWidget.setValue( file ); }; + /** + * Sets the filekey of a file already stashed on the server + * as the target of this upload operation. + * + * @protected + * @param {string} filekey + */ + mw.Upload.BookletLayout.prototype.setFilekey = function ( filekey ) { + this.upload.setFilekey( this.filekey ); + this.selectFileWidget.setValue( filekey ); + + this.onUploadFormChange(); + }; + /** * Clear the values of all fields * diff --git a/resources/src/mediawiki/mediawiki.Upload.js b/resources/src/mediawiki/mediawiki.Upload.js index 4a463b0010..23b0900e06 100644 --- a/resources/src/mediawiki/mediawiki.Upload.js +++ b/resources/src/mediawiki/mediawiki.Upload.js @@ -91,6 +91,20 @@ this.filename = filename; }; + /** + * Set the stashed file to finish uploading. + * + * @param {string} filekey + */ + UP.setFilekey = function ( filekey ) { + var upload = this; + + this.setState( Upload.State.STASHED ); + this.stashPromise = $.Deferred().resolve( function ( data ) { + return upload.api.uploadFromStash( filekey, data ); + } ); + }; + /** * Sets the filename based on the filename as it was on the upload. */ diff --git a/resources/src/mediawiki/mediawiki.js b/resources/src/mediawiki/mediawiki.js index 9d799db154..4aad2bac90 100644 --- a/resources/src/mediawiki/mediawiki.js +++ b/resources/src/mediawiki/mediawiki.js @@ -1189,11 +1189,18 @@ * @param {string} [moduleName] Name of currently executing module * @return {jQuery.Promise} */ - function queueModuleScript( src ) { + function queueModuleScript( src, moduleName ) { var r = $.Deferred(); pendingRequests.push( function () { + if ( moduleName && hasOwn.call( registry, moduleName ) ) { + window.require = mw.loader.require; + window.module = registry[ moduleName ].module; + } addScript( src ).always( function () { + // Clear environment + delete window.require; + delete window.module; r.resolve(); // Start the next one (if any) diff --git a/resources/src/mediawiki/mediawiki.requestIdleCallback.js b/resources/src/mediawiki/mediawiki.requestIdleCallback.js index 796639f9bf..dfc98add44 100644 --- a/resources/src/mediawiki/mediawiki.requestIdleCallback.js +++ b/resources/src/mediawiki/mediawiki.requestIdleCallback.js @@ -3,37 +3,19 @@ * * Loosely based on https://w3c.github.io/requestidlecallback/ */ -( function ( mw, $ ) { - var tasks = [], - maxIdleDuration = 50, - timeout = null; - - function schedule( trigger ) { - clearTimeout( timeout ); - timeout = setTimeout( trigger, 700 ); - } - - function triggerIdle() { - var elapsed, - start = mw.now(); - - while ( tasks.length ) { - elapsed = mw.now() - start; - if ( elapsed < maxIdleDuration ) { - tasks.shift().callback(); - } else { - // Idle moment expired, try again later - schedule( triggerIdle ); - break; - } - } - } +( function ( mw ) { + var maxBusy = 50; mw.requestIdleCallbackInternal = function ( callback ) { - var task = { callback: callback }; - tasks.push( task ); - - $( function () { schedule( triggerIdle ); } ); + setTimeout( function () { + var start = mw.now(); + callback( { + didTimeout: false, + timeRemaining: function () { + return Math.max( 0, maxBusy - ( mw.now() - start ) ); + } + } ); + }, 1 ); }; /** @@ -43,8 +25,7 @@ * @param {Function} callback */ mw.requestIdleCallback = window.requestIdleCallback - ? function ( callback ) { - window.requestIdleCallback( callback ); - } + // Bind because it throws TypeError if context is not window + ? window.requestIdleCallback.bind( window ) : mw.requestIdleCallbackInternal; -}( mediaWiki, jQuery ) ); +}( mediaWiki ) ); diff --git a/resources/src/mediawiki/mediawiki.searchSuggest.js b/resources/src/mediawiki/mediawiki.searchSuggest.js index 17a3b21eeb..2d603bf8d4 100644 --- a/resources/src/mediawiki/mediawiki.searchSuggest.js +++ b/resources/src/mediawiki/mediawiki.searchSuggest.js @@ -208,9 +208,6 @@ searchboxesSelectors = [ // Primary searchbox on every page in standard skins '#searchInput', - // Special:Search - '#powerSearchText', - '#searchText', // Generic selector for skins with multiple searchboxes (used by CologneBlue) // and for MediaWiki itself (special pages with page title inputs) '.mw-searchInput' diff --git a/resources/src/mediawiki/mediawiki.user.js b/resources/src/mediawiki/mediawiki.user.js index d2f2abd60a..0fdd9aaef2 100644 --- a/resources/src/mediawiki/mediawiki.user.js +++ b/resources/src/mediawiki/mediawiki.user.js @@ -241,10 +241,10 @@ * @return {jQuery.Promise} */ getGroups: function ( callback ) { - return getUserInfo().then( - function ( userInfo ) { return userInfo.groups; }, - function () { return []; } - ).done( callback ); + var userGroups = mw.config.get( 'wgUserGroups', [] ); + + // Uses promise for backwards compatibility + return $.Deferred().resolve( userGroups ).done( callback ); }, /** diff --git a/resources/src/mediawiki/mediawiki.util.js b/resources/src/mediawiki/mediawiki.util.js index cc983e4125..cccc468d30 100644 --- a/resources/src/mediawiki/mediawiki.util.js +++ b/resources/src/mediawiki/mediawiki.util.js @@ -101,36 +101,38 @@ /** * Get the link to a page name (relative to `wgServer`), * - * @param {string|null} [str=wgPageName] Page name + * @param {string|null} [pageName=wgPageName] Page name * @param {Object} [params] A mapping of query parameter names to values, * e.g. `{ action: 'edit' }` - * @return {string} Url of the page with name of `str` + * @return {string} Url of the page with name of `pageName` */ - getUrl: function ( str, params ) { - var titleFragmentStart, - url, + getUrl: function ( pageName, params ) { + var titleFragmentStart, url, query, fragment = '', - pageName = typeof str === 'string' ? str : mw.config.get( 'wgPageName' ); - - // Find any fragment should one exist - if ( typeof str === 'string' ) { - titleFragmentStart = pageName.indexOf( '#' ); - if ( titleFragmentStart !== -1 ) { - fragment = pageName.slice( titleFragmentStart + 1 ); - // Exclude the fragment from the page name - pageName = pageName.slice( 0, titleFragmentStart ); - } + title = typeof pageName === 'string' ? pageName : mw.config.get( 'wgPageName' ); + + // Find any fragment + titleFragmentStart = title.indexOf( '#' ); + if ( titleFragmentStart !== -1 ) { + fragment = title.slice( titleFragmentStart + 1 ); + // Exclude the fragment from the page name + title = title.slice( 0, titleFragmentStart ); } - url = mw.config.get( 'wgArticlePath' ).replace( '$1', util.wikiUrlencode( pageName ) ); - - // Add query string if necessary - if ( params && !$.isEmptyObject( params ) ) { - url += ( url.indexOf( '?' ) !== -1 ? '&' : '?' ) + $.param( params ); + // Produce query string + if ( params ) { + query = $.param( params ); + } + if ( query ) { + url = title + ? util.wikiScript() + '?title=' + util.wikiUrlencode( title ) + '&' + query + : util.wikiScript() + '?' + query; + } else { + url = mw.config.get( 'wgArticlePath' ).replace( '$1', util.wikiUrlencode( title ) ); } // Append the encoded fragment - if ( fragment.length > 0 ) { + if ( fragment.length ) { url += '#' + util.escapeId( fragment ); } diff --git a/resources/src/mediawiki/page/image-pagination.js b/resources/src/mediawiki/page/image-pagination.js index a097b1796f..02bc1de949 100644 --- a/resources/src/mediawiki/page/image-pagination.js +++ b/resources/src/mediawiki/page/image-pagination.js @@ -99,16 +99,14 @@ function bindPageNavigation( $container ) { $container.find( '.multipageimagenavbox' ).one( 'click', 'a', function ( e ) { - var page, uri; + var page, url; // Generate the same URL on client side as the one generated in ImagePage::openShowImage. // We avoid using the URL in the link directly since it could have been manipulated (bug 66608) page = Number( mw.util.getParamValue( 'page', this.href ) ); - uri = new mw.Uri( mw.util.wikiScript() ) - .extend( { title: mw.config.get( 'wgPageName' ), page: page } ) - .toString(); + url = mw.util.getUrl( mw.config.get( 'wgPageName' ), { page: page } ); - switchPage( uri ); + switchPage( url ); e.preventDefault(); } ); diff --git a/resources/src/mediawiki/page/ready.js b/resources/src/mediawiki/page/ready.js index 9b3458bdfc..2ad79eb88a 100644 --- a/resources/src/mediawiki/page/ready.js +++ b/resources/src/mediawiki/page/ready.js @@ -63,7 +63,11 @@ $oouiNodes = $( '[data-ooui]' ); if ( $oouiNodes.length ) { // FIXME: We should only load the widgets that are being infused - mw.loader.using( [ 'mediawiki.widgets', 'mediawiki.widgets.UserInputWidget' ] ).done( function () { + mw.loader.using( [ + 'mediawiki.widgets', + 'mediawiki.widgets.UserInputWidget', + 'mediawiki.widgets.SearchInputWidget' + ] ).done( function () { $oouiNodes.each( function () { OO.ui.infuse( this ); } ); diff --git a/resources/src/mediawiki/page/watch.js b/resources/src/mediawiki/page/watch.js index 578c846cc5..a57d5c77b8 100644 --- a/resources/src/mediawiki/page/watch.js +++ b/resources/src/mediawiki/page/watch.js @@ -46,11 +46,7 @@ .text( mw.msg( msgKey ) ) .attr( 'title', mw.msg( 'tooltip-ca-' + action ) ) .updateTooltipAccessKeys() - .attr( 'href', mw.util.wikiScript() + '?' + $.param( { - title: title, - action: action - } ) - ); + .attr( 'href', mw.util.getUrl( title, { action: action } ) ); // Most common ID style if ( $li.prop( 'id' ) === 'ca-' + otherAction ) { diff --git a/resources/src/moment-global.js b/resources/src/moment-global.js new file mode 100644 index 0000000000..ba01a240f6 --- /dev/null +++ b/resources/src/moment-global.js @@ -0,0 +1,2 @@ +// Back-compat: Export module as global +window.moment = module.exports; diff --git a/resources/src/oojs-global.js b/resources/src/oojs-global.js new file mode 100644 index 0000000000..de156f0bb1 --- /dev/null +++ b/resources/src/oojs-global.js @@ -0,0 +1,2 @@ +// Back-compat: Export module as global +window.OO = module.exports; diff --git a/resources/src/startup.js b/resources/src/startup.js index e53e5f3d29..312e745698 100644 --- a/resources/src/startup.js +++ b/resources/src/startup.js @@ -1,7 +1,7 @@ /** - * This script provides a function which is run to evaluate whether or not to - * continue loading jQuery and the MediaWiki modules. This code should work on - * even the most ancient of browsers, so be very careful when editing. + * Code in this file MUST work on even the most ancient of browsers! + * + * This file is where we decide whether to initialise the modern run-time. */ /*jshint unused: false, evil: true */ /*globals mw, RLQ: true, NORLQ: true, $VARS, $CODE, performance */ @@ -15,53 +15,60 @@ var mediaWikiLoadStart = ( new Date() ).getTime(), mwPerformance.mark( 'mwLoadStart' ); /** - * Returns false for Grade C supported browsers. + * See + * + * Capabilities required for modern run-time: + * - DOM Level 4 & Selectors API Level 1 + * - HTML5 & Web Storage + * - DOM Level 2 Events + * + * Browsers we support in our modern run-time (Grade A): + * - Chrome + * - IE 9+ + * - Firefox 3.5+ + * - Safari 4+ + * - Opera 10.5+ + * - Mobile Safari (iOS 1+) + * - Android 2.0+ * - * This function should only be used by the Startup module, do not expand it to - * be generally useful beyond startup. + * Browsers we support in our no-javascript run-time (Grade C): + * - IE 6+ + * - Firefox 3+ + * - Safari 3+ + * - Opera 10+ + * - WebOS < 1.5 + * - PlayStation + * - Symbian-based browsers + * - NetFront-based browser + * - Opera Mini + * - Nokia's Ovi Browser + * - MeeGo's browser + * - Google Glass * - * See also: - * - https://www.mediawiki.org/wiki/Compatibility#Browsers - * - https://jquery.com/browser-support/ + * Other browsers that pass the check are considered Grade X. */ -function isCompatible( ua ) { - if ( ua === undefined ) { - ua = navigator.userAgent; - } +function isCompatible( str ) { + var ua = str || navigator.userAgent; + return !!( + // http://caniuse.com/#feat=queryselector + 'querySelector' in document + + // http://caniuse.com/#feat=namevalue-storage + // https://developer.blackberry.com/html5/apis/v1_0/localstorage.html + // https://blog.whatwg.org/this-week-in-html-5-episode-30 + && 'localStorage' in window + + // http://caniuse.com/#feat=addeventlistener + && 'addEventListener' in window - // Browsers with outdated or limited JavaScript engines get the no-JS experience - return !( - // Internet Explorer < 9 - ( ua.indexOf( 'MSIE' ) !== -1 && parseFloat( ua.split( 'MSIE' )[ 1 ] ) < 9 ) || - // Firefox < 3 - ( ua.indexOf( 'Firefox/' ) !== -1 && parseFloat( ua.split( 'Firefox/' )[ 1 ] ) < 3 ) || - // Opera < 12 - ( ua.indexOf( 'Opera/' ) !== -1 && ( ua.indexOf( 'Version/' ) === -1 ? - // "Opera/x.y" - parseFloat( ua.split( 'Opera/' )[ 1 ] ) < 10 : - // "Opera/9.80 ... Version/x.y" - parseFloat( ua.split( 'Version/' )[ 1 ] ) < 12 - ) ) || - // "Mozilla/0.0 ... Opera x.y" - ( ua.indexOf( 'Opera ' ) !== -1 && parseFloat( ua.split( ' Opera ' )[ 1 ] ) < 10 ) || - // BlackBerry < 6 - ua.match( /BlackBerry[^\/]*\/[1-5]\./ ) || - // Open WebOS < 1.5 - ua.match( /webOS\/1\.[0-4]/ ) || - // Anything PlayStation based. - ua.match( /PlayStation/i ) || - // Any Symbian based browsers - ua.match( /SymbianOS|Series60/ ) || - // Any NetFront based browser - ua.match( /NetFront/ ) || - // Opera Mini, all versions - ua.match( /Opera Mini/ ) || - // Nokia's Ovi Browser - ua.match( /S40OviBrowser/ ) || - // MeeGo's browser - ua.match( /MeeGo/ ) || - // Google Glass browser groks JS but UI is too limited - ( ua.match( /Glass/ ) && ua.match( /Android/ ) ) + // Hardcoded exceptions for browsers that pass the requirement but we don't want to + // support in the modern run-time. + && !( + ua.match( /webOS\/1\.[0-4]/ ) || + ua.match( /PlayStation/i ) || + ua.match( /SymbianOS|Series60|NetFront|Opera Mini|S40OviBrowser|MeeGo/ ) || + ( ua.match( /Glass/ ) && ua.match( /Android/ ) ) + ) ); } diff --git a/serialized/Makefile b/serialized/Makefile index c7e75063c6..45aed8802a 100644 --- a/serialized/Makefile +++ b/serialized/Makefile @@ -1,4 +1,4 @@ -SPECIAL_TARGETS=Utf8Case.ser normalize-ar.ser normalize-ml.ser first-letters-root.ser +SPECIAL_TARGETS=normalize-ar.ser normalize-ml.ser first-letters-root.ser ALL_TARGETS=$(SPECIAL_TARGETS) DIST_TARGETS=$(SPECIAL_TARGETS) UNICODE_VERSION=6.0.0 @@ -13,9 +13,6 @@ dist: $(DIST_TARGETS) clean: rm -f $(ALL_TARGETS) -Utf8Case.ser: UnicodeData.txt - php ../maintenance/language/generateUtf8Case.php - normalize-ar.ser: UnicodeData.txt php ../maintenance/language/generateNormalizerDataAr.php diff --git a/serialized/Utf8Case.ser b/serialized/Utf8Case.ser deleted file mode 100644 index 414500bde7..0000000000 --- a/serialized/Utf8Case.ser +++ /dev/null @@ -1 +0,0 @@ -a:2:{s:14:"wikiUpperChars";a:1046:{s:1:"a";s:1:"A";s:1:"b";s:1:"B";s:1:"c";s:1:"C";s:1:"d";s:1:"D";s:1:"e";s:1:"E";s:1:"f";s:1:"F";s:1:"g";s:1:"G";s:1:"h";s:1:"H";s:1:"i";s:1:"I";s:1:"j";s:1:"J";s:1:"k";s:1:"K";s:1:"l";s:1:"L";s:1:"m";s:1:"M";s:1:"n";s:1:"N";s:1:"o";s:1:"O";s:1:"p";s:1:"P";s:1:"q";s:1:"Q";s:1:"r";s:1:"R";s:1:"s";s:1:"S";s:1:"t";s:1:"T";s:1:"u";s:1:"U";s:1:"v";s:1:"V";s:1:"w";s:1:"W";s:1:"x";s:1:"X";s:1:"y";s:1:"Y";s:1:"z";s:1:"Z";s:2:"µ";s:2:"Μ";s:2:"à";s:2:"À";s:2:"á";s:2:"Á";s:2:"â";s:2:"Â";s:2:"ã";s:2:"Ã";s:2:"ä";s:2:"Ä";s:2:"å";s:2:"Å";s:2:"æ";s:2:"Æ";s:2:"ç";s:2:"Ç";s:2:"è";s:2:"È";s:2:"é";s:2:"É";s:2:"ê";s:2:"Ê";s:2:"ë";s:2:"Ë";s:2:"ì";s:2:"Ì";s:2:"í";s:2:"Í";s:2:"î";s:2:"Î";s:2:"ï";s:2:"Ï";s:2:"ð";s:2:"Ð";s:2:"ñ";s:2:"Ñ";s:2:"ò";s:2:"Ò";s:2:"ó";s:2:"Ó";s:2:"ô";s:2:"Ô";s:2:"õ";s:2:"Õ";s:2:"ö";s:2:"Ö";s:2:"ø";s:2:"Ø";s:2:"ù";s:2:"Ù";s:2:"ú";s:2:"Ú";s:2:"û";s:2:"Û";s:2:"ü";s:2:"Ü";s:2:"ý";s:2:"Ý";s:2:"þ";s:2:"Þ";s:2:"ÿ";s:2:"Ÿ";s:2:"ā";s:2:"Ā";s:2:"ă";s:2:"Ă";s:2:"ą";s:2:"Ą";s:2:"ć";s:2:"Ć";s:2:"ĉ";s:2:"Ĉ";s:2:"ċ";s:2:"Ċ";s:2:"č";s:2:"Č";s:2:"ď";s:2:"Ď";s:2:"đ";s:2:"Đ";s:2:"ē";s:2:"Ē";s:2:"ĕ";s:2:"Ĕ";s:2:"ė";s:2:"Ė";s:2:"ę";s:2:"Ę";s:2:"ě";s:2:"Ě";s:2:"ĝ";s:2:"Ĝ";s:2:"ğ";s:2:"Ğ";s:2:"ġ";s:2:"Ġ";s:2:"ģ";s:2:"Ģ";s:2:"ĥ";s:2:"Ĥ";s:2:"ħ";s:2:"Ħ";s:2:"ĩ";s:2:"Ĩ";s:2:"ī";s:2:"Ī";s:2:"ĭ";s:2:"Ĭ";s:2:"į";s:2:"Į";s:2:"ı";s:1:"I";s:2:"ij";s:2:"IJ";s:2:"ĵ";s:2:"Ĵ";s:2:"ķ";s:2:"Ķ";s:2:"ĺ";s:2:"Ĺ";s:2:"ļ";s:2:"Ļ";s:2:"ľ";s:2:"Ľ";s:2:"ŀ";s:2:"Ŀ";s:2:"ł";s:2:"Ł";s:2:"ń";s:2:"Ń";s:2:"ņ";s:2:"Ņ";s:2:"ň";s:2:"Ň";s:2:"ŋ";s:2:"Ŋ";s:2:"ō";s:2:"Ō";s:2:"ŏ";s:2:"Ŏ";s:2:"ő";s:2:"Ő";s:2:"œ";s:2:"Œ";s:2:"ŕ";s:2:"Ŕ";s:2:"ŗ";s:2:"Ŗ";s:2:"ř";s:2:"Ř";s:2:"ś";s:2:"Ś";s:2:"ŝ";s:2:"Ŝ";s:2:"ş";s:2:"Ş";s:2:"š";s:2:"Š";s:2:"ţ";s:2:"Ţ";s:2:"ť";s:2:"Ť";s:2:"ŧ";s:2:"Ŧ";s:2:"ũ";s:2:"Ũ";s:2:"ū";s:2:"Ū";s:2:"ŭ";s:2:"Ŭ";s:2:"ů";s:2:"Ů";s:2:"ű";s:2:"Ű";s:2:"ų";s:2:"Ų";s:2:"ŵ";s:2:"Ŵ";s:2:"ŷ";s:2:"Ŷ";s:2:"ź";s:2:"Ź";s:2:"ż";s:2:"Ż";s:2:"ž";s:2:"Ž";s:2:"ſ";s:1:"S";s:2:"ƀ";s:2:"Ƀ";s:2:"ƃ";s:2:"Ƃ";s:2:"ƅ";s:2:"Ƅ";s:2:"ƈ";s:2:"Ƈ";s:2:"ƌ";s:2:"Ƌ";s:2:"ƒ";s:2:"Ƒ";s:2:"ƕ";s:2:"Ƕ";s:2:"ƙ";s:2:"Ƙ";s:2:"ƚ";s:2:"Ƚ";s:2:"ƞ";s:2:"Ƞ";s:2:"ơ";s:2:"Ơ";s:2:"ƣ";s:2:"Ƣ";s:2:"ƥ";s:2:"Ƥ";s:2:"ƨ";s:2:"Ƨ";s:2:"ƭ";s:2:"Ƭ";s:2:"ư";s:2:"Ư";s:2:"ƴ";s:2:"Ƴ";s:2:"ƶ";s:2:"Ƶ";s:2:"ƹ";s:2:"Ƹ";s:2:"ƽ";s:2:"Ƽ";s:2:"ƿ";s:2:"Ƿ";s:2:"Dž";s:2:"DŽ";s:2:"dž";s:2:"DŽ";s:2:"Lj";s:2:"LJ";s:2:"lj";s:2:"LJ";s:2:"Nj";s:2:"NJ";s:2:"nj";s:2:"NJ";s:2:"ǎ";s:2:"Ǎ";s:2:"ǐ";s:2:"Ǐ";s:2:"ǒ";s:2:"Ǒ";s:2:"ǔ";s:2:"Ǔ";s:2:"ǖ";s:2:"Ǖ";s:2:"ǘ";s:2:"Ǘ";s:2:"ǚ";s:2:"Ǚ";s:2:"ǜ";s:2:"Ǜ";s:2:"ǝ";s:2:"Ǝ";s:2:"ǟ";s:2:"Ǟ";s:2:"ǡ";s:2:"Ǡ";s:2:"ǣ";s:2:"Ǣ";s:2:"ǥ";s:2:"Ǥ";s:2:"ǧ";s:2:"Ǧ";s:2:"ǩ";s:2:"Ǩ";s:2:"ǫ";s:2:"Ǫ";s:2:"ǭ";s:2:"Ǭ";s:2:"ǯ";s:2:"Ǯ";s:2:"Dz";s:2:"DZ";s:2:"dz";s:2:"DZ";s:2:"ǵ";s:2:"Ǵ";s:2:"ǹ";s:2:"Ǹ";s:2:"ǻ";s:2:"Ǻ";s:2:"ǽ";s:2:"Ǽ";s:2:"ǿ";s:2:"Ǿ";s:2:"ȁ";s:2:"Ȁ";s:2:"ȃ";s:2:"Ȃ";s:2:"ȅ";s:2:"Ȅ";s:2:"ȇ";s:2:"Ȇ";s:2:"ȉ";s:2:"Ȉ";s:2:"ȋ";s:2:"Ȋ";s:2:"ȍ";s:2:"Ȍ";s:2:"ȏ";s:2:"Ȏ";s:2:"ȑ";s:2:"Ȑ";s:2:"ȓ";s:2:"Ȓ";s:2:"ȕ";s:2:"Ȕ";s:2:"ȗ";s:2:"Ȗ";s:2:"ș";s:2:"Ș";s:2:"ț";s:2:"Ț";s:2:"ȝ";s:2:"Ȝ";s:2:"ȟ";s:2:"Ȟ";s:2:"ȣ";s:2:"Ȣ";s:2:"ȥ";s:2:"Ȥ";s:2:"ȧ";s:2:"Ȧ";s:2:"ȩ";s:2:"Ȩ";s:2:"ȫ";s:2:"Ȫ";s:2:"ȭ";s:2:"Ȭ";s:2:"ȯ";s:2:"Ȯ";s:2:"ȱ";s:2:"Ȱ";s:2:"ȳ";s:2:"Ȳ";s:2:"ȼ";s:2:"Ȼ";s:2:"ȿ";s:3:"Ȿ";s:2:"ɀ";s:3:"Ɀ";s:2:"ɂ";s:2:"Ɂ";s:2:"ɇ";s:2:"Ɇ";s:2:"ɉ";s:2:"Ɉ";s:2:"ɋ";s:2:"Ɋ";s:2:"ɍ";s:2:"Ɍ";s:2:"ɏ";s:2:"Ɏ";s:2:"ɐ";s:3:"Ɐ";s:2:"ɑ";s:3:"Ɑ";s:2:"ɒ";s:3:"Ɒ";s:2:"ɓ";s:2:"Ɓ";s:2:"ɔ";s:2:"Ɔ";s:2:"ɖ";s:2:"Ɖ";s:2:"ɗ";s:2:"Ɗ";s:2:"ə";s:2:"Ə";s:2:"ɛ";s:2:"Ɛ";s:2:"ɠ";s:2:"Ɠ";s:2:"ɣ";s:2:"Ɣ";s:2:"ɥ";s:3:"Ɥ";s:2:"ɨ";s:2:"Ɨ";s:2:"ɩ";s:2:"Ɩ";s:2:"ɫ";s:3:"Ɫ";s:2:"ɯ";s:2:"Ɯ";s:2:"ɱ";s:3:"Ɱ";s:2:"ɲ";s:2:"Ɲ";s:2:"ɵ";s:2:"Ɵ";s:2:"ɽ";s:3:"Ɽ";s:2:"ʀ";s:2:"Ʀ";s:2:"ʃ";s:2:"Ʃ";s:2:"ʈ";s:2:"Ʈ";s:2:"ʉ";s:2:"Ʉ";s:2:"ʊ";s:2:"Ʊ";s:2:"ʋ";s:2:"Ʋ";s:2:"ʌ";s:2:"Ʌ";s:2:"ʒ";s:2:"Ʒ";s:2:"ͅ";s:2:"Ι";s:2:"ͱ";s:2:"Ͱ";s:2:"ͳ";s:2:"Ͳ";s:2:"ͷ";s:2:"Ͷ";s:2:"ͻ";s:2:"Ͻ";s:2:"ͼ";s:2:"Ͼ";s:2:"ͽ";s:2:"Ͽ";s:2:"ά";s:2:"Ά";s:2:"έ";s:2:"Έ";s:2:"ή";s:2:"Ή";s:2:"ί";s:2:"Ί";s:2:"α";s:2:"Α";s:2:"β";s:2:"Β";s:2:"γ";s:2:"Γ";s:2:"δ";s:2:"Δ";s:2:"ε";s:2:"Ε";s:2:"ζ";s:2:"Ζ";s:2:"η";s:2:"Η";s:2:"θ";s:2:"Θ";s:2:"ι";s:2:"Ι";s:2:"κ";s:2:"Κ";s:2:"λ";s:2:"Λ";s:2:"μ";s:2:"Μ";s:2:"ν";s:2:"Ν";s:2:"ξ";s:2:"Ξ";s:2:"ο";s:2:"Ο";s:2:"π";s:2:"Π";s:2:"ρ";s:2:"Ρ";s:2:"ς";s:2:"Σ";s:2:"σ";s:2:"Σ";s:2:"τ";s:2:"Τ";s:2:"υ";s:2:"Υ";s:2:"φ";s:2:"Φ";s:2:"χ";s:2:"Χ";s:2:"ψ";s:2:"Ψ";s:2:"ω";s:2:"Ω";s:2:"ϊ";s:2:"Ϊ";s:2:"ϋ";s:2:"Ϋ";s:2:"ό";s:2:"Ό";s:2:"ύ";s:2:"Ύ";s:2:"ώ";s:2:"Ώ";s:2:"ϐ";s:2:"Β";s:2:"ϑ";s:2:"Θ";s:2:"ϕ";s:2:"Φ";s:2:"ϖ";s:2:"Π";s:2:"ϗ";s:2:"Ϗ";s:2:"ϙ";s:2:"Ϙ";s:2:"ϛ";s:2:"Ϛ";s:2:"ϝ";s:2:"Ϝ";s:2:"ϟ";s:2:"Ϟ";s:2:"ϡ";s:2:"Ϡ";s:2:"ϣ";s:2:"Ϣ";s:2:"ϥ";s:2:"Ϥ";s:2:"ϧ";s:2:"Ϧ";s:2:"ϩ";s:2:"Ϩ";s:2:"ϫ";s:2:"Ϫ";s:2:"ϭ";s:2:"Ϭ";s:2:"ϯ";s:2:"Ϯ";s:2:"ϰ";s:2:"Κ";s:2:"ϱ";s:2:"Ρ";s:2:"ϲ";s:2:"Ϲ";s:2:"ϵ";s:2:"Ε";s:2:"ϸ";s:2:"Ϸ";s:2:"ϻ";s:2:"Ϻ";s:2:"а";s:2:"А";s:2:"б";s:2:"Б";s:2:"в";s:2:"В";s:2:"г";s:2:"Г";s:2:"д";s:2:"Д";s:2:"е";s:2:"Е";s:2:"ж";s:2:"Ж";s:2:"з";s:2:"З";s:2:"и";s:2:"И";s:2:"й";s:2:"Й";s:2:"к";s:2:"К";s:2:"л";s:2:"Л";s:2:"м";s:2:"М";s:2:"н";s:2:"Н";s:2:"о";s:2:"О";s:2:"п";s:2:"П";s:2:"р";s:2:"Р";s:2:"с";s:2:"С";s:2:"т";s:2:"Т";s:2:"у";s:2:"У";s:2:"ф";s:2:"Ф";s:2:"х";s:2:"Х";s:2:"ц";s:2:"Ц";s:2:"ч";s:2:"Ч";s:2:"ш";s:2:"Ш";s:2:"щ";s:2:"Щ";s:2:"ъ";s:2:"Ъ";s:2:"ы";s:2:"Ы";s:2:"ь";s:2:"Ь";s:2:"э";s:2:"Э";s:2:"ю";s:2:"Ю";s:2:"я";s:2:"Я";s:2:"ѐ";s:2:"Ѐ";s:2:"ё";s:2:"Ё";s:2:"ђ";s:2:"Ђ";s:2:"ѓ";s:2:"Ѓ";s:2:"є";s:2:"Є";s:2:"ѕ";s:2:"Ѕ";s:2:"і";s:2:"І";s:2:"ї";s:2:"Ї";s:2:"ј";s:2:"Ј";s:2:"љ";s:2:"Љ";s:2:"њ";s:2:"Њ";s:2:"ћ";s:2:"Ћ";s:2:"ќ";s:2:"Ќ";s:2:"ѝ";s:2:"Ѝ";s:2:"ў";s:2:"Ў";s:2:"џ";s:2:"Џ";s:2:"ѡ";s:2:"Ѡ";s:2:"ѣ";s:2:"Ѣ";s:2:"ѥ";s:2:"Ѥ";s:2:"ѧ";s:2:"Ѧ";s:2:"ѩ";s:2:"Ѩ";s:2:"ѫ";s:2:"Ѫ";s:2:"ѭ";s:2:"Ѭ";s:2:"ѯ";s:2:"Ѯ";s:2:"ѱ";s:2:"Ѱ";s:2:"ѳ";s:2:"Ѳ";s:2:"ѵ";s:2:"Ѵ";s:2:"ѷ";s:2:"Ѷ";s:2:"ѹ";s:2:"Ѹ";s:2:"ѻ";s:2:"Ѻ";s:2:"ѽ";s:2:"Ѽ";s:2:"ѿ";s:2:"Ѿ";s:2:"ҁ";s:2:"Ҁ";s:2:"ҋ";s:2:"Ҋ";s:2:"ҍ";s:2:"Ҍ";s:2:"ҏ";s:2:"Ҏ";s:2:"ґ";s:2:"Ґ";s:2:"ғ";s:2:"Ғ";s:2:"ҕ";s:2:"Ҕ";s:2:"җ";s:2:"Җ";s:2:"ҙ";s:2:"Ҙ";s:2:"қ";s:2:"Қ";s:2:"ҝ";s:2:"Ҝ";s:2:"ҟ";s:2:"Ҟ";s:2:"ҡ";s:2:"Ҡ";s:2:"ң";s:2:"Ң";s:2:"ҥ";s:2:"Ҥ";s:2:"ҧ";s:2:"Ҧ";s:2:"ҩ";s:2:"Ҩ";s:2:"ҫ";s:2:"Ҫ";s:2:"ҭ";s:2:"Ҭ";s:2:"ү";s:2:"Ү";s:2:"ұ";s:2:"Ұ";s:2:"ҳ";s:2:"Ҳ";s:2:"ҵ";s:2:"Ҵ";s:2:"ҷ";s:2:"Ҷ";s:2:"ҹ";s:2:"Ҹ";s:2:"һ";s:2:"Һ";s:2:"ҽ";s:2:"Ҽ";s:2:"ҿ";s:2:"Ҿ";s:2:"ӂ";s:2:"Ӂ";s:2:"ӄ";s:2:"Ӄ";s:2:"ӆ";s:2:"Ӆ";s:2:"ӈ";s:2:"Ӈ";s:2:"ӊ";s:2:"Ӊ";s:2:"ӌ";s:2:"Ӌ";s:2:"ӎ";s:2:"Ӎ";s:2:"ӏ";s:2:"Ӏ";s:2:"ӑ";s:2:"Ӑ";s:2:"ӓ";s:2:"Ӓ";s:2:"ӕ";s:2:"Ӕ";s:2:"ӗ";s:2:"Ӗ";s:2:"ә";s:2:"Ә";s:2:"ӛ";s:2:"Ӛ";s:2:"ӝ";s:2:"Ӝ";s:2:"ӟ";s:2:"Ӟ";s:2:"ӡ";s:2:"Ӡ";s:2:"ӣ";s:2:"Ӣ";s:2:"ӥ";s:2:"Ӥ";s:2:"ӧ";s:2:"Ӧ";s:2:"ө";s:2:"Ө";s:2:"ӫ";s:2:"Ӫ";s:2:"ӭ";s:2:"Ӭ";s:2:"ӯ";s:2:"Ӯ";s:2:"ӱ";s:2:"Ӱ";s:2:"ӳ";s:2:"Ӳ";s:2:"ӵ";s:2:"Ӵ";s:2:"ӷ";s:2:"Ӷ";s:2:"ӹ";s:2:"Ӹ";s:2:"ӻ";s:2:"Ӻ";s:2:"ӽ";s:2:"Ӽ";s:2:"ӿ";s:2:"Ӿ";s:2:"ԁ";s:2:"Ԁ";s:2:"ԃ";s:2:"Ԃ";s:2:"ԅ";s:2:"Ԅ";s:2:"ԇ";s:2:"Ԇ";s:2:"ԉ";s:2:"Ԉ";s:2:"ԋ";s:2:"Ԋ";s:2:"ԍ";s:2:"Ԍ";s:2:"ԏ";s:2:"Ԏ";s:2:"ԑ";s:2:"Ԑ";s:2:"ԓ";s:2:"Ԓ";s:2:"ԕ";s:2:"Ԕ";s:2:"ԗ";s:2:"Ԗ";s:2:"ԙ";s:2:"Ԙ";s:2:"ԛ";s:2:"Ԛ";s:2:"ԝ";s:2:"Ԝ";s:2:"ԟ";s:2:"Ԟ";s:2:"ԡ";s:2:"Ԡ";s:2:"ԣ";s:2:"Ԣ";s:2:"ԥ";s:2:"Ԥ";s:2:"ԧ";s:2:"Ԧ";s:2:"ա";s:2:"Ա";s:2:"բ";s:2:"Բ";s:2:"գ";s:2:"Գ";s:2:"դ";s:2:"Դ";s:2:"ե";s:2:"Ե";s:2:"զ";s:2:"Զ";s:2:"է";s:2:"Է";s:2:"ը";s:2:"Ը";s:2:"թ";s:2:"Թ";s:2:"ժ";s:2:"Ժ";s:2:"ի";s:2:"Ի";s:2:"լ";s:2:"Լ";s:2:"խ";s:2:"Խ";s:2:"ծ";s:2:"Ծ";s:2:"կ";s:2:"Կ";s:2:"հ";s:2:"Հ";s:2:"ձ";s:2:"Ձ";s:2:"ղ";s:2:"Ղ";s:2:"ճ";s:2:"Ճ";s:2:"մ";s:2:"Մ";s:2:"յ";s:2:"Յ";s:2:"ն";s:2:"Ն";s:2:"շ";s:2:"Շ";s:2:"ո";s:2:"Ո";s:2:"չ";s:2:"Չ";s:2:"պ";s:2:"Պ";s:2:"ջ";s:2:"Ջ";s:2:"ռ";s:2:"Ռ";s:2:"ս";s:2:"Ս";s:2:"վ";s:2:"Վ";s:2:"տ";s:2:"Տ";s:2:"ր";s:2:"Ր";s:2:"ց";s:2:"Ց";s:2:"ւ";s:2:"Ւ";s:2:"փ";s:2:"Փ";s:2:"ք";s:2:"Ք";s:2:"օ";s:2:"Օ";s:2:"ֆ";s:2:"Ֆ";s:3:"ᵹ";s:3:"Ᵹ";s:3:"ᵽ";s:3:"Ᵽ";s:3:"ḁ";s:3:"Ḁ";s:3:"ḃ";s:3:"Ḃ";s:3:"ḅ";s:3:"Ḅ";s:3:"ḇ";s:3:"Ḇ";s:3:"ḉ";s:3:"Ḉ";s:3:"ḋ";s:3:"Ḋ";s:3:"ḍ";s:3:"Ḍ";s:3:"ḏ";s:3:"Ḏ";s:3:"ḑ";s:3:"Ḑ";s:3:"ḓ";s:3:"Ḓ";s:3:"ḕ";s:3:"Ḕ";s:3:"ḗ";s:3:"Ḗ";s:3:"ḙ";s:3:"Ḙ";s:3:"ḛ";s:3:"Ḛ";s:3:"ḝ";s:3:"Ḝ";s:3:"ḟ";s:3:"Ḟ";s:3:"ḡ";s:3:"Ḡ";s:3:"ḣ";s:3:"Ḣ";s:3:"ḥ";s:3:"Ḥ";s:3:"ḧ";s:3:"Ḧ";s:3:"ḩ";s:3:"Ḩ";s:3:"ḫ";s:3:"Ḫ";s:3:"ḭ";s:3:"Ḭ";s:3:"ḯ";s:3:"Ḯ";s:3:"ḱ";s:3:"Ḱ";s:3:"ḳ";s:3:"Ḳ";s:3:"ḵ";s:3:"Ḵ";s:3:"ḷ";s:3:"Ḷ";s:3:"ḹ";s:3:"Ḹ";s:3:"ḻ";s:3:"Ḻ";s:3:"ḽ";s:3:"Ḽ";s:3:"ḿ";s:3:"Ḿ";s:3:"ṁ";s:3:"Ṁ";s:3:"ṃ";s:3:"Ṃ";s:3:"ṅ";s:3:"Ṅ";s:3:"ṇ";s:3:"Ṇ";s:3:"ṉ";s:3:"Ṉ";s:3:"ṋ";s:3:"Ṋ";s:3:"ṍ";s:3:"Ṍ";s:3:"ṏ";s:3:"Ṏ";s:3:"ṑ";s:3:"Ṑ";s:3:"ṓ";s:3:"Ṓ";s:3:"ṕ";s:3:"Ṕ";s:3:"ṗ";s:3:"Ṗ";s:3:"ṙ";s:3:"Ṙ";s:3:"ṛ";s:3:"Ṛ";s:3:"ṝ";s:3:"Ṝ";s:3:"ṟ";s:3:"Ṟ";s:3:"ṡ";s:3:"Ṡ";s:3:"ṣ";s:3:"Ṣ";s:3:"ṥ";s:3:"Ṥ";s:3:"ṧ";s:3:"Ṧ";s:3:"ṩ";s:3:"Ṩ";s:3:"ṫ";s:3:"Ṫ";s:3:"ṭ";s:3:"Ṭ";s:3:"ṯ";s:3:"Ṯ";s:3:"ṱ";s:3:"Ṱ";s:3:"ṳ";s:3:"Ṳ";s:3:"ṵ";s:3:"Ṵ";s:3:"ṷ";s:3:"Ṷ";s:3:"ṹ";s:3:"Ṹ";s:3:"ṻ";s:3:"Ṻ";s:3:"ṽ";s:3:"Ṽ";s:3:"ṿ";s:3:"Ṿ";s:3:"ẁ";s:3:"Ẁ";s:3:"ẃ";s:3:"Ẃ";s:3:"ẅ";s:3:"Ẅ";s:3:"ẇ";s:3:"Ẇ";s:3:"ẉ";s:3:"Ẉ";s:3:"ẋ";s:3:"Ẋ";s:3:"ẍ";s:3:"Ẍ";s:3:"ẏ";s:3:"Ẏ";s:3:"ẑ";s:3:"Ẑ";s:3:"ẓ";s:3:"Ẓ";s:3:"ẕ";s:3:"Ẕ";s:3:"ẛ";s:3:"Ṡ";s:3:"ạ";s:3:"Ạ";s:3:"ả";s:3:"Ả";s:3:"ấ";s:3:"Ấ";s:3:"ầ";s:3:"Ầ";s:3:"ẩ";s:3:"Ẩ";s:3:"ẫ";s:3:"Ẫ";s:3:"ậ";s:3:"Ậ";s:3:"ắ";s:3:"Ắ";s:3:"ằ";s:3:"Ằ";s:3:"ẳ";s:3:"Ẳ";s:3:"ẵ";s:3:"Ẵ";s:3:"ặ";s:3:"Ặ";s:3:"ẹ";s:3:"Ẹ";s:3:"ẻ";s:3:"Ẻ";s:3:"ẽ";s:3:"Ẽ";s:3:"ế";s:3:"Ế";s:3:"ề";s:3:"Ề";s:3:"ể";s:3:"Ể";s:3:"ễ";s:3:"Ễ";s:3:"ệ";s:3:"Ệ";s:3:"ỉ";s:3:"Ỉ";s:3:"ị";s:3:"Ị";s:3:"ọ";s:3:"Ọ";s:3:"ỏ";s:3:"Ỏ";s:3:"ố";s:3:"Ố";s:3:"ồ";s:3:"Ồ";s:3:"ổ";s:3:"Ổ";s:3:"ỗ";s:3:"Ỗ";s:3:"ộ";s:3:"Ộ";s:3:"ớ";s:3:"Ớ";s:3:"ờ";s:3:"Ờ";s:3:"ở";s:3:"Ở";s:3:"ỡ";s:3:"Ỡ";s:3:"ợ";s:3:"Ợ";s:3:"ụ";s:3:"Ụ";s:3:"ủ";s:3:"Ủ";s:3:"ứ";s:3:"Ứ";s:3:"ừ";s:3:"Ừ";s:3:"ử";s:3:"Ử";s:3:"ữ";s:3:"Ữ";s:3:"ự";s:3:"Ự";s:3:"ỳ";s:3:"Ỳ";s:3:"ỵ";s:3:"Ỵ";s:3:"ỷ";s:3:"Ỷ";s:3:"ỹ";s:3:"Ỹ";s:3:"ỻ";s:3:"Ỻ";s:3:"ỽ";s:3:"Ỽ";s:3:"ỿ";s:3:"Ỿ";s:3:"ἀ";s:3:"Ἀ";s:3:"ἁ";s:3:"Ἁ";s:3:"ἂ";s:3:"Ἂ";s:3:"ἃ";s:3:"Ἃ";s:3:"ἄ";s:3:"Ἄ";s:3:"ἅ";s:3:"Ἅ";s:3:"ἆ";s:3:"Ἆ";s:3:"ἇ";s:3:"Ἇ";s:3:"ἐ";s:3:"Ἐ";s:3:"ἑ";s:3:"Ἑ";s:3:"ἒ";s:3:"Ἒ";s:3:"ἓ";s:3:"Ἓ";s:3:"ἔ";s:3:"Ἔ";s:3:"ἕ";s:3:"Ἕ";s:3:"ἠ";s:3:"Ἠ";s:3:"ἡ";s:3:"Ἡ";s:3:"ἢ";s:3:"Ἢ";s:3:"ἣ";s:3:"Ἣ";s:3:"ἤ";s:3:"Ἤ";s:3:"ἥ";s:3:"Ἥ";s:3:"ἦ";s:3:"Ἦ";s:3:"ἧ";s:3:"Ἧ";s:3:"ἰ";s:3:"Ἰ";s:3:"ἱ";s:3:"Ἱ";s:3:"ἲ";s:3:"Ἲ";s:3:"ἳ";s:3:"Ἳ";s:3:"ἴ";s:3:"Ἴ";s:3:"ἵ";s:3:"Ἵ";s:3:"ἶ";s:3:"Ἶ";s:3:"ἷ";s:3:"Ἷ";s:3:"ὀ";s:3:"Ὀ";s:3:"ὁ";s:3:"Ὁ";s:3:"ὂ";s:3:"Ὂ";s:3:"ὃ";s:3:"Ὃ";s:3:"ὄ";s:3:"Ὄ";s:3:"ὅ";s:3:"Ὅ";s:3:"ὑ";s:3:"Ὑ";s:3:"ὓ";s:3:"Ὓ";s:3:"ὕ";s:3:"Ὕ";s:3:"ὗ";s:3:"Ὗ";s:3:"ὠ";s:3:"Ὠ";s:3:"ὡ";s:3:"Ὡ";s:3:"ὢ";s:3:"Ὢ";s:3:"ὣ";s:3:"Ὣ";s:3:"ὤ";s:3:"Ὤ";s:3:"ὥ";s:3:"Ὥ";s:3:"ὦ";s:3:"Ὦ";s:3:"ὧ";s:3:"Ὧ";s:3:"ὰ";s:3:"Ὰ";s:3:"ά";s:3:"Ά";s:3:"ὲ";s:3:"Ὲ";s:3:"έ";s:3:"Έ";s:3:"ὴ";s:3:"Ὴ";s:3:"ή";s:3:"Ή";s:3:"ὶ";s:3:"Ὶ";s:3:"ί";s:3:"Ί";s:3:"ὸ";s:3:"Ὸ";s:3:"ό";s:3:"Ό";s:3:"ὺ";s:3:"Ὺ";s:3:"ύ";s:3:"Ύ";s:3:"ὼ";s:3:"Ὼ";s:3:"ώ";s:3:"Ώ";s:3:"ᾀ";s:3:"ᾈ";s:3:"ᾁ";s:3:"ᾉ";s:3:"ᾂ";s:3:"ᾊ";s:3:"ᾃ";s:3:"ᾋ";s:3:"ᾄ";s:3:"ᾌ";s:3:"ᾅ";s:3:"ᾍ";s:3:"ᾆ";s:3:"ᾎ";s:3:"ᾇ";s:3:"ᾏ";s:3:"ᾐ";s:3:"ᾘ";s:3:"ᾑ";s:3:"ᾙ";s:3:"ᾒ";s:3:"ᾚ";s:3:"ᾓ";s:3:"ᾛ";s:3:"ᾔ";s:3:"ᾜ";s:3:"ᾕ";s:3:"ᾝ";s:3:"ᾖ";s:3:"ᾞ";s:3:"ᾗ";s:3:"ᾟ";s:3:"ᾠ";s:3:"ᾨ";s:3:"ᾡ";s:3:"ᾩ";s:3:"ᾢ";s:3:"ᾪ";s:3:"ᾣ";s:3:"ᾫ";s:3:"ᾤ";s:3:"ᾬ";s:3:"ᾥ";s:3:"ᾭ";s:3:"ᾦ";s:3:"ᾮ";s:3:"ᾧ";s:3:"ᾯ";s:3:"ᾰ";s:3:"Ᾰ";s:3:"ᾱ";s:3:"Ᾱ";s:3:"ᾳ";s:3:"ᾼ";s:3:"ι";s:2:"Ι";s:3:"ῃ";s:3:"ῌ";s:3:"ῐ";s:3:"Ῐ";s:3:"ῑ";s:3:"Ῑ";s:3:"ῠ";s:3:"Ῠ";s:3:"ῡ";s:3:"Ῡ";s:3:"ῥ";s:3:"Ῥ";s:3:"ῳ";s:3:"ῼ";s:3:"ⅎ";s:3:"Ⅎ";s:3:"ⅰ";s:3:"Ⅰ";s:3:"ⅱ";s:3:"Ⅱ";s:3:"ⅲ";s:3:"Ⅲ";s:3:"ⅳ";s:3:"Ⅳ";s:3:"ⅴ";s:3:"Ⅴ";s:3:"ⅵ";s:3:"Ⅵ";s:3:"ⅶ";s:3:"Ⅶ";s:3:"ⅷ";s:3:"Ⅷ";s:3:"ⅸ";s:3:"Ⅸ";s:3:"ⅹ";s:3:"Ⅹ";s:3:"ⅺ";s:3:"Ⅺ";s:3:"ⅻ";s:3:"Ⅻ";s:3:"ⅼ";s:3:"Ⅼ";s:3:"ⅽ";s:3:"Ⅽ";s:3:"ⅾ";s:3:"Ⅾ";s:3:"ⅿ";s:3:"Ⅿ";s:3:"ↄ";s:3:"Ↄ";s:3:"ⓐ";s:3:"Ⓐ";s:3:"ⓑ";s:3:"Ⓑ";s:3:"ⓒ";s:3:"Ⓒ";s:3:"ⓓ";s:3:"Ⓓ";s:3:"ⓔ";s:3:"Ⓔ";s:3:"ⓕ";s:3:"Ⓕ";s:3:"ⓖ";s:3:"Ⓖ";s:3:"ⓗ";s:3:"Ⓗ";s:3:"ⓘ";s:3:"Ⓘ";s:3:"ⓙ";s:3:"Ⓙ";s:3:"ⓚ";s:3:"Ⓚ";s:3:"ⓛ";s:3:"Ⓛ";s:3:"ⓜ";s:3:"Ⓜ";s:3:"ⓝ";s:3:"Ⓝ";s:3:"ⓞ";s:3:"Ⓞ";s:3:"ⓟ";s:3:"Ⓟ";s:3:"ⓠ";s:3:"Ⓠ";s:3:"ⓡ";s:3:"Ⓡ";s:3:"ⓢ";s:3:"Ⓢ";s:3:"ⓣ";s:3:"Ⓣ";s:3:"ⓤ";s:3:"Ⓤ";s:3:"ⓥ";s:3:"Ⓥ";s:3:"ⓦ";s:3:"Ⓦ";s:3:"ⓧ";s:3:"Ⓧ";s:3:"ⓨ";s:3:"Ⓨ";s:3:"ⓩ";s:3:"Ⓩ";s:3:"ⰰ";s:3:"Ⰰ";s:3:"ⰱ";s:3:"Ⰱ";s:3:"ⰲ";s:3:"Ⰲ";s:3:"ⰳ";s:3:"Ⰳ";s:3:"ⰴ";s:3:"Ⰴ";s:3:"ⰵ";s:3:"Ⰵ";s:3:"ⰶ";s:3:"Ⰶ";s:3:"ⰷ";s:3:"Ⰷ";s:3:"ⰸ";s:3:"Ⰸ";s:3:"ⰹ";s:3:"Ⰹ";s:3:"ⰺ";s:3:"Ⰺ";s:3:"ⰻ";s:3:"Ⰻ";s:3:"ⰼ";s:3:"Ⰼ";s:3:"ⰽ";s:3:"Ⰽ";s:3:"ⰾ";s:3:"Ⰾ";s:3:"ⰿ";s:3:"Ⰿ";s:3:"ⱀ";s:3:"Ⱀ";s:3:"ⱁ";s:3:"Ⱁ";s:3:"ⱂ";s:3:"Ⱂ";s:3:"ⱃ";s:3:"Ⱃ";s:3:"ⱄ";s:3:"Ⱄ";s:3:"ⱅ";s:3:"Ⱅ";s:3:"ⱆ";s:3:"Ⱆ";s:3:"ⱇ";s:3:"Ⱇ";s:3:"ⱈ";s:3:"Ⱈ";s:3:"ⱉ";s:3:"Ⱉ";s:3:"ⱊ";s:3:"Ⱊ";s:3:"ⱋ";s:3:"Ⱋ";s:3:"ⱌ";s:3:"Ⱌ";s:3:"ⱍ";s:3:"Ⱍ";s:3:"ⱎ";s:3:"Ⱎ";s:3:"ⱏ";s:3:"Ⱏ";s:3:"ⱐ";s:3:"Ⱐ";s:3:"ⱑ";s:3:"Ⱑ";s:3:"ⱒ";s:3:"Ⱒ";s:3:"ⱓ";s:3:"Ⱓ";s:3:"ⱔ";s:3:"Ⱔ";s:3:"ⱕ";s:3:"Ⱕ";s:3:"ⱖ";s:3:"Ⱖ";s:3:"ⱗ";s:3:"Ⱗ";s:3:"ⱘ";s:3:"Ⱘ";s:3:"ⱙ";s:3:"Ⱙ";s:3:"ⱚ";s:3:"Ⱚ";s:3:"ⱛ";s:3:"Ⱛ";s:3:"ⱜ";s:3:"Ⱜ";s:3:"ⱝ";s:3:"Ⱝ";s:3:"ⱞ";s:3:"Ⱞ";s:3:"ⱡ";s:3:"Ⱡ";s:3:"ⱥ";s:2:"Ⱥ";s:3:"ⱦ";s:2:"Ⱦ";s:3:"ⱨ";s:3:"Ⱨ";s:3:"ⱪ";s:3:"Ⱪ";s:3:"ⱬ";s:3:"Ⱬ";s:3:"ⱳ";s:3:"Ⱳ";s:3:"ⱶ";s:3:"Ⱶ";s:3:"ⲁ";s:3:"Ⲁ";s:3:"ⲃ";s:3:"Ⲃ";s:3:"ⲅ";s:3:"Ⲅ";s:3:"ⲇ";s:3:"Ⲇ";s:3:"ⲉ";s:3:"Ⲉ";s:3:"ⲋ";s:3:"Ⲋ";s:3:"ⲍ";s:3:"Ⲍ";s:3:"ⲏ";s:3:"Ⲏ";s:3:"ⲑ";s:3:"Ⲑ";s:3:"ⲓ";s:3:"Ⲓ";s:3:"ⲕ";s:3:"Ⲕ";s:3:"ⲗ";s:3:"Ⲗ";s:3:"ⲙ";s:3:"Ⲙ";s:3:"ⲛ";s:3:"Ⲛ";s:3:"ⲝ";s:3:"Ⲝ";s:3:"ⲟ";s:3:"Ⲟ";s:3:"ⲡ";s:3:"Ⲡ";s:3:"ⲣ";s:3:"Ⲣ";s:3:"ⲥ";s:3:"Ⲥ";s:3:"ⲧ";s:3:"Ⲧ";s:3:"ⲩ";s:3:"Ⲩ";s:3:"ⲫ";s:3:"Ⲫ";s:3:"ⲭ";s:3:"Ⲭ";s:3:"ⲯ";s:3:"Ⲯ";s:3:"ⲱ";s:3:"Ⲱ";s:3:"ⲳ";s:3:"Ⲳ";s:3:"ⲵ";s:3:"Ⲵ";s:3:"ⲷ";s:3:"Ⲷ";s:3:"ⲹ";s:3:"Ⲹ";s:3:"ⲻ";s:3:"Ⲻ";s:3:"ⲽ";s:3:"Ⲽ";s:3:"ⲿ";s:3:"Ⲿ";s:3:"ⳁ";s:3:"Ⳁ";s:3:"ⳃ";s:3:"Ⳃ";s:3:"ⳅ";s:3:"Ⳅ";s:3:"ⳇ";s:3:"Ⳇ";s:3:"ⳉ";s:3:"Ⳉ";s:3:"ⳋ";s:3:"Ⳋ";s:3:"ⳍ";s:3:"Ⳍ";s:3:"ⳏ";s:3:"Ⳏ";s:3:"ⳑ";s:3:"Ⳑ";s:3:"ⳓ";s:3:"Ⳓ";s:3:"ⳕ";s:3:"Ⳕ";s:3:"ⳗ";s:3:"Ⳗ";s:3:"ⳙ";s:3:"Ⳙ";s:3:"ⳛ";s:3:"Ⳛ";s:3:"ⳝ";s:3:"Ⳝ";s:3:"ⳟ";s:3:"Ⳟ";s:3:"ⳡ";s:3:"Ⳡ";s:3:"ⳣ";s:3:"Ⳣ";s:3:"ⳬ";s:3:"Ⳬ";s:3:"ⳮ";s:3:"Ⳮ";s:3:"ⴀ";s:3:"Ⴀ";s:3:"ⴁ";s:3:"Ⴁ";s:3:"ⴂ";s:3:"Ⴂ";s:3:"ⴃ";s:3:"Ⴃ";s:3:"ⴄ";s:3:"Ⴄ";s:3:"ⴅ";s:3:"Ⴅ";s:3:"ⴆ";s:3:"Ⴆ";s:3:"ⴇ";s:3:"Ⴇ";s:3:"ⴈ";s:3:"Ⴈ";s:3:"ⴉ";s:3:"Ⴉ";s:3:"ⴊ";s:3:"Ⴊ";s:3:"ⴋ";s:3:"Ⴋ";s:3:"ⴌ";s:3:"Ⴌ";s:3:"ⴍ";s:3:"Ⴍ";s:3:"ⴎ";s:3:"Ⴎ";s:3:"ⴏ";s:3:"Ⴏ";s:3:"ⴐ";s:3:"Ⴐ";s:3:"ⴑ";s:3:"Ⴑ";s:3:"ⴒ";s:3:"Ⴒ";s:3:"ⴓ";s:3:"Ⴓ";s:3:"ⴔ";s:3:"Ⴔ";s:3:"ⴕ";s:3:"Ⴕ";s:3:"ⴖ";s:3:"Ⴖ";s:3:"ⴗ";s:3:"Ⴗ";s:3:"ⴘ";s:3:"Ⴘ";s:3:"ⴙ";s:3:"Ⴙ";s:3:"ⴚ";s:3:"Ⴚ";s:3:"ⴛ";s:3:"Ⴛ";s:3:"ⴜ";s:3:"Ⴜ";s:3:"ⴝ";s:3:"Ⴝ";s:3:"ⴞ";s:3:"Ⴞ";s:3:"ⴟ";s:3:"Ⴟ";s:3:"ⴠ";s:3:"Ⴠ";s:3:"ⴡ";s:3:"Ⴡ";s:3:"ⴢ";s:3:"Ⴢ";s:3:"ⴣ";s:3:"Ⴣ";s:3:"ⴤ";s:3:"Ⴤ";s:3:"ⴥ";s:3:"Ⴥ";s:3:"ꙁ";s:3:"Ꙁ";s:3:"ꙃ";s:3:"Ꙃ";s:3:"ꙅ";s:3:"Ꙅ";s:3:"ꙇ";s:3:"Ꙇ";s:3:"ꙉ";s:3:"Ꙉ";s:3:"ꙋ";s:3:"Ꙋ";s:3:"ꙍ";s:3:"Ꙍ";s:3:"ꙏ";s:3:"Ꙏ";s:3:"ꙑ";s:3:"Ꙑ";s:3:"ꙓ";s:3:"Ꙓ";s:3:"ꙕ";s:3:"Ꙕ";s:3:"ꙗ";s:3:"Ꙗ";s:3:"ꙙ";s:3:"Ꙙ";s:3:"ꙛ";s:3:"Ꙛ";s:3:"ꙝ";s:3:"Ꙝ";s:3:"ꙟ";s:3:"Ꙟ";s:3:"ꙡ";s:3:"Ꙡ";s:3:"ꙣ";s:3:"Ꙣ";s:3:"ꙥ";s:3:"Ꙥ";s:3:"ꙧ";s:3:"Ꙧ";s:3:"ꙩ";s:3:"Ꙩ";s:3:"ꙫ";s:3:"Ꙫ";s:3:"ꙭ";s:3:"Ꙭ";s:3:"ꚁ";s:3:"Ꚁ";s:3:"ꚃ";s:3:"Ꚃ";s:3:"ꚅ";s:3:"Ꚅ";s:3:"ꚇ";s:3:"Ꚇ";s:3:"ꚉ";s:3:"Ꚉ";s:3:"ꚋ";s:3:"Ꚋ";s:3:"ꚍ";s:3:"Ꚍ";s:3:"ꚏ";s:3:"Ꚏ";s:3:"ꚑ";s:3:"Ꚑ";s:3:"ꚓ";s:3:"Ꚓ";s:3:"ꚕ";s:3:"Ꚕ";s:3:"ꚗ";s:3:"Ꚗ";s:3:"ꜣ";s:3:"Ꜣ";s:3:"ꜥ";s:3:"Ꜥ";s:3:"ꜧ";s:3:"Ꜧ";s:3:"ꜩ";s:3:"Ꜩ";s:3:"ꜫ";s:3:"Ꜫ";s:3:"ꜭ";s:3:"Ꜭ";s:3:"ꜯ";s:3:"Ꜯ";s:3:"ꜳ";s:3:"Ꜳ";s:3:"ꜵ";s:3:"Ꜵ";s:3:"ꜷ";s:3:"Ꜷ";s:3:"ꜹ";s:3:"Ꜹ";s:3:"ꜻ";s:3:"Ꜻ";s:3:"ꜽ";s:3:"Ꜽ";s:3:"ꜿ";s:3:"Ꜿ";s:3:"ꝁ";s:3:"Ꝁ";s:3:"ꝃ";s:3:"Ꝃ";s:3:"ꝅ";s:3:"Ꝅ";s:3:"ꝇ";s:3:"Ꝇ";s:3:"ꝉ";s:3:"Ꝉ";s:3:"ꝋ";s:3:"Ꝋ";s:3:"ꝍ";s:3:"Ꝍ";s:3:"ꝏ";s:3:"Ꝏ";s:3:"ꝑ";s:3:"Ꝑ";s:3:"ꝓ";s:3:"Ꝓ";s:3:"ꝕ";s:3:"Ꝕ";s:3:"ꝗ";s:3:"Ꝗ";s:3:"ꝙ";s:3:"Ꝙ";s:3:"ꝛ";s:3:"Ꝛ";s:3:"ꝝ";s:3:"Ꝝ";s:3:"ꝟ";s:3:"Ꝟ";s:3:"ꝡ";s:3:"Ꝡ";s:3:"ꝣ";s:3:"Ꝣ";s:3:"ꝥ";s:3:"Ꝥ";s:3:"ꝧ";s:3:"Ꝧ";s:3:"ꝩ";s:3:"Ꝩ";s:3:"ꝫ";s:3:"Ꝫ";s:3:"ꝭ";s:3:"Ꝭ";s:3:"ꝯ";s:3:"Ꝯ";s:3:"ꝺ";s:3:"Ꝺ";s:3:"ꝼ";s:3:"Ꝼ";s:3:"ꝿ";s:3:"Ꝿ";s:3:"ꞁ";s:3:"Ꞁ";s:3:"ꞃ";s:3:"Ꞃ";s:3:"ꞅ";s:3:"Ꞅ";s:3:"ꞇ";s:3:"Ꞇ";s:3:"ꞌ";s:3:"Ꞌ";s:3:"ꞑ";s:3:"Ꞑ";s:3:"ꞡ";s:3:"Ꞡ";s:3:"ꞣ";s:3:"Ꞣ";s:3:"ꞥ";s:3:"Ꞥ";s:3:"ꞧ";s:3:"Ꞧ";s:3:"ꞩ";s:3:"Ꞩ";s:3:"a";s:3:"A";s:3:"b";s:3:"B";s:3:"c";s:3:"C";s:3:"d";s:3:"D";s:3:"e";s:3:"E";s:3:"f";s:3:"F";s:3:"g";s:3:"G";s:3:"h";s:3:"H";s:3:"i";s:3:"I";s:3:"j";s:3:"J";s:3:"k";s:3:"K";s:3:"l";s:3:"L";s:3:"m";s:3:"M";s:3:"n";s:3:"N";s:3:"o";s:3:"O";s:3:"p";s:3:"P";s:3:"q";s:3:"Q";s:3:"r";s:3:"R";s:3:"s";s:3:"S";s:3:"t";s:3:"T";s:3:"u";s:3:"U";s:3:"v";s:3:"V";s:3:"w";s:3:"W";s:3:"x";s:3:"X";s:3:"y";s:3:"Y";s:3:"z";s:3:"Z";s:4:"𐐨";s:4:"𐐀";s:4:"𐐩";s:4:"𐐁";s:4:"𐐪";s:4:"𐐂";s:4:"𐐫";s:4:"𐐃";s:4:"𐐬";s:4:"𐐄";s:4:"𐐭";s:4:"𐐅";s:4:"𐐮";s:4:"𐐆";s:4:"𐐯";s:4:"𐐇";s:4:"𐐰";s:4:"𐐈";s:4:"𐐱";s:4:"𐐉";s:4:"𐐲";s:4:"𐐊";s:4:"𐐳";s:4:"𐐋";s:4:"𐐴";s:4:"𐐌";s:4:"𐐵";s:4:"𐐍";s:4:"𐐶";s:4:"𐐎";s:4:"𐐷";s:4:"𐐏";s:4:"𐐸";s:4:"𐐐";s:4:"𐐹";s:4:"𐐑";s:4:"𐐺";s:4:"𐐒";s:4:"𐐻";s:4:"𐐓";s:4:"𐐼";s:4:"𐐔";s:4:"𐐽";s:4:"𐐕";s:4:"𐐾";s:4:"𐐖";s:4:"𐐿";s:4:"𐐗";s:4:"𐑀";s:4:"𐐘";s:4:"𐑁";s:4:"𐐙";s:4:"𐑂";s:4:"𐐚";s:4:"𐑃";s:4:"𐐛";s:4:"𐑄";s:4:"𐐜";s:4:"𐑅";s:4:"𐐝";s:4:"𐑆";s:4:"𐐞";s:4:"𐑇";s:4:"𐐟";s:4:"𐑈";s:4:"𐐠";s:4:"𐑉";s:4:"𐐡";s:4:"𐑊";s:4:"𐐢";s:4:"𐑋";s:4:"𐐣";s:4:"𐑌";s:4:"𐐤";s:4:"𐑍";s:4:"𐐥";s:4:"𐑎";s:4:"𐐦";s:4:"𐑏";s:4:"𐐧";}s:14:"wikiLowerChars";a:1038:{s:1:"A";s:1:"a";s:1:"B";s:1:"b";s:1:"C";s:1:"c";s:1:"D";s:1:"d";s:1:"E";s:1:"e";s:1:"F";s:1:"f";s:1:"G";s:1:"g";s:1:"H";s:1:"h";s:1:"I";s:1:"i";s:1:"J";s:1:"j";s:1:"K";s:1:"k";s:1:"L";s:1:"l";s:1:"M";s:1:"m";s:1:"N";s:1:"n";s:1:"O";s:1:"o";s:1:"P";s:1:"p";s:1:"Q";s:1:"q";s:1:"R";s:1:"r";s:1:"S";s:1:"s";s:1:"T";s:1:"t";s:1:"U";s:1:"u";s:1:"V";s:1:"v";s:1:"W";s:1:"w";s:1:"X";s:1:"x";s:1:"Y";s:1:"y";s:1:"Z";s:1:"z";s:2:"À";s:2:"à";s:2:"Á";s:2:"á";s:2:"Â";s:2:"â";s:2:"Ã";s:2:"ã";s:2:"Ä";s:2:"ä";s:2:"Å";s:2:"å";s:2:"Æ";s:2:"æ";s:2:"Ç";s:2:"ç";s:2:"È";s:2:"è";s:2:"É";s:2:"é";s:2:"Ê";s:2:"ê";s:2:"Ë";s:2:"ë";s:2:"Ì";s:2:"ì";s:2:"Í";s:2:"í";s:2:"Î";s:2:"î";s:2:"Ï";s:2:"ï";s:2:"Ð";s:2:"ð";s:2:"Ñ";s:2:"ñ";s:2:"Ò";s:2:"ò";s:2:"Ó";s:2:"ó";s:2:"Ô";s:2:"ô";s:2:"Õ";s:2:"õ";s:2:"Ö";s:2:"ö";s:2:"Ø";s:2:"ø";s:2:"Ù";s:2:"ù";s:2:"Ú";s:2:"ú";s:2:"Û";s:2:"û";s:2:"Ü";s:2:"ü";s:2:"Ý";s:2:"ý";s:2:"Þ";s:2:"þ";s:2:"Ā";s:2:"ā";s:2:"Ă";s:2:"ă";s:2:"Ą";s:2:"ą";s:2:"Ć";s:2:"ć";s:2:"Ĉ";s:2:"ĉ";s:2:"Ċ";s:2:"ċ";s:2:"Č";s:2:"č";s:2:"Ď";s:2:"ď";s:2:"Đ";s:2:"đ";s:2:"Ē";s:2:"ē";s:2:"Ĕ";s:2:"ĕ";s:2:"Ė";s:2:"ė";s:2:"Ę";s:2:"ę";s:2:"Ě";s:2:"ě";s:2:"Ĝ";s:2:"ĝ";s:2:"Ğ";s:2:"ğ";s:2:"Ġ";s:2:"ġ";s:2:"Ģ";s:2:"ģ";s:2:"Ĥ";s:2:"ĥ";s:2:"Ħ";s:2:"ħ";s:2:"Ĩ";s:2:"ĩ";s:2:"Ī";s:2:"ī";s:2:"Ĭ";s:2:"ĭ";s:2:"Į";s:2:"į";s:2:"İ";s:1:"i";s:2:"IJ";s:2:"ij";s:2:"Ĵ";s:2:"ĵ";s:2:"Ķ";s:2:"ķ";s:2:"Ĺ";s:2:"ĺ";s:2:"Ļ";s:2:"ļ";s:2:"Ľ";s:2:"ľ";s:2:"Ŀ";s:2:"ŀ";s:2:"Ł";s:2:"ł";s:2:"Ń";s:2:"ń";s:2:"Ņ";s:2:"ņ";s:2:"Ň";s:2:"ň";s:2:"Ŋ";s:2:"ŋ";s:2:"Ō";s:2:"ō";s:2:"Ŏ";s:2:"ŏ";s:2:"Ő";s:2:"ő";s:2:"Œ";s:2:"œ";s:2:"Ŕ";s:2:"ŕ";s:2:"Ŗ";s:2:"ŗ";s:2:"Ř";s:2:"ř";s:2:"Ś";s:2:"ś";s:2:"Ŝ";s:2:"ŝ";s:2:"Ş";s:2:"ş";s:2:"Š";s:2:"š";s:2:"Ţ";s:2:"ţ";s:2:"Ť";s:2:"ť";s:2:"Ŧ";s:2:"ŧ";s:2:"Ũ";s:2:"ũ";s:2:"Ū";s:2:"ū";s:2:"Ŭ";s:2:"ŭ";s:2:"Ů";s:2:"ů";s:2:"Ű";s:2:"ű";s:2:"Ų";s:2:"ų";s:2:"Ŵ";s:2:"ŵ";s:2:"Ŷ";s:2:"ŷ";s:2:"Ÿ";s:2:"ÿ";s:2:"Ź";s:2:"ź";s:2:"Ż";s:2:"ż";s:2:"Ž";s:2:"ž";s:2:"Ɓ";s:2:"ɓ";s:2:"Ƃ";s:2:"ƃ";s:2:"Ƅ";s:2:"ƅ";s:2:"Ɔ";s:2:"ɔ";s:2:"Ƈ";s:2:"ƈ";s:2:"Ɖ";s:2:"ɖ";s:2:"Ɗ";s:2:"ɗ";s:2:"Ƌ";s:2:"ƌ";s:2:"Ǝ";s:2:"ǝ";s:2:"Ə";s:2:"ə";s:2:"Ɛ";s:2:"ɛ";s:2:"Ƒ";s:2:"ƒ";s:2:"Ɠ";s:2:"ɠ";s:2:"Ɣ";s:2:"ɣ";s:2:"Ɩ";s:2:"ɩ";s:2:"Ɨ";s:2:"ɨ";s:2:"Ƙ";s:2:"ƙ";s:2:"Ɯ";s:2:"ɯ";s:2:"Ɲ";s:2:"ɲ";s:2:"Ɵ";s:2:"ɵ";s:2:"Ơ";s:2:"ơ";s:2:"Ƣ";s:2:"ƣ";s:2:"Ƥ";s:2:"ƥ";s:2:"Ʀ";s:2:"ʀ";s:2:"Ƨ";s:2:"ƨ";s:2:"Ʃ";s:2:"ʃ";s:2:"Ƭ";s:2:"ƭ";s:2:"Ʈ";s:2:"ʈ";s:2:"Ư";s:2:"ư";s:2:"Ʊ";s:2:"ʊ";s:2:"Ʋ";s:2:"ʋ";s:2:"Ƴ";s:2:"ƴ";s:2:"Ƶ";s:2:"ƶ";s:2:"Ʒ";s:2:"ʒ";s:2:"Ƹ";s:2:"ƹ";s:2:"Ƽ";s:2:"ƽ";s:2:"DŽ";s:2:"dž";s:2:"Dž";s:2:"dž";s:2:"LJ";s:2:"lj";s:2:"Lj";s:2:"lj";s:2:"NJ";s:2:"nj";s:2:"Nj";s:2:"nj";s:2:"Ǎ";s:2:"ǎ";s:2:"Ǐ";s:2:"ǐ";s:2:"Ǒ";s:2:"ǒ";s:2:"Ǔ";s:2:"ǔ";s:2:"Ǖ";s:2:"ǖ";s:2:"Ǘ";s:2:"ǘ";s:2:"Ǚ";s:2:"ǚ";s:2:"Ǜ";s:2:"ǜ";s:2:"Ǟ";s:2:"ǟ";s:2:"Ǡ";s:2:"ǡ";s:2:"Ǣ";s:2:"ǣ";s:2:"Ǥ";s:2:"ǥ";s:2:"Ǧ";s:2:"ǧ";s:2:"Ǩ";s:2:"ǩ";s:2:"Ǫ";s:2:"ǫ";s:2:"Ǭ";s:2:"ǭ";s:2:"Ǯ";s:2:"ǯ";s:2:"DZ";s:2:"dz";s:2:"Dz";s:2:"dz";s:2:"Ǵ";s:2:"ǵ";s:2:"Ƕ";s:2:"ƕ";s:2:"Ƿ";s:2:"ƿ";s:2:"Ǹ";s:2:"ǹ";s:2:"Ǻ";s:2:"ǻ";s:2:"Ǽ";s:2:"ǽ";s:2:"Ǿ";s:2:"ǿ";s:2:"Ȁ";s:2:"ȁ";s:2:"Ȃ";s:2:"ȃ";s:2:"Ȅ";s:2:"ȅ";s:2:"Ȇ";s:2:"ȇ";s:2:"Ȉ";s:2:"ȉ";s:2:"Ȋ";s:2:"ȋ";s:2:"Ȍ";s:2:"ȍ";s:2:"Ȏ";s:2:"ȏ";s:2:"Ȑ";s:2:"ȑ";s:2:"Ȓ";s:2:"ȓ";s:2:"Ȕ";s:2:"ȕ";s:2:"Ȗ";s:2:"ȗ";s:2:"Ș";s:2:"ș";s:2:"Ț";s:2:"ț";s:2:"Ȝ";s:2:"ȝ";s:2:"Ȟ";s:2:"ȟ";s:2:"Ƞ";s:2:"ƞ";s:2:"Ȣ";s:2:"ȣ";s:2:"Ȥ";s:2:"ȥ";s:2:"Ȧ";s:2:"ȧ";s:2:"Ȩ";s:2:"ȩ";s:2:"Ȫ";s:2:"ȫ";s:2:"Ȭ";s:2:"ȭ";s:2:"Ȯ";s:2:"ȯ";s:2:"Ȱ";s:2:"ȱ";s:2:"Ȳ";s:2:"ȳ";s:2:"Ⱥ";s:3:"ⱥ";s:2:"Ȼ";s:2:"ȼ";s:2:"Ƚ";s:2:"ƚ";s:2:"Ⱦ";s:3:"ⱦ";s:2:"Ɂ";s:2:"ɂ";s:2:"Ƀ";s:2:"ƀ";s:2:"Ʉ";s:2:"ʉ";s:2:"Ʌ";s:2:"ʌ";s:2:"Ɇ";s:2:"ɇ";s:2:"Ɉ";s:2:"ɉ";s:2:"Ɋ";s:2:"ɋ";s:2:"Ɍ";s:2:"ɍ";s:2:"Ɏ";s:2:"ɏ";s:2:"Ͱ";s:2:"ͱ";s:2:"Ͳ";s:2:"ͳ";s:2:"Ͷ";s:2:"ͷ";s:2:"Ά";s:2:"ά";s:2:"Έ";s:2:"έ";s:2:"Ή";s:2:"ή";s:2:"Ί";s:2:"ί";s:2:"Ό";s:2:"ό";s:2:"Ύ";s:2:"ύ";s:2:"Ώ";s:2:"ώ";s:2:"Α";s:2:"α";s:2:"Β";s:2:"β";s:2:"Γ";s:2:"γ";s:2:"Δ";s:2:"δ";s:2:"Ε";s:2:"ε";s:2:"Ζ";s:2:"ζ";s:2:"Η";s:2:"η";s:2:"Θ";s:2:"θ";s:2:"Ι";s:2:"ι";s:2:"Κ";s:2:"κ";s:2:"Λ";s:2:"λ";s:2:"Μ";s:2:"μ";s:2:"Ν";s:2:"ν";s:2:"Ξ";s:2:"ξ";s:2:"Ο";s:2:"ο";s:2:"Π";s:2:"π";s:2:"Ρ";s:2:"ρ";s:2:"Σ";s:2:"σ";s:2:"Τ";s:2:"τ";s:2:"Υ";s:2:"υ";s:2:"Φ";s:2:"φ";s:2:"Χ";s:2:"χ";s:2:"Ψ";s:2:"ψ";s:2:"Ω";s:2:"ω";s:2:"Ϊ";s:2:"ϊ";s:2:"Ϋ";s:2:"ϋ";s:2:"Ϗ";s:2:"ϗ";s:2:"Ϙ";s:2:"ϙ";s:2:"Ϛ";s:2:"ϛ";s:2:"Ϝ";s:2:"ϝ";s:2:"Ϟ";s:2:"ϟ";s:2:"Ϡ";s:2:"ϡ";s:2:"Ϣ";s:2:"ϣ";s:2:"Ϥ";s:2:"ϥ";s:2:"Ϧ";s:2:"ϧ";s:2:"Ϩ";s:2:"ϩ";s:2:"Ϫ";s:2:"ϫ";s:2:"Ϭ";s:2:"ϭ";s:2:"Ϯ";s:2:"ϯ";s:2:"ϴ";s:2:"θ";s:2:"Ϸ";s:2:"ϸ";s:2:"Ϲ";s:2:"ϲ";s:2:"Ϻ";s:2:"ϻ";s:2:"Ͻ";s:2:"ͻ";s:2:"Ͼ";s:2:"ͼ";s:2:"Ͽ";s:2:"ͽ";s:2:"Ѐ";s:2:"ѐ";s:2:"Ё";s:2:"ё";s:2:"Ђ";s:2:"ђ";s:2:"Ѓ";s:2:"ѓ";s:2:"Є";s:2:"є";s:2:"Ѕ";s:2:"ѕ";s:2:"І";s:2:"і";s:2:"Ї";s:2:"ї";s:2:"Ј";s:2:"ј";s:2:"Љ";s:2:"љ";s:2:"Њ";s:2:"њ";s:2:"Ћ";s:2:"ћ";s:2:"Ќ";s:2:"ќ";s:2:"Ѝ";s:2:"ѝ";s:2:"Ў";s:2:"ў";s:2:"Џ";s:2:"џ";s:2:"А";s:2:"а";s:2:"Б";s:2:"б";s:2:"В";s:2:"в";s:2:"Г";s:2:"г";s:2:"Д";s:2:"д";s:2:"Е";s:2:"е";s:2:"Ж";s:2:"ж";s:2:"З";s:2:"з";s:2:"И";s:2:"и";s:2:"Й";s:2:"й";s:2:"К";s:2:"к";s:2:"Л";s:2:"л";s:2:"М";s:2:"м";s:2:"Н";s:2:"н";s:2:"О";s:2:"о";s:2:"П";s:2:"п";s:2:"Р";s:2:"р";s:2:"С";s:2:"с";s:2:"Т";s:2:"т";s:2:"У";s:2:"у";s:2:"Ф";s:2:"ф";s:2:"Х";s:2:"х";s:2:"Ц";s:2:"ц";s:2:"Ч";s:2:"ч";s:2:"Ш";s:2:"ш";s:2:"Щ";s:2:"щ";s:2:"Ъ";s:2:"ъ";s:2:"Ы";s:2:"ы";s:2:"Ь";s:2:"ь";s:2:"Э";s:2:"э";s:2:"Ю";s:2:"ю";s:2:"Я";s:2:"я";s:2:"Ѡ";s:2:"ѡ";s:2:"Ѣ";s:2:"ѣ";s:2:"Ѥ";s:2:"ѥ";s:2:"Ѧ";s:2:"ѧ";s:2:"Ѩ";s:2:"ѩ";s:2:"Ѫ";s:2:"ѫ";s:2:"Ѭ";s:2:"ѭ";s:2:"Ѯ";s:2:"ѯ";s:2:"Ѱ";s:2:"ѱ";s:2:"Ѳ";s:2:"ѳ";s:2:"Ѵ";s:2:"ѵ";s:2:"Ѷ";s:2:"ѷ";s:2:"Ѹ";s:2:"ѹ";s:2:"Ѻ";s:2:"ѻ";s:2:"Ѽ";s:2:"ѽ";s:2:"Ѿ";s:2:"ѿ";s:2:"Ҁ";s:2:"ҁ";s:2:"Ҋ";s:2:"ҋ";s:2:"Ҍ";s:2:"ҍ";s:2:"Ҏ";s:2:"ҏ";s:2:"Ґ";s:2:"ґ";s:2:"Ғ";s:2:"ғ";s:2:"Ҕ";s:2:"ҕ";s:2:"Җ";s:2:"җ";s:2:"Ҙ";s:2:"ҙ";s:2:"Қ";s:2:"қ";s:2:"Ҝ";s:2:"ҝ";s:2:"Ҟ";s:2:"ҟ";s:2:"Ҡ";s:2:"ҡ";s:2:"Ң";s:2:"ң";s:2:"Ҥ";s:2:"ҥ";s:2:"Ҧ";s:2:"ҧ";s:2:"Ҩ";s:2:"ҩ";s:2:"Ҫ";s:2:"ҫ";s:2:"Ҭ";s:2:"ҭ";s:2:"Ү";s:2:"ү";s:2:"Ұ";s:2:"ұ";s:2:"Ҳ";s:2:"ҳ";s:2:"Ҵ";s:2:"ҵ";s:2:"Ҷ";s:2:"ҷ";s:2:"Ҹ";s:2:"ҹ";s:2:"Һ";s:2:"һ";s:2:"Ҽ";s:2:"ҽ";s:2:"Ҿ";s:2:"ҿ";s:2:"Ӏ";s:2:"ӏ";s:2:"Ӂ";s:2:"ӂ";s:2:"Ӄ";s:2:"ӄ";s:2:"Ӆ";s:2:"ӆ";s:2:"Ӈ";s:2:"ӈ";s:2:"Ӊ";s:2:"ӊ";s:2:"Ӌ";s:2:"ӌ";s:2:"Ӎ";s:2:"ӎ";s:2:"Ӑ";s:2:"ӑ";s:2:"Ӓ";s:2:"ӓ";s:2:"Ӕ";s:2:"ӕ";s:2:"Ӗ";s:2:"ӗ";s:2:"Ә";s:2:"ә";s:2:"Ӛ";s:2:"ӛ";s:2:"Ӝ";s:2:"ӝ";s:2:"Ӟ";s:2:"ӟ";s:2:"Ӡ";s:2:"ӡ";s:2:"Ӣ";s:2:"ӣ";s:2:"Ӥ";s:2:"ӥ";s:2:"Ӧ";s:2:"ӧ";s:2:"Ө";s:2:"ө";s:2:"Ӫ";s:2:"ӫ";s:2:"Ӭ";s:2:"ӭ";s:2:"Ӯ";s:2:"ӯ";s:2:"Ӱ";s:2:"ӱ";s:2:"Ӳ";s:2:"ӳ";s:2:"Ӵ";s:2:"ӵ";s:2:"Ӷ";s:2:"ӷ";s:2:"Ӹ";s:2:"ӹ";s:2:"Ӻ";s:2:"ӻ";s:2:"Ӽ";s:2:"ӽ";s:2:"Ӿ";s:2:"ӿ";s:2:"Ԁ";s:2:"ԁ";s:2:"Ԃ";s:2:"ԃ";s:2:"Ԅ";s:2:"ԅ";s:2:"Ԇ";s:2:"ԇ";s:2:"Ԉ";s:2:"ԉ";s:2:"Ԋ";s:2:"ԋ";s:2:"Ԍ";s:2:"ԍ";s:2:"Ԏ";s:2:"ԏ";s:2:"Ԑ";s:2:"ԑ";s:2:"Ԓ";s:2:"ԓ";s:2:"Ԕ";s:2:"ԕ";s:2:"Ԗ";s:2:"ԗ";s:2:"Ԙ";s:2:"ԙ";s:2:"Ԛ";s:2:"ԛ";s:2:"Ԝ";s:2:"ԝ";s:2:"Ԟ";s:2:"ԟ";s:2:"Ԡ";s:2:"ԡ";s:2:"Ԣ";s:2:"ԣ";s:2:"Ԥ";s:2:"ԥ";s:2:"Ԧ";s:2:"ԧ";s:2:"Ա";s:2:"ա";s:2:"Բ";s:2:"բ";s:2:"Գ";s:2:"գ";s:2:"Դ";s:2:"դ";s:2:"Ե";s:2:"ե";s:2:"Զ";s:2:"զ";s:2:"Է";s:2:"է";s:2:"Ը";s:2:"ը";s:2:"Թ";s:2:"թ";s:2:"Ժ";s:2:"ժ";s:2:"Ի";s:2:"ի";s:2:"Լ";s:2:"լ";s:2:"Խ";s:2:"խ";s:2:"Ծ";s:2:"ծ";s:2:"Կ";s:2:"կ";s:2:"Հ";s:2:"հ";s:2:"Ձ";s:2:"ձ";s:2:"Ղ";s:2:"ղ";s:2:"Ճ";s:2:"ճ";s:2:"Մ";s:2:"մ";s:2:"Յ";s:2:"յ";s:2:"Ն";s:2:"ն";s:2:"Շ";s:2:"շ";s:2:"Ո";s:2:"ո";s:2:"Չ";s:2:"չ";s:2:"Պ";s:2:"պ";s:2:"Ջ";s:2:"ջ";s:2:"Ռ";s:2:"ռ";s:2:"Ս";s:2:"ս";s:2:"Վ";s:2:"վ";s:2:"Տ";s:2:"տ";s:2:"Ր";s:2:"ր";s:2:"Ց";s:2:"ց";s:2:"Ւ";s:2:"ւ";s:2:"Փ";s:2:"փ";s:2:"Ք";s:2:"ք";s:2:"Օ";s:2:"օ";s:2:"Ֆ";s:2:"ֆ";s:3:"Ⴀ";s:3:"ⴀ";s:3:"Ⴁ";s:3:"ⴁ";s:3:"Ⴂ";s:3:"ⴂ";s:3:"Ⴃ";s:3:"ⴃ";s:3:"Ⴄ";s:3:"ⴄ";s:3:"Ⴅ";s:3:"ⴅ";s:3:"Ⴆ";s:3:"ⴆ";s:3:"Ⴇ";s:3:"ⴇ";s:3:"Ⴈ";s:3:"ⴈ";s:3:"Ⴉ";s:3:"ⴉ";s:3:"Ⴊ";s:3:"ⴊ";s:3:"Ⴋ";s:3:"ⴋ";s:3:"Ⴌ";s:3:"ⴌ";s:3:"Ⴍ";s:3:"ⴍ";s:3:"Ⴎ";s:3:"ⴎ";s:3:"Ⴏ";s:3:"ⴏ";s:3:"Ⴐ";s:3:"ⴐ";s:3:"Ⴑ";s:3:"ⴑ";s:3:"Ⴒ";s:3:"ⴒ";s:3:"Ⴓ";s:3:"ⴓ";s:3:"Ⴔ";s:3:"ⴔ";s:3:"Ⴕ";s:3:"ⴕ";s:3:"Ⴖ";s:3:"ⴖ";s:3:"Ⴗ";s:3:"ⴗ";s:3:"Ⴘ";s:3:"ⴘ";s:3:"Ⴙ";s:3:"ⴙ";s:3:"Ⴚ";s:3:"ⴚ";s:3:"Ⴛ";s:3:"ⴛ";s:3:"Ⴜ";s:3:"ⴜ";s:3:"Ⴝ";s:3:"ⴝ";s:3:"Ⴞ";s:3:"ⴞ";s:3:"Ⴟ";s:3:"ⴟ";s:3:"Ⴠ";s:3:"ⴠ";s:3:"Ⴡ";s:3:"ⴡ";s:3:"Ⴢ";s:3:"ⴢ";s:3:"Ⴣ";s:3:"ⴣ";s:3:"Ⴤ";s:3:"ⴤ";s:3:"Ⴥ";s:3:"ⴥ";s:3:"Ḁ";s:3:"ḁ";s:3:"Ḃ";s:3:"ḃ";s:3:"Ḅ";s:3:"ḅ";s:3:"Ḇ";s:3:"ḇ";s:3:"Ḉ";s:3:"ḉ";s:3:"Ḋ";s:3:"ḋ";s:3:"Ḍ";s:3:"ḍ";s:3:"Ḏ";s:3:"ḏ";s:3:"Ḑ";s:3:"ḑ";s:3:"Ḓ";s:3:"ḓ";s:3:"Ḕ";s:3:"ḕ";s:3:"Ḗ";s:3:"ḗ";s:3:"Ḙ";s:3:"ḙ";s:3:"Ḛ";s:3:"ḛ";s:3:"Ḝ";s:3:"ḝ";s:3:"Ḟ";s:3:"ḟ";s:3:"Ḡ";s:3:"ḡ";s:3:"Ḣ";s:3:"ḣ";s:3:"Ḥ";s:3:"ḥ";s:3:"Ḧ";s:3:"ḧ";s:3:"Ḩ";s:3:"ḩ";s:3:"Ḫ";s:3:"ḫ";s:3:"Ḭ";s:3:"ḭ";s:3:"Ḯ";s:3:"ḯ";s:3:"Ḱ";s:3:"ḱ";s:3:"Ḳ";s:3:"ḳ";s:3:"Ḵ";s:3:"ḵ";s:3:"Ḷ";s:3:"ḷ";s:3:"Ḹ";s:3:"ḹ";s:3:"Ḻ";s:3:"ḻ";s:3:"Ḽ";s:3:"ḽ";s:3:"Ḿ";s:3:"ḿ";s:3:"Ṁ";s:3:"ṁ";s:3:"Ṃ";s:3:"ṃ";s:3:"Ṅ";s:3:"ṅ";s:3:"Ṇ";s:3:"ṇ";s:3:"Ṉ";s:3:"ṉ";s:3:"Ṋ";s:3:"ṋ";s:3:"Ṍ";s:3:"ṍ";s:3:"Ṏ";s:3:"ṏ";s:3:"Ṑ";s:3:"ṑ";s:3:"Ṓ";s:3:"ṓ";s:3:"Ṕ";s:3:"ṕ";s:3:"Ṗ";s:3:"ṗ";s:3:"Ṙ";s:3:"ṙ";s:3:"Ṛ";s:3:"ṛ";s:3:"Ṝ";s:3:"ṝ";s:3:"Ṟ";s:3:"ṟ";s:3:"Ṡ";s:3:"ṡ";s:3:"Ṣ";s:3:"ṣ";s:3:"Ṥ";s:3:"ṥ";s:3:"Ṧ";s:3:"ṧ";s:3:"Ṩ";s:3:"ṩ";s:3:"Ṫ";s:3:"ṫ";s:3:"Ṭ";s:3:"ṭ";s:3:"Ṯ";s:3:"ṯ";s:3:"Ṱ";s:3:"ṱ";s:3:"Ṳ";s:3:"ṳ";s:3:"Ṵ";s:3:"ṵ";s:3:"Ṷ";s:3:"ṷ";s:3:"Ṹ";s:3:"ṹ";s:3:"Ṻ";s:3:"ṻ";s:3:"Ṽ";s:3:"ṽ";s:3:"Ṿ";s:3:"ṿ";s:3:"Ẁ";s:3:"ẁ";s:3:"Ẃ";s:3:"ẃ";s:3:"Ẅ";s:3:"ẅ";s:3:"Ẇ";s:3:"ẇ";s:3:"Ẉ";s:3:"ẉ";s:3:"Ẋ";s:3:"ẋ";s:3:"Ẍ";s:3:"ẍ";s:3:"Ẏ";s:3:"ẏ";s:3:"Ẑ";s:3:"ẑ";s:3:"Ẓ";s:3:"ẓ";s:3:"Ẕ";s:3:"ẕ";s:3:"ẞ";s:2:"ß";s:3:"Ạ";s:3:"ạ";s:3:"Ả";s:3:"ả";s:3:"Ấ";s:3:"ấ";s:3:"Ầ";s:3:"ầ";s:3:"Ẩ";s:3:"ẩ";s:3:"Ẫ";s:3:"ẫ";s:3:"Ậ";s:3:"ậ";s:3:"Ắ";s:3:"ắ";s:3:"Ằ";s:3:"ằ";s:3:"Ẳ";s:3:"ẳ";s:3:"Ẵ";s:3:"ẵ";s:3:"Ặ";s:3:"ặ";s:3:"Ẹ";s:3:"ẹ";s:3:"Ẻ";s:3:"ẻ";s:3:"Ẽ";s:3:"ẽ";s:3:"Ế";s:3:"ế";s:3:"Ề";s:3:"ề";s:3:"Ể";s:3:"ể";s:3:"Ễ";s:3:"ễ";s:3:"Ệ";s:3:"ệ";s:3:"Ỉ";s:3:"ỉ";s:3:"Ị";s:3:"ị";s:3:"Ọ";s:3:"ọ";s:3:"Ỏ";s:3:"ỏ";s:3:"Ố";s:3:"ố";s:3:"Ồ";s:3:"ồ";s:3:"Ổ";s:3:"ổ";s:3:"Ỗ";s:3:"ỗ";s:3:"Ộ";s:3:"ộ";s:3:"Ớ";s:3:"ớ";s:3:"Ờ";s:3:"ờ";s:3:"Ở";s:3:"ở";s:3:"Ỡ";s:3:"ỡ";s:3:"Ợ";s:3:"ợ";s:3:"Ụ";s:3:"ụ";s:3:"Ủ";s:3:"ủ";s:3:"Ứ";s:3:"ứ";s:3:"Ừ";s:3:"ừ";s:3:"Ử";s:3:"ử";s:3:"Ữ";s:3:"ữ";s:3:"Ự";s:3:"ự";s:3:"Ỳ";s:3:"ỳ";s:3:"Ỵ";s:3:"ỵ";s:3:"Ỷ";s:3:"ỷ";s:3:"Ỹ";s:3:"ỹ";s:3:"Ỻ";s:3:"ỻ";s:3:"Ỽ";s:3:"ỽ";s:3:"Ỿ";s:3:"ỿ";s:3:"Ἀ";s:3:"ἀ";s:3:"Ἁ";s:3:"ἁ";s:3:"Ἂ";s:3:"ἂ";s:3:"Ἃ";s:3:"ἃ";s:3:"Ἄ";s:3:"ἄ";s:3:"Ἅ";s:3:"ἅ";s:3:"Ἆ";s:3:"ἆ";s:3:"Ἇ";s:3:"ἇ";s:3:"Ἐ";s:3:"ἐ";s:3:"Ἑ";s:3:"ἑ";s:3:"Ἒ";s:3:"ἒ";s:3:"Ἓ";s:3:"ἓ";s:3:"Ἔ";s:3:"ἔ";s:3:"Ἕ";s:3:"ἕ";s:3:"Ἠ";s:3:"ἠ";s:3:"Ἡ";s:3:"ἡ";s:3:"Ἢ";s:3:"ἢ";s:3:"Ἣ";s:3:"ἣ";s:3:"Ἤ";s:3:"ἤ";s:3:"Ἥ";s:3:"ἥ";s:3:"Ἦ";s:3:"ἦ";s:3:"Ἧ";s:3:"ἧ";s:3:"Ἰ";s:3:"ἰ";s:3:"Ἱ";s:3:"ἱ";s:3:"Ἲ";s:3:"ἲ";s:3:"Ἳ";s:3:"ἳ";s:3:"Ἴ";s:3:"ἴ";s:3:"Ἵ";s:3:"ἵ";s:3:"Ἶ";s:3:"ἶ";s:3:"Ἷ";s:3:"ἷ";s:3:"Ὀ";s:3:"ὀ";s:3:"Ὁ";s:3:"ὁ";s:3:"Ὂ";s:3:"ὂ";s:3:"Ὃ";s:3:"ὃ";s:3:"Ὄ";s:3:"ὄ";s:3:"Ὅ";s:3:"ὅ";s:3:"Ὑ";s:3:"ὑ";s:3:"Ὓ";s:3:"ὓ";s:3:"Ὕ";s:3:"ὕ";s:3:"Ὗ";s:3:"ὗ";s:3:"Ὠ";s:3:"ὠ";s:3:"Ὡ";s:3:"ὡ";s:3:"Ὢ";s:3:"ὢ";s:3:"Ὣ";s:3:"ὣ";s:3:"Ὤ";s:3:"ὤ";s:3:"Ὥ";s:3:"ὥ";s:3:"Ὦ";s:3:"ὦ";s:3:"Ὧ";s:3:"ὧ";s:3:"ᾈ";s:3:"ᾀ";s:3:"ᾉ";s:3:"ᾁ";s:3:"ᾊ";s:3:"ᾂ";s:3:"ᾋ";s:3:"ᾃ";s:3:"ᾌ";s:3:"ᾄ";s:3:"ᾍ";s:3:"ᾅ";s:3:"ᾎ";s:3:"ᾆ";s:3:"ᾏ";s:3:"ᾇ";s:3:"ᾘ";s:3:"ᾐ";s:3:"ᾙ";s:3:"ᾑ";s:3:"ᾚ";s:3:"ᾒ";s:3:"ᾛ";s:3:"ᾓ";s:3:"ᾜ";s:3:"ᾔ";s:3:"ᾝ";s:3:"ᾕ";s:3:"ᾞ";s:3:"ᾖ";s:3:"ᾟ";s:3:"ᾗ";s:3:"ᾨ";s:3:"ᾠ";s:3:"ᾩ";s:3:"ᾡ";s:3:"ᾪ";s:3:"ᾢ";s:3:"ᾫ";s:3:"ᾣ";s:3:"ᾬ";s:3:"ᾤ";s:3:"ᾭ";s:3:"ᾥ";s:3:"ᾮ";s:3:"ᾦ";s:3:"ᾯ";s:3:"ᾧ";s:3:"Ᾰ";s:3:"ᾰ";s:3:"Ᾱ";s:3:"ᾱ";s:3:"Ὰ";s:3:"ὰ";s:3:"Ά";s:3:"ά";s:3:"ᾼ";s:3:"ᾳ";s:3:"Ὲ";s:3:"ὲ";s:3:"Έ";s:3:"έ";s:3:"Ὴ";s:3:"ὴ";s:3:"Ή";s:3:"ή";s:3:"ῌ";s:3:"ῃ";s:3:"Ῐ";s:3:"ῐ";s:3:"Ῑ";s:3:"ῑ";s:3:"Ὶ";s:3:"ὶ";s:3:"Ί";s:3:"ί";s:3:"Ῠ";s:3:"ῠ";s:3:"Ῡ";s:3:"ῡ";s:3:"Ὺ";s:3:"ὺ";s:3:"Ύ";s:3:"ύ";s:3:"Ῥ";s:3:"ῥ";s:3:"Ὸ";s:3:"ὸ";s:3:"Ό";s:3:"ό";s:3:"Ὼ";s:3:"ὼ";s:3:"Ώ";s:3:"ώ";s:3:"ῼ";s:3:"ῳ";s:3:"Ω";s:2:"ω";s:3:"K";s:1:"k";s:3:"Å";s:2:"å";s:3:"Ⅎ";s:3:"ⅎ";s:3:"Ⅰ";s:3:"ⅰ";s:3:"Ⅱ";s:3:"ⅱ";s:3:"Ⅲ";s:3:"ⅲ";s:3:"Ⅳ";s:3:"ⅳ";s:3:"Ⅴ";s:3:"ⅴ";s:3:"Ⅵ";s:3:"ⅵ";s:3:"Ⅶ";s:3:"ⅶ";s:3:"Ⅷ";s:3:"ⅷ";s:3:"Ⅸ";s:3:"ⅸ";s:3:"Ⅹ";s:3:"ⅹ";s:3:"Ⅺ";s:3:"ⅺ";s:3:"Ⅻ";s:3:"ⅻ";s:3:"Ⅼ";s:3:"ⅼ";s:3:"Ⅽ";s:3:"ⅽ";s:3:"Ⅾ";s:3:"ⅾ";s:3:"Ⅿ";s:3:"ⅿ";s:3:"Ↄ";s:3:"ↄ";s:3:"Ⓐ";s:3:"ⓐ";s:3:"Ⓑ";s:3:"ⓑ";s:3:"Ⓒ";s:3:"ⓒ";s:3:"Ⓓ";s:3:"ⓓ";s:3:"Ⓔ";s:3:"ⓔ";s:3:"Ⓕ";s:3:"ⓕ";s:3:"Ⓖ";s:3:"ⓖ";s:3:"Ⓗ";s:3:"ⓗ";s:3:"Ⓘ";s:3:"ⓘ";s:3:"Ⓙ";s:3:"ⓙ";s:3:"Ⓚ";s:3:"ⓚ";s:3:"Ⓛ";s:3:"ⓛ";s:3:"Ⓜ";s:3:"ⓜ";s:3:"Ⓝ";s:3:"ⓝ";s:3:"Ⓞ";s:3:"ⓞ";s:3:"Ⓟ";s:3:"ⓟ";s:3:"Ⓠ";s:3:"ⓠ";s:3:"Ⓡ";s:3:"ⓡ";s:3:"Ⓢ";s:3:"ⓢ";s:3:"Ⓣ";s:3:"ⓣ";s:3:"Ⓤ";s:3:"ⓤ";s:3:"Ⓥ";s:3:"ⓥ";s:3:"Ⓦ";s:3:"ⓦ";s:3:"Ⓧ";s:3:"ⓧ";s:3:"Ⓨ";s:3:"ⓨ";s:3:"Ⓩ";s:3:"ⓩ";s:3:"Ⰰ";s:3:"ⰰ";s:3:"Ⰱ";s:3:"ⰱ";s:3:"Ⰲ";s:3:"ⰲ";s:3:"Ⰳ";s:3:"ⰳ";s:3:"Ⰴ";s:3:"ⰴ";s:3:"Ⰵ";s:3:"ⰵ";s:3:"Ⰶ";s:3:"ⰶ";s:3:"Ⰷ";s:3:"ⰷ";s:3:"Ⰸ";s:3:"ⰸ";s:3:"Ⰹ";s:3:"ⰹ";s:3:"Ⰺ";s:3:"ⰺ";s:3:"Ⰻ";s:3:"ⰻ";s:3:"Ⰼ";s:3:"ⰼ";s:3:"Ⰽ";s:3:"ⰽ";s:3:"Ⰾ";s:3:"ⰾ";s:3:"Ⰿ";s:3:"ⰿ";s:3:"Ⱀ";s:3:"ⱀ";s:3:"Ⱁ";s:3:"ⱁ";s:3:"Ⱂ";s:3:"ⱂ";s:3:"Ⱃ";s:3:"ⱃ";s:3:"Ⱄ";s:3:"ⱄ";s:3:"Ⱅ";s:3:"ⱅ";s:3:"Ⱆ";s:3:"ⱆ";s:3:"Ⱇ";s:3:"ⱇ";s:3:"Ⱈ";s:3:"ⱈ";s:3:"Ⱉ";s:3:"ⱉ";s:3:"Ⱊ";s:3:"ⱊ";s:3:"Ⱋ";s:3:"ⱋ";s:3:"Ⱌ";s:3:"ⱌ";s:3:"Ⱍ";s:3:"ⱍ";s:3:"Ⱎ";s:3:"ⱎ";s:3:"Ⱏ";s:3:"ⱏ";s:3:"Ⱐ";s:3:"ⱐ";s:3:"Ⱑ";s:3:"ⱑ";s:3:"Ⱒ";s:3:"ⱒ";s:3:"Ⱓ";s:3:"ⱓ";s:3:"Ⱔ";s:3:"ⱔ";s:3:"Ⱕ";s:3:"ⱕ";s:3:"Ⱖ";s:3:"ⱖ";s:3:"Ⱗ";s:3:"ⱗ";s:3:"Ⱘ";s:3:"ⱘ";s:3:"Ⱙ";s:3:"ⱙ";s:3:"Ⱚ";s:3:"ⱚ";s:3:"Ⱛ";s:3:"ⱛ";s:3:"Ⱜ";s:3:"ⱜ";s:3:"Ⱝ";s:3:"ⱝ";s:3:"Ⱞ";s:3:"ⱞ";s:3:"Ⱡ";s:3:"ⱡ";s:3:"Ɫ";s:2:"ɫ";s:3:"Ᵽ";s:3:"ᵽ";s:3:"Ɽ";s:2:"ɽ";s:3:"Ⱨ";s:3:"ⱨ";s:3:"Ⱪ";s:3:"ⱪ";s:3:"Ⱬ";s:3:"ⱬ";s:3:"Ɑ";s:2:"ɑ";s:3:"Ɱ";s:2:"ɱ";s:3:"Ɐ";s:2:"ɐ";s:3:"Ɒ";s:2:"ɒ";s:3:"Ⱳ";s:3:"ⱳ";s:3:"Ⱶ";s:3:"ⱶ";s:3:"Ȿ";s:2:"ȿ";s:3:"Ɀ";s:2:"ɀ";s:3:"Ⲁ";s:3:"ⲁ";s:3:"Ⲃ";s:3:"ⲃ";s:3:"Ⲅ";s:3:"ⲅ";s:3:"Ⲇ";s:3:"ⲇ";s:3:"Ⲉ";s:3:"ⲉ";s:3:"Ⲋ";s:3:"ⲋ";s:3:"Ⲍ";s:3:"ⲍ";s:3:"Ⲏ";s:3:"ⲏ";s:3:"Ⲑ";s:3:"ⲑ";s:3:"Ⲓ";s:3:"ⲓ";s:3:"Ⲕ";s:3:"ⲕ";s:3:"Ⲗ";s:3:"ⲗ";s:3:"Ⲙ";s:3:"ⲙ";s:3:"Ⲛ";s:3:"ⲛ";s:3:"Ⲝ";s:3:"ⲝ";s:3:"Ⲟ";s:3:"ⲟ";s:3:"Ⲡ";s:3:"ⲡ";s:3:"Ⲣ";s:3:"ⲣ";s:3:"Ⲥ";s:3:"ⲥ";s:3:"Ⲧ";s:3:"ⲧ";s:3:"Ⲩ";s:3:"ⲩ";s:3:"Ⲫ";s:3:"ⲫ";s:3:"Ⲭ";s:3:"ⲭ";s:3:"Ⲯ";s:3:"ⲯ";s:3:"Ⲱ";s:3:"ⲱ";s:3:"Ⲳ";s:3:"ⲳ";s:3:"Ⲵ";s:3:"ⲵ";s:3:"Ⲷ";s:3:"ⲷ";s:3:"Ⲹ";s:3:"ⲹ";s:3:"Ⲻ";s:3:"ⲻ";s:3:"Ⲽ";s:3:"ⲽ";s:3:"Ⲿ";s:3:"ⲿ";s:3:"Ⳁ";s:3:"ⳁ";s:3:"Ⳃ";s:3:"ⳃ";s:3:"Ⳅ";s:3:"ⳅ";s:3:"Ⳇ";s:3:"ⳇ";s:3:"Ⳉ";s:3:"ⳉ";s:3:"Ⳋ";s:3:"ⳋ";s:3:"Ⳍ";s:3:"ⳍ";s:3:"Ⳏ";s:3:"ⳏ";s:3:"Ⳑ";s:3:"ⳑ";s:3:"Ⳓ";s:3:"ⳓ";s:3:"Ⳕ";s:3:"ⳕ";s:3:"Ⳗ";s:3:"ⳗ";s:3:"Ⳙ";s:3:"ⳙ";s:3:"Ⳛ";s:3:"ⳛ";s:3:"Ⳝ";s:3:"ⳝ";s:3:"Ⳟ";s:3:"ⳟ";s:3:"Ⳡ";s:3:"ⳡ";s:3:"Ⳣ";s:3:"ⳣ";s:3:"Ⳬ";s:3:"ⳬ";s:3:"Ⳮ";s:3:"ⳮ";s:3:"Ꙁ";s:3:"ꙁ";s:3:"Ꙃ";s:3:"ꙃ";s:3:"Ꙅ";s:3:"ꙅ";s:3:"Ꙇ";s:3:"ꙇ";s:3:"Ꙉ";s:3:"ꙉ";s:3:"Ꙋ";s:3:"ꙋ";s:3:"Ꙍ";s:3:"ꙍ";s:3:"Ꙏ";s:3:"ꙏ";s:3:"Ꙑ";s:3:"ꙑ";s:3:"Ꙓ";s:3:"ꙓ";s:3:"Ꙕ";s:3:"ꙕ";s:3:"Ꙗ";s:3:"ꙗ";s:3:"Ꙙ";s:3:"ꙙ";s:3:"Ꙛ";s:3:"ꙛ";s:3:"Ꙝ";s:3:"ꙝ";s:3:"Ꙟ";s:3:"ꙟ";s:3:"Ꙡ";s:3:"ꙡ";s:3:"Ꙣ";s:3:"ꙣ";s:3:"Ꙥ";s:3:"ꙥ";s:3:"Ꙧ";s:3:"ꙧ";s:3:"Ꙩ";s:3:"ꙩ";s:3:"Ꙫ";s:3:"ꙫ";s:3:"Ꙭ";s:3:"ꙭ";s:3:"Ꚁ";s:3:"ꚁ";s:3:"Ꚃ";s:3:"ꚃ";s:3:"Ꚅ";s:3:"ꚅ";s:3:"Ꚇ";s:3:"ꚇ";s:3:"Ꚉ";s:3:"ꚉ";s:3:"Ꚋ";s:3:"ꚋ";s:3:"Ꚍ";s:3:"ꚍ";s:3:"Ꚏ";s:3:"ꚏ";s:3:"Ꚑ";s:3:"ꚑ";s:3:"Ꚓ";s:3:"ꚓ";s:3:"Ꚕ";s:3:"ꚕ";s:3:"Ꚗ";s:3:"ꚗ";s:3:"Ꜣ";s:3:"ꜣ";s:3:"Ꜥ";s:3:"ꜥ";s:3:"Ꜧ";s:3:"ꜧ";s:3:"Ꜩ";s:3:"ꜩ";s:3:"Ꜫ";s:3:"ꜫ";s:3:"Ꜭ";s:3:"ꜭ";s:3:"Ꜯ";s:3:"ꜯ";s:3:"Ꜳ";s:3:"ꜳ";s:3:"Ꜵ";s:3:"ꜵ";s:3:"Ꜷ";s:3:"ꜷ";s:3:"Ꜹ";s:3:"ꜹ";s:3:"Ꜻ";s:3:"ꜻ";s:3:"Ꜽ";s:3:"ꜽ";s:3:"Ꜿ";s:3:"ꜿ";s:3:"Ꝁ";s:3:"ꝁ";s:3:"Ꝃ";s:3:"ꝃ";s:3:"Ꝅ";s:3:"ꝅ";s:3:"Ꝇ";s:3:"ꝇ";s:3:"Ꝉ";s:3:"ꝉ";s:3:"Ꝋ";s:3:"ꝋ";s:3:"Ꝍ";s:3:"ꝍ";s:3:"Ꝏ";s:3:"ꝏ";s:3:"Ꝑ";s:3:"ꝑ";s:3:"Ꝓ";s:3:"ꝓ";s:3:"Ꝕ";s:3:"ꝕ";s:3:"Ꝗ";s:3:"ꝗ";s:3:"Ꝙ";s:3:"ꝙ";s:3:"Ꝛ";s:3:"ꝛ";s:3:"Ꝝ";s:3:"ꝝ";s:3:"Ꝟ";s:3:"ꝟ";s:3:"Ꝡ";s:3:"ꝡ";s:3:"Ꝣ";s:3:"ꝣ";s:3:"Ꝥ";s:3:"ꝥ";s:3:"Ꝧ";s:3:"ꝧ";s:3:"Ꝩ";s:3:"ꝩ";s:3:"Ꝫ";s:3:"ꝫ";s:3:"Ꝭ";s:3:"ꝭ";s:3:"Ꝯ";s:3:"ꝯ";s:3:"Ꝺ";s:3:"ꝺ";s:3:"Ꝼ";s:3:"ꝼ";s:3:"Ᵹ";s:3:"ᵹ";s:3:"Ꝿ";s:3:"ꝿ";s:3:"Ꞁ";s:3:"ꞁ";s:3:"Ꞃ";s:3:"ꞃ";s:3:"Ꞅ";s:3:"ꞅ";s:3:"Ꞇ";s:3:"ꞇ";s:3:"Ꞌ";s:3:"ꞌ";s:3:"Ɥ";s:2:"ɥ";s:3:"Ꞑ";s:3:"ꞑ";s:3:"Ꞡ";s:3:"ꞡ";s:3:"Ꞣ";s:3:"ꞣ";s:3:"Ꞥ";s:3:"ꞥ";s:3:"Ꞧ";s:3:"ꞧ";s:3:"Ꞩ";s:3:"ꞩ";s:3:"A";s:3:"a";s:3:"B";s:3:"b";s:3:"C";s:3:"c";s:3:"D";s:3:"d";s:3:"E";s:3:"e";s:3:"F";s:3:"f";s:3:"G";s:3:"g";s:3:"H";s:3:"h";s:3:"I";s:3:"i";s:3:"J";s:3:"j";s:3:"K";s:3:"k";s:3:"L";s:3:"l";s:3:"M";s:3:"m";s:3:"N";s:3:"n";s:3:"O";s:3:"o";s:3:"P";s:3:"p";s:3:"Q";s:3:"q";s:3:"R";s:3:"r";s:3:"S";s:3:"s";s:3:"T";s:3:"t";s:3:"U";s:3:"u";s:3:"V";s:3:"v";s:3:"W";s:3:"w";s:3:"X";s:3:"x";s:3:"Y";s:3:"y";s:3:"Z";s:3:"z";s:4:"𐐀";s:4:"𐐨";s:4:"𐐁";s:4:"𐐩";s:4:"𐐂";s:4:"𐐪";s:4:"𐐃";s:4:"𐐫";s:4:"𐐄";s:4:"𐐬";s:4:"𐐅";s:4:"𐐭";s:4:"𐐆";s:4:"𐐮";s:4:"𐐇";s:4:"𐐯";s:4:"𐐈";s:4:"𐐰";s:4:"𐐉";s:4:"𐐱";s:4:"𐐊";s:4:"𐐲";s:4:"𐐋";s:4:"𐐳";s:4:"𐐌";s:4:"𐐴";s:4:"𐐍";s:4:"𐐵";s:4:"𐐎";s:4:"𐐶";s:4:"𐐏";s:4:"𐐷";s:4:"𐐐";s:4:"𐐸";s:4:"𐐑";s:4:"𐐹";s:4:"𐐒";s:4:"𐐺";s:4:"𐐓";s:4:"𐐻";s:4:"𐐔";s:4:"𐐼";s:4:"𐐕";s:4:"𐐽";s:4:"𐐖";s:4:"𐐾";s:4:"𐐗";s:4:"𐐿";s:4:"𐐘";s:4:"𐑀";s:4:"𐐙";s:4:"𐑁";s:4:"𐐚";s:4:"𐑂";s:4:"𐐛";s:4:"𐑃";s:4:"𐐜";s:4:"𐑄";s:4:"𐐝";s:4:"𐑅";s:4:"𐐞";s:4:"𐑆";s:4:"𐐟";s:4:"𐑇";s:4:"𐐠";s:4:"𐑈";s:4:"𐐡";s:4:"𐑉";s:4:"𐐢";s:4:"𐑊";s:4:"𐐣";s:4:"𐑋";s:4:"𐐤";s:4:"𐑌";s:4:"𐐥";s:4:"𐑍";s:4:"𐐦";s:4:"𐑎";s:4:"𐐧";s:4:"𐑏";}} \ No newline at end of file diff --git a/tests/TestsAutoLoader.php b/tests/TestsAutoLoader.php index 76a6335456..26085b8239 100644 --- a/tests/TestsAutoLoader.php +++ b/tests/TestsAutoLoader.php @@ -32,6 +32,7 @@ $wgAutoloadClasses += [ 'DelayedParserTest' => "$testDir/testHelpers.inc", 'ParserTestResult' => "$testDir/parser/ParserTestResult.php", 'TestFileIterator' => "$testDir/testHelpers.inc", + 'TestFileDataProvider' => "$testDir/testHelpers.inc", 'TestRecorder' => "$testDir/testHelpers.inc", 'ITestRecorder' => "$testDir/testHelpers.inc", 'DjVuSupport' => "$testDir/testHelpers.inc", @@ -105,6 +106,7 @@ $wgAutoloadClasses += [ # tests/phpunit/includes/specials 'SpecialPageTestBase' => "$testDir/phpunit/includes/specials/SpecialPageTestBase.php", + 'SpecialPageExecutor' => "$testDir/phpunit/includes/specials/SpecialPageExecutor.php", # tests/phpunit/languages 'LanguageClassesTestCase' => "$testDir/phpunit/languages/LanguageClassesTestCase.php", diff --git a/tests/parser/extraParserTests.txt b/tests/parser/extraParserTests.txt index bef8f506da..a48087e25d 100644 Binary files a/tests/parser/extraParserTests.txt and b/tests/parser/extraParserTests.txt differ diff --git a/tests/parser/parserTest.inc b/tests/parser/parserTest.inc index 9f453075cb..78e5f6f9c4 100644 --- a/tests/parser/parserTest.inc +++ b/tests/parser/parserTest.inc @@ -195,7 +195,7 @@ class ParserTest { 'transformVia404' => false, 'backend' => new FSFileBackend( [ 'name' => 'local-backend', - 'wikiId' => wfWikiId(), + 'wikiId' => wfWikiID(), 'containerPaths' => [ 'local-public' => $this->uploadDir . '/public', 'local-thumb' => $this->uploadDir . '/thumb', @@ -244,6 +244,10 @@ class ParserTest { // "extra language links" // see https://gerrit.wikimedia.org/r/111390 array_push( $wgExtraInterlanguageLinkPrefixes, 'mul' ); + + // Reset namespace cache + MWNamespace::getCanonicalNamespaces( true ); + Language::factory( 'en' )->resetNamespaces(); } /** @@ -536,7 +540,7 @@ class ParserTest { $result = $this->runTest( $t['test'], $t['input'], $t['result'], $t['options'], $t['config'] ); $ok = $ok && $result; - $this->recorder->record( $t['test'], $result ); + $this->recorder->record( $t['test'], $t['subtest'], $result ); } if ( $this->showProgress ) { @@ -619,6 +623,7 @@ class ParserTest { $titleText = 'Parser test'; } + ObjectCache::getMainWANInstance()->clearProcessCache(); $local = isset( $opts['local'] ); $preprocessor = isset( $opts['preprocessor'] ) ? $opts['preprocessor'] : null; $parser = $this->getParser( $preprocessor ); @@ -849,7 +854,7 @@ class ParserTest { 'transformVia404' => false, 'backend' => new FSFileBackend( [ 'name' => 'local-backend', - 'wikiId' => wfWikiId(), + 'wikiId' => wfWikiID(), 'containerPaths' => [ 'local-public' => $this->uploadDir, 'local-thumb' => $this->uploadDir . '/thumb', @@ -896,7 +901,6 @@ class ParserTest { 'wgExternalLinkTarget' => false, 'wgHtml5' => true, 'wgWellFormedXml' => true, - 'wgAllowMicrodataAttributes' => true, 'wgAdaptiveMessageCache' => true, 'wgDisableLangConversion' => false, 'wgDisableTitleConversion' => false, diff --git a/tests/parser/parserTests.txt b/tests/parser/parserTests.txt index d01ebdffbd..23bdbde92f 100644 --- a/tests/parser/parserTests.txt +++ b/tests/parser/parserTests.txt @@ -18,7 +18,6 @@ # ill add inter-language links # (ignored by Parsoid, since it emits s) # subpage enable subpages (disabled by default) -# noxml don't check for XML well-formedness # title=[[XXX]] run test using article title XXX # language=XXX set content language to XXX for this test # variant=XXX set the variant of language for this test (eg zh-tw) @@ -1541,9 +1540,9 @@ parsoid=html2wt

!! wikitext {{echo|a [ b}} -{{echo|a }} b}} +{{echo|a }} b}} {{echo|a [[ b}} -{{echo|a {{!}} {{ ]]}} +{{echo|a | {{ ]]}} {{echo|a }}} !! end @@ -2520,7 +2519,6 @@ Barack Obama of the United States

!! end -## PHP parser discards the "
 !! html/php
 
x
-
+<pre
+!! html/php+tidy +
+x
+
+

<pre

!! html/parsoid
x
@@ -4773,7 +4776,7 @@ External image !! wikitext External image: http://meta.wikimedia.org/upload/f/f1/Ncwikicol.png !! html -

External image: Ncwikicol.png +

External image: Ncwikicol.png

!! end @@ -4782,7 +4785,7 @@ External image from https !! wikitext External image from https: https://meta.wikimedia.org/upload/f/f1/Ncwikicol.png !! html -

External image from https: Ncwikicol.png +

External image from https: Ncwikicol.png

!! end @@ -4856,7 +4859,7 @@ External links: Clickable images !! wikitext ja-style clickable images: [http://example.com http://meta.wikimedia.org/upload/f/f1/Ncwikicol.png] !! html/php -

ja-style clickable images: Ncwikicol.png +

ja-style clickable images: Ncwikicol.png

!! html/parsoid

ja-style clickable images: Ncwikicol.png

@@ -6330,6 +6333,24 @@ parsoid=wt2html,html2html " onmouseover="alert(document.cookie)">test !! end +!! test +Element attributes with double ! should not be broken up by +!! wikitext +{| +! hi
ha
ho +|} +!! html/php + + +
hi
ha
ho +
+ +!! html/parsoid + + +
hi
ha
ho
+!! end + !! test ! and || in element attributes should not be parsed as / !! wikitext @@ -6567,6 +6588,8 @@ Table with empty line following the start tag !! test Table attributes with empty value +!! options +parsoid=wt2html,html2html !! wikitext {| | style=| hello @@ -6579,11 +6602,8 @@ Table attributes with empty value !! html/parsoid - - -
hello -
- + hello + !! end !! test @@ -10272,7 +10292,7 @@ Template with just whitespace in it, bug #68421 !! wikitext {{echo|{{ }}}} !! html/parsoid -

{{ }}

+

{{ }}

!! end !! article @@ -10509,6 +10529,7 @@ Abort table cell attribute parsing on wikilink {| | testing [[one|two]] | three || four | testing one two | three || four +| testing="[[one|two]]" | three || four |} !! html/php @@ -10518,12 +10539,16 @@ Abort table cell attribute parsing on wikilink + +
three four + testing="two" | three four
!! html/parsoid - + +
testing two | three four three four
three four testing="two" | three four
!! end @@ -12163,7 +12188,7 @@ This template has in it. !! test pre-save transform: unclosed tag !! options -pst noxml +pst !! wikitext '''not wiki''' !! html/php @@ -12173,7 +12198,7 @@ pst noxml !! test pre-save transform: mixed tag case !! options -pst noxml +pst !! wikitext '''not wiki''' !! html/php @@ -12183,7 +12208,7 @@ pst noxml !! test pre-save transform: unclosed comment in !! options -pst noxml +pst !! wikitext wikinowiki", "<!-- Foo -->" ), - array( "", "<!-- Foo --><!-- Bar -->" ), - array( " ", "<!-- Foo --> <!-- Bar -->" ), - array( " \n ", "<!-- Foo --> \n <!-- Bar -->" ), - array( " \n \n", "<!-- Foo --> \n <!-- Bar -->\n" ), - array( " \n", "<!-- Foo --> <!-- Bar -->\n" ), - array( "Bar", "<!-->Bar" ), - array( "\n== Baz ==\n", "== Foo ==\n <!-- Bar -->\n== Baz ==\n" ), - array( "", "gallery" ), - array( "Foo Bar", "Foo gallery Bar" ), - array( "", "gallery</gallery>" ), - array( " ", "<foo> gallery</gallery>" ), - array( " ", "<foo> gallery<gallery></gallery>" ), - array( " Foo bar ", "<noinclude> Foo bar </noinclude>" ), - array( "\n{{Foo}}\n", "<noinclude>\n\n</noinclude>" ), - array( "\n{{Foo}}\n\n", "<noinclude>\n\n</noinclude>\n" ), - array( "foo bar", "galleryfoo bar" ), - array( "<{{foo}}>", "<>" ), - array( "<{{{foo}}}>", "<foo>" ), - array( "", "gallery</gallery</gallery>" ), - array( "=== Foo === ", "=== Foo === " ), - array( "=== Foo === ", "==<!-- -->= Foo === " ), - array( "=== Foo === ", "=== Foo ==<!-- -->= " ), - array( "=== Foo ===\n", "=== Foo ===<!-- -->\n" ), - array( "=== Foo === \n", "=== Foo ===<!-- --> <!-- -->\n" ), - array( "== Foo ==\n== Bar == \n", "== Foo ==\n== Bar == \n" ), - array( "===========", "===========" ), - array( "Foo\n=\n==\n=\n", "Foo\n=\n==\n=\n" ), - array( "{{Foo}}", "" ), - array( "\n{{Foo}}", "\n" ), - array( "{{Foo|bar}}", "" ), - array( "{{Foo|bar}}a", "a" ), - array( "{{Foo|bar|baz}}", "" ), - array( "{{Foo|1=bar}}", "" ), - array( "{{Foo|=bar}}", "" ), - array( "{{Foo|bar=baz}}", "" ), - array( "{{Foo|{{bar}}=baz}}", "" ), - array( "{{Foo|1=bar|baz}}", "" ), - array( "{{Foo|1=bar|2=baz}}", "" ), - array( "{{Foo|bar|foo=baz}}", "" ), - array( "{{{1}}}", "1" ), - array( "{{{1|}}}", "1" ), - array( "{{{Foo}}}", "Foo" ), - array( "{{{Foo|}}}", "Foo" ), - array( "{{{Foo|bar|baz}}}", "Foobarbaz" ), - array( "{{Foo}}", "{<!-- -->{Foo}}" ), - array( "{{{{Foobar}}}}", "{Foobar}" ), - array( "{{{ {{Foo}} }}}", " <template><title>Foo " ), - array( "{{ {{{Foo}}} }}", "" ), - array( "{{{{{Foo}}}}}", "" ), - array( "{{{{{Foo}} }}}", "<template><title>Foo " ), - array( "{{{{{{Foo}}}}}}", "<tplarg><title>Foo" ), - array( "{{{{{{Foo}}}}}", "{" ), - array( "[[[Foo]]", "[[[Foo]]" ), - array( "{{Foo|[[[[bar]]|baz]]}}", "" ), // This test is important, since it means the difference between having the [[ rule stacked or not - array( "{{Foo|[[[[bar]|baz]]}}", "{{Foo|[[[[bar]|baz]]}}" ), - array( "{{Foo|Foo [[[[bar]|baz]]}}", "{{Foo|Foo [[[[bar]|baz]]}}" ), - array( "Foo BarBaz", "Foo display mapBar</display map >Baz" ), - array( "Foo BarBaz", "Foo display map fooBar</display map >Baz" ), - array( "Foo ", "Foo gallery bar="baz" " ), - array( "Foo ", "Foo gallery bar="1" baz=2 " ), - array( "Foo", "/fooFoo<//foo>" ), # Worth blacklisting IMHO - array( "{{#ifexpr: ({{{1|1}}} = 2) | Foo | Bar }}", "" ), - array( "{{#if: {{{1|}}} | Foo | {{Bar}} }}", "" ), - array( "{{#if: {{{1|}}} | Foo | [[Bar]] }}", "" ), - array( "{{#if: {{{1|}}} | [[Foo]] | Bar }}", "" ), - array( "{{#if: {{{1|}}} | 1 | {{#if: {{{1|}}} | 2 | 3 }} }}", "" ), - array( "{{ {{Foo}}", "{{ " ), - array( "{{Foobar {{Foo}} {{Bar}} {{Baz}} ", "{{Foobar " ), - array( "[[Foo]] |", "[[Foo]] |" ), - array( "{{Foo|Bar|", "{{Foo|Bar|" ), - array( "[[Foo]", "[[Foo]" ), - array( "[[Foo|Bar]", "[[Foo|Bar]" ), - array( "{{Foo| [[Bar] }}", "{{Foo| [[Bar] }}" ), - array( "{{Foo| [[Bar|Baz] }}", "{{Foo| [[Bar|Baz] }}" ), - array( "{{Foo|bar=[[baz]}}", "{{Foo|bar=[[baz]}}" ), - array( "{{foo|", "{{foo|" ), - array( "{{foo|}", "{{foo|}" ), - array( "{{foo|} }}", "" ), - array( "{{foo|bar=|}", "{{foo|bar=|}" ), - array( "{{Foo|} Bar=", "{{Foo|} Bar=" ), - array( "{{Foo|} Bar=}}", "" ), - /* array( file_get_contents( __DIR__ . '/QuoteQuran.txt' ), file_get_contents( __DIR__ . '/QuoteQuranExpanded.txt' ) ), */ - ); + return [ + [ "Foo", "Foo" ], + [ "", "<!-- Foo -->" ], + [ "", "<!-- Foo --><!-- Bar -->" ], + [ " ", "<!-- Foo --> <!-- Bar -->" ], + [ " \n ", "<!-- Foo --> \n <!-- Bar -->" ], + [ " \n \n", "<!-- Foo --> \n <!-- Bar -->\n" ], + [ " \n", "<!-- Foo --> <!-- Bar -->\n" ], + [ "Bar", "<!-->Bar" ], + [ "\n== Baz ==\n", "== Foo ==\n <!-- Bar -->\n== Baz ==\n" ], + [ "", "gallery" ], + [ "Foo Bar", "Foo gallery Bar" ], + [ "", "gallery</gallery>" ], + [ " ", "<foo> gallery</gallery>" ], + [ " ", "<foo> gallery<gallery></gallery>" ], + [ " Foo bar ", "<noinclude> Foo bar </noinclude>" ], + [ "\n{{Foo}}\n", "<noinclude>\n\n</noinclude>" ], + [ "\n{{Foo}}\n\n", "<noinclude>\n\n</noinclude>\n" ], + [ "foo bar", "<gallery>foo bar" ], + [ "<{{foo}}>", "<>" ], + [ "<{{{foo}}}>", "<foo>" ], + [ "", "gallery</gallery</gallery>" ], + [ "=== Foo === ", "=== Foo === " ], + [ "=== Foo === ", "==<!-- -->= Foo === " ], + [ "=== Foo === ", "=== Foo ==<!-- -->= " ], + [ "=== Foo ===\n", "=== Foo ===<!-- -->\n" ], + [ "=== Foo === \n", "=== Foo ===<!-- --> <!-- -->\n" ], + [ "== Foo ==\n== Bar == \n", "== Foo ==\n== Bar == \n" ], + [ "===========", "===========" ], + [ "Foo\n=\n==\n=\n", "Foo\n=\n==\n=\n" ], + [ "{{Foo}}", "" ], + [ "\n{{Foo}}", "\n" ], + [ "{{Foo|bar}}", "" ], + [ "{{Foo|bar}}a", "a" ], + [ "{{Foo|bar|baz}}", "" ], + [ "{{Foo|1=bar}}", "" ], + [ "{{Foo|=bar}}", "" ], + [ "{{Foo|bar=baz}}", "" ], + [ "{{Foo|{{bar}}=baz}}", "" ], + [ "{{Foo|1=bar|baz}}", "" ], + [ "{{Foo|1=bar|2=baz}}", "" ], + [ "{{Foo|bar|foo=baz}}", "" ], + [ "{{{1}}}", "1" ], + [ "{{{1|}}}", "1" ], + [ "{{{Foo}}}", "Foo" ], + [ "{{{Foo|}}}", "Foo" ], + [ "{{{Foo|bar|baz}}}", "Foobarbaz" ], + [ "{{Foo}}", "{<!-- -->{Foo}}" ], + [ "{{{{Foobar}}}}", "{Foobar}" ], + [ "{{{ {{Foo}} }}}", " <template><title>Foo " ], + [ "{{ {{{Foo}}} }}", "" ], + [ "{{{{{Foo}}}}}", "" ], + [ "{{{{{Foo}} }}}", "<template><title>Foo " ], + [ "{{{{{{Foo}}}}}}", "<tplarg><title>Foo" ], + [ "{{{{{{Foo}}}}}", "{" ], + [ "[[[Foo]]", "[[[Foo]]" ], + [ "{{Foo|[[[[bar]]|baz]]}}", "" ], // This test is important, since it means the difference between having the [[ rule stacked or not + [ "{{Foo|[[[[bar]|baz]]}}", "{{Foo|[[[[bar]|baz]]}}" ], + [ "{{Foo|Foo [[[[bar]|baz]]}}", "{{Foo|Foo [[[[bar]|baz]]}}" ], + [ "Foo BarBaz", "Foo display mapBar</display map >Baz" ], + [ "Foo BarBaz", "Foo display map fooBar</display map >Baz" ], + [ "Foo ", "Foo gallery bar="baz" " ], + [ "Foo ", "Foo gallery bar="1" baz=2 " ], + [ "Foo", "/fooFoo<//foo>" ], # Worth blacklisting IMHO + [ "{{#ifexpr: ({{{1|1}}} = 2) | Foo | Bar }}", "" ], + [ "{{#if: {{{1|}}} | Foo | {{Bar}} }}", "" ], + [ "{{#if: {{{1|}}} | Foo | [[Bar]] }}", "" ], + [ "{{#if: {{{1|}}} | [[Foo]] | Bar }}", "" ], + [ "{{#if: {{{1|}}} | 1 | {{#if: {{{1|}}} | 2 | 3 }} }}", "" ], + [ "{{ {{Foo}}", "{{ " ], + [ "{{Foobar {{Foo}} {{Bar}} {{Baz}} ", "{{Foobar " ], + [ "[[Foo]] |", "[[Foo]] |" ], + [ "{{Foo|Bar|", "{{Foo|Bar|" ], + [ "[[Foo]", "[[Foo]" ], + [ "[[Foo|Bar]", "[[Foo|Bar]" ], + [ "{{Foo| [[Bar] }}", "{{Foo| [[Bar] }}" ], + [ "{{Foo| [[Bar|Baz] }}", "{{Foo| [[Bar|Baz] }}" ], + [ "{{Foo|bar=[[baz]}}", "{{Foo|bar=[[baz]}}" ], + [ "{{foo|", "{{foo|" ], + [ "{{foo|}", "{{foo|}" ], + [ "{{foo|} }}", "" ], + [ "{{foo|bar=|}", "{{foo|bar=|}" ], + [ "{{Foo|} Bar=", "{{Foo|} Bar=" ], + [ "{{Foo|} Bar=}}", "" ], + /* [ file_get_contents( __DIR__ . '/QuoteQuran.txt' ], file_get_contents( __DIR__ . '/QuoteQuranExpanded.txt' ) ], */ + ]; // @codingStandardsIgnoreEnd } @@ -162,13 +162,13 @@ class PreprocessorTest extends MediaWikiTestCase { */ public static function provideFiles() { // @codingStandardsIgnoreStart Ignore Generic.Files.LineLength.TooLong - return array( - array( "QuoteQuran" ), # http://en.wikipedia.org/w/index.php?title=Template:QuoteQuran/sandbox&oldid=237348988 GFDL + CC BY-SA by Striver - array( "Factorial" ), # http://en.wikipedia.org/w/index.php?title=Template:Factorial&oldid=98548758 GFDL + CC BY-SA by Polonium - array( "All_system_messages" ), # http://tl.wiktionary.org/w/index.php?title=Suleras:All_system_messages&oldid=2765 GPL text generated by MediaWiki - array( "Fundraising" ), # http://tl.wiktionary.org/w/index.php?title=MediaWiki:Sitenotice&oldid=5716 GFDL + CC BY-SA, copied there by Sky Harbor. - array( "NestedTemplates" ), # bug 27936 - ); + return [ + [ "QuoteQuran" ], # http://en.wikipedia.org/w/index.php?title=Template:QuoteQuran/sandbox&oldid=237348988 GFDL + CC BY-SA by Striver + [ "Factorial" ], # http://en.wikipedia.org/w/index.php?title=Template:Factorial&oldid=98548758 GFDL + CC BY-SA by Polonium + [ "All_system_messages" ], # http://tl.wiktionary.org/w/index.php?title=Suleras:All_system_messages&oldid=2765 GPL text generated by MediaWiki + [ "Fundraising" ], # http://tl.wiktionary.org/w/index.php?title=MediaWiki:Sitenotice&oldid=5716 GFDL + CC BY-SA, copied there by Sky Harbor. + [ "NestedTemplates" ], # bug 27936 + ]; // @codingStandardsIgnoreEnd } @@ -197,43 +197,43 @@ class PreprocessorTest extends MediaWikiTestCase { */ public static function provideHeadings() { // @codingStandardsIgnoreStart Ignore Generic.Files.LineLength.TooLong - return array( /* These should become headings: */ - array( "== h ==", "== h ==<!--c1-->" ), - array( "== h == ", "== h == <!--c1-->" ), - array( "== h == ", "== h ==<!--c1--> " ), - array( "== h == ", "== h == <!--c1--> " ), - array( "== h ==", "== h ==<!--c1--><!--c2-->" ), - array( "== h == ", "== h == <!--c1--><!--c2-->" ), - array( "== h == ", "== h ==<!--c1--><!--c2--> " ), - array( "== h == ", "== h == <!--c1--><!--c2--> " ), - array( "== h == ", "== h == <!--c1--> <!--c2-->" ), - array( "== h == ", "== h ==<!--c1--> <!--c2--> " ), - array( "== h == ", "== h == <!--c1--> <!--c2--> " ), - array( "== h ==", "== h ==<!--c1--><!--c2--><!--c3-->" ), - array( "== h == ", "== h ==<!--c1--> <!--c2--><!--c3-->" ), - array( "== h == ", "== h ==<!--c1--><!--c2--> <!--c3-->" ), - array( "== h == ", "== h ==<!--c1--> <!--c2--> <!--c3-->" ), - array( "== h == ", "== h == <!--c1--><!--c2--><!--c3-->" ), - array( "== h == ", "== h == <!--c1--> <!--c2--><!--c3-->" ), - array( "== h == ", "== h == <!--c1--><!--c2--> <!--c3-->" ), - array( "== h == ", "== h == <!--c1--> <!--c2--> <!--c3-->" ), - array( "== h == ", "== h ==<!--c1--><!--c2--><!--c3--> " ), - array( "== h == ", "== h ==<!--c1--> <!--c2--><!--c3--> " ), - array( "== h == ", "== h ==<!--c1--><!--c2--> <!--c3--> " ), - array( "== h == ", "== h ==<!--c1--> <!--c2--> <!--c3--> " ), - array( "== h == ", "== h == <!--c1--><!--c2--><!--c3--> " ), - array( "== h == ", "== h == <!--c1--> <!--c2--><!--c3--> " ), - array( "== h == ", "== h == <!--c1--><!--c2--> <!--c3--> " ), - array( "== h == ", "== h == <!--c1--> <!--c2--> <!--c3--> " ), - array( "== h == ", "== h ==<!--c1--> <!--c2-->" ), - array( "== h == ", "== h == <!--c1--> <!--c2-->" ), - array( "== h == ", "== h ==<!--c1--> <!--c2--> " ), + return [ /* These should become headings: */ + [ "== h ==", "== h ==<!--c1-->" ], + [ "== h == ", "== h == <!--c1-->" ], + [ "== h == ", "== h ==<!--c1--> " ], + [ "== h == ", "== h == <!--c1--> " ], + [ "== h ==", "== h ==<!--c1--><!--c2-->" ], + [ "== h == ", "== h == <!--c1--><!--c2-->" ], + [ "== h == ", "== h ==<!--c1--><!--c2--> " ], + [ "== h == ", "== h == <!--c1--><!--c2--> " ], + [ "== h == ", "== h == <!--c1--> <!--c2-->" ], + [ "== h == ", "== h ==<!--c1--> <!--c2--> " ], + [ "== h == ", "== h == <!--c1--> <!--c2--> " ], + [ "== h ==", "== h ==<!--c1--><!--c2--><!--c3-->" ], + [ "== h == ", "== h ==<!--c1--> <!--c2--><!--c3-->" ], + [ "== h == ", "== h ==<!--c1--><!--c2--> <!--c3-->" ], + [ "== h == ", "== h ==<!--c1--> <!--c2--> <!--c3-->" ], + [ "== h == ", "== h == <!--c1--><!--c2--><!--c3-->" ], + [ "== h == ", "== h == <!--c1--> <!--c2--><!--c3-->" ], + [ "== h == ", "== h == <!--c1--><!--c2--> <!--c3-->" ], + [ "== h == ", "== h == <!--c1--> <!--c2--> <!--c3-->" ], + [ "== h == ", "== h ==<!--c1--><!--c2--><!--c3--> " ], + [ "== h == ", "== h ==<!--c1--> <!--c2--><!--c3--> " ], + [ "== h == ", "== h ==<!--c1--><!--c2--> <!--c3--> " ], + [ "== h == ", "== h ==<!--c1--> <!--c2--> <!--c3--> " ], + [ "== h == ", "== h == <!--c1--><!--c2--><!--c3--> " ], + [ "== h == ", "== h == <!--c1--> <!--c2--><!--c3--> " ], + [ "== h == ", "== h == <!--c1--><!--c2--> <!--c3--> " ], + [ "== h == ", "== h == <!--c1--> <!--c2--> <!--c3--> " ], + [ "== h == ", "== h ==<!--c1--> <!--c2-->" ], + [ "== h == ", "== h == <!--c1--> <!--c2-->" ], + [ "== h == ", "== h ==<!--c1--> <!--c2--> " ], /* These are not working: */ - array( "== h == x ", "== h == x <!--c1--><!--c2--><!--c3--> " ), - array( "== h == x ", "== h ==<!--c1--> x <!--c2--><!--c3--> " ), - array( "== h == x ", "== h ==<!--c1--><!--c2--><!--c3--> x " ), - ); + [ "== h == x ", "== h == x <!--c1--><!--c2--><!--c3--> " ], + [ "== h == x ", "== h ==<!--c1--> x <!--c2--><!--c3--> " ], + [ "== h == x ", "== h ==<!--c1--><!--c2--><!--c3--> x " ], + ]; // @codingStandardsIgnoreEnd } diff --git a/tests/phpunit/includes/password/BcryptPasswordTest.php b/tests/phpunit/includes/password/BcryptPasswordTest.php index d6940b58f3..8f80362470 100644 --- a/tests/phpunit/includes/password/BcryptPasswordTest.php +++ b/tests/phpunit/includes/password/BcryptPasswordTest.php @@ -13,28 +13,28 @@ class BcryptPasswordTest extends PasswordTestCase { public static function providePasswordTests() { // @codingStandardsIgnoreStart Generic.Files.LineLength - return array( + return [ // Tests from glibc bcrypt implementation - array( true, ':bcrypt:5$CCCCCCCCCCCCCCCCCCCCC.$E5YPO9kmyuRGyh0XouQYb4YMJKvyOeW', "U*U" ), - array( true, ':bcrypt:5$CCCCCCCCCCCCCCCCCCCCC.$VGOzA784oUp/Z0DY336zx7pLYAy0lwK', "U*U*" ), - array( true, ':bcrypt:5$XXXXXXXXXXXXXXXXXXXXXO$AcXxm9kjPGEMsLznoKqmqw7tc8WCx4a', "U*U*U" ), - array( true, ':bcrypt:5$abcdefghijklmnopqrstuu$5s2v8.iXieOjg/.AySBTTZIIVFJeBui', "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789chars after 72 are ignored" ), - array( true, ':bcrypt:5$/OK.fbVrR/bpIqNJ5ianF.$CE5elHaaO4EbggVDjb8P19RukzXSM3e', "\xff\xff\xa3" ), - array( true, ':bcrypt:5$/OK.fbVrR/bpIqNJ5ianF.$Sa7shbm4.OzKpvFnX1pQLmQW96oUlCq', "\xa3" ), - array( true, ':bcrypt:5$/OK.fbVrR/bpIqNJ5ianF.$Sa7shbm4.OzKpvFnX1pQLmQW96oUlCq', "\xa3" ), - array( true, ':bcrypt:5$/OK.fbVrR/bpIqNJ5ianF.$o./n25XVfn6oAPaUvHe.Csk4zRfsYPi', "\xff\xa334\xff\xff\xff\xa3345" ), - array( true, ':bcrypt:5$/OK.fbVrR/bpIqNJ5ianF.$nRht2l/HRhr6zmCp9vYUvvsqynflf9e', "\xff\xa3345" ), - array( true, ':bcrypt:5$/OK.fbVrR/bpIqNJ5ianF.$nRht2l/HRhr6zmCp9vYUvvsqynflf9e', "\xff\xa3345" ), - array( true, ':bcrypt:5$/OK.fbVrR/bpIqNJ5ianF.$6IflQkJytoRVc1yuaNtHfiuq.FRlSIS', "\xa3ab" ), - array( true, ':bcrypt:5$/OK.fbVrR/bpIqNJ5ianF.$6IflQkJytoRVc1yuaNtHfiuq.FRlSIS', "\xa3ab" ), - array( true, ':bcrypt:5$/OK.fbVrR/bpIqNJ5ianF.$swQOIzjOiJ9GHEPuhEkvqrUyvWhEMx6', "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaachars after 72 are ignored as usual" ), - array( true, ':bcrypt:5$/OK.fbVrR/bpIqNJ5ianF.$R9xrDjiycxMbQE2bp.vgqlYpW5wx2yy', "\xaa\x55\xaa\x55\xaa\x55\xaa\x55\xaa\x55\xaa\x55\xaa\x55\xaa\x55\xaa\x55\xaa\x55\xaa\x55\xaa\x55\xaa\x55\xaa\x55\xaa\x55\xaa\x55\xaa\x55\xaa\x55\xaa\x55\xaa\x55\xaa\x55\xaa\x55\xaa\x55\xaa\x55\xaa\x55\xaa\x55\xaa\x55\xaa\x55\xaa\x55\xaa\x55\xaa\x55\xaa\x55\xaa\x55\xaa\x55\xaa\x55\xaa\x55" ), - array( true, ':bcrypt:5$/OK.fbVrR/bpIqNJ5ianF.$9tQZzcJfm3uj2NvJ/n5xkhpqLrMpWCe', "\x55\xaa\xff\x55\xaa\xff\x55\xaa\xff\x55\xaa\xff\x55\xaa\xff\x55\xaa\xff\x55\xaa\xff\x55\xaa\xff\x55\xaa\xff\x55\xaa\xff\x55\xaa\xff\x55\xaa\xff\x55\xaa\xff\x55\xaa\xff\x55\xaa\xff\x55\xaa\xff\x55\xaa\xff\x55\xaa\xff\x55\xaa\xff\x55\xaa\xff\x55\xaa\xff\x55\xaa\xff\x55\xaa\xff\x55\xaa\xff" ), - array( true, ':bcrypt:5$CCCCCCCCCCCCCCCCCCCCC.$7uG0VCzI2bS7j6ymqJi9CdcdxiRTWNy', "" ), + [ true, ':bcrypt:5$CCCCCCCCCCCCCCCCCCCCC.$E5YPO9kmyuRGyh0XouQYb4YMJKvyOeW', "U*U" ], + [ true, ':bcrypt:5$CCCCCCCCCCCCCCCCCCCCC.$VGOzA784oUp/Z0DY336zx7pLYAy0lwK', "U*U*" ], + [ true, ':bcrypt:5$XXXXXXXXXXXXXXXXXXXXXO$AcXxm9kjPGEMsLznoKqmqw7tc8WCx4a', "U*U*U" ], + [ true, ':bcrypt:5$abcdefghijklmnopqrstuu$5s2v8.iXieOjg/.AySBTTZIIVFJeBui', "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789chars after 72 are ignored" ], + [ true, ':bcrypt:5$/OK.fbVrR/bpIqNJ5ianF.$CE5elHaaO4EbggVDjb8P19RukzXSM3e', "\xff\xff\xa3" ], + [ true, ':bcrypt:5$/OK.fbVrR/bpIqNJ5ianF.$Sa7shbm4.OzKpvFnX1pQLmQW96oUlCq', "\xa3" ], + [ true, ':bcrypt:5$/OK.fbVrR/bpIqNJ5ianF.$Sa7shbm4.OzKpvFnX1pQLmQW96oUlCq', "\xa3" ], + [ true, ':bcrypt:5$/OK.fbVrR/bpIqNJ5ianF.$o./n25XVfn6oAPaUvHe.Csk4zRfsYPi', "\xff\xa334\xff\xff\xff\xa3345" ], + [ true, ':bcrypt:5$/OK.fbVrR/bpIqNJ5ianF.$nRht2l/HRhr6zmCp9vYUvvsqynflf9e', "\xff\xa3345" ], + [ true, ':bcrypt:5$/OK.fbVrR/bpIqNJ5ianF.$nRht2l/HRhr6zmCp9vYUvvsqynflf9e', "\xff\xa3345" ], + [ true, ':bcrypt:5$/OK.fbVrR/bpIqNJ5ianF.$6IflQkJytoRVc1yuaNtHfiuq.FRlSIS', "\xa3ab" ], + [ true, ':bcrypt:5$/OK.fbVrR/bpIqNJ5ianF.$6IflQkJytoRVc1yuaNtHfiuq.FRlSIS', "\xa3ab" ], + [ true, ':bcrypt:5$/OK.fbVrR/bpIqNJ5ianF.$swQOIzjOiJ9GHEPuhEkvqrUyvWhEMx6', "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaachars after 72 are ignored as usual" ], + [ true, ':bcrypt:5$/OK.fbVrR/bpIqNJ5ianF.$R9xrDjiycxMbQE2bp.vgqlYpW5wx2yy', "\xaa\x55\xaa\x55\xaa\x55\xaa\x55\xaa\x55\xaa\x55\xaa\x55\xaa\x55\xaa\x55\xaa\x55\xaa\x55\xaa\x55\xaa\x55\xaa\x55\xaa\x55\xaa\x55\xaa\x55\xaa\x55\xaa\x55\xaa\x55\xaa\x55\xaa\x55\xaa\x55\xaa\x55\xaa\x55\xaa\x55\xaa\x55\xaa\x55\xaa\x55\xaa\x55\xaa\x55\xaa\x55\xaa\x55\xaa\x55\xaa\x55\xaa\x55" ], + [ true, ':bcrypt:5$/OK.fbVrR/bpIqNJ5ianF.$9tQZzcJfm3uj2NvJ/n5xkhpqLrMpWCe', "\x55\xaa\xff\x55\xaa\xff\x55\xaa\xff\x55\xaa\xff\x55\xaa\xff\x55\xaa\xff\x55\xaa\xff\x55\xaa\xff\x55\xaa\xff\x55\xaa\xff\x55\xaa\xff\x55\xaa\xff\x55\xaa\xff\x55\xaa\xff\x55\xaa\xff\x55\xaa\xff\x55\xaa\xff\x55\xaa\xff\x55\xaa\xff\x55\xaa\xff\x55\xaa\xff\x55\xaa\xff\x55\xaa\xff\x55\xaa\xff" ], + [ true, ':bcrypt:5$CCCCCCCCCCCCCCCCCCCCC.$7uG0VCzI2bS7j6ymqJi9CdcdxiRTWNy', "" ], // One or two false sanity tests - array( false, ':bcrypt:5$CCCCCCCCCCCCCCCCCCCCC.$E5YPO9kmyuRGyh0XouQYb4YMJKvyOeW', "UXU" ), - array( false, ':bcrypt:5$CCCCCCCCCCCCCCCCCCCCC.$E5YPO9kmyuRGyh0XouQYb4YMJKvyOeW', "" ), - ); + [ false, ':bcrypt:5$CCCCCCCCCCCCCCCCCCCCC.$E5YPO9kmyuRGyh0XouQYb4YMJKvyOeW', "UXU" ], + [ false, ':bcrypt:5$CCCCCCCCCCCCCCCCCCCCC.$E5YPO9kmyuRGyh0XouQYb4YMJKvyOeW', "" ], + ]; // @codingStandardsIgnoreEnd } } diff --git a/tests/phpunit/includes/password/LayeredParameterizedPasswordTest.php b/tests/phpunit/includes/password/LayeredParameterizedPasswordTest.php index cccec5fb5c..773f033abb 100644 --- a/tests/phpunit/includes/password/LayeredParameterizedPasswordTest.php +++ b/tests/phpunit/includes/password/LayeredParameterizedPasswordTest.php @@ -28,9 +28,13 @@ class LayeredParameterizedPasswordTest extends PasswordTestCase { public static function providePasswordTests() { // @codingStandardsIgnoreStart Generic.Files.LineLength.TooLong - return array( - array( true, ':testLargeLayeredTop:sha512:1024:512!sha512:1024:512!sha512:1024:512!sha512:1024:512!5!vnRy+2SrSA0fHt3dwhTP5g==!AVnwfZsAQjn+gULv7FSGjA==!xvHUX3WcpkeSn1lvjWcvBg==!It+OC/N9tu+d3ByHhuB0BQ==!Tb.gqUOiD.aWktVwHM.Q/O!7CcyMfXUPky5ptyATJsR2nq3vUqtnBC', 'testPassword123' ), - ); + return [ + [ + true, + ':testLargeLayeredTop:sha512:1024:512!sha512:1024:512!sha512:1024:512!sha512:1024:512!5!vnRy+2SrSA0fHt3dwhTP5g==!AVnwfZsAQjn+gULv7FSGjA==!xvHUX3WcpkeSn1lvjWcvBg==!It+OC/N9tu+d3ByHhuB0BQ==!Tb.gqUOiD.aWktVwHM.Q/O!7CcyMfXUPky5ptyATJsR2nq3vUqtnBC', + 'testPassword123' + ], + ]; // @codingStandardsIgnoreEnd } diff --git a/tests/phpunit/includes/password/PasswordPolicyChecksTest.php b/tests/phpunit/includes/password/PasswordPolicyChecksTest.php index af34282fb3..6357510f4f 100644 --- a/tests/phpunit/includes/password/PasswordPolicyChecksTest.php +++ b/tests/phpunit/includes/password/PasswordPolicyChecksTest.php @@ -42,7 +42,7 @@ class PasswordPolicyChecksTest extends MediaWikiTestCase { 'Password is shorter than minimal policy' ); $this->assertTrue( - $statusShort->isOk(), + $statusShort->isOK(), 'Password is shorter than minimal policy, not fatal' ); } @@ -67,7 +67,7 @@ class PasswordPolicyChecksTest extends MediaWikiTestCase { 'Password is shorter than minimum login policy' ); $this->assertFalse( - $statusShort->isOk(), + $statusShort->isOK(), 'Password is shorter than minimum login policy, fatal' ); } @@ -90,7 +90,7 @@ class PasswordPolicyChecksTest extends MediaWikiTestCase { $this->assertFalse( $statusLong->isGood(), 'Password is longer than maximal policy' ); - $this->assertFalse( $statusLong->isOk(), + $this->assertFalse( $statusLong->isOK(), 'Password is longer than maximal policy, fatal' ); } @@ -111,7 +111,7 @@ class PasswordPolicyChecksTest extends MediaWikiTestCase { 'user' // password ); $this->assertFalse( $statusLong->isGood(), 'Password matches username' ); - $this->assertTrue( $statusLong->isOk(), 'Password matches username, not fatal' ); + $this->assertTrue( $statusLong->isOK(), 'Password matches username, not fatal' ); } /** @@ -130,7 +130,7 @@ class PasswordPolicyChecksTest extends MediaWikiTestCase { 'Passpass1' // password ); $this->assertFalse( $statusLong->isGood(), 'Password matches blacklist' ); - $this->assertTrue( $statusLong->isOk(), 'Password matches blacklist, not fatal' ); + $this->assertTrue( $statusLong->isOK(), 'Password matches blacklist, not fatal' ); } } diff --git a/tests/phpunit/includes/password/UserPasswordPolicyTest.php b/tests/phpunit/includes/password/UserPasswordPolicyTest.php index d820040b74..d16200beb6 100644 --- a/tests/phpunit/includes/password/UserPasswordPolicyTest.php +++ b/tests/phpunit/includes/password/UserPasswordPolicyTest.php @@ -112,7 +112,7 @@ class UserPasswordPolicyTest extends MediaWikiTestCase { $status = $upp->checkUserPassword( $user, $password ); $this->assertSame( $valid, $status->isGood(), $msg . ' - password valid' ); - $this->assertSame( $ok, $status->isOk(), $msg . ' - can login' ); + $this->assertSame( $ok, $status->isOK(), $msg . ' - can login' ); } public function provideCheckUserPassword() { diff --git a/tests/phpunit/includes/resourceloader/ResourceLoaderTest.php b/tests/phpunit/includes/resourceloader/ResourceLoaderTest.php index 2dfed62c18..65cd6edaf9 100644 --- a/tests/phpunit/includes/resourceloader/ResourceLoaderTest.php +++ b/tests/phpunit/includes/resourceloader/ResourceLoaderTest.php @@ -188,7 +188,7 @@ class ResourceLoaderTest extends ResourceLoaderTestCase { 'messages' => [ 'example' => '' ], 'templates' => [], - 'expected' => 'mw.loader.implement( "test.example", function ( $, jQuery ) { + 'expected' => 'mw.loader.implement( "test.example", function ( $, jQuery, require, module ) { mw.example(); }, { "css": [ @@ -207,7 +207,7 @@ mw.example(); 'messages' => new XmlJsCode( '{}' ), 'templates' => [], - 'expected' => 'mw.loader.implement( "test.example", function ( $, jQuery ) { + 'expected' => 'mw.loader.implement( "test.example", function ( $, jQuery, require, module ) { mw.example(); } );', ] ], @@ -235,7 +235,7 @@ mw.example(); 'messages' => [ 'example' => '' ], 'templates' => [], - 'expected' => 'mw.loader.implement( "test.example", function ( $, jQuery ) { + 'expected' => 'mw.loader.implement( "test.example", function ( $, jQuery, require, module ) { mw.example(); }, {}, { "example": "" @@ -250,7 +250,7 @@ mw.example(); 'messages' => new XmlJsCode( '{}' ), 'templates' => [ 'example.html' => '' ], - 'expected' => 'mw.loader.implement( "test.example", function ( $, jQuery ) { + 'expected' => 'mw.loader.implement( "test.example", function ( $, jQuery, require, module ) { mw.example(); }, {}, {}, { "example.html": "" diff --git a/tests/phpunit/includes/session/BotPasswordSessionProviderTest.php b/tests/phpunit/includes/session/BotPasswordSessionProviderTest.php index 5126a42138..edab0dcf4a 100644 --- a/tests/phpunit/includes/session/BotPasswordSessionProviderTest.php +++ b/tests/phpunit/includes/session/BotPasswordSessionProviderTest.php @@ -33,8 +33,8 @@ class BotPasswordSessionProviderTest extends MediaWikiTestCase { 'EnableBotPasswords' => true, 'BotPasswordsDatabase' => false, 'SessionProviders' => $wgSessionProviders + [ - 'MediaWiki\\Session\\BotPasswordSessionProvider' => [ - 'class' => 'MediaWiki\\Session\\BotPasswordSessionProvider', + BotPasswordSessionProvider::class => [ + 'class' => BotPasswordSessionProvider::class, 'args' => [ $params ], ] ], @@ -46,7 +46,7 @@ class BotPasswordSessionProviderTest extends MediaWikiTestCase { 'store' => new TestBagOStuff, ] ); - return $manager->getProvider( 'MediaWiki\\Session\\BotPasswordSessionProvider' ); + return $manager->getProvider( BotPasswordSessionProvider::class ); } protected function setUp() { @@ -154,7 +154,7 @@ class BotPasswordSessionProviderTest extends MediaWikiTestCase { public function testBasics() { $provider = $this->getProvider(); - $this->assertTrue( $provider->persistsSessionID() ); + $this->assertTrue( $provider->persistsSessionId() ); $this->assertFalse( $provider->canChangeUser() ); $this->assertNull( $provider->newSessionInfo() ); @@ -172,7 +172,7 @@ class BotPasswordSessionProviderTest extends MediaWikiTestCase { } $info = $provider->provideSessionInfo( $request ); - $this->assertInstanceOf( 'MediaWiki\\Session\\SessionInfo', $info ); + $this->assertInstanceOf( SessionInfo::class, $info ); $this->assertSame( 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa', $info->getId() ); $this->config->set( 'EnableBotPasswords', false ); @@ -191,7 +191,7 @@ class BotPasswordSessionProviderTest extends MediaWikiTestCase { $bp = \BotPassword::newFromUser( $user, 'BotPasswordSessionProvider' ); $session = $provider->newSessionForRequest( $user, $bp, $request ); - $this->assertInstanceOf( 'MediaWiki\\Session\\Session', $session ); + $this->assertInstanceOf( Session::class, $session ); $this->assertEquals( $session->getId(), $request->getSession()->getId() ); $this->assertEquals( $user->getName(), $session->getUser()->getName() ); diff --git a/tests/phpunit/includes/session/CookieSessionProviderTest.php b/tests/phpunit/includes/session/CookieSessionProviderTest.php index a52aa4bbbe..70e89d4b0f 100644 --- a/tests/phpunit/includes/session/CookieSessionProviderTest.php +++ b/tests/phpunit/includes/session/CookieSessionProviderTest.php @@ -145,7 +145,7 @@ class CookieSessionProviderTest extends MediaWikiTestCase { public function testBasics() { $provider = new CookieSessionProvider( [ 'priority' => 10 ] ); - $this->assertTrue( $provider->persistsSessionID() ); + $this->assertTrue( $provider->persistsSessionId() ); $this->assertTrue( $provider->canChangeUser() ); $msg = $provider->whyNoSession(); diff --git a/tests/phpunit/includes/session/ImmutableSessionProviderWithCookieTest.php b/tests/phpunit/includes/session/ImmutableSessionProviderWithCookieTest.php index 2412a3b68e..d705fc0191 100644 --- a/tests/phpunit/includes/session/ImmutableSessionProviderWithCookieTest.php +++ b/tests/phpunit/includes/session/ImmutableSessionProviderWithCookieTest.php @@ -24,7 +24,7 @@ class ImmutableSessionProviderWithCookieTest extends MediaWikiTestCase { $params['sessionCookieOptions']['prefix'] = $prefix; } - $provider = $this->getMockBuilder( 'MediaWiki\\Session\\ImmutableSessionProviderWithCookie' ) + $provider = $this->getMockBuilder( ImmutableSessionProviderWithCookie::class ) ->setConstructorArgs( [ $params ] ) ->getMockForAbstractClass(); $provider->setLogger( new \TestLogger() ); @@ -35,13 +35,13 @@ class ImmutableSessionProviderWithCookieTest extends MediaWikiTestCase { } public function testConstructor() { - $provider = $this->getMockBuilder( 'MediaWiki\\Session\\ImmutableSessionProviderWithCookie' ) + $provider = $this->getMockBuilder( ImmutableSessionProviderWithCookie::class ) ->getMockForAbstractClass(); $priv = \TestingAccessWrapper::newFromObject( $provider ); $this->assertNull( $priv->sessionCookieName ); $this->assertSame( [], $priv->sessionCookieOptions ); - $provider = $this->getMockBuilder( 'MediaWiki\\Session\\ImmutableSessionProviderWithCookie' ) + $provider = $this->getMockBuilder( ImmutableSessionProviderWithCookie::class ) ->setConstructorArgs( [ [ 'sessionCookieName' => 'Foo', 'sessionCookieOptions' => [ 'Bar' ], @@ -52,7 +52,7 @@ class ImmutableSessionProviderWithCookieTest extends MediaWikiTestCase { $this->assertSame( [ 'Bar' ], $priv->sessionCookieOptions ); try { - $provider = $this->getMockBuilder( 'MediaWiki\\Session\\ImmutableSessionProviderWithCookie' ) + $provider = $this->getMockBuilder( ImmutableSessionProviderWithCookie::class ) ->setConstructorArgs( [ [ 'sessionCookieName' => false, ] ] ) @@ -66,7 +66,7 @@ class ImmutableSessionProviderWithCookieTest extends MediaWikiTestCase { } try { - $provider = $this->getMockBuilder( 'MediaWiki\\Session\\ImmutableSessionProviderWithCookie' ) + $provider = $this->getMockBuilder( ImmutableSessionProviderWithCookie::class ) ->setConstructorArgs( [ [ 'sessionCookieOptions' => 'x', ] ] ) diff --git a/tests/phpunit/includes/session/PHPSessionHandlerTest.php b/tests/phpunit/includes/session/PHPSessionHandlerTest.php index 64b16db844..ce0f1b0611 100644 --- a/tests/phpunit/includes/session/PHPSessionHandlerTest.php +++ b/tests/phpunit/includes/session/PHPSessionHandlerTest.php @@ -23,7 +23,7 @@ class PHPSessionHandlerTest extends MediaWikiTestCase { } ); $reset[] = new \ScopedCallback( 'restore_error_handler' ); - $rProp = new \ReflectionProperty( 'MediaWiki\\Session\\PHPSessionHandler', 'instance' ); + $rProp = new \ReflectionProperty( PHPSessionHandler::class, 'instance' ); $rProp->setAccessible( true ); if ( $rProp->getValue() ) { $old = \TestingAccessWrapper::newFromObject( $rProp->getValue() ); @@ -31,7 +31,7 @@ class PHPSessionHandlerTest extends MediaWikiTestCase { $oldStore = $old->store; $oldLogger = $old->logger; $reset[] = new \ScopedCallback( - [ 'MediaWiki\\Session\\PHPSessionHandler', 'install' ], + [ PHPSessionHandler::class, 'install' ], [ $oldManager, $oldStore, $oldLogger ] ); } @@ -41,13 +41,13 @@ class PHPSessionHandlerTest extends MediaWikiTestCase { public function testEnableFlags() { $handler = \TestingAccessWrapper::newFromObject( - $this->getMockBuilder( 'MediaWiki\\Session\\PHPSessionHandler' ) + $this->getMockBuilder( PHPSessionHandler::class ) ->setMethods( null ) ->disableOriginalConstructor() ->getMock() ); - $rProp = new \ReflectionProperty( 'MediaWiki\\Session\\PHPSessionHandler', 'instance' ); + $rProp = new \ReflectionProperty( PHPSessionHandler::class, 'instance' ); $rProp->setAccessible( true ); $reset = new \ScopedCallback( [ $rProp, 'setValue' ], [ $rProp->getValue() ] ); $rProp->setValue( $handler ); @@ -292,7 +292,9 @@ class PHPSessionHandlerTest extends MediaWikiTestCase { // Test that write doesn't break if the session is invalid $session = $manager->getEmptySession(); $session->persist(); - session_id( $session->getId() ); + $id = $session->getId(); + unset( $session ); + session_id( $id ); session_start(); $this->mergeMwGlobalArrayValue( 'wgHooks', [ 'SessionCheckInfo' => [ function ( &$reason ) { @@ -300,12 +302,13 @@ class PHPSessionHandlerTest extends MediaWikiTestCase { return false; } ], ] ); - $this->assertNull( $manager->getSessionById( $session->getId(), true ), 'sanity check' ); + $this->assertNull( $manager->getSessionById( $id, true ), 'sanity check' ); session_write_close(); + $this->mergeMwGlobalArrayValue( 'wgHooks', [ 'SessionCheckInfo' => [], ] ); - $this->assertNotNull( $manager->getSessionById( $session->getId(), true ), 'sanity check' ); + $this->assertNotNull( $manager->getSessionById( $id, true ), 'sanity check' ); } public static function provideHandlers() { @@ -322,9 +325,9 @@ class PHPSessionHandlerTest extends MediaWikiTestCase { * @expectedExceptionMessage Attempt to use PHP session management */ public function testDisabled( $method, $args ) { - $rProp = new \ReflectionProperty( 'MediaWiki\\Session\\PHPSessionHandler', 'instance' ); + $rProp = new \ReflectionProperty( PHPSessionHandler::class, 'instance' ); $rProp->setAccessible( true ); - $handler = $this->getMockBuilder( 'MediaWiki\\Session\\PHPSessionHandler' ) + $handler = $this->getMockBuilder( PHPSessionHandler::class ) ->setMethods( null ) ->disableOriginalConstructor() ->getMock(); @@ -351,7 +354,7 @@ class PHPSessionHandlerTest extends MediaWikiTestCase { * @expectedExceptionMessageRegExp /: Wrong instance called!$/ */ public function testWrongInstance( $method, $args ) { - $handler = $this->getMockBuilder( 'MediaWiki\\Session\\PHPSessionHandler' ) + $handler = $this->getMockBuilder( PHPSessionHandler::class ) ->setMethods( null ) ->disableOriginalConstructor() ->getMock(); diff --git a/tests/phpunit/includes/session/SessionBackendTest.php b/tests/phpunit/includes/session/SessionBackendTest.php index 61be8e07c1..0b5f4c2f8f 100644 --- a/tests/phpunit/includes/session/SessionBackendTest.php +++ b/tests/phpunit/includes/session/SessionBackendTest.php @@ -23,8 +23,9 @@ class SessionBackendTest extends MediaWikiTestCase { /** * Returns a non-persistent backend that thinks it has at least one session active * @param User|null $user + * @param string $id */ - protected function getBackend( User $user = null ) { + protected function getBackend( User $user = null, $id = null ) { if ( !$this->config ) { $this->config = new \HashConfig(); $this->manager = null; @@ -52,7 +53,7 @@ class SessionBackendTest extends MediaWikiTestCase { $info = new SessionInfo( SessionInfo::MIN_PRIORITY, [ 'provider' => $this->provider, - 'id' => self::SESSIONID, + 'id' => $id ?: self::SESSIONID, 'persisted' => true, 'userInfo' => UserInfo::newFromUser( $user ?: new User, true ), 'idIsSafe' => true, @@ -67,8 +68,8 @@ class SessionBackendTest extends MediaWikiTestCase { $priv->usePhpSessionHandling = false; $manager = \TestingAccessWrapper::newFromObject( $this->manager ); - $manager->allSessionBackends = [ $backend->getId() => $backend ]; - $manager->allSessionIds = [ $backend->getId() => $id ]; + $manager->allSessionBackends = [ $backend->getId() => $backend ] + $manager->allSessionBackends; + $manager->allSessionIds = [ $backend->getId() => $id ] + $manager->allSessionIds; $manager->sessionProviders = [ (string)$this->provider => $this->provider ]; return $backend; @@ -183,8 +184,8 @@ class SessionBackendTest extends MediaWikiTestCase { $request2 = new \FauxRequest(); $session2 = $backend->getSession( $request2 ); - $this->assertInstanceOf( 'MediaWiki\\Session\\Session', $session1 ); - $this->assertInstanceOf( 'MediaWiki\\Session\\Session', $session2 ); + $this->assertInstanceOf( Session::class, $session1 ); + $this->assertInstanceOf( Session::class, $session2 ); $this->assertSame( 2, count( $priv->requests ) ); $index = \TestingAccessWrapper::newFromObject( $session1 )->index; @@ -813,12 +814,52 @@ class SessionBackendTest extends MediaWikiTestCase { $metadata['???'] = '!!!'; } + public function testTakeOverGlobalSession() { + if ( !PHPSessionHandler::isInstalled() ) { + PHPSessionHandler::install( SessionManager::singleton() ); + } + if ( !PHPSessionHandler::isEnabled() ) { + $rProp = new \ReflectionProperty( PHPSessionHandler::class, 'instance' ); + $rProp->setAccessible( true ); + $handler = \TestingAccessWrapper::newFromObject( $rProp->getValue() ); + $resetHandler = new \ScopedCallback( function () use ( $handler ) { + session_write_close(); + $handler->enable = false; + } ); + $handler->enable = true; + } + + $backend = $this->getBackend( User::newFromName( 'UTSysop' ) ); + \TestingAccessWrapper::newFromObject( $backend )->usePhpSessionHandling = true; + + $resetSingleton = TestUtils::setSessionManagerSingleton( $this->manager ); + + $manager = \TestingAccessWrapper::newFromObject( $this->manager ); + $request = \RequestContext::getMain()->getRequest(); + $manager->globalSession = $backend->getSession( $request ); + $manager->globalSessionRequest = $request; + + session_id( '' ); + \TestingAccessWrapper::newFromObject( $backend )->checkPHPSession(); + $this->assertSame( $backend->getId(), session_id() ); + session_write_close(); + + $backend2 = $this->getBackend( + User::newFromName( 'UTSysop' ), 'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb' + ); + \TestingAccessWrapper::newFromObject( $backend2 )->usePhpSessionHandling = true; + + session_id( '' ); + \TestingAccessWrapper::newFromObject( $backend2 )->checkPHPSession(); + $this->assertSame( '', session_id() ); + } + public function testResetIdOfGlobalSession() { if ( !PHPSessionHandler::isInstalled() ) { PHPSessionHandler::install( SessionManager::singleton() ); } if ( !PHPSessionHandler::isEnabled() ) { - $rProp = new \ReflectionProperty( 'MediaWiki\\Session\\PHPSessionHandler', 'instance' ); + $rProp = new \ReflectionProperty( PHPSessionHandler::class, 'instance' ); $rProp->setAccessible( true ); $handler = \TestingAccessWrapper::newFromObject( $rProp->getValue() ); $resetHandler = new \ScopedCallback( function () use ( $handler ) { @@ -831,7 +872,7 @@ class SessionBackendTest extends MediaWikiTestCase { $backend = $this->getBackend( User::newFromName( 'UTSysop' ) ); \TestingAccessWrapper::newFromObject( $backend )->usePhpSessionHandling = true; - TestUtils::setSessionManagerSingleton( $this->manager ); + $resetSingleton = TestUtils::setSessionManagerSingleton( $this->manager ); $manager = \TestingAccessWrapper::newFromObject( $this->manager ); $request = \RequestContext::getMain()->getRequest(); @@ -840,15 +881,12 @@ class SessionBackendTest extends MediaWikiTestCase { session_id( self::SESSIONID ); \MediaWiki\quietCall( 'session_start' ); + $_SESSION['foo'] = __METHOD__; $backend->resetId(); $this->assertNotEquals( self::SESSIONID, $backend->getId() ); $this->assertSame( $backend->getId(), session_id() ); - session_write_close(); - - session_id( '' ); - $this->assertNotSame( $backend->getId(), session_id(), 'sanity check' ); - $backend->persist(); - $this->assertSame( $backend->getId(), session_id() ); + $this->assertArrayHasKey( 'foo', $_SESSION ); + $this->assertSame( __METHOD__, $_SESSION['foo'] ); session_write_close(); } @@ -857,7 +895,7 @@ class SessionBackendTest extends MediaWikiTestCase { PHPSessionHandler::install( SessionManager::singleton() ); } if ( !PHPSessionHandler::isEnabled() ) { - $rProp = new \ReflectionProperty( 'MediaWiki\\Session\\PHPSessionHandler', 'instance' ); + $rProp = new \ReflectionProperty( PHPSessionHandler::class, 'instance' ); $rProp->setAccessible( true ); $handler = \TestingAccessWrapper::newFromObject( $rProp->getValue() ); $resetHandler = new \ScopedCallback( function () use ( $handler ) { @@ -872,7 +910,7 @@ class SessionBackendTest extends MediaWikiTestCase { $wrap->usePhpSessionHandling = true; $wrap->persist = true; - TestUtils::setSessionManagerSingleton( $this->manager ); + $resetSingleton = TestUtils::setSessionManagerSingleton( $this->manager ); $manager = \TestingAccessWrapper::newFromObject( $this->manager ); $request = \RequestContext::getMain()->getRequest(); diff --git a/tests/phpunit/includes/session/SessionInfoTest.php b/tests/phpunit/includes/session/SessionInfoTest.php index e7021257ba..ff22bfad42 100644 --- a/tests/phpunit/includes/session/SessionInfoTest.php +++ b/tests/phpunit/includes/session/SessionInfoTest.php @@ -61,7 +61,7 @@ class SessionInfoTest extends MediaWikiTestCase { } $manager = new SessionManager(); - $provider = $this->getMockBuilder( 'MediaWiki\\Session\\SessionProvider' ) + $provider = $this->getMockBuilder( SessionProvider::class ) ->setMethods( [ 'persistsSessionId', 'canChangeUser', '__toString' ] ) ->getMockForAbstractClass(); $provider->setManager( $manager ); @@ -72,7 +72,7 @@ class SessionInfoTest extends MediaWikiTestCase { $provider->expects( $this->any() )->method( '__toString' ) ->will( $this->returnValue( 'Mock' ) ); - $provider2 = $this->getMockBuilder( 'MediaWiki\\Session\\SessionProvider' ) + $provider2 = $this->getMockBuilder( SessionProvider::class ) ->setMethods( [ 'persistsSessionId', 'canChangeUser', '__toString' ] ) ->getMockForAbstractClass(); $provider2->setManager( $manager ); diff --git a/tests/phpunit/includes/session/SessionManagerTest.php b/tests/phpunit/includes/session/SessionManagerTest.php index a1b9bb44ea..6218f0a728 100644 --- a/tests/phpunit/includes/session/SessionManagerTest.php +++ b/tests/phpunit/includes/session/SessionManagerTest.php @@ -48,7 +48,7 @@ class SessionManagerTest extends MediaWikiTestCase { $reset = TestUtils::setSessionManagerSingleton( null ); $singleton = SessionManager::singleton(); - $this->assertInstanceOf( 'MediaWiki\\Session\\SessionManager', $singleton ); + $this->assertInstanceOf( SessionManager::class, $singleton ); $this->assertSame( $singleton, SessionManager::singleton() ); } @@ -58,7 +58,7 @@ class SessionManagerTest extends MediaWikiTestCase { if ( !PHPSessionHandler::isInstalled() ) { PHPSessionHandler::install( SessionManager::singleton() ); } - $rProp = new \ReflectionProperty( 'MediaWiki\\Session\\PHPSessionHandler', 'instance' ); + $rProp = new \ReflectionProperty( PHPSessionHandler::class, 'instance' ); $rProp->setAccessible( true ); $handler = \TestingAccessWrapper::newFromObject( $rProp->getValue() ); $oldEnable = $handler->enable; @@ -191,7 +191,7 @@ class SessionManagerTest extends MediaWikiTestCase { $request->info1 = null; $request->info2 = null; $session = $manager->getSessionForRequest( $request ); - $this->assertInstanceOf( 'MediaWiki\\Session\\Session', $session ); + $this->assertInstanceOf( Session::class, $session ); $this->assertSame( $idEmpty, $session->getId() ); $this->assertFalse( $request->unpersist1 ); $this->assertFalse( $request->unpersist2 ); @@ -210,7 +210,7 @@ class SessionManagerTest extends MediaWikiTestCase { 'idIsSafe' => true, ] ); $session = $manager->getSessionForRequest( $request ); - $this->assertInstanceOf( 'MediaWiki\\Session\\Session', $session ); + $this->assertInstanceOf( Session::class, $session ); $this->assertSame( $id2, $session->getId() ); $this->assertFalse( $request->unpersist1 ); $this->assertFalse( $request->unpersist2 ); @@ -228,7 +228,7 @@ class SessionManagerTest extends MediaWikiTestCase { 'idIsSafe' => true, ] ); $session = $manager->getSessionForRequest( $request ); - $this->assertInstanceOf( 'MediaWiki\\Session\\Session', $session ); + $this->assertInstanceOf( Session::class, $session ); $this->assertSame( $id1, $session->getId() ); $this->assertFalse( $request->unpersist1 ); $this->assertFalse( $request->unpersist2 ); @@ -251,7 +251,7 @@ class SessionManagerTest extends MediaWikiTestCase { try { $manager->getSessionForRequest( $request ); $this->fail( 'Expcected exception not thrown' ); - } catch ( \OverFlowException $ex ) { + } catch ( \OverflowException $ex ) { $this->assertStringStartsWith( 'Multiple sessions for this request tied for top priority: ', $ex->getMessage() @@ -299,7 +299,7 @@ class SessionManagerTest extends MediaWikiTestCase { 'idIsSafe' => true, ] ); $session = $manager->getSessionForRequest( $request ); - $this->assertInstanceOf( 'MediaWiki\\Session\\Session', $session ); + $this->assertInstanceOf( Session::class, $session ); $this->assertSame( $id2, $session->getId() ); $this->logger->setCollect( false ); $this->assertTrue( $request->unpersist1 ); @@ -321,7 +321,7 @@ class SessionManagerTest extends MediaWikiTestCase { 'idIsSafe' => true, ] ); $session = $manager->getSessionForRequest( $request ); - $this->assertInstanceOf( 'MediaWiki\\Session\\Session', $session ); + $this->assertInstanceOf( Session::class, $session ); $this->assertSame( $id1, $session->getId() ); $this->logger->setCollect( false ); $this->assertFalse( $request->unpersist1 ); @@ -338,7 +338,7 @@ class SessionManagerTest extends MediaWikiTestCase { ] ); $request->info2 = null; $session = $manager->getSessionForRequest( $request ); - $this->assertInstanceOf( 'MediaWiki\\Session\\Session', $session ); + $this->assertInstanceOf( Session::class, $session ); $this->assertSame( $id1, $session->getId() ); $this->assertTrue( $request->unpersist1 ); // The saving of the session does it $this->assertFalse( $request->unpersist2 ); @@ -358,7 +358,7 @@ class SessionManagerTest extends MediaWikiTestCase { // Unknown session ID $id = $manager->generateSessionId(); $session = $manager->getSessionById( $id, true ); - $this->assertInstanceOf( 'MediaWiki\\Session\\Session', $session ); + $this->assertInstanceOf( Session::class, $session ); $this->assertSame( $id, $session->getId() ); $id = $manager->generateSessionId(); @@ -379,8 +379,42 @@ class SessionManagerTest extends MediaWikiTestCase { // Known session ID $this->store->setSession( $id, [] ); $session = $manager->getSessionById( $id, false ); - $this->assertInstanceOf( 'MediaWiki\\Session\\Session', $session ); + $this->assertInstanceOf( Session::class, $session ); $this->assertSame( $id, $session->getId() ); + + // Store isn't checked if the session is already loaded + $this->store->setSession( $id, [ 'metadata' => [ + 'userId' => User::idFromName( 'UTSysop' ), + 'userToken' => 'bad', + ] ] ); + $session2 = $manager->getSessionById( $id, false ); + $this->assertInstanceOf( Session::class, $session2 ); + $this->assertSame( $id, $session2->getId() ); + unset( $session, $session2 ); + $this->logger->setCollect( true ); + $this->assertNull( $manager->getSessionById( $id, true ) ); + $this->logger->setCollect( false ); + + // Failure to create an empty session + $manager = $this->getManager(); + $provider = $this->getMockBuilder( 'DummySessionProvider' ) + ->setMethods( [ 'provideSessionInfo', 'newSessionInfo', '__toString' ] ) + ->getMock(); + $provider->expects( $this->any() )->method( 'provideSessionInfo' ) + ->will( $this->returnValue( null ) ); + $provider->expects( $this->any() )->method( 'newSessionInfo' ) + ->will( $this->returnValue( null ) ); + $provider->expects( $this->any() )->method( '__toString' ) + ->will( $this->returnValue( 'MockProvider' ) ); + $this->config->set( 'SessionProviders', [ + $this->objectCacheDef( $provider ), + ] ); + $this->logger->setCollect( true ); + $this->assertNull( $manager->getSessionById( $id, true ) ); + $this->logger->setCollect( false ); + $this->assertSame( [ + [ LogLevel::ERROR, 'Failed to create empty session: {exception}' ] + ], $this->logger->getBuffer() ); } public function testGetEmptySession() { @@ -450,7 +484,7 @@ class SessionManagerTest extends MediaWikiTestCase { ] ); $info2 = null; $session = $manager->getEmptySession(); - $this->assertInstanceOf( 'MediaWiki\\Session\\Session', $session ); + $this->assertInstanceOf( Session::class, $session ); $this->assertSame( 'empty---------------------------', $session->getId() ); // Info, explicitly @@ -463,7 +497,7 @@ class SessionManagerTest extends MediaWikiTestCase { ] ); $info2 = null; $session = $pmanager->getEmptySessionInternal( null, $expectId ); - $this->assertInstanceOf( 'MediaWiki\\Session\\Session', $session ); + $this->assertInstanceOf( Session::class, $session ); $this->assertSame( $expectId, $session->getId() ); // Wrong ID @@ -538,7 +572,7 @@ class SessionManagerTest extends MediaWikiTestCase { 'idIsSafe' => true, ] ); $session = $manager->getEmptySession(); - $this->assertInstanceOf( 'MediaWiki\\Session\\Session', $session ); + $this->assertInstanceOf( Session::class, $session ); $this->assertSame( 'empty1--------------------------', $session->getId() ); $expectId = null; @@ -555,7 +589,7 @@ class SessionManagerTest extends MediaWikiTestCase { 'idIsSafe' => true, ] ); $session = $manager->getEmptySession(); - $this->assertInstanceOf( 'MediaWiki\\Session\\Session', $session ); + $this->assertInstanceOf( Session::class, $session ); $this->assertSame( 'empty2--------------------------', $session->getId() ); // Tied priorities throw an exception @@ -809,7 +843,7 @@ class SessionManagerTest extends MediaWikiTestCase { \ObjectCache::$instances[__METHOD__] = new TestBagOStuff(); $this->setMwGlobals( [ 'wgMainCacheType' => __METHOD__ ] ); - $this->setMWGlobals( [ + $this->setMwGlobals( [ 'wgAuth' => new AuthPlugin, ] ); @@ -1143,7 +1177,7 @@ class SessionManagerTest extends MediaWikiTestCase { 'provider' => 'Mock', ]; - $builder = $this->getMockBuilder( 'MediaWiki\\Session\\SessionProvider' ) + $builder = $this->getMockBuilder( SessionProvider::class ) ->setMethods( [ '__toString', 'mergeMetadata', 'refreshSessionInfo' ] ); $provider = $builder->getMockForAbstractClass(); @@ -1258,7 +1292,7 @@ class SessionManagerTest extends MediaWikiTestCase { ] ); $this->assertFalse( $info->isIdSafe(), 'sanity check' ); $this->assertTrue( $loadSessionInfoFromStore( $info ) ); - $this->assertInstanceOf( 'MediaWiki\\Session\\UserInfo', $info->getUserInfo() ); + $this->assertInstanceOf( UserInfo::class, $info->getUserInfo() ); $this->assertTrue( $info->getUserInfo()->isVerified() ); $this->assertTrue( $info->getUserInfo()->isAnon() ); $this->assertFalse( $info->isIdSafe() ); diff --git a/tests/phpunit/includes/session/SessionProviderTest.php b/tests/phpunit/includes/session/SessionProviderTest.php index e92eb09d1f..18b1efd460 100644 --- a/tests/phpunit/includes/session/SessionProviderTest.php +++ b/tests/phpunit/includes/session/SessionProviderTest.php @@ -16,7 +16,7 @@ class SessionProviderTest extends MediaWikiTestCase { $logger = new \TestLogger(); $config = new \HashConfig(); - $provider = $this->getMockForAbstractClass( 'MediaWiki\\Session\\SessionProvider' ); + $provider = $this->getMockForAbstractClass( SessionProvider::class ); $priv = \TestingAccessWrapper::newFromObject( $provider ); $provider->setConfig( $config ); @@ -53,7 +53,7 @@ class SessionProviderTest extends MediaWikiTestCase { public function testNewSessionInfo( $persistId, $persistUser, $ok ) { $manager = new SessionManager(); - $provider = $this->getMockBuilder( 'MediaWiki\\Session\\SessionProvider' ) + $provider = $this->getMockBuilder( SessionProvider::class ) ->setMethods( [ 'canChangeUser', 'persistsSessionId' ] ) ->getMockForAbstractClass(); $provider->expects( $this->any() )->method( 'persistsSessionId' ) @@ -80,7 +80,7 @@ class SessionProviderTest extends MediaWikiTestCase { } public function testMergeMetadata() { - $provider = $this->getMockBuilder( 'MediaWiki\\Session\\SessionProvider' ) + $provider = $this->getMockBuilder( SessionProvider::class ) ->getMockForAbstractClass(); try { @@ -112,14 +112,14 @@ class SessionProviderTest extends MediaWikiTestCase { } public function testImmutableSessions() { - $provider = $this->getMockBuilder( 'MediaWiki\\Session\\SessionProvider' ) + $provider = $this->getMockBuilder( SessionProvider::class ) ->setMethods( [ 'canChangeUser', 'persistsSessionId' ] ) ->getMockForAbstractClass(); $provider->expects( $this->any() )->method( 'canChangeUser' ) ->will( $this->returnValue( true ) ); $provider->preventSessionsForUser( 'Foo' ); - $provider = $this->getMockBuilder( 'MediaWiki\\Session\\SessionProvider' ) + $provider = $this->getMockBuilder( SessionProvider::class ) ->setMethods( [ 'canChangeUser', 'persistsSessionId' ] ) ->getMockForAbstractClass(); $provider->expects( $this->any() )->method( 'canChangeUser' ) @@ -142,7 +142,7 @@ class SessionProviderTest extends MediaWikiTestCase { 'SecretKey' => 'Shhh!', ] ); - $provider = $this->getMockForAbstractClass( 'MediaWiki\\Session\\SessionProvider', + $provider = $this->getMockForAbstractClass( SessionProvider::class, [], 'MockSessionProvider' ); $provider->setConfig( $config ); $priv = \TestingAccessWrapper::newFromObject( $provider ); @@ -172,7 +172,7 @@ class SessionProviderTest extends MediaWikiTestCase { } public function testDescribe() { - $provider = $this->getMockForAbstractClass( 'MediaWiki\\Session\\SessionProvider', + $provider = $this->getMockForAbstractClass( SessionProvider::class, [], 'MockSessionProvider' ); $this->assertSame( @@ -182,7 +182,7 @@ class SessionProviderTest extends MediaWikiTestCase { } public function testGetAllowedUserRights() { - $provider = $this->getMockForAbstractClass( 'MediaWiki\\Session\\SessionProvider' ); + $provider = $this->getMockForAbstractClass( SessionProvider::class ); $backend = TestUtils::getDummySessionBackend(); try { diff --git a/tests/phpunit/includes/session/SessionTest.php b/tests/phpunit/includes/session/SessionTest.php index a4727c4364..e87f41d977 100644 --- a/tests/phpunit/includes/session/SessionTest.php +++ b/tests/phpunit/includes/session/SessionTest.php @@ -37,7 +37,7 @@ class SessionTest extends MediaWikiTestCase { * @param bool $ret Whether the method returns a value */ public function testMethods( $m, $args, $index, $ret ) { - $mock = $this->getMock( 'MediaWiki\\Session\\DummySessionBackend', + $mock = $this->getMock( DummySessionBackend::class, [ $m, 'deregisterSession' ] ); $mock->expects( $this->once() )->method( 'deregisterSession' ) ->with( $this->identicalTo( 42 ) ); @@ -224,7 +224,7 @@ class SessionTest extends MediaWikiTestCase { $priv = \TestingAccessWrapper::newFromObject( $session ); $backend = $this->getMock( - 'MediaWiki\\Session\\DummySessionBackend', [ 'canSetUser', 'setUser', 'save' ] + DummySessionBackend::class, [ 'canSetUser', 'setUser', 'save' ] ); $backend->expects( $this->once() )->method( 'canSetUser' ) ->will( $this->returnValue( true ) ); @@ -239,7 +239,7 @@ class SessionTest extends MediaWikiTestCase { $this->assertTrue( $backend->dirty ); $backend = $this->getMock( - 'MediaWiki\\Session\\DummySessionBackend', [ 'canSetUser', 'setUser', 'save' ] + DummySessionBackend::class, [ 'canSetUser', 'setUser', 'save' ] ); $backend->data = []; $backend->expects( $this->once() )->method( 'canSetUser' ) @@ -254,7 +254,7 @@ class SessionTest extends MediaWikiTestCase { $this->assertFalse( $backend->dirty ); $backend = $this->getMock( - 'MediaWiki\\Session\\DummySessionBackend', [ 'canSetUser', 'setUser', 'save' ] + DummySessionBackend::class, [ 'canSetUser', 'setUser', 'save' ] ); $backend->expects( $this->once() )->method( 'canSetUser' ) ->will( $this->returnValue( false ) ); @@ -267,7 +267,7 @@ class SessionTest extends MediaWikiTestCase { } public function testTokens() { - $rc = new \ReflectionClass( 'MediaWiki\\Session\\Session' ); + $rc = new \ReflectionClass( Session::class ); if ( !method_exists( $rc, 'newInstanceWithoutConstructor' ) ) { $this->markTestSkipped( 'ReflectionClass::newInstanceWithoutConstructor isn\'t available' diff --git a/tests/phpunit/includes/session/TestUtils.php b/tests/phpunit/includes/session/TestUtils.php index 36175af26f..f1dc9e994b 100644 --- a/tests/phpunit/includes/session/TestUtils.php +++ b/tests/phpunit/includes/session/TestUtils.php @@ -18,15 +18,15 @@ class TestUtils { session_write_close(); $rInstance = new \ReflectionProperty( - 'MediaWiki\\Session\\SessionManager', 'instance' + SessionManager::class, 'instance' ); $rInstance->setAccessible( true ); $rGlobalSession = new \ReflectionProperty( - 'MediaWiki\\Session\\SessionManager', 'globalSession' + SessionManager::class, 'globalSession' ); $rGlobalSession->setAccessible( true ); $rGlobalSessionRequest = new \ReflectionProperty( - 'MediaWiki\\Session\\SessionManager', 'globalSessionRequest' + SessionManager::class, 'globalSessionRequest' ); $rGlobalSessionRequest->setAccessible( true ); @@ -62,7 +62,7 @@ class TestUtils { * fields necessary. */ public static function getDummySessionBackend() { - $rc = new \ReflectionClass( 'MediaWiki\\Session\\SessionBackend' ); + $rc = new \ReflectionClass( SessionBackend::class ); if ( !method_exists( $rc, 'newInstanceWithoutConstructor' ) ) { \PHPUnit_Framework_Assert::markTestSkipped( 'ReflectionClass::newInstanceWithoutConstructor isn\'t available' @@ -83,7 +83,7 @@ class TestUtils { * @return Session */ public static function getDummySession( $backend = null, $index = -1, $logger = null ) { - $rc = new \ReflectionClass( 'MediaWiki\\Session\\Session' ); + $rc = new \ReflectionClass( Session::class ); if ( !method_exists( $rc, 'newInstanceWithoutConstructor' ) ) { \PHPUnit_Framework_Assert::markTestSkipped( 'ReflectionClass::newInstanceWithoutConstructor isn\'t available' diff --git a/tests/phpunit/includes/session/TokenTest.php b/tests/phpunit/includes/session/TokenTest.php index 47b70aff3c..ca001f3654 100644 --- a/tests/phpunit/includes/session/TokenTest.php +++ b/tests/phpunit/includes/session/TokenTest.php @@ -11,7 +11,7 @@ use MediaWikiTestCase; class TokenTest extends MediaWikiTestCase { public function testBasics() { - $token = $this->getMockBuilder( 'MediaWiki\\Session\\Token' ) + $token = $this->getMockBuilder( Token::class ) ->setMethods( [ 'toStringAtTimestamp' ] ) ->setConstructorArgs( [ 'sekret', 'salty', true ] ) ->getMock(); diff --git a/tests/phpunit/includes/site/DBSiteStoreTest.php b/tests/phpunit/includes/site/DBSiteStoreTest.php index 4f4275db32..32dd7f282c 100644 --- a/tests/phpunit/includes/site/DBSiteStoreTest.php +++ b/tests/phpunit/includes/site/DBSiteStoreTest.php @@ -31,6 +31,15 @@ */ class DBSiteStoreTest extends MediaWikiTestCase { + /** + * @return DBSiteStore + */ + private function newDBSiteStore() { + // NOTE: Use the real DB load balancer for now. Eventually, the test framework should + // provide a LoadBalancer that is safe to use in unit tests. + return new DBSiteStore( wfGetLB() ); + } + /** * @covers DBSiteStore::getSites */ @@ -38,7 +47,7 @@ class DBSiteStoreTest extends MediaWikiTestCase { $expectedSites = TestSites::getSites(); TestSites::insertIntoDb(); - $store = new DBSiteStore(); + $store = $this->newDBSiteStore(); $sites = $store->getSites(); @@ -62,7 +71,7 @@ class DBSiteStoreTest extends MediaWikiTestCase { * @covers DBSiteStore::saveSites */ public function testSaveSites() { - $store = new DBSiteStore(); + $store = $this->newDBSiteStore(); $sites = []; @@ -95,8 +104,8 @@ class DBSiteStoreTest extends MediaWikiTestCase { * @covers DBSiteStore::reset */ public function testReset() { - $store1 = new DBSiteStore(); - $store2 = new DBSiteStore(); + $store1 = $this->newDBSiteStore(); + $store2 = $this->newDBSiteStore(); // initialize internal cache $this->assertGreaterThan( 0, $store1->getSites()->count() ); @@ -121,7 +130,7 @@ class DBSiteStoreTest extends MediaWikiTestCase { * @covers DBSiteStore::clear */ public function testClear() { - $store = new DBSiteStore(); + $store = $this->newDBSiteStore(); $this->assertTrue( $store->clear() ); $site = $store->getSite( 'enwiki' ); @@ -135,7 +144,7 @@ class DBSiteStoreTest extends MediaWikiTestCase { * @covers DBSiteStore::getSites */ public function testGetSitesDefaultOrder() { - $store = new DBSiteStore(); + $store = $this->newDBSiteStore(); $siteB = new Site(); $siteB->setGlobalId( 'B' ); $siteA = new Site(); diff --git a/tests/phpunit/includes/site/SiteSQLStoreTest.php b/tests/phpunit/includes/site/SiteSQLStoreTest.php deleted file mode 100644 index 6908800698..0000000000 --- a/tests/phpunit/includes/site/SiteSQLStoreTest.php +++ /dev/null @@ -1,40 +0,0 @@ - - */ -class SiteSQLStoreTest extends MediaWikiTestCase { - - /** - * @covers SiteSQLStore::newInstance - */ - public function testNewInstance() { - $siteStore = SiteSQLStore::newInstance(); - $this->assertInstanceOf( 'SiteSQLStore', $siteStore ); - } - -} diff --git a/tests/phpunit/includes/site/TestSites.php b/tests/phpunit/includes/site/TestSites.php index d7865d4849..6597906e51 100644 --- a/tests/phpunit/includes/site/TestSites.php +++ b/tests/phpunit/includes/site/TestSites.php @@ -107,7 +107,7 @@ class TestSites { * @since 0.1 */ public static function insertIntoDb() { - $sitesTable = new DBSiteStore(); + $sitesTable = \MediaWiki\MediaWikiServices::getInstance()->getSiteStore(); $sitesTable->clear(); $sitesTable->saveSites( TestSites::getSites() ); } diff --git a/tests/phpunit/includes/specialpage/SpecialPageFactoryTest.php b/tests/phpunit/includes/specialpage/SpecialPageFactoryTest.php index 534cf9baf7..3d407fbc32 100644 --- a/tests/phpunit/includes/specialpage/SpecialPageFactoryTest.php +++ b/tests/phpunit/includes/specialpage/SpecialPageFactoryTest.php @@ -55,19 +55,17 @@ class SpecialPageFactoryTest extends MediaWikiTestCase { $specialPageTestHelper = new SpecialPageTestHelper(); return [ - 'class name' => [ 'SpecialAllPages', false ], + 'class name' => [ 'SpecialAllPages' ], 'closure' => [ function () { return new SpecialAllPages(); - }, false ], - 'function' => [ [ $this, 'newSpecialAllPages' ], false ], - 'callback string' => [ 'SpecialPageTestHelper::newSpecialAllPages', false ], + } ], + 'function' => [ [ $this, 'newSpecialAllPages' ] ], + 'callback string' => [ 'SpecialPageTestHelper::newSpecialAllPages' ], 'callback with object' => [ - [ $specialPageTestHelper, 'newSpecialAllPages' ], - false + [ $specialPageTestHelper, 'newSpecialAllPages' ] ], 'callback array' => [ - [ 'SpecialPageTestHelper', 'newSpecialAllPages' ], - false + [ 'SpecialPageTestHelper', 'newSpecialAllPages' ] ] ]; } @@ -76,7 +74,7 @@ class SpecialPageFactoryTest extends MediaWikiTestCase { * @covers SpecialPageFactory::getPage * @dataProvider specialPageProvider */ - public function testGetPage( $spec, $shouldReuseInstance ) { + public function testGetPage( $spec ) { $this->mergeMwGlobalArrayValue( 'wgSpecialPages', [ 'testdummy' => $spec ] ); SpecialPageFactory::resetList(); @@ -84,7 +82,7 @@ class SpecialPageFactoryTest extends MediaWikiTestCase { $this->assertInstanceOf( 'SpecialPage', $page ); $page2 = SpecialPageFactory::getPage( 'testdummy' ); - $this->assertEquals( $shouldReuseInstance, $page2 === $page, "Should re-use instance:" ); + $this->assertEquals( true, $page2 === $page, "Should re-use instance:" ); } /** diff --git a/tests/phpunit/includes/specials/SpecialEditWatchlistTest.php b/tests/phpunit/includes/specials/SpecialEditWatchlistTest.php new file mode 100644 index 0000000000..cd84d7990f --- /dev/null +++ b/tests/phpunit/includes/specials/SpecialEditWatchlistTest.php @@ -0,0 +1,50 @@ +setExpectedException( 'UserNotLoggedIn' ); + $this->executeSpecialPage(); + } + + public function testRootPage_displaysExplanationMessage() { + $user = new TestUser( __METHOD__ ); + list( $html, ) = $this->executeSpecialPage( '', null, 'qqx', $user->getUser() ); + $this->assertContains( '(watchlistedit-normal-explain)', $html ); + } + + public function testClearPage_hasClearButtonForm() { + $user = new TestUser( __METHOD__ ); + list( $html, ) = $this->executeSpecialPage( 'clear', null, 'qqx', $user->getUser() ); + $this->assertRegExp( + '/
/', + $html + ); + } + + public function testEditRawPage_hasTitlesBox() { + $user = new TestUser( __METHOD__ ); + list( $html, ) = $this->executeSpecialPage( 'raw', null, 'qqx', $user->getUser() ); + $this->assertContains( + '