<exclude name="MediaWiki.Commenting.FunctionComment.WrongStyle" />
<exclude name="MediaWiki.Commenting.IllegalSingleLineComment.IllegalSingleLineCommentStart" />
<exclude name="MediaWiki.Commenting.IllegalSingleLineComment.IllegalSingleLineCommentEnd" />
- <exclude name="MediaWiki.Commenting.LicenseComment.InvalidLicenseTag" />
<exclude name="MediaWiki.ControlStructures.AssignmentInControlStructures.AssignmentInControlStructures" />
<exclude name="MediaWiki.NamingConventions.LowerCamelFunctionsName.FunctionName" />
<exclude name="MediaWiki.WhiteSpace.SpaceBeforeSingleLineComment.NewLineComment" />
<exclude name="MediaWiki.WhiteSpace.SpaceBeforeSingleLineComment.SingleSpaceBeforeSingleLineComment" />
<exclude name="MediaWiki.Usage.DbrQueryUsage.DbrQueryFound" />
<exclude name="MediaWiki.Usage.ExtendClassUsage.FunctionVarUsage" />
- <exclude name="MediaWiki.Files.ClassMatchesFilename.WrongCase" />
- <exclude name="MediaWiki.Files.ClassMatchesFilename.NotMatch" />
<exclude name="MediaWiki.VariableAnalysis.ForbiddenGlobalVariables.ForbiddenGlobal$wgTitle" />
<exclude name="Squiz.Scope.MethodScope.Missing" />
<exclude name="Squiz.Scope.MemberVarScope.Missing" />
<rule ref="Generic.Files.LineLength">
<exclude-pattern>*/languages/messages/Messages*\.php</exclude-pattern>
</rule>
+ <rule ref="MediaWiki.Files.ClassMatchesFilename.NotMatch">
+ <!--
+ Whitelist existing violations, but enable the sniff to prevent
+ any new occurrences.
+ -->
+ <exclude-pattern>*/includes/api/ApiQueryUserContributions\.php</exclude-pattern>
+ <exclude-pattern>*/includes/api/ApiMessage\.php</exclude-pattern>
+ <exclude-pattern>*/includes/api/ApiUsageException\.php</exclude-pattern>
+ <exclude-pattern>*/includes/media/XCF\.php</exclude-pattern>
+ <exclude-pattern>*/includes/Feed\.php</exclude-pattern>
+ <exclude-pattern>*/includes/libs/xmp/XMP\.php</exclude-pattern>
+ <exclude-pattern>*/includes/jobqueue/JobSpecification\.php</exclude-pattern>
+ <exclude-pattern>*/includes/RevisionList\.php</exclude-pattern>
+ <exclude-pattern>*/includes/installer/PhpBugTests\.php</exclude-pattern>
+ <exclude-pattern>*/includes/exception/LocalizedException\.php</exclude-pattern>
+ <exclude-pattern>*/includes/specials/SpecialMostinterwikis\.php</exclude-pattern>
+ <exclude-pattern>*/includes/cache/CacheDependency\.php</exclude-pattern>
+ <exclude-pattern>*/includes/cache/CacheHelper\.php</exclude-pattern>
+ <exclude-pattern>*/includes/diff/DairikiDiff\.php</exclude-pattern>
+ <exclude-pattern>*/includes/specials/SpecialAncientpages\.php</exclude-pattern>
+ <exclude-pattern>*/includes/specials/SpecialBrokenRedirects\.php</exclude-pattern>
+ <exclude-pattern>*/includes/specials/SpecialConfirmemail\.php</exclude-pattern>
+ <exclude-pattern>*/includes/specials/SpecialDeadendpages\.php</exclude-pattern>
+ <exclude-pattern>*/includes/specials/SpecialDeletedContributions\.php</exclude-pattern>
+ <exclude-pattern>*/includes/specials/SpecialDoubleRedirects\.php</exclude-pattern>
+ <exclude-pattern>*/includes/specials/SpecialEmailInvalidate\.php</exclude-pattern>
+ <exclude-pattern>*/includes/specials/SpecialFewestrevisions\.php</exclude-pattern>
+ <exclude-pattern>*/includes/specials/SpecialFileDuplicateSearch\.php</exclude-pattern>
+ <exclude-pattern>*/includes/specials/SpecialLinkSearch\.php</exclude-pattern>
+ <exclude-pattern>*/includes/specials/SpecialListDuplicatedFiles\.php</exclude-pattern>
+ <exclude-pattern>*/includes/specials/SpecialListredirects\.php</exclude-pattern>
+ <exclude-pattern>*/includes/specials/SpecialLonelypages\.php</exclude-pattern>
+ <exclude-pattern>*/includes/specials/SpecialLongpages\.php</exclude-pattern>
+ <exclude-pattern>*/includes/specials/SpecialMIMEsearch\.php</exclude-pattern>
+ <exclude-pattern>*/includes/specials/SpecialMediaStatistics\.php</exclude-pattern>
+ <exclude-pattern>*/includes/specials/SpecialMostcategories\.php</exclude-pattern>
+ <exclude-pattern>*/includes/specials/SpecialMostimages\.php</exclude-pattern>
+ <exclude-pattern>*/includes/specials/SpecialMostlinked\.php</exclude-pattern>
+ <exclude-pattern>*/includes/specials/SpecialMostlinkedcategories\.php</exclude-pattern>
+ <exclude-pattern>*/includes/specials/SpecialMostlinkedtemplates\.php</exclude-pattern>
+ <exclude-pattern>*/includes/specials/SpecialMostrevisions\.php</exclude-pattern>
+ <exclude-pattern>*/includes/specials/SpecialMovepage\.php</exclude-pattern>
+ <exclude-pattern>*/includes/specials/SpecialMyRedirectPages\.php</exclude-pattern>
+ <exclude-pattern>*/includes/specials/SpecialNewimages\.php</exclude-pattern>
+ <exclude-pattern>*/includes/specials/SpecialRandompage\.php</exclude-pattern>
+ <exclude-pattern>*/includes/specials/SpecialShortpages\.php</exclude-pattern>
+ <exclude-pattern>*/includes/specials/SpecialUncategorizedcategories\.php</exclude-pattern>
+ <exclude-pattern>*/includes/specials/SpecialUncategorizedimages\.php</exclude-pattern>
+ <exclude-pattern>*/includes/specials/SpecialUncategorizedpages\.php</exclude-pattern>
+ <exclude-pattern>*/includes/specials/SpecialUncategorizedtemplates\.php</exclude-pattern>
+ <exclude-pattern>*/includes/specials/SpecialUnusedcategories\.php</exclude-pattern>
+ <exclude-pattern>*/includes/specials/SpecialUnusedimages\.php</exclude-pattern>
+ <exclude-pattern>*/includes/specials/SpecialUnusedtemplates\.php</exclude-pattern>
+ <exclude-pattern>*/includes/specials/SpecialUnwatchedpages\.php</exclude-pattern>
+ <exclude-pattern>*/includes/specials/SpecialUserrights\.php</exclude-pattern>
+ <exclude-pattern>*/includes/specials/SpecialWantedcategories\.php</exclude-pattern>
+ <exclude-pattern>*/includes/specials/SpecialWantedfiles\.php</exclude-pattern>
+ <exclude-pattern>*/includes/specials/SpecialWantedpages\.php</exclude-pattern>
+ <exclude-pattern>*/includes/specials/SpecialWantedtemplates\.php</exclude-pattern>
+ <exclude-pattern>*/includes/specials/SpecialWithoutinterwiki\.php</exclude-pattern>
+ <exclude-pattern>*/maintenance/7zip.inc</exclude-pattern>
+ <exclude-pattern>*/maintenance/CodeCleanerGlobalsPass.inc</exclude-pattern>
+ <exclude-pattern>*/maintenance/archives/upgradeLogging\.php</exclude-pattern>
+ <exclude-pattern>*/maintenance/backup.inc</exclude-pattern>
+ <exclude-pattern>*/maintenance/benchmarks/bench_HTTP_HTTPS\.php</exclude-pattern>
+ <exclude-pattern>*/maintenance/benchmarks/bench_Wikimedia_base_convert\.php</exclude-pattern>
+ <exclude-pattern>*/maintenance/benchmarks/bench_delete_truncate\.php</exclude-pattern>
+ <exclude-pattern>*/maintenance/benchmarks/bench_if_switch\.php</exclude-pattern>
+ <exclude-pattern>*/maintenance/benchmarks/bench_strtr_str_replace\.php</exclude-pattern>
+ <exclude-pattern>*/maintenance/benchmarks/bench_utf8_title_check\.php</exclude-pattern>
+ <exclude-pattern>*/maintenance/benchmarks/bench_wfIsWindows\.php</exclude-pattern>
+ <exclude-pattern>*/maintenance/cleanupTable.inc</exclude-pattern>
+ <exclude-pattern>*/maintenance/cleanupTitles\.php</exclude-pattern>
+ <exclude-pattern>*/maintenance/commandLine.inc</exclude-pattern>
+ <exclude-pattern>*/maintenance/dumpTextPass\.php</exclude-pattern>
+ <exclude-pattern>*/maintenance/edit\.php</exclude-pattern>
+ <exclude-pattern>*/maintenance/findDeprecated\.php</exclude-pattern>
+ <exclude-pattern>*/maintenance/getText\.php</exclude-pattern>
+ <exclude-pattern>*/maintenance/hhvm/makeRepo\.php</exclude-pattern>
+ <exclude-pattern>*/maintenance/importDump\.php</exclude-pattern>
+ <exclude-pattern>*/maintenance/install\.php</exclude-pattern>
+ <exclude-pattern>*/maintenance/invalidateUserSessions\.php</exclude-pattern>
+ <exclude-pattern>*/maintenance/jsparse\.php</exclude-pattern>
+ <exclude-pattern>*/maintenance/lag\.php</exclude-pattern>
+ <exclude-pattern>*/maintenance/language/StatOutputs\.php</exclude-pattern>
+ <exclude-pattern>*/maintenance/language/checkLanguage.inc</exclude-pattern>
+ <exclude-pattern>*/maintenance/language/date-formats\.php</exclude-pattern>
+ <exclude-pattern>*/maintenance/language/languages.inc</exclude-pattern>
+ <exclude-pattern>*/maintenance/minify\.php</exclude-pattern>
+ <exclude-pattern>*/maintenance/parse\.php</exclude-pattern>
+ <exclude-pattern>*/maintenance/preprocessorFuzzTest\.php</exclude-pattern>
+ <exclude-pattern>*/maintenance/rebuildImages\.php</exclude-pattern>
+ <exclude-pattern>*/maintenance/renderDump\.php</exclude-pattern>
+ <exclude-pattern>*/maintenance/shell\.php</exclude-pattern>
+ <exclude-pattern>*/maintenance/sql\.php</exclude-pattern>
+ <exclude-pattern>*/maintenance/sqlite.inc</exclude-pattern>
+ <exclude-pattern>*/maintenance/sqlite\.php</exclude-pattern>
+ <exclude-pattern>*/maintenance/term/MWTerm\.php</exclude-pattern>
+ <exclude-pattern>*/maintenance/update\.php</exclude-pattern>
+ <exclude-pattern>*/maintenance/userDupes.inc</exclude-pattern>
+ <exclude-pattern>*/maintenance/userOptions\.php</exclude-pattern>
+ <exclude-pattern>*/maintenance/view\.php</exclude-pattern>
+ <exclude-pattern>*/profileinfo\.php</exclude-pattern>
+ <!-- Language converters use the pattern of 2 classes in one file -->
+ <exclude-pattern>*/languages/*\.php</exclude-pattern>
+ <!-- We don't care that much about violations in tests -->
+ <exclude-pattern>*/tests/*\.php</exclude-pattern>
+ </rule>
+ <rule ref="MediaWiki.Files.ClassMatchesFilename.WrongCase">
+ <!--
+ Whitelist existing violations, but enable the sniff to prevent
+ any new occurrences.
+ -->
+ <exclude-pattern>*/includes/specials/SpecialActiveusers\.php</exclude-pattern>
+ <exclude-pattern>*/includes/specials/SpecialBooksources\.php</exclude-pattern>
+ <exclude-pattern>*/includes/specials/SpecialEmailuser\.php</exclude-pattern>
+ <exclude-pattern>*/includes/specials/SpecialListfiles\.php</exclude-pattern>
+ <exclude-pattern>*/includes/specials/SpecialListgrants\.php</exclude-pattern>
+ <exclude-pattern>*/includes/specials/SpecialListgrouprights\.php</exclude-pattern>
+ <exclude-pattern>*/includes/specials/SpecialListusers.php</exclude-pattern>
+ <exclude-pattern>*/includes/specials/SpecialRecentchanges\.php</exclude-pattern>
+ <exclude-pattern>*/includes/specials/SpecialRecentchangeslinked\.php</exclude-pattern>
+ <exclude-pattern>*/includes/specials/SpecialRevisiondelete\.php</exclude-pattern>
+ <exclude-pattern>*/includes/specials/SpecialWhatlinkshere\.php</exclude-pattern>
+ <exclude-pattern>*/maintenance/language/alltrans\.php</exclude-pattern>
+ <exclude-pattern>*/maintenance/language/digit2html\.php</exclude-pattern>
+ <exclude-pattern>*/maintenance/language/langmemusage\.php</exclude-pattern>
+ <exclude-pattern>*/maintenance/mctest\.php</exclude-pattern>
+ <exclude-pattern>*/maintenance/mergeMessageFileList\.php</exclude-pattern>
+ <exclude-pattern>*/maintenance/mwdocgen\.php</exclude-pattern>
+ <exclude-pattern>*/maintenance/rebuildall\.php</exclude-pattern>
+ <exclude-pattern>*/maintenance/rebuildmessages\.php</exclude-pattern>
+ <exclude-pattern>*/maintenance/rebuildrecentchanges\.php</exclude-pattern>
+ <exclude-pattern>*/maintenance/rebuildtextindex\.php</exclude-pattern>
+ <exclude-pattern>*/maintenance/storage/checkStorage\.php</exclude-pattern>
+ <exclude-pattern>*/maintenance/storage/recompressTracked\.php</exclude-pattern>
+ <exclude-pattern>*/maintenance/storage/trackBlobs\.php</exclude-pattern>
+ <!-- We don't care that much about violations in tests -->
+ <exclude-pattern>*/tests/*\.php</exclude-pattern>
+ </rule>
+
<rule ref="Generic.Files.OneObjectStructurePerFile.MultipleFound">
<!--
Whitelist existing violations, but enable the sniff to prevent
<exclude-pattern>*/includes/search/SearchEngine\.php</exclude-pattern>
<exclude-pattern>*/includes/specialpage/LoginSignupSpecialPage\.php</exclude-pattern>
<exclude-pattern>*/includes/specialpage/RedirectSpecialPage\.php</exclude-pattern>
+ <exclude-pattern>*/includes/specials/forms/PreferencesFormLegacy\.php</exclude-pattern>
<exclude-pattern>*/includes/specials/SpecialListusers\.php</exclude-pattern>
<exclude-pattern>*/includes/specials/SpecialMyRedirectPages\.php</exclude-pattern>
<exclude-pattern>*/includes/specials/SpecialUploadStash\.php</exclude-pattern>
'!node_modules/**',
'!resources/lib/**',
'!resources/src/jquery.tipsy/**',
- '!resources/src/jquery/jquery.farbtastic.js',
'!resources/src/mediawiki.libs.jpegmeta/**',
// Third-party code of PHPUnit coverage report
'!tests/coverage/**',
"in-place", as long as you have the necessary prerequisites available.
Required software:
-* Web server with PHP 5.5.9 or higher.
+* Web server with PHP 7.0.0 or HHVM 3.18.5 or higher.
* A SQL server, the following types are supported
** MySQL 5.5.8 or higher
** PostgreSQL 9.2 or higher
| will appear. It is common in this case to use w as the folder name and |
| /wiki/ as the virtual article path where your articles pretend to be. |
| |
- | See: https://www.mediawiki.org/wiki/Manual:Short_URL |
+ | See: https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Short_URL |
+--------------------------------------------------------------------------+
Hop into your browser and surf into the wiki directory. It'll direct you into
discussion pages) now have a tooltip to indicate state, not just colour.
=== External library changes in 1.31 ===
+* pear/mail, pear/mail_mime and pear/mail_mime-decode have been moved from
+ suggested to required. These packages now must be installed via composer
+ and not via PEAR itself.
==== Upgraded external libraries ====
* Updated jquery.chosen from v0.9.14 to v1.8.2.
used instead.
* The function wfShellWikiCmd() has been deprecated, use
MediaWiki\Shell::makeScriptCommand().
+* In the future, the hooks 'PreferencesFormPreSave' and 'PreferencesGetLegend'
+ will be allowed to provide any HTMLForm object rather than PreferencesForm.
+
=== Other changes in 1.31 ===
* Browser support for Internet Explorer 10 was lowered from Grade A to Grade C.
* Browser support for Opera 12 and older was dropped entirely. Opera 15+
* (T112474) Generalized the ResourceLoader mechanism for overriding modules
using a particular page during edit previews.
* Added 'ApiParseMakeOutputPage' hook.
-* (T174313) Added checkbox on Special:ListUsers to display only users in temporary
- user groups.
+* (T174313) Added checkbox on Special:ListUsers to display only users in
+ temporary user groups.
=== External library changes in 1.32 ===
* …
from normal parameters. All parameter definitions now include an "index"
key to allow clients to maintain parameter ordering when merging normal and
templated parameters.
+* It is now an error to submit too many values for a multi-valued parameter.
+ This has generated a warning since MediaWiki 1.14.
=== Action API internal changes in 1.32 ===
* Added 'ApiParseMakeOutputPage' hook.
* mw.util.updateTooltipAccessKeys(), deprecated in 1.24, was removed. Use
jquery.accessKeyLabel instead.
* The SqlDataUpdate class, deprecated in 1.28, has been removed.
-* The Html5Internal and Html5Depurate tidy driver classes were removed, along with the
- Balancer tidy implementation. Both implementations were experimental, and were replaced
- by RemexHtml.
+* The Html5Internal and Html5Depurate tidy driver classes were removed, along
+ with the Balancer tidy implementation. Both implementations were experimental,
+ and were replaced by RemexHtml.
* (T179624) Job::insert() and ::batchInsert(), deprecated in 1.21, were both
removed. Use JobQueueGroup::singleton()->push() instead.
+* The jquery.footHovzer module, for mediawiki.debug, was removed.
+* The es5-shim module, empty and deprecated since 1.29, was removed.
+* The mediawiki.widgets.visibleByteLimit module alias, deprecated in 1.32, was
+ removed. Use mediawiki.widgets.visibleLengthLimit instead.
+* The jquery.farbtastic module, unused since 1.18, was removed.
+* (T181318) The $wgStyleVersion setting and its appendage to various script and
+ style URLs in OutputPage, deprecated in 1.31, was removed.
+* The hooks 'PreferencesFormPreSave' and 'PreferencesGetLegend' may provide
+ any HTMLForm object rather than PreferencesForm.
+* The non namespaced TimestampException class, deprecated in 1.29, was removed.
+ Use Wikimedia\Timestamp\TimestampException instead.
=== Deprecations in 1.32 ===
* Use of a StartProfiler.php file is deprecated in favour of placing
mediawiki.api.login, mediawiki.api.options, mediawiki.api.parse,
mediawiki.api.upload, mediawiki.api.user, mediawiki.api.watch,
mediawiki.api.messages, and mediawiki.api.rollback.
+* ApiBase::truncateArray() is deprecated. No replacement, as nothing is known
+ to use it.
+* WatchAction::getUnwatchToken is deprecated. Use WatchAction::getWatchToken
+ with the 'unwatch' action parameter instead.
+* IcuCollation::getICUVersion() is deprecated, as you can just use the PHP
+ constant INTL_ICU_VERSION directly in all versions that MediaWiki supports.
=== Other changes in 1.32 ===
* Soft hyphens (U+00AD) are now automatically removed from titles; these
* …
== Compatibility ==
-MediaWiki 1.32 requires PHP 5.5.9 or later. Although HHVM 3.18.5 or later is
-supported, it is generally advised to use PHP 5.5.9 or later for long term
+MediaWiki 1.32 requires PHP 7.0.0 or later. Although HHVM 3.18.5 or later is
+supported, it is generally advised to use PHP 7.0.0 or later for long term
support.
MySQL/MariaDB is the recommended DBMS. PostgreSQL or SQLite can also be used,
'ActiveUsersPager' => __DIR__ . '/includes/specials/pagers/ActiveUsersPager.php',
'ActivityUpdateJob' => __DIR__ . '/includes/jobqueue/jobs/ActivityUpdateJob.php',
'ActorMigration' => __DIR__ . '/includes/ActorMigration.php',
- 'AddRFCAndPMIDInterwiki' => __DIR__ . '/maintenance/addRFCandPMIDInterwiki.php',
+ 'AddRFCandPMIDInterwiki' => __DIR__ . '/maintenance/addRFCandPMIDInterwiki.php',
'AddSite' => __DIR__ . '/maintenance/addSite.php',
'AjaxDispatcher' => __DIR__ . '/includes/AjaxDispatcher.php',
'AjaxResponse' => __DIR__ . '/includes/AjaxResponse.php',
'BatchRowIterator' => __DIR__ . '/includes/utils/BatchRowIterator.php',
'BatchRowUpdate' => __DIR__ . '/includes/utils/BatchRowUpdate.php',
'BatchRowWriter' => __DIR__ . '/includes/utils/BatchRowWriter.php',
- 'BatchedQueryRunner' => __DIR__ . '/maintenance/runBatchedQuery.php',
'BcryptPassword' => __DIR__ . '/includes/password/BcryptPassword.php',
'BenchHttpHttps' => __DIR__ . '/maintenance/benchmarks/bench_HTTP_HTTPS.php',
'BenchIfSwitch' => __DIR__ . '/maintenance/benchmarks/bench_if_switch.php',
'CachedBagOStuff' => __DIR__ . '/includes/libs/objectcache/CachedBagOStuff.php',
'CachingSiteStore' => __DIR__ . '/includes/site/CachingSiteStore.php',
'CannotCreateActorException' => __DIR__ . '/includes/exception/CannotCreateActorException.php',
- 'CapsCleanup' => __DIR__ . '/maintenance/cleanupCaps.php',
'CategoriesRdf' => __DIR__ . '/includes/CategoriesRdf.php',
'Category' => __DIR__ . '/includes/Category.php',
'CategoryChangesAsRdf' => __DIR__ . '/maintenance/categoryChangesAsRdf.php',
'ClassCollector' => __DIR__ . '/includes/utils/AutoloadGenerator.php',
'CleanupAncientTables' => __DIR__ . '/maintenance/cleanupAncientTables.php',
'CleanupBlocks' => __DIR__ . '/maintenance/cleanupBlocks.php',
+ 'CleanupCaps' => __DIR__ . '/maintenance/cleanupCaps.php',
'CleanupEmptyCategories' => __DIR__ . '/maintenance/cleanupEmptyCategories.php',
+ 'CleanupImages' => __DIR__ . '/maintenance/cleanupImages.php',
'CleanupInvalidDbKeys' => __DIR__ . '/maintenance/cleanupInvalidDbKeys.php',
'CleanupPreferences' => __DIR__ . '/maintenance/cleanupPreferences.php',
'CleanupRemovedModules' => __DIR__ . '/maintenance/cleanupRemovedModules.php',
'CleanupSpam' => __DIR__ . '/maintenance/cleanupSpam.php',
+ 'CleanupUploadStash' => __DIR__ . '/maintenance/cleanupUploadStash.php',
'CleanupUsersWithNoId' => __DIR__ . '/maintenance/cleanupUsersWithNoId.php',
+ 'CleanupWatchlist' => __DIR__ . '/maintenance/cleanupWatchlist.php',
'ClearInterwikiCache' => __DIR__ . '/maintenance/clearInterwikiCache.php',
'ClearUserWatchlistJob' => __DIR__ . '/includes/jobqueue/jobs/ClearUserWatchlistJob.php',
'ClearWatchlistNotificationsJob' => __DIR__ . '/includes/jobqueue/jobs/ClearWatchlistNotificationsJob.php',
'CoreParserFunctions' => __DIR__ . '/includes/parser/CoreParserFunctions.php',
'CoreTagHooks' => __DIR__ . '/includes/parser/CoreTagHooks.php',
'CreateAndPromote' => __DIR__ . '/maintenance/createAndPromote.php',
+ 'CreateCommonPasswordCdb' => __DIR__ . '/maintenance/createCommonPasswordCdb.php',
'CreateFileOp' => __DIR__ . '/includes/libs/filebackend/fileop/CreateFileOp.php',
'CreditsAction' => __DIR__ . '/includes/actions/CreditsAction.php',
'CrhConverter' => __DIR__ . '/languages/classes/LanguageCrh.php',
'DumpRenderer' => __DIR__ . '/maintenance/renderDump.php',
'DumpRev' => __DIR__ . '/maintenance/storage/dumpRev.php',
'DumpStringOutput' => __DIR__ . '/includes/export/DumpStringOutput.php',
+ 'DumpUploads' => __DIR__ . '/maintenance/dumpUploads.php',
'DuplicateJob' => __DIR__ . '/includes/jobqueue/jobs/DuplicateJob.php',
'EditAction' => __DIR__ . '/includes/actions/EditAction.php',
'EditCLI' => __DIR__ . '/maintenance/edit.php',
'FileJournal' => __DIR__ . '/includes/libs/filebackend/filejournal/FileJournal.php',
'FileOp' => __DIR__ . '/includes/libs/filebackend/fileop/FileOp.php',
'FileOpBatch' => __DIR__ . '/includes/libs/filebackend/FileOpBatch.php',
+ 'FileOpPerfTest' => __DIR__ . '/maintenance/fileOpPerfTest.php',
'FileRepo' => __DIR__ . '/includes/filerepo/FileRepo.php',
'FileRepoStatus' => __DIR__ . '/includes/filerepo/FileRepoStatus.php',
'FindDeprecated' => __DIR__ . '/maintenance/findDeprecated.php',
'FormAction' => __DIR__ . '/includes/actions/FormAction.php',
'FormOptions' => __DIR__ . '/includes/FormOptions.php',
'FormSpecialPage' => __DIR__ . '/includes/specialpage/FormSpecialPage.php',
+ 'FormatInstallDoc' => __DIR__ . '/maintenance/formatInstallDoc.php',
'FormatJson' => __DIR__ . '/includes/json/FormatJson.php',
'FormatMetadata' => __DIR__ . '/includes/media/FormatMetadata.php',
'FormattedRCFeed' => __DIR__ . '/includes/rcfeed/FormattedRCFeed.php',
'GanConverter' => __DIR__ . '/languages/classes/LanguageGan.php',
'GenderCache' => __DIR__ . '/includes/cache/GenderCache.php',
'GenerateCollationData' => __DIR__ . '/maintenance/language/generateCollationData.php',
- 'GenerateCommonPassword' => __DIR__ . '/maintenance/createCommonPasswordCdb.php',
'GenerateJsonI18n' => __DIR__ . '/maintenance/generateJsonI18n.php',
'GenerateNormalizerDataAr' => __DIR__ . '/maintenance/language/generateNormalizerDataAr.php',
'GenerateNormalizerDataMl' => __DIR__ . '/maintenance/language/generateNormalizerDataMl.php',
'GenericArrayObject' => __DIR__ . '/includes/libs/GenericArrayObject.php',
'GetConfiguration' => __DIR__ . '/maintenance/getConfiguration.php',
'GetLagTimes' => __DIR__ . '/maintenance/getLagTimes.php',
- 'GetSlaveServer' => __DIR__ . '/maintenance/getReplicaServer.php',
+ 'GetReplicaServer' => __DIR__ . '/maintenance/getReplicaServer.php',
'GetTextMaint' => __DIR__ . '/maintenance/getText.php',
'GitInfo' => __DIR__ . '/includes/GitInfo.php',
'GlobalDependency' => __DIR__ . '/includes/cache/CacheDependency.php',
'IcuCollation' => __DIR__ . '/includes/collation/IcuCollation.php',
'IdentityCollation' => __DIR__ . '/includes/collation/IdentityCollation.php',
'ImageBuilder' => __DIR__ . '/maintenance/rebuildImages.php',
- 'ImageCleanup' => __DIR__ . '/maintenance/cleanupImages.php',
'ImageGalleryBase' => __DIR__ . '/includes/gallery/ImageGalleryBase.php',
'ImageHandler' => __DIR__ . '/includes/media/ImageHandler.php',
'ImageHistoryList' => __DIR__ . '/includes/page/ImageHistoryList.php',
'MainConfigDependency' => __DIR__ . '/includes/cache/CacheDependency.php',
'MaintainableDBConnRef' => __DIR__ . '/includes/libs/rdbms/database/MaintainableDBConnRef.php',
'Maintenance' => __DIR__ . '/maintenance/Maintenance.php',
- 'MaintenanceFormatInstallDoc' => __DIR__ . '/maintenance/formatInstallDoc.php',
'MakeTestEdits' => __DIR__ . '/maintenance/makeTestEdits.php',
'MalformedTitleException' => __DIR__ . '/includes/title/MalformedTitleException.php',
'ManageJobs' => __DIR__ . '/maintenance/manageJobs.php',
'MediaWiki\\Auth\\UsernameAuthenticationRequest' => __DIR__ . '/includes/auth/UsernameAuthenticationRequest.php',
'MediaWiki\\Diff\\ComplexityException' => __DIR__ . '/includes/diff/ComplexityException.php',
'MediaWiki\\Diff\\WordAccumulator' => __DIR__ . '/includes/diff/WordAccumulator.php',
- 'MediaWiki\\EditPage\\TextConflictHelper' => __DIR__ . '/includes/editpage/TextConflictHelper.php',
- 'MediaWiki\\EditPage\\TextboxBuilder' => __DIR__ . '/includes/editpage/TextboxBuilder.php',
- 'MediaWiki\\Edit\\PreparedEdit' => __DIR__ . '/includes/edit/PreparedEdit.php',
'MediaWiki\\HeaderCallback' => __DIR__ . '/includes/HeaderCallback.php',
'MediaWiki\\Http\\HttpRequestFactory' => __DIR__ . '/includes/http/HttpRequestFactory.php',
'MediaWiki\\Interwiki\\ClassicInterwikiLookup' => __DIR__ . '/includes/interwiki/ClassicInterwikiLookup.php',
'NaiveForeignTitleFactory' => __DIR__ . '/includes/title/NaiveForeignTitleFactory.php',
'NaiveImportTitleFactory' => __DIR__ . '/includes/title/NaiveImportTitleFactory.php',
'NamespaceAwareForeignTitleFactory' => __DIR__ . '/includes/title/NamespaceAwareForeignTitleFactory.php',
- 'NamespaceConflictChecker' => __DIR__ . '/maintenance/namespaceDupes.php',
+ 'NamespaceDupes' => __DIR__ . '/maintenance/namespaceDupes.php',
'NamespaceImportTitleFactory' => __DIR__ . '/includes/title/NamespaceImportTitleFactory.php',
'NewFilesPager' => __DIR__ . '/includes/specials/pagers/NewFilesPager.php',
'NewPagesPager' => __DIR__ . '/includes/specials/pagers/NewPagesPager.php',
'PostgresInstaller' => __DIR__ . '/includes/installer/PostgresInstaller.php',
'PostgresUpdater' => __DIR__ . '/includes/installer/PostgresUpdater.php',
'Preferences' => __DIR__ . '/includes/Preferences.php',
- 'PreferencesForm' => __DIR__ . '/includes/specials/forms/PreferencesForm.php',
+ 'PreferencesForm' => __DIR__ . '/includes/specials/forms/PreferencesFormLegacy.php',
'PreferencesFormLegacy' => __DIR__ . '/includes/specials/forms/PreferencesFormLegacy.php',
'PreferencesFormOOUI' => __DIR__ . '/includes/specials/forms/PreferencesFormOOUI.php',
'PrefixSearch' => __DIR__ . '/includes/PrefixSearch.php',
'RollbackAction' => __DIR__ . '/includes/actions/RollbackAction.php',
'RollbackEdits' => __DIR__ . '/maintenance/rollbackEdits.php',
'RowUpdateGenerator' => __DIR__ . '/includes/utils/RowUpdateGenerator.php',
+ 'RunBatchedQuery' => __DIR__ . '/maintenance/runBatchedQuery.php',
'RunJobs' => __DIR__ . '/maintenance/runJobs.php',
'SVGMetadataExtractor' => __DIR__ . '/includes/media/SVGMetadataExtractor.php',
'SVGReader' => __DIR__ . '/includes/media/SVGMetadataExtractor.php',
'TempFileRepo' => __DIR__ . '/includes/filerepo/TempFileRepo.php',
'TemplateParser' => __DIR__ . '/includes/TemplateParser.php',
'TemplatesOnThisPageFormatter' => __DIR__ . '/includes/TemplatesOnThisPageFormatter.php',
- 'TestFileOpPerformance' => __DIR__ . '/maintenance/fileOpPerfTest.php',
'TextContent' => __DIR__ . '/includes/content/TextContent.php',
'TextContentHandler' => __DIR__ . '/includes/content/TextContentHandler.php',
'TextPassDumper' => __DIR__ . '/maintenance/dumpTextPass.php',
'UploadChunkFileException' => __DIR__ . '/includes/upload/UploadFromChunks.php',
'UploadChunkVerificationException' => __DIR__ . '/includes/upload/UploadFromChunks.php',
'UploadChunkZeroLengthFileException' => __DIR__ . '/includes/upload/UploadFromChunks.php',
- 'UploadDumper' => __DIR__ . '/maintenance/dumpUploads.php',
'UploadForm' => __DIR__ . '/includes/specials/forms/UploadForm.php',
'UploadFromChunks' => __DIR__ . '/includes/upload/UploadFromChunks.php',
'UploadFromFile' => __DIR__ . '/includes/upload/UploadFromFile.php',
'UploadSourceField' => __DIR__ . '/includes/specials/formfields/UploadSourceField.php',
'UploadStash' => __DIR__ . '/includes/upload/UploadStash.php',
'UploadStashBadPathException' => __DIR__ . '/includes/upload/UploadStash.php',
- 'UploadStashCleanup' => __DIR__ . '/maintenance/cleanupUploadStash.php',
'UploadStashException' => __DIR__ . '/includes/upload/UploadStash.php',
'UploadStashFile' => __DIR__ . '/includes/upload/UploadStash.php',
'UploadStashFileException' => __DIR__ . '/includes/upload/UploadStash.php',
'WatchedItemQueryServiceExtension' => __DIR__ . '/includes/watcheditem/WatchedItemQueryServiceExtension.php',
'WatchedItemStore' => __DIR__ . '/includes/watcheditem/WatchedItemStore.php',
'WatchedItemStoreInterface' => __DIR__ . '/includes/watcheditem/WatchedItemStoreInterface.php',
- 'WatchlistCleanup' => __DIR__ . '/maintenance/cleanupWatchlist.php',
'WebInstaller' => __DIR__ . '/includes/installer/WebInstaller.php',
'WebInstallerComplete' => __DIR__ . '/includes/installer/WebInstallerComplete.php',
'WebInstallerCopying' => __DIR__ . '/includes/installer/WebInstallerCopying.php',
"liuggio/statsd-php-client": "1.0.18",
"oojs/oojs-ui": "0.27.0",
"oyejorge/less.php": "1.7.0.14",
- "php": ">=5.5.9",
+ "pear/mail": "1.4.1",
+ "pear/mail_mime": "1.10.2",
+ "pear/mail_mime-decode": "1.5.5.2",
+ "php": ">=5.6.99",
"psr/log": "1.0.2",
"wikimedia/assert": "0.2.2",
"wikimedia/at-ease": "1.2.0",
"wikimedia/utfnormal": "2.0.0",
"wikimedia/timestamp": "1.0.0",
"wikimedia/wait-condition-loop": "1.0.1",
- "wikimedia/wrappedstring": "2.3.0",
+ "wikimedia/wrappedstring": "3.0.0",
"zordius/lightncandy": "0.23"
},
"require-dev": {
"jakub-onderka/php-parallel-lint": "0.9.2",
"jetbrains/phpstorm-stubs": "dev-master#1b9906084d6635456fcf3f3a01f0d7d5b99a578a",
"justinrainbow/json-schema": "~5.2",
- "mediawiki/mediawiki-codesniffer": "17.0.0",
+ "mediawiki/mediawiki-codesniffer": "18.0.0",
"monolog/monolog": "~1.22.1",
"nikic/php-parser": "3.1.3",
"nmred/kafka-php": "0.1.5",
"ext-wikidiff2": "Diff accelerator",
"monolog/monolog": "Flexible debug logging system",
"nmred/kafka-php": "Send debug log events to kafka",
- "pear/mail": "Mail sending support",
- "pear/mail_mime": "Mail sending support",
- "pear/mail_mime-decode": "Mail sending support",
"wikimedia/avro": "Binary serialization format used with kafka"
},
"autoload": {
"psr-0": {
"ComposerHookHandler": "includes/composer",
"ComposerVendorHtaccessCreator": "includes/composer"
- },
- "files": [
- "includes/compat/Timestamp.php"
- ]
+ }
},
"autoload-dev": {
"files": [
'PreferencesFormPreSave': Override preferences being saved
$formData: array of user submitted data
-$form: PreferencesForm object, also a ContextSource
+$form: HTMLForm object, also a ContextSource
$user: User object with preferences to be saved set
&$result: boolean indicating success
$oldUserOptions: array with user old options (before save)
'PreferencesGetLegend': Override the text used for the <legend> of a
preferences section.
-$form: the PreferencesForm object. This is a ContextSource as well
+$form: the HTMLForm object. This is a ContextSource as well
$key: the section name
&$legend: the legend text. Defaults to wfMessage( "prefs-$key" )->text() but may
be overridden
*/
public static function getAutoloadNamespaces() {
return [
- 'MediaWiki\\Linker\\' => __DIR__ .'/linker/'
+ 'MediaWiki\\Edit\\' => __DIR__ . '/edit/',
+ 'MediaWiki\\EditPage\\' => __DIR__ . '/editpage/',
+ 'MediaWiki\\Linker\\' => __DIR__ .'/linker/',
];
}
}
$reportUri = wfAppendQuery( wfScript( 'api' ), $apiArguments );
// Per spec, ';' and ',' must be hex-escaped in report uri
- $reportUri = $this->escapeUrlForCSP( $reportUri );
+ // Also add an & at the end of url to work around bug in hhvm
+ // with handling of POST parameters when always_decode_post_data
+ // is set to true. See https://github.com/facebook/hhvm/issues/6676
+ $reportUri = $this->escapeUrlForCSP( $reportUri ) . '&';
return $reportUri;
}
*/
$wgGitInfoCacheDirectory = false;
-/**
- * Bump this number when changing the global style sheets and JavaScript.
- *
- * It should be appended in the query string of static CSS and JS includes,
- * to ensure that client-side caches do not keep obsolete copies of global
- * styles.
- *
- * @deprecated since 1.31
- */
-$wgStyleVersion = '303';
-
/**
* This will cache static pages for non-logged-in users to reduce
* database traffic on public sites. ResourceLoader requests to default
$wgUseMediaWikiUIEverywhere = false;
/**
- * Temporary variable that determines whether the EditPage class should use OOjs UI or not.
- * This will be removed later and OOjs UI will become the only option.
+ * Temporary variable that determines whether Special:Preferences should use OOUI or not.
+ * This will be removed later and OOUI will become the only option.
*
* @since 1.32
*/
$script .= '});';
- $nonce = $wgOut->getCSPNonce();
- $wgOut->addScript( ResourceLoader::makeInlineScript( $script, $nonce ) );
-
$toolbar = '<div id="toolbar"></div>';
if ( Hooks::run( 'EditPageBeforeEditToolbar', [ &$toolbar ] ) ) {
// Only add the old toolbar cruft to the page payload if the toolbar has not
// been over-written by a hook caller
+ $nonce = $wgOut->getCSPNonce();
$wgOut->addScript( ResourceLoader::makeInlineScript( $script, $nonce ) );
};
use Wikimedia\ScopedCallback;
use Wikimedia\Rdbms\DBReplicationWaitError;
-// Hide compatibility functions from Doxygen
-/// @cond
-/**
- * Compatibility functions
- *
- * We support PHP 5.5.9 and up.
- * Re-implementations of newer functions or functions in non-standard
- * PHP extensions may be included here.
- */
-
-// hash_equals function only exists in PHP >= 5.6.0
-// https://secure.php.net/hash_equals
-if ( !function_exists( 'hash_equals' ) ) {
- /**
- * Check whether a user-provided string is equal to a fixed-length secret string
- * without revealing bytes of the secret string through timing differences.
- *
- * The usual way to compare strings (PHP's === operator or the underlying memcmp()
- * function in C) is to compare corresponding bytes and stop at the first difference,
- * which would take longer for a partial match than for a complete mismatch. This
- * is not secure when one of the strings (e.g. an HMAC or token) must remain secret
- * and the other may come from an attacker. Statistical analysis of timing measurements
- * over many requests may allow the attacker to guess the string's bytes one at a time
- * (and check his guesses) even if the timing differences are extremely small.
- *
- * When making such a security-sensitive comparison, it is essential that the sequence
- * in which instructions are executed and memory locations are accessed not depend on
- * the secret string's value. HOWEVER, for simplicity, we do not attempt to minimize
- * the inevitable leakage of the string's length. That is generally known anyway as
- * a chararacteristic of the hash function used to compute the secret value.
- *
- * Longer explanation: http://www.emerose.com/timing-attacks-explained
- *
- * @codeCoverageIgnore
- * @param string $known_string Fixed-length secret string to compare against
- * @param string $user_string User-provided string
- * @return bool True if the strings are the same, false otherwise
- */
- function hash_equals( $known_string, $user_string ) {
- // Strict type checking as in PHP's native implementation
- if ( !is_string( $known_string ) ) {
- trigger_error( 'hash_equals(): Expected known_string to be a string, ' .
- gettype( $known_string ) . ' given', E_USER_WARNING );
-
- return false;
- }
-
- if ( !is_string( $user_string ) ) {
- trigger_error( 'hash_equals(): Expected user_string to be a string, ' .
- gettype( $user_string ) . ' given', E_USER_WARNING );
-
- return false;
- }
-
- $known_string_len = strlen( $known_string );
- if ( $known_string_len !== strlen( $user_string ) ) {
- return false;
- }
-
- $result = 0;
- for ( $i = 0; $i < $known_string_len; $i++ ) {
- $result |= ord( $known_string[$i] ) ^ ord( $user_string[$i] );
- }
-
- return ( $result === 0 );
- }
-}
-/// @endcond
-
/**
* Load an extension
*
* hostname of the server handling the request.
*
* @param string $nonce Value from OutputPage::getCSPNonce
- * @return string
+ * @return string|WrappedString HTML
*/
function wfReportTime( $nonce = null ) {
global $wgShowHostnames;
}
/**
- * Add a JavaScript file out of skins/common, or a given relative path.
+ * Add a JavaScript file to be loaded as `<script>` on this page.
+ *
* Internal use only. Use OutputPage::addModules() if possible.
*
- * @param string $file Filename in skins/common or complete on-server path
- * (/foo/bar.js)
- * @param string $version Style version of the file. Defaults to $wgStyleVersion
+ * @param string $file URL to file (absolute path, protocol-relative, or full url)
+ * @param string $unused Previously used to change the cache-busting query parameter
*/
- public function addScriptFile( $file, $version = null ) {
- // See if $file parameter is an absolute URL or begins with a slash
- if ( substr( $file, 0, 1 ) == '/' || preg_match( '#^[a-z]*://#i', $file ) ) {
- $path = $file;
- } else {
- $path = $this->getConfig()->get( 'StylePath' ) . "/common/{$file}";
- }
- if ( is_null( $version ) ) {
- $version = $this->getConfig()->get( 'StyleVersion' );
+ public function addScriptFile( $file, $unused = null ) {
+ if ( substr( $file, 0, 1 ) !== '/' && !preg_match( '#^[a-z]*://#i', $file ) ) {
+ // This is not an absolute path, protocol-relative url, or full scheme url,
+ // presumed to be an old call intended to include a file from /w/skins/common,
+ // which doesn't exist anymore as of MediaWiki 1.24 per T71277. Ignore.
+ wfDeprecated( __METHOD__, '1.24' );
+ return;
}
- $this->addScript( Html::linkedScript( wfAppendQuery( $path, $version ), $this->getCSPNonce() ) );
+ $this->addScript( Html::linkedScript( $file, $this->getCSPNonce() ) );
}
/**
$url = $style;
} else {
$config = $this->getConfig();
- $url = $config->get( 'StylePath' ) . '/' . $style . '?' .
- $config->get( 'StyleVersion' );
+ // Append file hash as query parameter
+ $url = self::transformResourcePath(
+ $config,
+ $config->get( 'StylePath' ) . '/' . $style
+ );
}
$link = Html::linkedStyle( $url, $media );
'version' => PHP_VERSION,
'vendor' => 'the PHP Group',
'upstreamSupported' => '5.6.0',
- 'minSupported' => '5.5.9',
+ 'minSupported' => '7.0.0',
'upgradeURL' => 'https://secure.php.net/downloads.php',
);
}
. "MediaWiki $this->mwVersion needs {$phpInfo['implementation']}"
. " $minimumVersion or higher or {$otherInfo['implementation']} version "
. "{$otherInfo['minSupported']}.\n\nCheck if you have a"
- . " newer php executable with a different name, such as php5.\n\n";
+ . " newer php executable with a different name.\n\n";
// phpcs:disable Generic.Files.LineLength
$longHtml = <<<HTML
If for some reason you are unable to upgrade your {$phpInfo['implementation']} version,
you will need to <a href="https://www.mediawiki.org/wiki/Download">download</a> an
older version of MediaWiki from our website.
- See our<a href="https://www.mediawiki.org/wiki/Compatibility#PHP">compatibility page</a>
+ See our <a href="https://www.mediawiki.org/wiki/Compatibility#PHP">compatibility page</a>
for details of which versions are compatible with prior versions of {$phpInfo['implementation']}.
HTML;
// phpcs:enable Generic.Files.LineLength
* @deprecated since 1.31, use PreferencesFactory
*
* @param array $formData
- * @param PreferencesForm $form
+ * @param HTMLForm $form
* @return bool|Status|string
*/
public static function tryFormSubmit( $formData, $form ) {
/**
* @param array $formData
- * @param PreferencesForm $form
+ * @param HTMLForm $form
* @return Status
*/
public static function tryUISubmit( $formData, $form ) {
require_once "$IP/includes/compat/normal/UtfNormalUtil.php";
-$ps_validation = Profiler::instance()->scopedProfileIn( $fname . '-validation' );
-
// T48998: Bail out early if $wgArticlePath is non-absolute
foreach ( [ 'wgArticlePath', 'wgVariantArticlePath' ] as $varName ) {
if ( $$varName && !preg_match( '/^(https?:\/\/|\/)/', $$varName ) ) {
}
}
-Profiler::instance()->scopedProfileOut( $ps_validation );
-
$ps_default2 = Profiler::instance()->scopedProfileIn( $fname . '-defaults2' );
if ( $wgCanonicalServer === false ) {
Profiler::instance()->scopedProfileOut( $ps_default2 );
-$ps_misc = Profiler::instance()->scopedProfileIn( $fname . '-misc1' );
+$ps_misc = Profiler::instance()->scopedProfileIn( $fname . '-misc' );
// Raise the memory limit if it's too low
wfMemoryLimit();
wfDebug( $debug );
}
-Profiler::instance()->scopedProfileOut( $ps_misc );
-$ps_memcached = Profiler::instance()->scopedProfileIn( $fname . '-memcached' );
-
$wgMemc = wfGetMainCache();
$messageMemc = wfGetMessageCacheStorage();
', session: ' . get_class( ObjectCache::getInstance( $wgSessionCacheType ) )
);
-Profiler::instance()->scopedProfileOut( $ps_memcached );
+Profiler::instance()->scopedProfileOut( $ps_misc );
// Most of the config is out, some might want to run hooks here.
Hooks::run( 'SetupAfterCache' );
], '$wgAuth is ' . get_class( $wgAuth ) );
}
-// Set up the session
-$ps_session = Profiler::instance()->scopedProfileIn( $fname . '-session' );
/**
* @var MediaWiki\Session\SessionId|null $wgInitialSessionId The persistent
* session ID (if any) loaded at startup
);
}
}
-Profiler::instance()->scopedProfileOut( $ps_session );
/**
* @var User $wgUser
// of the extension file. This allows the extension to perform
// any necessary initialisation in the fully initialised environment
foreach ( $wgExtensionFunctions as $func ) {
- // Allow closures in PHP 5.3+
- if ( is_object( $func ) && $func instanceof Closure ) {
- $profName = $fname . '-extensions-closure';
- } elseif ( is_array( $func ) ) {
- if ( is_object( $func[0] ) ) {
- $profName = $fname . '-extensions-' . get_class( $func[0] ) . '::' . $func[1];
- } else {
- $profName = $fname . '-extensions-' . implode( '::', $func );
- }
- } else {
- $profName = $fname . '-extensions-' . strval( $func );
- }
-
- $ps_ext_func = Profiler::instance()->scopedProfileIn( $profName );
call_user_func( $func );
- Profiler::instance()->scopedProfileOut( $ps_ext_func );
}
// If the session user has a 0 id but a valid name, that means we need to
if ( !defined( 'MW_NO_SESSION' ) && !$wgCommandLineMode ) {
$sessionUser = MediaWiki\Session\SessionManager::getGlobalSession()->getUser();
if ( $sessionUser->getId() === 0 && User::isValidUserName( $sessionUser->getName() ) ) {
- $ps_autocreate = Profiler::instance()->scopedProfileIn( $fname . '-autocreate' );
$res = MediaWiki\Auth\AuthManager::singleton()->autoCreateUser(
$sessionUser,
MediaWiki\Auth\AuthManager::AUTOCREATE_SOURCE_SESSION,
true
);
- Profiler::instance()->scopedProfileOut( $ps_autocreate );
\MediaWiki\Logger\LoggerFactory::getInstance( 'authevents' )->info( 'Autocreation attempt', [
'event' => 'autocreate',
'status' => $res,
// a custom language code might not have a defined name...
if ( !array_key_exists( $wgLanguageCode, $languages ) ) {
$languages[$wgLanguageCode] = $wgLanguageCode;
+ // Sort the array again
+ ksort( $languages );
}
- ksort( $languages );
-
/**
* If a bogus value is set, default to the content language.
* Otherwise, no default is selected and the user ends up
*
* If you don't want to do anything with the form, just return false here.
*
+ * This method will be passed to the HTMLForm as a submit callback (see
+ * HTMLForm::setSubmitCallback) and must return as documented for HTMLForm::trySubmit.
+ *
+ * @see HTMLForm::setSubmitCallback()
+ * @see HTMLForm::trySubmit()
* @param array $data
- * @return bool|array True for success, false for didn't-try, array of errors on failure
+ * @return bool|string|array|Status Must return as documented for HTMLForm::trySubmit
*/
abstract public function onSubmit( $data );
}
public function onSubmit( $data ) {
- self::doWatch( $this->getTitle(), $this->getUser() );
-
- return true;
+ return self::doWatch( $this->getTitle(), $this->getUser() );
}
protected function checkCanExecute( User $user ) {
* @param string $action Optionally override the action to 'watch'
* @return string Token
* @since 1.18
+ * @deprecated since 1.32 Use WatchAction::getWatchToken() with action 'unwatch' directly.
*/
public static function getUnwatchToken( Title $title, User $user, $action = 'unwatch' ) {
+ wfDeprecated( __METHOD__, '1.32' );
return self::getWatchToken( $title, $user, $action );
}
return $allowedValues;
}
- if ( self::truncateArray( $valuesList, $sizeLimit ) ) {
- $this->addDeprecation(
- [ 'apiwarn-toomanyvalues', $valueName, $sizeLimit ],
- "too-many-$valueName-for-{$this->getModulePath()}"
+ if ( count( $valuesList ) > $sizeLimit ) {
+ $this->dieWithError(
+ [ 'apierror-toomanyvalues', $valueName, $sizeLimit ],
+ "too-many-$valueName"
);
}
WatchAction::doWatchOrUnwatch( $value, $titleObj, $this->getUser() );
}
- /**
- * Truncate an array to a certain length.
- * @param array &$arr Array to truncate
- * @param int $limit Maximum length
- * @return bool True if the array was truncated, false otherwise
- */
- public static function truncateArray( &$arr, $limit ) {
- $modified = false;
- while ( count( $arr ) > $limit ) {
- array_pop( $arr );
- $modified = true;
- }
-
- return $modified;
- }
-
/**
* Gets the user for whom to get the watchlist
*
] ];
}
+ /**
+ * Truncate an array to a certain length.
+ * @deprecated since 1.32, no replacement
+ * @param array &$arr Array to truncate
+ * @param int $limit Maximum length
+ * @return bool True if the array was truncated, false otherwise
+ */
+ public static function truncateArray( &$arr, $limit ) {
+ wfDeprecated( __METHOD__, '1.32' );
+ $modified = false;
+ while ( count( $arr ) > $limit ) {
+ array_pop( $arr );
+ $modified = true;
+ }
+
+ return $modified;
+ }
+
/**@}*/
}
}
}
+ $title = $params['title'];
+ if ( !is_null( $title ) ) {
+ $titleObj = Title::newFromText( $title );
+ if ( is_null( $titleObj ) ) {
+ $this->dieWithError( [ 'apierror-invalidtitle', wfEscapeWikiText( $title ) ] );
+ }
+ $this->addWhereFld( 'rc_namespace', $titleObj->getNamespace() );
+ $this->addWhereFld( 'rc_title', $titleObj->getDBkey() );
+ }
+
if ( !is_null( $params['show'] ) ) {
$show = array_flip( $params['show'] );
ApiBase::PARAM_TYPE => RecentChange::getChangeTypes()
],
'toponly' => false,
+ 'title' => null,
'continue' => [
ApiBase::PARAM_HELP_MSG => 'api-help-param-continue',
],
"apihelp-query+iwlinks-param-limit": "Wie viele Interwiki-Links zurückgegeben werden sollen.",
"apihelp-query+iwlinks-param-prefix": "Gibt nur Interwiki-Links mit diesem Präfix zurück.",
"apihelp-query+iwlinks-param-dir": "Die Auflistungsrichtung.",
+ "apihelp-query+langbacklinks-param-lang": "Sprache für den Sprachlink.",
"apihelp-query+langbacklinks-param-limit": "Wie viele Gesamtseiten zurückgegeben werden sollen.",
"apihelp-query+langbacklinks-param-prop": "Zurückzugebende Eigenschaften:",
"apihelp-query+langbacklinks-paramvalue-prop-lltitle": "Ergänzt den Titel des Sprachlinks.",
"apierror-stashwrongowner": "Falscher Besitzer: $1",
"apierror-systemblocked": "Du wurdest von MediaWiki automatisch gesperrt.",
"apierror-timeout": "Der Server hat nicht innerhalb der erwarteten Zeit reagiert.",
+ "apierror-toomanyvalues": "Es wurden zu viele Werte für den Parameter <var>$1</var> angegeben. Die Obergrenze liegt bei $2.",
"apierror-unknownerror-nocode": "Unbekannter Fehler.",
"apierror-unknownerror": "Unbekannter Fehler: „$1“.",
"apierror-unknownformat": "Nicht erkanntes Format „$1“.",
"apiwarn-invalidtitle": "„$1“ ist kein gültiger Titel.",
"apiwarn-notfile": "„$1“ ist keine Datei.",
"apiwarn-parse-revidwithouttext": "<var>revid</var>, ohne <var>text</var> verwendet, und geparste Seiteneigenschaften wurden angefordert. Wolltest du <var>oldid</var> anstatt <var>revid</var> verwenden?",
- "apiwarn-toomanyvalues": "Es wurden zu viele Werte für den Parameter <var>$1</var> angegeben. Die Obergrenze liegt bei $2.",
"apiwarn-validationfailed-badpref": "Keine gültige Einstellung.",
"apiwarn-validationfailed-cannotset": "Kann nicht von diesem Modul festgelegt werden.",
"apiwarn-validationfailed-keytoolong": "Der Schlüssel ist zu lang. Es sind nicht mehr als $1 Bytes erlaubt.",
"apihelp-query+recentchanges-param-limit": "How many total changes to return.",
"apihelp-query+recentchanges-param-type": "Which types of changes to show.",
"apihelp-query+recentchanges-param-toponly": "Only list changes which are the latest revision.",
+ "apihelp-query+recentchanges-param-title": "Filter entries to those related to a page.",
"apihelp-query+recentchanges-param-generaterevisions": "When being used as a generator, generate revision IDs rather than titles. Recent change entries without associated revision IDs (e.g. most log entries) will generate nothing.",
"apihelp-query+recentchanges-example-simple": "List recent changes.",
"apihelp-query+recentchanges-example-generator": "Get page info about recent unpatrolled changes.",
"apierror-templateexpansion-notwikitext": "Template expansion is only supported for wikitext content. $1 uses content model $2.",
"apierror-timeout": "The server did not respond within the expected time.",
"apierror-toofewexpiries": "$1 expiry {{PLURAL:$1|timestamp was|timestamps were}} provided where $2 {{PLURAL:$2|was|were}} needed.",
+ "apierror-toomanyvalues": "Too many values supplied for parameter <var>$1</var>. The limit is $2.",
"apierror-unknownaction": "The action specified, <kbd>$1</kbd>, is not recognized.",
"apierror-unknownerror-editpage": "Unknown EditPage error: $1.",
"apierror-unknownerror-nocode": "Unknown error.",
"apiwarn-redirectsandrevids": "Redirect resolution cannot be used together with the <var>revids</var> parameter. Any redirects the <var>revids</var> point to have not been resolved.",
"apiwarn-tokennotallowed": "Action \"$1\" is not allowed for the current user.",
"apiwarn-tokens-origin": "Tokens may not be obtained when the same-origin policy is not applied.",
- "apiwarn-toomanyvalues": "Too many values supplied for parameter <var>$1</var>. The limit is $2.",
"apiwarn-truncatedresult": "This result was truncated because it would otherwise be larger than the limit of $1 bytes.",
"apiwarn-unclearnowtimestamp": "Passing \"$2\" for timestamp parameter <var>$1</var> has been deprecated. If for some reason you need to explicitly specify the current time without calculating it client-side, use <kbd>now</kbd>.",
"apiwarn-unrecognizedvalues": "Unrecognized {{PLURAL:$3|value|values}} for parameter <var>$1</var>: $2.",
"Fortega",
"Luzcaru",
"Javiersanp",
- "KATRINE1992"
+ "KATRINE1992",
+ "Adjen"
]
},
"apihelp-main-extended-description": "<div class=\"hlist plainlinks api-main-links\">\n* [[mw:Special:MyLanguage/API:Main_page|Documentation]]\n* [[mw:Special:MyLanguage/API:FAQ|FAQ]]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api Mailing list]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce API Announcements]\n* [https://phabricator.wikimedia.org/maniphest/query/GebfyV4uCaLd/#R Bugs & requests]\n</div>\n<strong>Status:</strong> Todas las funciones mostradas en esta página deberían estar funcionando, pero la API aún está en desarrollo activo, y puede cambiar en cualquier momento. Suscribase a [https://lists.wikimedia.org/pipermail/mediawiki-api-announce/ the mediawiki-api-announce mailing list] para aviso de actualizaciones.\n\n<strong>Erroneous requests:</strong> Cuando se envían solicitudes erróneas a la API, se enviará un encabezado HTTP con la clave \"MediaWiki-API-Error\" y, luego, el valor del encabezado y el código de error devuelto se establecerán en el mismo valor. Para más información ver [[mw:Special:MyLanguage/API:Errors_and_warnings|API: Errors and warnings]].\n\n<strong>Testing:</strong> Para facilitar la comprobación de las solicitudes de API, consulte [[Special:ApiSandbox]].",
"apihelp-query+recentchanges-param-limit": "Cuántos cambios en total se devolverán.",
"apihelp-query+recentchanges-param-type": "Cuántos tipos de cambios se mostrarán.",
"apihelp-query+recentchanges-param-toponly": "Enumerar solo las modificaciones que sean las últimas revisiones.",
+ "apihelp-query+recentchanges-param-title": "Filtrar aquellas entradas que son relacionadas a una página",
"apihelp-query+recentchanges-param-generaterevisions": "Cuando se utilice como generador, genera identificadores de revisión en lugar de títulos. Las entradas en la lista de cambios recientes que no tengan identificador de revisión asociado (por ejemplo, la mayoría de las entradas de registro) no generarán nada.",
"apihelp-query+recentchanges-example-simple": "Lista de cambios recientes.",
"apihelp-query+recentchanges-example-generator": "Obtener información de página de cambios recientes no patrullados.",
"apihelp-query+recentchanges-param-limit": "Combien de modifications renvoyer au total.",
"apihelp-query+recentchanges-param-type": "Quels types de modification afficher.",
"apihelp-query+recentchanges-param-toponly": "Lister uniquement les modifications qui sont de la dernière révision.",
+ "apihelp-query+recentchanges-param-title": "Filtrer les entrées vers celles relatives à une page.",
"apihelp-query+recentchanges-param-generaterevisions": "Utilisé comme générateur, générer des IDs de révision plutôt que des titres.\nLes entrées de modification récentes sans IDs de révision associé (par ex. la plupart des entrées de journaux) ne généreront rien.",
"apihelp-query+recentchanges-example-simple": "Lister les modifications récentes",
"apihelp-query+recentchanges-example-generator": "Obtenir l’information de page sur les modifications récentes non relues.",
"apierror-templateexpansion-notwikitext": "Le développement du modèle n'est effectif que sur un contenu wikitext. $1 utilise le modèle de contenu $2.",
"apierror-timeout": "Le serveur n’a pas répondu dans le délai imparti.",
"apierror-toofewexpiries": "$1 {{PLURAL:$1|horodatage d’expiration a été fourni|horodatages d’expiration ont été fournis}} alors que $2 {{PLURAL:$2|était attendu|étaient attendus}}.",
+ "apierror-toomanyvalues": "Trop de valeurs fournies pour le paramètre <var>$1</var>. La limite est $2.",
"apierror-unknownaction": "L'action spécifiée, <kbd>$1</kbd>, n'est pas reconnue.",
"apierror-unknownerror-editpage": "Erreur inconnue EditPage: $1.",
"apierror-unknownerror-nocode": "Erreur inconnue.",
"apiwarn-redirectsandrevids": "La résolution de la redirection ne peut pas être utilisée avec le paramètre <var>revids</var>. Toutes les redirections vers lesquelles pointent <var>revids</var> n’ont pas été résolues.",
"apiwarn-tokennotallowed": "L'action « $1 » n'est pas autorisée pour l'utilisateur actuel.",
"apiwarn-tokens-origin": "Les jetons ne peuvent pas être obtenus quand la politique de même origine n’est pas appliquée.",
- "apiwarn-toomanyvalues": "Trop de valeurs fournies pour le paramètre <var>$1</var>. La limite est $2.",
"apiwarn-truncatedresult": "Ce résultat a été tronqué parce que sinon, il dépasserait la limite de $1 octets.",
"apiwarn-unclearnowtimestamp": "Passer « $2 » comme paramètre d’horodatage <var>$1</var> a été rendu désuet. Si, pour une raison quelconque, vous avez besoin de spécifier explicitement l’heure courante sans la recalculer du côté client, utilisez <kbd>now</kbd>.",
"apiwarn-unrecognizedvalues": "{{PLURAL:$3|Valeur non reconnue|Valeurs non reconnues}} pour le paramètre <var>$1</var> : $2.",
"apierror-systemblocked": "Foi bloqueado automaticamente polo software MediaWiki.",
"apierror-templateexpansion-notwikitext": "A expansión de modelos só é compatible co contido en wikitexto. $1 usa o modelo de contido $2.",
"apierror-timeout": "O servidor non respondeu no tempo esperado.",
+ "apierror-toomanyvalues": "Demasiados valores para o parámetro <var>$1</var>. O límite é $2.",
"apierror-unknownaction": "A acción especificada, <kbd>$1</kbd>, non está recoñecida.",
"apierror-unknownerror-editpage": "Erro descoñecido EditPageː $1.",
"apierror-unknownerror-nocode": "Erro descoñecido.",
"apiwarn-notfile": "\"$1\" non é un ficheiro.",
"apiwarn-parse-nocontentmodel": "Non se proporcionou <var>title</var> nin <var>contentmodel</var>, asúmese $1.",
"apiwarn-tokennotallowed": "A acción \"$1\" non está permitida para o usuario actual.",
- "apiwarn-toomanyvalues": "Demasiados valores para o parámetro <var>$1</var>. O límite é $2.",
"apiwarn-truncatedresult": "Truncouse este resultado porque doutra maneira sobrepasaría o límite de $1 bytes.",
"apiwarn-unrecognizedvalues": "{{PLURAL:$3|Valor non recoñecido|Valores non recoñecidos}} para o parámetro <var>$1</var>: $2.",
"apiwarn-unsupportedarray": "O parámetro <var>$1</var> usa unha sintaxe PHP de matriz que non está soportada.",
"apierror-templateexpansion-notwikitext": "הרחבת תבניות נתמכת רק בתוכן קוד ויקי (wikitext). $1 משתמש במודל התוכן $2.",
"apierror-timeout": "השרת לא השיב בזמן המצופה.",
"apierror-toofewexpiries": "{{PLURAL:$1|ניתן חותם זמן תפוגה אחד|ניתנו $1 חותמי זמן תפוגה}} כאשר {{PLURAL:$2|היה נחוץ אחד|היו נחוצים $1}}.",
+ "apierror-toomanyvalues": "יותר מדי ערכים סופקו לפרמטר <var>$1</var>. המגבלה היא $2.",
"apierror-unknownaction": "הפעולה שניתנה, <kbd>$1</kbd>, אינה מוכרת.",
"apierror-unknownerror-editpage": "שגיאת EditPage בלתי־ידועה: $1.",
"apierror-unknownerror-nocode": "שגיאה בלתי־ידועה.",
"apiwarn-redirectsandrevids": "פתרון הפניות לא יכול לשמש יחד עם הפרמטר <var>revids</var>. הפניות ש־<var>revids</var> מצביע אליהן לא נפתרו.",
"apiwarn-tokennotallowed": "הפעולה \"$1\" אינה מותרת למשתמש הנוכחי.",
"apiwarn-tokens-origin": "לא ניתן לקבל אסימונים כשמדיניות המקור הזהה אינה חלה.",
- "apiwarn-toomanyvalues": "יותר מדי ערכים סופקו לפרמטר <var>$1</var>. המגבלה היא $2.",
"apiwarn-truncatedresult": "התוצאה נחתכה כי אחרת היא הייתה ארוכה מהמגבלה של $1 בתים.",
"apiwarn-unclearnowtimestamp": "העברת \"$2\" בתור פרמטר חותם־זמן <var>$1</var> הוצהרה בתור מיושנת. אם מסיבה כלשהי אתם צריכים להגדיר במפורש את הזמן הנוכחי ללא חישובו בצד הלקוח, יש להשתמש ב־<kbd>now</kbd>.",
"apiwarn-unrecognizedvalues": "לפרמטר <var>$1</var> {{PLURAL:$3|ניתן ערך בלתי־ידוע|ניתנו ערכים בלתי־ידועים}}: $2.",
"apierror-maxchars": "Il parametro <var>$1</var> non può essere più lungo di $2 {{PLURAL:$2|carattere|caratteri}}",
"apierror-nosuchuserid": "Non c'è alcun utente con ID $1.",
"apierror-timeout": "Il server non ha risposto entro il tempo previsto.",
+ "apierror-toomanyvalues": "Troppi valori forniti per il parametro <var>$1</ var>. Il limite è $2.",
"api-credits-header": "Crediti"
}
"apierror-stashwrongowner": "잘못된 소유자: $1",
"apierror-systemblocked": "당신은 미디어위키에 의해서 자동으로 차단되었습니다.",
"apierror-timeout": "서버가 예측된 시간 내에 응답하지 않았습니다.",
+ "apierror-toomanyvalues": "<var>$1</var> 변수에 너무 많은 값이 지정되었습니다. 제한은 $2입니다.",
"apierror-unknownerror-editpage": "알 수 없는 EditPage 오류: $1.",
"apierror-unknownerror-nocode": "알 수 없는 오류.",
"apierror-unknownerror": "알 수 없는 오류: \"$1\"",
"apierror-specialpage-cantexecute": "Nie masz uprawnień, aby zobaczyć wyniki tej strony specjalnej.",
"apierror-stashwrongowner": "Nieprawidłowy właściciel: $1",
"apierror-timeout": "Serwer nie odpowiedział w spodziewanym czasie.",
+ "apierror-toomanyvalues": "Podano zbyt wiele wartości dla parametru <var>$1</var>. Ograniczenie do $2.",
"apierror-unknownerror-nocode": "Nieznany błąd.",
"apierror-unknownerror": "Nieznany błąd: „$1”.",
"apierror-unknownformat": "Nierozpoznany format „$1”.",
"apiwarn-invalidtitle": "„$1” nie jest poprawnym tytułem.",
"apiwarn-notfile": "„$1” nie jest plikiem.",
"apiwarn-tokennotallowed": "Działanie „$1” jest niedozwolone dla bieżącego użytkownika.",
- "apiwarn-toomanyvalues": "Podano zbyt wiele wartości dla parametru <var>$1</var>. Ograniczenie do $2.",
"apiwarn-validationfailed-keytoolong": "klucz zbyt długi (dozwolone nie więcej niż $1 bajtów).",
"apiwarn-validationfailed": "Błąd walidacji dla <kbd>$1</kbd>: $2",
"apiwarn-wgDebugAPI": "<strong>Ostrzeżenie o zabezpieczeniach</strong>: włączone jest <var>$wgDebugAPI</var>.",
"apihelp-query+recentchanges-param-limit": "Quantas alterações a serem retornadas.",
"apihelp-query+recentchanges-param-type": "Quais tipos de mudanças mostrar.",
"apihelp-query+recentchanges-param-toponly": "Somente lista as alterações que são as últimas revisões.",
+ "apihelp-query+recentchanges-param-title": "Filtre as entradas para aquelas relacionadas a uma página.",
"apihelp-query+recentchanges-param-generaterevisions": "Quando usado como gerador, gere IDs de revisão em vez de títulos. As entradas de alterações recentes sem IDs de revisão associadas (por exemplo, a maioria das entradas de log) não gerarão nada.",
"apihelp-query+recentchanges-example-simple": "Listar mudanças recentes.",
"apihelp-query+recentchanges-example-generator": "Obter informações da página sobre as mudanças recentes não patrulhadas.",
"apierror-templateexpansion-notwikitext": "A expansão da predefinição só é suportada pelo conteúdo do texto wiki. $1 usa o modelo de conteúdo $2.",
"apierror-timeout": "O servidor não respondeu dentro do tempo esperado.",
"apierror-toofewexpiries": "{{PLURAL:$1|Foi fornecida $1 data e hora|Foram fornecidas $1 datas e horas}} de expiração quando {{PLURAL:$2|era necessária|eram necessárias}} $2.",
+ "apierror-toomanyvalues": "Muitos valores são fornecidos para o parâmetro <var>$1</var>. O limite é de $2.",
"apierror-unknownaction": "A ação especificada, <kbd>$1</kbd>, não é reconhecida.",
"apierror-unknownerror-editpage": "Erro EditPage desconhecido: $1.",
"apierror-unknownerror-nocode": "Erro desconhecido.",
"apiwarn-redirectsandrevids": "A resolução de redirecionamento não pode ser usada em conjunto com o parâmetro <var>revids</var>. Qualquer redirecionamento <var>revids</var> apontando para não foi resolvido.",
"apiwarn-tokennotallowed": "A ação \"$1\" não é permitida para o usuário atual.",
"apiwarn-tokens-origin": "Os tokens não podem ser obtidos quando a política de origem não é aplicada.",
- "apiwarn-toomanyvalues": "Muitos valores são fornecidos para o parâmetro <var>$1</var>. O limite é de $2.",
"apiwarn-truncatedresult": "Esse resultado foi truncado porque, de outra forma, seria maior do que o limite de $1 bytes.",
"apiwarn-unclearnowtimestamp": "Passar \"$2\" para o parâmetro timestamp <var>$1</var> está obsoleto. Se, por algum motivo, você precisa especificar explicitamente o tempo atual sem calcular o lado do cliente, use <kbd>now</kbd>.",
"apiwarn-unrecognizedvalues": "{{PLURAL:$3|Valor não reconhecido para o parâmetro|Valores não reconhecidos para o parâmetro}} <var>$1</var>: $2.",
"apierror-templateexpansion-notwikitext": "A expansão de predefinições só é suportada para conteúdo em texto wiki. A página $1 usa o modelo de conteúdo $2.",
"apierror-timeout": "O servidor não respondeu no prazo esperado.",
"apierror-toofewexpiries": "{{PLURAL:$1|Foi fornecida $1 data e hora|Foram fornecidas $1 datas e horas}} de expiração quando {{PLURAL:$2|era necessária|eram necessárias}} $2.",
+ "apierror-toomanyvalues": "Foram fornecidos demasiados valores para o parâmetro <var>$1</var>. O limite é $2.",
"apierror-unknownaction": "A operação especificada, <kbd>$1</kbd>, não é reconhecida.",
"apierror-unknownerror-editpage": "Erro EditPage desconhecido: $1.",
"apierror-unknownerror-nocode": "Erro desconhecido.",
"apiwarn-redirectsandrevids": "Resolução de redirecionamentos não pode ser usada em conjunto com o parâmetro <var>revids</var>. Quaisquer redirecionamentos para os quais <var>revids</var> aponta não foram resolvidos.",
"apiwarn-tokennotallowed": "A operação \"$1\" não é permitida para o utilizador atual.",
"apiwarn-tokens-origin": "Não é possível obter chaves quando a norma da mesma origem não é aplicada.",
- "apiwarn-toomanyvalues": "Foram fornecidos demasiados valores para o parâmetro <var>$1</var>. O limite é $2.",
"apiwarn-truncatedresult": "Este resultado foi truncado porque ultrapassaria o limite de $1 bytes.",
"apiwarn-unclearnowtimestamp": "A passagem de \"$2\" no parâmetro de data e hora <var>$1</var> foi tornada obsoleta. Se, por qualquer razão, precisa de especificar de forma explícita a hora atual sem a calcular no lado do cliente, use <kbd>now</kbd>.",
"apiwarn-unrecognizedvalues": "{{PLURAL:$3|Valor não reconhecido|Valores não reconhecidos}} para o parâmetro <var>$1</var>: $2.",
"apihelp-query+recentchanges-param-limit": "{{doc-apihelp-param|query+recentchanges|limit}}",
"apihelp-query+recentchanges-param-type": "{{doc-apihelp-param|query+recentchanges|type}}",
"apihelp-query+recentchanges-param-toponly": "{{doc-apihelp-param|query+recentchanges|toponly}}",
+ "apihelp-query+recentchanges-param-title": "{{doc-apihelp-param|query+recentchanges|title}}",
"apihelp-query+recentchanges-param-generaterevisions": "{{doc-apihelp-param|query+recentchanges|generaterevisions}}",
"apihelp-query+recentchanges-example-simple": "{{doc-apihelp-example|query+recentchanges}}",
"apihelp-query+recentchanges-example-generator": "{{doc-apihelp-example|query+recentchanges}}",
"apierror-templateexpansion-notwikitext": "{{doc-apierror}}\n\nParameters:\n* $1 - Page title.\n* $2 - Content model.",
"apierror-timeout": "{{doc-apierror}}\nAPI error message that can be used for client side localisation of API errors.",
"apierror-toofewexpiries": "{{doc-apierror}}\n\nParameters:\n* $1 - Number provided.\n* $2 - Number needed.",
+ "apierror-toomanyvalues": "{{doc-apierror}}\n\nParameters:\n* $1 - Parameter name.\n* $2 - Maximum number of values allowed.",
"apierror-unknownaction": "{{doc-apierror}}\n\nParameters:\n* $1 - Action provided.",
"apierror-unknownerror-editpage": "{{doc-apierror}}\n\nParameters:\n* $1 - Error code (an integer).",
"apierror-unknownerror-nocode": "{{doc-apierror}}",
"apiwarn-redirectsandrevids": "{{doc-apierror}}",
"apiwarn-tokennotallowed": "{{doc-apierror}}\n\nParameters:\n* $1 - Token type being requested, typically named after the action requiring the token.",
"apiwarn-tokens-origin": "{{doc-apierror}}",
- "apiwarn-toomanyvalues": "{{doc-apierror}}\n\nParameters:\n* $1 - Parameter name.\n* $2 - Maximum number of values allowed.",
"apiwarn-truncatedresult": "{{doc-apierror}}\n\nParameters:\n* $1 - Size limit in bytes.",
"apiwarn-unclearnowtimestamp": "{{doc-apierror}}\n\nParameters:\n* $1 - Parameter name.\n* $2 - Supplied value.",
"apiwarn-unrecognizedvalues": "{{doc-apierror}}\n\nParameters:\n* $1 - Parameter name.\n* $2 - List of unknown values supplied.\n* $3 - Number of unknown values.",
"apierror-templateexpansion-notwikitext": "Раскрытие шаблонов разрешено только для вики-текстового содержимого. $1 использует модель содержимого $2.",
"apierror-timeout": "Сервер не ответил за ожидаемое время.",
"apierror-toofewexpiries": "Задано $1 {{PLURAL:$1|временная метка|временные метки|временных меток}} истечения, необходимо $2.",
+ "apierror-toomanyvalues": "Слишком много значений передано параметру <var>$1</var>. Максимальное число — $2.",
"apierror-unknownaction": "Заданное действие, <kbd>$1</kbd>, не распознано.",
"apierror-unknownerror-editpage": "Неизвестная ошибка EditPage: $1.",
"apierror-unknownerror-nocode": "Неизвестная ошибка.",
"apiwarn-redirectsandrevids": "Раскрытие перенаправлений не может быть использовано вместе с параметром <var>revids</var>. Все перенаправления на точку <var>revids</var> не должны быть раскрыты.",
"apiwarn-tokennotallowed": "Действие «$1» не разрешено для текущего участника.",
"apiwarn-tokens-origin": "Токены не могут быть получены, пока не применено правило ограничения домена.",
- "apiwarn-toomanyvalues": "Слишком много значений передано параметру <var>$1</var>. Максимальное число — $2.",
"apiwarn-truncatedresult": "Результат был усечён, поскольку в противном случае он был бы больше лимита в $1 {{PLURAL:$1|байт|байта|байт}}.",
"apiwarn-unclearnowtimestamp": "Передача «$2» в качестве параметра временной метки <var>$1</var> устарело. Если по какой-то причине вы хотите прямо указать текущее время без вычисления его на стороне клиента, используйте <kbd>now</kbd>.",
"apiwarn-unrecognizedvalues": "{{PLURAL:$3|Нераспознанное значение|Нераспознанные значения}} параметра <var>$1</var>: $2.",
"apierror-templateexpansion-notwikitext": "Розширення шаблонів підтримується лише для вмісту у форматі вікірозмітки. $1 використовує контентну модель $2.",
"apierror-timeout": "Сервер не відповів протягом відведеного на це часу.",
"apierror-toofewexpiries": "$1 {{PLURAL:$1|мітка часу завершення була надана|мітки часу завершення були надані|міток часу завершення було надано}}, тоді як {{PLURAL:$2|потрібна була $2 така мітка|потрібні були $2 таких мітки|потрібно було $2 таких міток}}.",
+ "apierror-toomanyvalues": "Надто багато значень задано для параметра <var>$1</var>. Ліміт становить $2.",
"apierror-unknownaction": "Вказана дія, <kbd>$1</kbd>, нерозпізнана.",
"apierror-unknownerror-editpage": "Невідома помилка EditPage: $1.",
"apierror-unknownerror-nocode": "Невідома помилка.",
"apiwarn-redirectsandrevids": "Вирішення перенаправлень не може використовуватись разом з параметром <var>revids</var>. Усі перенаправлення, на які вказує <var>revids</var>, не було вирішено.",
"apiwarn-tokennotallowed": "Дія «$1» недозволена для поточного користувача.",
"apiwarn-tokens-origin": "Токени не можна отримати, поки не застосована політика одного походження.",
- "apiwarn-toomanyvalues": "Надто багато значень задано для параметра <var>$1</var>. Ліміт становить $2.",
"apiwarn-truncatedresult": "Цей результат було скорочено, оскільки інакше він перевищив би ліміт у $1 байтів.",
"apiwarn-unclearnowtimestamp": "Вказування «$2» для параметра мітки часу <var>$1</var> є застарілим. Якщо з якоїсь причини Вам треба чітко вказати поточний час без вираховування його з боку клієнта, використайте <kbd>now</kbd>.",
"apiwarn-unrecognizedvalues": "{{PLURAL:$3|Нерозпізнане|Нерозпізнані}} значення для параметра <var>$1</var>: $2.",
"apierror-templateexpansion-notwikitext": "模板展开只支持wiki文本内容。$1使用内容模型$2。",
"apierror-timeout": "服务器没有在预期时间内响应。",
"apierror-toofewexpiries": "提供了$1个逾期{{PLURAL:$1|时间戳}},实际则需要$2个。",
+ "apierror-toomanyvalues": "为参数<var>$1</var>提供了太多值。限制为$2。",
"apierror-unknownaction": "指定的操作<kbd>$1</kbd>不被承认。",
"apierror-unknownerror-editpage": "未知的编辑页面错误:$1。",
"apierror-unknownerror-nocode": "未知错误。",
"apiwarn-redirectsandrevids": "重定向解决方案不能与<var>revids</var>参数一起使用。任何<var>revids</var>所指向的重定向都未被解决。",
"apiwarn-tokennotallowed": "操作“$1”不允许当前用户使用。",
"apiwarn-tokens-origin": "在未应用同来源方针时,令牌可能无法获得。",
- "apiwarn-toomanyvalues": "参数<var>$1</var>指定了太多的值。上限为$2。",
"apiwarn-truncatedresult": "此结果被缩短,否则其将大于$1字节的限制。",
"apiwarn-unclearnowtimestamp": "为时间戳参数<var>$1</var>传递“$2”已被弃用。如因某些原因您需要明确指定当前时间而不计算客户端,请使用<kbd>now</kbd>。",
"apiwarn-unrecognizedvalues": "参数<var>$1</var>有无法识别的{{PLURAL:$3|值}}:$2。",
$this->logRejection( [
'throttle' => $this->type,
'index' => $index,
- 'ip' => $ipKey,
+ 'ipKey' => $ipKey,
'username' => $username,
'count' => $count,
'expiry' => $expiry,
protected function logRejection( array $context ) {
$logMsg = 'Throttle {throttle} hit, throttled for {expiry} seconds due to {count} attempts '
- . 'from username {username} and IP {ip}';
+ . 'from username {username} and IP {ipKey}';
// If we are hitting a throttle for >= warningLimit attempts, it is much more likely to be
// an attack than someone simply forgetting their password, so log it at a higher level.
* http://www.gnu.org/copyleft/gpl.html
*
* @file
- * @license GNU GPL v2 or later
+ * @license GPL-2.0-or-later
* @author Jeroen De Dauw < jeroendedauw@gmail.com >
*/
} else {
$userLink = Linker::userLink(
$cacheEntry->mAttribs['rc_user'],
- $cacheEntry->mAttribs['rc_user_text']
+ $cacheEntry->mAttribs['rc_user_text'],
+ ExternalUserNames::getLocal( $cacheEntry->mAttribs['rc_user_text'] )
);
}
static::class,
$this->locale,
$this->digitTransformLanguage->getCode(),
- self::getICUVersion(),
+ INTL_ICU_VERSION,
self::FIRST_LETTER_VERSION
);
$this->firstLetterData = $cache->getWithSetCallback( $cacheKey, $cache::TTL_WEEK, function () {
* 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 54561
- * https://bugs.php.net/bug.php?id=54561). This function will return
- * false on older PHPs.
- *
- * TODO: Remove the backwards-compatibility as MediaWiki now requires
- * higher levels of PHP.
+ * documented, but see https://bugs.php.net/bug.php?id=54561.
*
* @since 1.21
- * @return string|bool
+ * @deprecated since 1.32, use INTL_ICU_VERSION directly
+ * @return string
*/
static function getICUVersion() {
- return defined( 'INTL_ICU_VERSION' ) ? INTL_ICU_VERSION : false;
+ wfDeprecated( __METHOD__, '1.32' );
+ return INTL_ICU_VERSION;
}
/**
* @return string|bool
*/
static function getUnicodeVersionForICU() {
- $icuVersion = self::getICUVersion();
+ $icuVersion = INTL_ICU_VERSION;
if ( !$icuVersion ) {
return false;
}
$versionPrefix = substr( $icuVersion, 0, 3 );
// Source: http://site.icu-project.org/download
$map = [
+ '61.' => '10.0',
+ '60.' => '10.0',
'59.' => '9.0',
'58.' => '9.0',
'57.' => '8.0',
+++ /dev/null
-<?php
-// This file is loaded by composer.json#autoload.files instead of autoload.php,
-// because PHP's class loader does not support autoloading an alias for a class that
-// isn't already loaded. See also AutoLoaderTest and ClassCollector.
-
-// By using an autoload file, this will trigger directly at runtime outside any class
-// loading context. This file will then register the alias and, as class_alias() does
-// by default, it will trigger a plain autoload for the destination class.
-
-// The below uses a namespaced class reference, to to avoid being seen by ClassCollector,
-// which would otherwise add it to autoload.php, after which AutoLoaderTest will
-// complain about class_alias() not being in the target class file.
-
-/**
- * @deprecated since 1.29
- * @since 1.20
- */
-class_alias( Wikimedia\Timestamp\TimestampException::class, 'TimestampException' );
require_once __DIR__ . '/../AutoLoader.php';
/**
- * @license GNU GPL v2+
+ * @license GPL-2.0-or-later
* @author Jeroen De Dauw < jeroendedauw@gmail.com >
*/
class ComposerHookHandler {
use Composer\Semver\Constraint\Constraint;
/**
- * @license GNU GPL v2+
+ * @license GPL-2.0-or-later
* @author Jeroen De Dauw < jeroendedauw@gmail.com >
*/
class ComposerPackageModifier {
<?php
/**
- * @license GNU GPL v2+
+ * @license GPL-2.0-or-later
* @author Jeroen De Dauw < jeroendedauw@gmail.com >
*/
class ComposerVersionNormalizer {
* @file
* @ingroup Database
*
- * @license GNU GPL v2+
+ * @license GPL-2.0-or-later
* @author Daniel Kinzler
*/
abstract class DBAccessBase implements IDBAccessObject {
// Don't interpret POST parameters starting with '@' as file uploads, because this
// makes it impossible to POST plain values starting with '@' (and causes security
// issues potentially exposing the contents of local files).
- // The PHP manual says this option was introduced in PHP 5.5 defaults to true in PHP 5.6,
- // but we support lower versions, and the option doesn't exist in HHVM 5.6.99.
- if ( defined( 'CURLOPT_SAFE_UPLOAD' ) ) {
- $this->curlOptions[CURLOPT_SAFE_UPLOAD] = true;
- } elseif ( is_array( $postData ) ) {
- // In PHP 5.2 and later, '@' is interpreted as a file upload if POSTFIELDS
- // is an array, but not if it's a string. So convert $req['body'] to a string
- // for safety.
- $postData = wfArrayToCgi( $postData );
- }
+ $this->curlOptions[CURLOPT_SAFE_UPLOAD] = true;
$this->curlOptions[CURLOPT_POSTFIELDS] = $postData;
// Suppress 'Expect: 100-continue' header, as some servers
$certLocations = [];
if ( $this->caInfo ) {
$certLocations = [ 'manual' => $this->caInfo ];
- } elseif ( version_compare( PHP_VERSION, '5.6.0', '<' ) ) {
- // Default locations, based on
- // https://www.happyassassin.net/2015/01/12/a-note-about-ssltls-trusted-certificate-stores-and-platforms/
- // PHP 5.5 and older doesn't have any defaults, so we try to guess ourselves.
- // PHP 5.6+ gets the CA location from OpenSSL as long as it is not set manually,
- // so we should leave capath/cafile empty there.
- $certLocations = array_filter( [
- getenv( 'SSL_CERT_DIR' ),
- getenv( 'SSL_CERT_PATH' ),
- '/etc/pki/tls/certs/ca-bundle.crt', # Fedora et al
- '/etc/ssl/certs', # Debian et al
- '/etc/pki/tls/certs/ca-bundle.trust.crt',
- '/etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem',
- '/System/Library/OpenSSL', # OSX
- ] );
}
foreach ( $certLocations as $key => $cert ) {
PopulateBacklinkNamespace::class,
FixDefaultJsonContentPages::class,
CleanupEmptyCategories::class,
- AddRFCAndPMIDInterwiki::class,
+ AddRFCandPMIDInterwiki::class,
PopulatePPSortKey::class,
PopulateIpChanges::class,
];
$scriptTypes = [
'php' => [
"<?php echo 'ex' . 'ec';",
- "#!/var/env php5\n<?php echo 'ex' . 'ec';",
+ "#!/var/env php\n<?php echo 'ex' . 'ec';",
],
];
$unwantedLanguageCodes = $wgExtraLanguageCodes +
LanguageCode::getDeprecatedCodeMapping();
$languages = Language::fetchLanguageNames();
- ksort( $languages );
foreach ( $languages as $code => $lang ) {
if ( isset( $unwantedLanguageCodes[$code] ) ) {
continue;
$this->parent->getTextBox( [
'var' => 'wgMetaNamespace',
'label' => '', // @todo Needs a label?
- 'attribs' => [ 'readonly' => 'readonly', 'class' => 'enabledByOther' ]
+ 'attribs' => [ 'class' => 'enabledByOther' ]
] ) .
$this->getFieldsetStart( 'config-admin-box' ) .
$this->parent->getTextBox( [
"Matěj Suchánek",
"LordMsz",
"Seb35",
- "Ilimanaq29"
+ "Ilimanaq29",
+ "Dvorapa"
]
},
"config-desc": "Instalační program pro MediaWiki",
"config-support-info": "MediaWiki podporuje následující databázové systémy:\n\n$1\n\nPokud v nabídce níže nevidíte databázový systém, který chcete použít, musíte pro zapnutí podpory následovat instrukce odkázané výše.",
"config-dbsupport-mysql": "* [{{int:version-db-mysql-url}} MySQL] je pro MediaWiki hlavní platformou a je podporováno nejlépe. MediaWiki pracuje také s [{{int:version-db-mariadb-url}} MariaDB] a [{{int:version-db-percona-url}} Percona Server], které jsou s MySQL kompatibilní. ([https://secure.php.net/manual/en/mysql.installation.php Jak zkompilovat PHP s podporou MySQL])",
"config-dbsupport-postgres": "* [{{int:version-db-postgres-url}} PostgreSQL] je populární otevřený databázový systém používaný jako alternativa k MySQL. ([https://secure.php.net/manual/en/pgsql.installation.php Jak přeložit PHP s podporou PostgreSQL])",
- "config-dbsupport-sqlite": "* [{{int:version-db-sqlite-url}} SQLite] je velmi dobře podporovaný odlehčený databázový systém. ([http://www.php.net/manual/en/pdo.installation.php Jak přeložit PHP s podporou SQLite], používá PDO)",
- "config-dbsupport-oracle": "* [{{int:version-db-oracle-url}} Oracle] je komerční podniková databáze. ([http://www.php.net/manual/en/oci8.installation.php Jak přeložit PHP s podporou OCI8])",
- "config-dbsupport-mssql": "* [{{int:version-db-mssql-url}} Microsoft SQL Server] je komerční podniková databáze pro Windows. ([Config-dbsupport-oracle/manual/en/sqlsrv.installation.php Jak přeložit PHP s podporou SQLSRV])",
+ "config-dbsupport-sqlite": "* [{{int:version-db-sqlite-url}} SQLite] je velmi dobře podporovaný odlehčený databázový systém. ([https://secure.php.net/manual/en/pdo.installation.php Jak přeložit PHP s podporou SQLite], používá PDO)",
+ "config-dbsupport-oracle": "* [{{int:version-db-oracle-url}} Oracle] je komerční podniková databáze. ([https://secure.php.net/manual/en/oci8.installation.php Jak přeložit PHP s podporou OCI8])",
+ "config-dbsupport-mssql": "* [{{int:version-db-mssql-url}} Microsoft SQL Server] je komerční podniková databáze pro Windows. ([https://secure.php.net/manual/en/sqlsrv.installation.php Jak přeložit PHP s podporou SQLSRV])",
"config-header-mysql": "Nastavení MySQL",
"config-header-postgres": "Nastavení PostgreSQL",
"config-header-sqlite": "Nastavení SQLite",
"config-license-help": "Mnoho veřejných wiki všechny příspěvky zveřejňuje pod některou [https://freedomdefined.org/Definition/Cs svobodnou licencí].\nTo pomáhá vytvořit duch komunitního vlastnictví a povzbuzuje dlouhodobé přispívání.\nTo obecně není potřeba u soukromé nebo firemní wiki.\n\nPokud chcete být schopni používat text z Wikipedie a chcete, aby Wikipedie byla schopna přijímat text okopírovaný z vaší wiki, měli byste zvolit <strong>{{int:config-license-cc-by-sa}}</strong>.\n\nDříve Wikipedie používala GNU Free Documentation License.\nGFDL je platná licence, ale složité jí porozumět.\nTaké je komplikované používat obsah licencovaný pod GFDL.",
"config-email-settings": "Nastavení e-mailu",
"config-enable-email": "Zapnout odchozí e-mail",
- "config-enable-email-help": "Pokud chcete, aby e-mail fungoval, je potřeba správně nakonfigurovat [Config-dbsupport-oracle/manual/en/mail.configuration.php e-mailová nastavení PHP].\nPokud nechcete žádné e-mailové funkce, můžete je zde vypnout.",
+ "config-enable-email-help": "Pokud chcete, aby e-mail fungoval, je potřeba správně nakonfigurovat [https://secure.php.net/manual/en/mail.configuration.php e-mailová nastavení PHP].\nPokud nechcete žádné e-mailové funkce, můžete je zde vypnout.",
"config-email-user": "Umožnit vzájemné e-maily mezi uživateli",
"config-email-user-help": "Umožní všem uživatelům posílat si navzájem e-maily, pokud si to zapnout v uživatelském nastavení.",
"config-email-usertalk": "Umožnit notifikace k uživatelským diskusím",
"Irus",
"Tinss",
"KATRINE1992",
- "MarcoAurelio"
+ "MarcoAurelio",
+ "Adjen"
]
},
"config-desc": "El instalador de MediaWiki",
"config-type-mssql": "Microsoft SQL Server",
"config-support-info": "MediaWiki es compatible con los siguientes sistemas de bases de datos:\n\n$1\n\nSi no encuentras en el listado el sistema de base de datos que estás intentando utilizar, sigue las instrucciones enlazadas arriba para activar la compatibilidad.",
"config-dbsupport-mysql": "* [{{int:version-db-mysql-url}} MySQL] es la base de datos mayoritaria para MediaWiki y la que goza de mayor compatibilidad. MediaWiki también funciona con [{{int:version-db-mariadb-url}} MariaDB] y [{{int:version-db-percona-url}} Percona Server], que son compatibles con MySQL. ([https://secure.php.net/manual/es/mysql.installation.php Cómo compilar PHP con compatibilidad MySQL])",
- "config-dbsupport-postgres": "[{{int:version-db-postgres-url}} PostgreSQL] es un sistema de base de datos popular de código abierto, alternativa a MySQL. ([https://secure.php.net/manual/es/pgsql.installation.php Cómo compilar PHP con compatibilidad PostgreSQL]).",
+ "config-dbsupport-postgres": "* [{{int:version-db-postgres-url}} PostgreSQL] es un sistema de base de datos popular de código abierto, alternativa a MySQL. ([https://secure.php.net/manual/es/pgsql.installation.php Cómo compilar PHP con compatibilidad PostgreSQL]).",
"config-dbsupport-sqlite": "* [{{int:version-db-sqlite-url}} SQLite] es un sistema de base de datos ligero con gran compatibilidad con MediaWiki. ([http://www.php.net/manual/es/pdo.installation.php Cómo compilar PHP con compatibilidad SQLite], usando PDO)",
"config-dbsupport-oracle": "* [{{int:version-db-oracle-url}} Oracle] es una base de datos comercial a nivel empresarial. ([http://www.php.net/manual/es/oci8.installation.php Cómo compilar PHP con compatibilidad con OCI8])",
"config-dbsupport-mssql": "* [{{int:version-db-mssql-url}} Microsoft SQL Server] es un sistema comercial de base de datos empresariales para Windows. ([Config-dbsupport-oracle/manual/en/sqlsrv.installation.php Cómo compilar PHP con compatibilidad con SQLSRV])",
"config-license-help": "Muchos wikis públicos ponen todas las contribuciones bajo una [https://freedomdefined.org/Definition licencia libre].\nEsto ayuda a crear un sentido de propiedad comunitaria y alienta la contribución a largo plazo.\nEsto no es generalmente necesario para un wiki privado o corporativo.\n\nSi deseas poder utilizar texto de Wikipedia, y deseas que Wikipedia pueda aceptar el texto copiado de tu wiki, debes elegir <strong>{{int:config-license-cc-by-sa}}</strong>.\n\nWikipedia utilizaba anteriormente la licencia de documentación libre de GNU (GFDL).\nLa GFDL es una licencia válida, pero es difícil de entender.\nTambién es difícil reutilizar el contenido licenciado bajo la GFDL.",
"config-email-settings": "Configuración de correo electrónico",
"config-enable-email": "Activar el envío de correos electrónicos",
- "config-enable-email-help": "Si quieres que el correo electrónico funcione, la [Config-dbsupport-oracle/manual/en/mail.configuration.php configuración PHP de correo electrónico] debe ser la correcta.\nSi no quieres la funcionalidad de correo electrónico, puedes desactivarla aquí.",
+ "config-enable-email-help": "Si quieres que el correo electrónico funcione, la [https://secure.php.net/manual/en/mail.configuration.php configuración PHP de correo electrónico] debe ser configurada correctamente.\nSi no quieres ninguna funcionalidad del correo electrónico, puedes desactivarla aquí.",
"config-email-user": "Activar correo electrónico entre usuarios",
"config-email-user-help": "Permitir que todos los usuarios intercambien correos electrónicos si lo han activado en sus preferencias.",
"config-email-usertalk": "Activar notificaciones de páginas de discusión de usuarios",
"config-support-info": "MediaWiki supporta i seguenti sistemi di database:\n\n$1\n\nSe fra quelli elencati qui sotto non vedi il sistema di database che vorresti utilizzare, seguire le istruzioni linkate sopra per abilitare il supporto.",
"config-dbsupport-mysql": "* [{{int:version-db-mysql-url}} MySQL] è la configurazione preferibile per MediaWiki ed è quella meglio supportata. MediaWiki funziona anche con [{{int:version-db-mariadb-url}} MariaDB] e [{{int:version-db-percona-url}} Percona Server], che sono compatibili con MySQL.([https://secure.php.net/manual/en/mysqli.installation.php Come compilare PHP con supporto MySQL])",
"config-dbsupport-postgres": "* [{{int:version-db-postgres-url}} PostgreSQL] è un popolare sistema di database open source come alternativa a MySQL. ([Config-dbsupport-oracle/manual/en/pgsql.installation.php Come compilare PHP con supporto PostgreSQL])",
- "config-dbsupport-sqlite": "* [{{int:version-db-sqlite-url}} SQLite] è un sistema di database leggero, che è supportato molto bene. ([http://www.php.net/manual/en/pdo.installation.php Come compilare PHP con supporto SQLite], utilizza PDO)",
- "config-dbsupport-oracle": "* [{{int:version-db-oracle-url}} Oracle] è un database di un'impresa commerciale. ([http://www.php.net/manual/en/oci8.installation.php Come compilare PHP con supporto OCI8])",
+ "config-dbsupport-sqlite": "* [{{int:version-db-sqlite-url}} SQLite] è un sistema di database leggero, che è supportato molto bene. ([https://secure.php.net/manual/en/pdo.installation.php Come compilare PHP con supporto SQLite], utilizza PDO)",
+ "config-dbsupport-oracle": "* [{{int:version-db-oracle-url}} Oracle] è un database di un'impresa commerciale. ([https://secure.php.net/manual/en/oci8.installation.php Come compilare PHP con supporto OCI8])",
"config-dbsupport-mssql": "* [{{int:version-db-mssql-url}} Microsoft SQL Server] è un database di un'impresa commerciale per Windows. ([Config-dbsupport-oracle/manual/en/sqlsrv.installation.php Come compilare PHP con supporto SQLSRV])",
"config-header-mysql": "Impostazioni MySQL",
"config-header-postgres": "Impostazioni PostgreSQL",
"config-license-help": "Molti wiki pubblici rilasciano i loro contributi con una [https://freedomdefined.org/Definition licenza libera]. Questo aiuta a creare un senso di proprietà condivisa nella comunità e incoraggia a contribuire a lungo termine. Non è generalmente necessario per un wiki privato o aziendale.\n\nSe vuoi usare testi da Wikipedia, o desideri che Wikipedia possa essere in grado di accettare testi copiati dal tuo wiki, dovresti scegliere <strong>{{int:config-license-cc-by-sa}}</strong>.\n\nIn precedenza Wikipedia ha utilizzato la GNU Free Documentation License. La GFDL è una licenza valida, ma è di difficile comprensione e complica il riutilizzo dei contenuti.",
"config-email-settings": "Impostazioni email",
"config-enable-email": "Abilita la posta elettronica in uscita",
- "config-enable-email-help": "Se vuoi che funzionino le email, le [Config-dbsupport-oracle/manual/en/mail.configuration.php PHP's impostazioni della posta] devono essere configurate correttamente.\nSe non si desidera alcuna funzionalità di posta elettronica, puoi disabilitarla qui.",
+ "config-enable-email-help": "Se vuoi che funzionino le email, le [https://secure.php.net/manual/en/mail.configuration.php impostazioni della posta] devono essere configurate correttamente.\nSe non si desidera alcuna funzionalità di posta elettronica, puoi disabilitarla qui.",
"config-email-user": "Abilita invio email fra utenti",
"config-email-user-help": "Consente a tutti gli utenti di inviarsi a vicenda email, se lo hanno abilitato nelle loro preferenze.",
"config-email-usertalk": "Abilita le notifiche per le pagine di discussione utente",
"config-type-mssql": "Microsoft SQL Server",
"config-dbsupport-postgres": "* [{{int:version-db-postgres-url}} PostgreSQL] ass e beléiften Open-Source-Datebanksystem an eng Alternativ zu MySQL. ([Config-dbsupport-oracle/manual/de/pgsql.installation.php Uleedung fir d'Kompilatoun vu PHP mat PostgreSQL-Ënnerstëtzung])",
"config-dbsupport-oracle": "* [{{int:version-db-oracle-url}} Oracle] ass eng kommerziell Datebank-Software. ([http://www.php.net/manual/en/oci8.installation.php How to compile PHP mat OCI8 Ënnerstëtzung])",
- "config-dbsupport-mssql": "* [{{int:version-db-mssql-url}} Microsoft SQL Server] ass eng kommerziell Datebank-Software fir Windows. ([Config-dbsupport-oracle/manual/en/sqlsrv.installation.php Wéi PHP mat SQLSRV Ënnerstëtzung kompiléieren])",
+ "config-dbsupport-mssql": "* [{{int:version-db-mssql-url}} Microsoft SQL Server] ass eng kommerziell Datebank-Software fir Windows. ([https://secure.php.net/manual/en/sqlsrv.installation.php Wéi PHP mat SQLSRV Ënnerstëtzung kompiléieren])",
"config-header-mysql": "MySQL-Astellungen",
"config-header-postgres": "PostgreSQL-Astellungen",
"config-header-sqlite": "SQLite-Astellungen",
"Mantak111",
"Zygimantus",
"Hugo.arg",
- "Homo"
+ "Homo",
+ "Manvydasz"
]
},
"config-desc": "MediaWiki diegimas",
"config-apc": "[https://secure.php.net/apc APC] yra įdiegtas",
"config-apcu": "[https://secure.php.net/apcu APCu] yra įdiegtas",
"config-wincache": "[https://www.iis.net/downloads/microsoft/wincache-extension WinCache] yra įdiegtas",
- "config-no-cache-apcu": "<strong>Įspėjimas:</strong> Nepavyko rasti [https://secure.php.net/apcu APCu], [http://xcache.lighttpd.net/ XCache] or [https://www.iis.net/downloads/microsoft/wincache-extension WinCache].\nObjekto spartinimas neįjungtas.",
+ "config-no-cache-apcu": "<strong>Įspėjimas:</strong> Nepavyko rasti [https://secure.php.net/apcu APCu], [http://xcache.lighttpd.net/ XCache] ar [https://www.iis.net/downloads/microsoft/wincache-extension WinCache].\nObjekto spartinimas neįjungtas.",
"config-diff3-bad": "GNU diff3 nerastas.",
"config-git": "Rasta Git versijų kontrolės sistema: <code>$1</code>.",
"config-imagemagick": "Rastas „ImageMagick“: <code>$1</code>.\nPaveikslėlių miniatiūrizavimas bus įjungtas, jeigu įgalinsite vaizdų įkėlimą.",
"config-support-info": "МедијаВики ги поддржува следниве системи на бази на податоци:\n\n$1\n\nАко системот што сакате да го користите не е наведен подолу, тогаш проследете ја горенаведената врска со инструкции за да овозможите поддршка за тој систем.",
"config-dbsupport-mysql": "* [{{int:version-db-mysql-url}} MySQL] е главната цел на МедијаВики и најдобро е поддржан. МедијаВики работи и со [{{int:version-db-mariadb-url}} MariaDB] и [{{int:version-db-percona-url}} Percona], кои се складни со MySQL. ([https://secure.php.net/manual/en/mysqli.installation.php Како да срочите PHP со поддршка за MySQL])",
"config-dbsupport-postgres": "* [{{int:version-db-postgres-url}} PostgreSQL] е популарен систем на бази на податоци со отворен код кој претставува алтернатива на MySQL ([Config-dbsupport-oracle/manual/en/pgsql.installation.php како да составите PHP со поддршка за PostgreSQL]). ([Config-dbsupport-oracle/manual/en/pgsql.installation.php Како да срочите PHP со поддршка за PostgreSQL])",
- "config-dbsupport-sqlite": "* [{{int:version-db-sqlite-url}} SQLite] е лесен систем за бази на податоци кој е многу добро поддржан. ([http://www.php.net/manual/en/pdo.installation.php Како да составите PHP со поддршка за SQLite], користи PDO)",
- "config-dbsupport-oracle": "* [{{int:version-db-oracle-url}} Oracle] е база на податоци на комерцијално претпријатие. ([http://www.php.net/manual/en/oci8.installation.php Како да составите PHP со поддршка за OCI8])",
+ "config-dbsupport-sqlite": "* [{{int:version-db-sqlite-url}} SQLite] е лесен систем за бази на податоци кој е многу добро поддржан. ([https://secure.php.net/manual/en/pdo.installation.php Како да составите PHP со поддршка за SQLite], користи PDO)",
+ "config-dbsupport-oracle": "* [{{int:version-db-oracle-url}} Oracle] е база на податоци на комерцијално претпријатие. ([https://secure.php.net/manual/en/oci8.installation.php Како да составите PHP со поддршка за OCI8])",
"config-dbsupport-mssql": "* [{{int:version-db-mssql-url}} Microsoft SQL Server] е база на податоци на комерцијално претпријатиe за Windows ([Config-dbsupport-oracle/manual/en/sqlsrv.installation.php How to compile PHP with SQLSRV поддршка])",
"config-header-mysql": "Нагодувања на MySQL",
"config-header-postgres": "Нагодувања на PostgreSQL",
"config-type-oracle": "Oracle",
"config-type-mssql": "Microsoft SQLServer",
"config-support-info": "MediaWiki støtter følgende databasesystem:\n\n$1\n\nHvis du ikke ser databasesystemet du prøver å bruke i listen nedenfor, følg instruksjonene det er lenket til over for å aktivere støtte.",
- "config-dbsupport-mysql": "* [{{int:version-db-mysql-url}} MySQL] er den prefererte databasen for MediaWiki og er derfor best støttet. MediaWiki fungerer også med [{{int:version-db-mariadb-url}} MariaDB] og [{{int:version-db-percona-url}} Percona Server], som begge er MySQL-kompatible. ([https://secure.php.net/manual/en/mysqli.installation.php Hvordan kompilere med PHP med MySQL-støtte])",
+ "config-dbsupport-mysql": "* [{{int:version-db-mysql-url}} MySQL] er den foretrukne databasetypen for MediaWiki og har best støtte. MediaWiki fungerer også med [{{int:version-db-mariadb-url}} MariaDB] og [{{int:version-db-percona-url}} Percona Server], som begge er MySQL-kompatible. ([https://secure.php.net/manual/en/mysqli.installation.php Hvordan kompilere PHP med MySQL-støtte])",
"config-dbsupport-postgres": "* [{{int:version-db-postgres-url}} PostgreSQL] er et populært åpen kildekode-databasesystem og et alternativ til MySQL. ([https://secure.php.net/manual/en/pgsql.installation.php Hvordan kompilere PHP med PostgreSQL-støtte])",
"config-dbsupport-sqlite": "* [{{int:version-db-sqlite-url}} SQLite] er et lettvekts-databasesystem som har veldig god støtte. ([http://www.php.net/manual/en/pdo.installation.php Hvordan kompilere PHP med SQLite-støtte], bruker PDO)",
- "config-dbsupport-oracle": "* [{{int:version-db-oracle-url}} Oracle] er en kommersiell database for bedrifter. ([http://www.php.net/manual/en/oci8.installation.php Hvordan kompilere PHP med OCI8-støtte])",
- "config-dbsupport-mssql": "* [{{int:version-db-mssql-url}} Microsoft SQLServer] er en kommersiell enterprise-database for Windows. ([Config-dbsupport-oracle/manual/en/sqlsrv.installation.php Hvordan kompilere PHP med SQLSRV-støtte])",
+ "config-dbsupport-oracle": "* [{{int:version-db-oracle-url}} Oracle] er en kommersiell database for bedrifter. ([https://secure.php.net/manual/en/oci8.installation.php Hvordan kompilere PHP med OCI8-støtte])",
+ "config-dbsupport-mssql": "* [{{int:version-db-mssql-url}} Microsoft SQL Server] er et kommersielt databasesystem under Windows for bedrifter. ([https://secure.php.net/manual/en/sqlsrv.installation.php Hvordan kompilere PHP med SQLSRV-støtte])",
"config-header-mysql": "MySQL-innstillinger",
"config-header-postgres": "PostgreSQL-innstillinger",
"config-header-sqlite": "SQLite-innstillinger",
"config-license-help": "Mange åpne wikier legger alle bidrag under en [https://freedomdefined.org/Definition gratislisens].\nDette gir en følelse av felleseie og stimulerer til langvarige bidrag.\nDette er normalt unødvendig for en privat eller virksomhetsbegrenset wiki.\n\nHvis du ønsker å kunne bruke tekst fra Wikipedia, og at Wikipedia skal kunne ta i mot tekst kopiert fra din wiki, bør du velge <strong>{{int:config-license-cc-by-sa}}</strong>.\n\nWikipedia brukte tidligere GNU Free Documentation License.\nGFDL er en grei lisens, med vanskelig å forstå.\nDet er også vanskelig å gjenbruke innhold lisensiert under GFDL.",
"config-email-settings": "E-postinnstillinger",
"config-enable-email": "Aktiver utgående e-post",
- "config-enable-email-help": "Hvis du vil at e-post skal virke må [Config-dbsupport-oracle/manual/en/mail.configuration.php PHPs e-postinnstillinger] bli konfigurert riktig.\nHvis du ikke ønsker noen e-postfunksjoner kan du deaktivere dem her.",
+ "config-enable-email-help": "Hvis du vil at e-post skal virke, må [https://secure.php.net/manual/en/mail.configuration.php PHPs e-post-innstillinger] konfigureres riktig.\nHvis du ikke ønsker noen e-postfunksjoner, kan du deaktivere dem her.",
"config-email-user": "Aktiver e-post mellom brukere",
"config-email-user-help": "Tillat alle brukere å sende hverandre e-post hvis de har aktivert det i deres innstillinger.",
"config-email-usertalk": "Aktiver brukerdiskusjonssidevarsler",
"config-support-info": "MediaWiki może współpracować z następującymi systemami baz danych:\n\n$1\n\nPoniżej wyświetlone są systemy baz danych gotowe do użycia. Jeżeli poniżej brakuje bazy danych, z której chcesz skorzystać, oznacza to, że brakuje odpowiedniego oprogramowania lub zostało ono niepoprawnie skonfigurowane. Powyżej znajdziesz odnośniki do dokumentacji, która pomoże w konfiguracji odpowiednich komponentów.",
"config-dbsupport-mysql": "* [{{int:version-db-mysql-url}} MySQL] jest bazą danych, na której rozwijane jest oprogramowanie MediaWiki. MediaWiki działa również z [{{int:version-db-mariadb-url}} MariaDB] i [{{int:version-db-percona-url}} Percona Server], które są zgodne z MySQL. ([https://secure.php.net/manual/en/mysqli.installation.php Zobacz, jak skompilować PHP ze wsparciem dla MySQL])",
"config-dbsupport-postgres": "* [{{int:version-db-postgres-url}} PostgreSQL] jest popularnym systemem baz danych, często stosowanym zamiast MySQL. ([https://secure.php.net/manual/pl/pgsql.installation.php Zobacz, jak skompilować PHP z obsługą PostgreSQL])",
- "config-dbsupport-sqlite": "* [{{int:version-db-sqlite-url}} SQLite] jest niewielkim systemem bazy danych, z którym MediaWiki bardzo dobrze współpracuje. ([http://www.php.net/manual/en/pdo.installation.php Zobacz, jak skompilować PHP ze wsparciem dla SQLite], korzystając z PDO)",
- "config-dbsupport-oracle": "* [{{int:version-db-oracle-url}} Oracle] jest komercyjną profesjonalną bazą danych. ([http://www.php.net/manual/en/oci8.installation.php Jak skompilować PHP ze wsparciem dla OCI8])",
- "config-dbsupport-mssql": "* [{{int:version-db-mssql-url}} Microsoft SQL Server] jest komercyjną profesjonalną bazą danych. ([Config-dbsupport-oracle/manual/pl/sqlsrv.installation.php Jak skompilować PHP ze wsparciem dla SQLSRV])",
+ "config-dbsupport-sqlite": "* [{{int:version-db-sqlite-url}} SQLite] jest niewielkim systemem bazy danych, z którym MediaWiki bardzo dobrze współpracuje. ([https://secure.php.net/manual/pl/pdo.installation.php Zobacz, jak skompilować PHP ze wsparciem dla SQLite], korzystając z PDO)",
+ "config-dbsupport-oracle": "* [{{int:version-db-oracle-url}} Oracle] jest komercyjną profesjonalną bazą danych. ([https://secure.php.net/manual/pl/oci8.installation.php Jak skompilować PHP ze wsparciem dla OCI8])",
+ "config-dbsupport-mssql": "* [{{int:version-db-mssql-url}} Microsoft SQL Server] jest komercyjną profesjonalną bazą danych. ([https://secure.php.net/manual/pl/sqlsrv.installation.php Jak skompilować PHP ze wsparciem dla SQLSRV])",
"config-header-mysql": "Ustawienia MySQL",
"config-header-postgres": "Ustawienia PostgreSQL",
"config-header-sqlite": "Ustawienia SQLite",
"config-license-help": "Wiele publicznych wiki umieszcza wszystkie dopisane treści na [https://freedomdefined.org/Definition wolnej licencji].\nPomaga to tworzyć poczucie wspólnoty i zachęca do długoterminowego wkładu.\nNie jest to zazwyczaj konieczne w prywatnych lub firmowych wiki.\n\nJeśli chcesz móc użyć tekstu z Wikipedii i chcesz Wikipedia mogła zaakceptować tekst skopiowany z twojej wiki, należy wybrać <strong>{{int:config-license-cc-by-sa}}</strong>.\n\nWikipedia używała poprzednio GNU Free Documentation License.\nGFDL jest poprawną licencję, ale trudno ją zrozumieć.\nTrudno także ponowne użyć zawartości na licencji GFDL.",
"config-email-settings": "Ustawienia e-maili",
"config-enable-email": "Włącz wychodzące wiadomości e–mail",
- "config-enable-email-help": "Jeśli chcesz, aby działał e-mail, [Config-dbsupport-oracle/manual/en/mail.configuration.php Ustawienia poczty PHP] muszą być poprawnie wprowadzone.\nJeśli nie chcesz jakichś funkcji poczty e-mail, można je wyłączyć tutaj.",
+ "config-enable-email-help": "Jeśli chcesz, aby działał e-mail, [https://secure.php.net/manual/pl/mail.configuration.php Ustawienia poczty PHP] muszą być poprawnie wprowadzone.\nJeśli nie chcesz jakichś funkcji poczty e-mail, można je wyłączyć tutaj.",
"config-email-user": "Włącz możliwość przesyłania e‐maili pomiędzy użytkownikami",
"config-email-user-help": "Zezwalaj użytkownikom na wysyłanie wzajemnie e‐maili, jeśli będą mieć włączoną tę funkcję w swoich preferencjach.",
"config-email-usertalk": "Włącz powiadamianie o zmianach na stronie dyskusji użytkownika",
"config-type-oracle": "Oracle",
"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 также работает с [{{int:version-db-mariadb-url}} MariaDB] и [{{int:version-db-percona-url}} Percona Server], которые являются MySQL-совместимым. ([https://secure.php.net/manual/ru/mysql.installation.php инструкция, как собрать PHP с поддержкой MySQL])",
- "config-dbsupport-postgres": "* [{{int:version-db-postgres-url}} PostgreSQL] â\80\94 попÑ\83лÑ\8fÑ\80наÑ\8f оÑ\82кÑ\80Ñ\8bÑ\82аÑ\8f СУÐ\91Ð\94, алÑ\8cÑ\82еÑ\80наÑ\82ива MySQL. ([Config-dbsupport-oracle/manual/ru/pgsql.installation.php инÑ\81Ñ\82Ñ\80Ñ\83кÑ\86иÑ\8f, как собрать 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] â\80\94 Ñ\8dÑ\82о коммеÑ\80Ñ\87еÑ\81каÑ\8f база даннÑ\8bÑ\85 маÑ\81Ñ\88Ñ\82аба пÑ\80едпÑ\80иÑ\8fÑ\82иÑ\8f. ([http://www.php.net/manual/ru/oci8.installation.php Как собрать PHP с поддержкой OCI8])",
- "config-dbsupport-mssql": "* [{{int:version-db-mssql-url}} Microsoft SQL Server] â\80\94 Ñ\8dÑ\82о коммеÑ\80Ñ\87еÑ\81кое база даннÑ\8bÑ\85 база даннÑ\8bÑ\85 длÑ\8f Windows маÑ\81Ñ\88Ñ\82аба пÑ\80едпÑ\80иÑ\8fÑ\82иÑ\8f. ([Config-dbsupport-oracle/manual/ru/sqlsrv.installation.php Как собрать PHP с поддержкой SQLSRV])",
+ "config-dbsupport-mysql": "* [{{int:version-db-mysql-url}} MySQL] — основная база данных для MediaWiki, которая поддерживается лучше всего. MediaWiki также работает с [{{int:version-db-mariadb-url}} MariaDB] и [{{int:version-db-percona-url}} Percona Server], которые являются MySQL-совместимыми. (См.[https://secure.php.net/manual/ru/mysql.installation.php Как собрать PHP с поддержкой MySQL])",
+ "config-dbsupport-postgres": "* [{{int:version-db-postgres-url}} PostgreSQL] â\80\94 попÑ\83лÑ\8fÑ\80наÑ\8f СУÐ\91Ð\94 Ñ\81 оÑ\82кÑ\80Ñ\8bÑ\82Ñ\8bм иÑ\81Ñ\85однÑ\8bм кодом, алÑ\8cÑ\82еÑ\80наÑ\82ива MySQL. ([https://secure.php.net/manual/ru/pgsql.installation.php Ð\9aак собрать PHP с поддержкой PostgreSQL]).",
+ "config-dbsupport-sqlite": "* [{{int:version-db-sqlite-url}} SQLite] — это легковесная система баз данных, имеющая очень хорошую поддержку. ([https://secure.php.net/manual/ru/pdo.installation.php Как собрать PHP с поддержкой SQLite], работающей посредством PDO)",
+ "config-dbsupport-oracle": "* [{{int:version-db-oracle-url}} Oracle] â\80\94 Ñ\8dÑ\82о коммеÑ\80Ñ\87еÑ\81каÑ\8f коÑ\80поÑ\80аÑ\82ивнаÑ\8f база даннÑ\8bÑ\85. ([https://secure.php.net/manual/ru/oci8.installation.php Как собрать PHP с поддержкой OCI8])",
+ "config-dbsupport-mssql": "* [{{int:version-db-mssql-url}} Microsoft SQL Server] â\80\94 Ñ\8dÑ\82о коммеÑ\80Ñ\87еÑ\81каÑ\8f коÑ\80поÑ\80аÑ\82ивнаÑ\8f база даннÑ\8bÑ\85 длÑ\8f Windows. ([https://secure.php.net/manual/ru/sqlsrv.installation.php Как собрать PHP с поддержкой SQLSRV])",
"config-header-mysql": "Настройки MySQL",
"config-header-postgres": "Настройки PostgreSQL",
"config-header-sqlite": "Настройки SQLite",
"config-license-help": "Многие общедоступные вики разрешают использовать свои материалы на условиях [https://freedomdefined.org/Definition/Ru свободных лицензий].\nЭто помогает созданию чувства общности, стимулирует долгосрочное участие.\nНо в этом нет необходимости для частных или корпоративных вики.\n\nЕсли вы хотите использовать тексты из Википедии или хотите, что в Википедию можно было копировать тексты из вашей вики, вам следует выбрать <strong>{{int:config-license-cc-by-sa}}</strong>.\n\nВикипедия ранее использовала лицензию GNU Free Documentation License.\nGFDL может быть использована, но она сложна для понимания и осложняет повторное использование материалов.",
"config-email-settings": "Настройки электронной почты",
"config-enable-email": "Включить исходящие e-mail",
- "config-enable-email-help": "Ð\95Ñ\81ли вÑ\8b Ñ\85оÑ\82иÑ\82е, Ñ\87Ñ\82обÑ\8b Ñ\8dлекÑ\82Ñ\80оннаÑ\8f поÑ\87Ñ\82а Ñ\80абоÑ\82ала, необÑ\85одимо вÑ\8bполниÑ\82Ñ\8c [Config-dbsupport-oracle/manual/ru/mail.configuration.php Ñ\81ооÑ\82веÑ\82Ñ\81Ñ\82вÑ\83Ñ\8eÑ\89ие наÑ\81Ñ\82Ñ\80ойки PHP].\nÐ\95Ñ\81ли вÑ\8b не Ñ\85оÑ\82иÑ\82е иÑ\81полÑ\8cзоваÑ\82Ñ\8c возможноÑ\81Ñ\82и Ñ\8dлекÑ\82Ñ\80онной поÑ\87Ñ\82Ñ\8b в вики, вÑ\8b можеÑ\82е еÑ\91 отключить.",
+ "config-enable-email-help": "Ð\95Ñ\81ли вÑ\8b Ñ\85оÑ\82иÑ\82е, Ñ\87Ñ\82обÑ\8b Ñ\8dлекÑ\82Ñ\80оннаÑ\8f поÑ\87Ñ\82а Ñ\80абоÑ\82ала, необÑ\85одимо пÑ\80авилÑ\8cно наÑ\81Ñ\82Ñ\80оиÑ\82Ñ\8c [https://secure.php.net/manual/ru/mail.configuration.php Ñ\80абоÑ\82Ñ\83 поÑ\87Ñ\82Ñ\8b в PHP].\nÐ\95Ñ\81ли вÑ\8b не Ñ\85оÑ\82иÑ\82е иÑ\81полÑ\8cзоваÑ\82Ñ\8c возможноÑ\81Ñ\82и Ñ\8dлекÑ\82Ñ\80онной поÑ\87Ñ\82Ñ\8b, вÑ\8b можеÑ\82е еÑ\91 здеÑ\81Ñ\8c отключить.",
"config-email-user": "Включить электронную почту от участника к участнику",
"config-email-user-help": "Разрешить всем пользователям отправлять друг другу электронные письма, если выставлена соответствующая настройка в профиле.",
"config-email-usertalk": "Включить уведомления пользователей о сообщениях на их странице обсуждения",
"config-type-mssql": "Microsoft SQL Server",
"config-support-info": "MediaWiki stöder följande databassystem:\n\n$1\n\nOm du inte ser det databassystem som du försöker använda nedanstående, följ då instruktionerna länkade ovan för aktivera stöd för det.",
"config-dbsupport-mysql": "* [{{int:version-db-mysql-url}} MySQL] är det primära målet för MediaWiki och det stöds bäst. MediaWiki fungerar även med [{{int:version-db-mariadb-url}} MariaDB] och [{{int:version-db-percona-url}} Percona Server], som är kompatibla med MySQL. ([https://secure.php.net/manual/en/mysqli.installation.php Hur man kompilerar PHP med stöd för MySQL])",
- "config-dbsupport-postgres": "* [{{int:version-db-postgres-url}} PostgreSQL] är ett populärt databassystem med öppen källkod som ett alternativ till MySQL. ([Config-dbsupport-oracle/manual/en/pgsql.installation.php Hur man kompilerar PHP med PostgreSQL stöd])",
- "config-dbsupport-sqlite": "* [{{int:version-db-sqlite-url}} SQLite] är en lättviktsdatabassystem med väldigt bra stöd. ([http://www.php.net/manual/en/pdo.installation.php Hur man kompilerar PHP med SQLite stöd], använder PDO)",
- "config-dbsupport-oracle": "* [{{int:version-db-oracle-url}} Oracle] är en kommersiellt databas för företag. ([http://www.php.net/manual/en/oci8.installation.php Hur man kompilerar PHP med OCI8 stöd])",
- "config-dbsupport-mssql": "* [{{int:version-db-mssql-url}} Microsoft SQL Server] är en kommersiellt databas för företag för Windows. ([Config-dbsupport-oracle/manual/en/sqlsrv.installation.php Hur man kompilerar PHP med SQLSRV stöd])",
+ "config-dbsupport-postgres": "* [{{int:version-db-postgres-url}} PostgreSQL] är ett populärt databassystem med öppen källkod som ett alternativ till MySQL. ([https://secure.php.net/manual/en/pgsql.installation.php Hur man kompilerar PHP med PostgreSQL-stöd])",
+ "config-dbsupport-sqlite": "* [{{int:version-db-sqlite-url}} SQLite] är en lättviktsdatabassystem med väldigt bra stöd. ([https://secure.php.net/manual/en/pdo.installation.php Hur man kompilerar PHP med SQLite stöd], använder PDO)",
+ "config-dbsupport-oracle": "* [{{int:version-db-oracle-url}} Oracle] är en kommersiellt databas för företag. ([https://secure.php.net/manual/en/oci8.installation.php Hur man kompilerar PHP med OCI8 stöd])",
+ "config-dbsupport-mssql": "* [{{int:version-db-mssql-url}} Microsoft SQL Server] är en kommersiellt databas för företag för Windows. ([https://secure.php.net/manual/en/sqlsrv.installation.php Hur man kompilerar PHP med SQLSRV stöd])",
"config-header-mysql": "MySQL-inställningar",
"config-header-postgres": "PostgreSQL-inställningar",
"config-header-sqlite": "SQLite-inställningar",
"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 也同時可運作與於 [{{int:version-db-mariadb-url}} MariaDB] 和 [{{int:version-db-percona-url}} Percona 伺服器],上述這些與 MySQL 相容的資料庫系統。([https://secure.php.net/manual/en/mysqli.installation.php\n如何編譯支援 MySQL 的 PHP])",
+ "config-dbsupport-mysql": "* [{{int:version-db-mysql-url}} MySQL] 是 MediaWiki 主要支援的資料庫系統。MediaWiki 也同時可運作與於 [{{int:version-db-mariadb-url}} MariaDB] 和 [{{int:version-db-percona-url}} Percona 伺服器],上述這些與 MySQL 相容的資料庫系統。([https://secure.php.net/manual/en/mysqli.installation.php 如何編譯支援 MySQL 的 PHP])",
"config-dbsupport-postgres": "* [{{int:version-db-postgres-url}} PostgreSQL] 是一套受歡迎的開源資料庫系統,可用來替代 MySQL。([https://secure.php.net/manual/en/pgsql.installation.php 如何編譯支援 PostgreSQL 的 PHP])。",
"config-dbsupport-sqlite": "* [{{int:version-db-sqlite-url}} SQLite] 是一套輕量級的資料庫系統,MediaWiki 可在此資料庫系統上良好的運作。([https://secure.php.net/manual/en/pdo.installation.php 如何編譯支援 SQLite 的 PHP],須透過 PDO)",
"config-dbsupport-oracle": "* [{{int:version-db-oracle-url}} Oracle] 是一套商用企業級的資料庫。([https://secure.php.net/manual/en/oci8.installation.php 如何編譯支援 OCI8 的 PHP])",
* @since 1.29
* @ingroup InterwikiLookup
*
- * @license GNU GPL v2+
+ * @license GPL-2.0-or-later
*/
use Interwiki;
* @version 0.1.1 -- 2010-09-11
* @author Trevor Parscal <tparscal@wikimedia.org>
* @copyright Copyright 2010 Wikimedia Foundation
- * @license http://www.apache.org/licenses/LICENSE-2.0
+ * @license Apache-2.0
*/
/**
// Match these three variants separately to avoid broken urls when
// e.g. a double quoted url contains a parenthesis, or when a
// single quoted url contains a double quote, etc.
+ // FIXME: Simplify now we only support PHP 7.0.0+
// Note: PCRE doesn't support multiple capture groups with the same name by default.
// - PCRE 6.7 introduced the "J" modifier (PCRE_INFO_JCHANGED for PCRE_DUPNAMES).
// https://secure.php.net/manual/en/reference.pcre.pattern.modifiers.php
*
* @file
*
- * @license GNU GPL v2+
+ * @license GPL-2.0-or-later
* @author Jeroen De Dauw < jeroendedauw@gmail.com >
*/
abstract class GenericArrayObject extends ArrayObject {
}
if ( self::isIPv4( $ip ) ) {
// Remove leading 0's from octet representation of IPv4 address
- $ip = preg_replace( '/(?:^|(?<=\.))0+(?=[1-9]|0\.|0$)/', '', $ip );
+ $ip = preg_replace( '!(?:^|(?<=\.))0+(?=[1-9]|0[./]|0$)!', '', $ip );
return $ip;
}
// Remove any whitespaces, convert to upper case
*
* @file
* @author Paul Copperman <paul.copperman@gmail.com>
- * @license Choose any of Apache, MIT, GPL, LGPL
+ * @license Apache-2.0
+ * @license MIT
+ * @license GPL-2.0-or-later
+ * @license LGPL-2.1-or-later
*/
/**
// Don't interpret POST parameters starting with '@' as file uploads, because this
// makes it impossible to POST plain values starting with '@' (and causes security
// issues potentially exposing the contents of local files).
- // The PHP manual says this option was introduced in PHP 5.5 defaults to true in PHP 5.6,
- // but we support lower versions, and the option doesn't exist in HHVM 5.6.99.
- if ( defined( 'CURLOPT_SAFE_UPLOAD' ) ) {
- curl_setopt( $ch, CURLOPT_SAFE_UPLOAD, true );
- } elseif ( is_array( $req['body'] ) ) {
- // In PHP 5.2 and later, '@' is interpreted as a file upload if POSTFIELDS
- // is an array, but not if it's a string. So convert $req['body'] to a string
- // for safety.
- $req['body'] = http_build_query( $req['body'] );
- }
+ curl_setopt( $ch, CURLOPT_SAFE_UPLOAD, true );
curl_setopt( $ch, CURLOPT_POSTFIELDS, $req['body'] );
} else {
if ( is_resource( $req['body'] ) || $req['body'] !== '' ) {
$contentHandler = ContentHandler::getForTitle( $title );
$mimeTypes = $contentHandler->getSupportedFormats();
- $headers = $request->getAllHeaders();
- if ( isset( $headers['ACCEPT'] ) ) {
+ $acceptHeader = $request->getHeader( 'Accept' );
+ if ( $acceptHeader !== false ) {
$parser = new HttpAcceptParser();
- $accept = $parser->parseWeights( $headers['ACCEPT'] );
+ $accept = $parser->parseWeights( $acceptHeader );
} else {
// anything goes
$accept = [
* http://www.gnu.org/copyleft/gpl.html
*
* @file
- * @license http://www.gnu.org/copyleft/gpl.html GNU General Public License 2.0 or later
+ * @license GPL-2.0-or-later
* @since 1.25
*/
*
* @file
* @author Niklas Laxström
- * @license http://www.gnu.org/copyleft/gpl.html GNU General Public License 2.0 or later
+ * @license GPL-2.0-or-later
* @since 1.22
*/
* http://www.gnu.org/copyleft/gpl.html
*
* @file
- * @license http://www.gnu.org/copyleft/gpl.html GNU General Public License 2.0 or later
+ * @license GPL-2.0-or-later
* @since 1.27
*/
*
* @file
* @author Niklas Laxström
- * @license http://www.gnu.org/copyleft/gpl.html GNU General Public License 2.0 or later
+ * @license GPL-2.0-or-later
* @since 1.19
*/
*
* @file
* @author Niklas Laxström
- * @license http://www.gnu.org/copyleft/gpl.html GNU General Public License 2.0 or later
+ * @license GPL-2.0-or-later
* @since 1.19
*/
use MediaWiki\Linker\LinkRenderer;
* http://www.gnu.org/copyleft/gpl.html
*
* @file
- * @license http://www.gnu.org/copyleft/gpl.html GNU General Public License 2.0 or later
+ * @license GPL-2.0-or-later
* @since 1.25
*/
*
* @file
* @author Niklas Laxström
- * @license http://www.gnu.org/copyleft/gpl.html GNU General Public License 2.0 or later
+ * @license GPL-2.0-or-later
* @since 1.22
*/
*
* @file
* @author Niklas Laxström
- * @license http://www.gnu.org/copyleft/gpl.html GNU General Public License 2.0 or later
+ * @license GPL-2.0-or-later
* @since 1.22
*/
*
* @file
* @author Kunal Grover
- * @license http://www.gnu.org/copyleft/gpl.html GNU General Public License 2.0 or later
+ * @license GPL-2.0-or-later
* @since 1.24
*/
*
* @file
* @author Niklas Laxström
- * @license http://www.gnu.org/copyleft/gpl.html GNU General Public License 2.0 or later
+ * @license GPL-2.0-or-later
* @since 1.22
*/
* http://www.gnu.org/copyleft/gpl.html
*
* @file
- * @license http://www.gnu.org/copyleft/gpl.html GNU General Public License 2.0 or later
+ * @license GPL-2.0-or-later
* @since 1.26
*/
*
* @file
* @author Alexandre Emsenhuber
- * @license http://www.gnu.org/copyleft/gpl.html GNU General Public License 2.0 or later
+ * @license GPL-2.0-or-later
* @since 1.22
*/
* http://www.gnu.org/copyleft/gpl.html
*
* @file
- * @license http://www.gnu.org/copyleft/gpl.html GNU General Public License 2.0 or later
+ * @license GPL-2.0-or-later
* @since 1.25
*/
* http://www.gnu.org/copyleft/gpl.html
*
* @file
- * @license http://www.gnu.org/copyleft/gpl.html GNU General Public License 2.0 or later
+ * @license GPL-2.0-or-later
*/
/**
private static function isMailMimeUsable() {
static $usable = null;
if ( $usable === null ) {
- // If the class is not already loaded, and it's in the include path,
- // try requiring it.
- if ( !class_exists( 'Mail_mime' ) && stream_resolve_include_path( 'Mail/mime.php' ) ) {
- require_once 'Mail/mime.php';
- }
$usable = class_exists( 'Mail_mime' );
}
-
return $usable;
}
private static function isMailUsable() {
static $usable = null;
if ( $usable === null ) {
- // If the class is not already loaded, and it's in the include path,
- // try requiring it.
- if ( !class_exists( 'Mail' ) && stream_resolve_include_path( 'Mail.php' ) ) {
- require_once 'Mail.php';
- }
$usable = class_exists( 'Mail' );
}
Wikimedia\suppressWarnings();
// Create the mail object using the Mail::factory method
- $mail_object =& Mail::factory( 'smtp', $wgSMTP );
+ $mail_object = Mail::factory( 'smtp', $wgSMTP );
if ( PEAR::isError( $mail_object ) ) {
wfDebug( "PEAR::Mail factory failed: " . $mail_object->getMessage() . "\n" );
Wikimedia\restoreWarnings();
* @ingroup Media
* @author Ævar Arnfjörð Bjarmason <avarab@gmail.com>
* @copyright Copyright © 2005, Ævar Arnfjörð Bjarmason, 2009 Brent Garber
- * @license http://www.gnu.org/copyleft/gpl.html GNU General Public License
+ * @license GPL-2.0-or-later
* @see http://exif.org/Exif2-2.PDF The Exif 2.2 specification
* @file
*/
* @ingroup Media
* @author Ævar Arnfjörð Bjarmason <avarab@gmail.com>
* @copyright Copyright © 2005, Ævar Arnfjörð Bjarmason, 2009 Brent Garber, 2010 Brian Wolff
- * @license http://www.gnu.org/copyleft/gpl.html GNU General Public License
+ * @license GPL-2.0-or-later
* @see http://exif.org/Exif2-2.PDF The Exif 2.2 specification
* @file
*/
* @author "Derk-Jan Hartman <hartman _at_ videolan d0t org>"
* @author Brion Vibber
* @copyright Copyright © 2010-2010 Brion Vibber, Derk-Jan Hartman
- * @license http://www.gnu.org/copyleft/gpl.html GNU General Public License
+ * @license GPL-2.0-or-later
*/
/**
use Parser;
use ParserOptions;
use PreferencesForm;
-use PreferencesFormOOUI;
use Psr\Log\LoggerAwareTrait;
use Psr\Log\NullLogger;
use Skin;
$languageCode = $this->config->get( 'LanguageCode' );
if ( !array_key_exists( $languageCode, $languages ) ) {
$languages[$languageCode] = $languageCode;
+ // Sort the array again
+ ksort( $languages );
}
- ksort( $languages );
$options = [];
foreach ( $languages as $code => $name ) {
* @param IContextSource $context
* @param string $formClass
* @param array $remove Array of items to remove
- * @return PreferencesForm
+ * @return HTMLForm
*/
public function getForm(
User $user,
IContextSource $context,
- $formClass = PreferencesFormOOUI::class,
+ $formClass = PreferencesForm::class,
array $remove = []
) {
if ( SpecialPreferences::isOouiEnabled( $context ) ) {
}
/**
- * @var $htmlForm PreferencesForm
+ * @var $htmlForm HTMLForm
*/
$htmlForm = new $formClass( $formDescriptor, $context, 'prefs' );
# Used message keys: 'accesskey-preferences-save', 'tooltip-preferences-save'
$htmlForm->setSubmitTooltip( 'preferences-save' );
$htmlForm->setSubmitID( 'prefcontrol' );
- $htmlForm->setSubmitCallback( function ( array $formData, PreferencesForm $form ) {
+ $htmlForm->setSubmitCallback( function ( array $formData, HTMLForm $form ) {
return $this->submitForm( $formData, $form );
} );
* Handle the form submission if everything validated properly
*
* @param array $formData
- * @param PreferencesForm $form
+ * @param HTMLForm $form
* @return bool|Status|string
*/
- protected function saveFormData( $formData, PreferencesForm $form ) {
+ protected function saveFormData( $formData, HTMLForm $form ) {
$user = $form->getModifiedUser();
$hiddenPrefs = $this->config->get( 'HiddenPrefs' );
$result = true;
* @deprecated since 1.31, its inception
*
* @param array $formData
- * @param PreferencesForm $form
+ * @param HTMLForm $form
* @return bool|Status|string
*/
- public function legacySaveFormData( $formData, PreferencesForm $form ) {
+ public function legacySaveFormData( $formData, HTMLForm $form ) {
return $this->saveFormData( $formData, $form );
}
* Save the form data and reload the page
*
* @param array $formData
- * @param PreferencesForm $form
+ * @param HTMLForm $form
* @return Status
*/
- protected function submitForm( array $formData, PreferencesForm $form ) {
+ protected function submitForm( array $formData, HTMLForm $form ) {
$res = $this->saveFormData( $formData, $form );
if ( $res ) {
* @deprecated since 1.31, its inception
*
* @param array $formData
- * @param PreferencesForm $form
+ * @param HTMLForm $form
* @return Status
*/
- public function legacySubmitForm( array $formData, PreferencesForm $form ) {
+ public function legacySubmitForm( array $formData, HTMLForm $form ) {
return $this->submitForm( $formData, $form );
}
*
* @param string $script JavaScript code
* @param string $nonce [optional] Content-Security-Policy nonce (from OutputPage::getCSPNonce)
- * @return WrappedString HTML
+ * @return string|WrappedString HTML
*/
public static function makeInlineScript( $script, $nonce = null ) {
$js = self::makeLoaderConditionalScript( $script );
* @file
*/
+use Wikimedia\WrappedString;
use Wikimedia\WrappedStringList;
/**
'general' => [],
],
// Deprecations for style-only modules
- 'styledeprecations' => [],
+ 'styleDeprecations' => [],
];
foreach ( $this->modules as $name ) {
}
$deprecation = $module->getDeprecationInformation();
if ( $deprecation ) {
- $data['styledeprecations'][] = $deprecation;
+ $data['styleDeprecations'][] = $deprecation;
}
}
);
}
- // Deprecations for only=styles modules
- if ( $data['styledeprecations'] ) {
- $chunks[] = ResourceLoader::makeInlineScript(
- implode( '', $data['styledeprecations'] ),
- $nonce
- );
- }
-
// External stylesheets (only=styles)
if ( $data['styles'] ) {
$chunks[] = $this->getLoad(
$startupQuery
);
- return WrappedStringList::join( "\n", $chunks );
+ return WrappedString::join( "\n", $chunks );
}
/**
* @return string|WrappedStringList HTML
*/
public function getBodyHtml() {
- return '';
+ $data = $this->getData();
+ $chunks = [];
+
+ // Deprecations for only=styles modules
+ if ( $data['styleDeprecations'] ) {
+ $chunks[] = ResourceLoader::makeInlineScript(
+ implode( '', $data['styleDeprecations'] ),
+ $this->options['nonce']
+ );
+ }
+
+ return WrappedString::join( "\n", $chunks );
}
private function getContext( $group, $type ) {
public function getGroup() {
return 'user';
}
-
- /**
- * @param ResourceLoaderContext|null $context
- * @return array
- */
- public function getDependencies( ResourceLoaderContext $context = null ) {
- return [ 'user.styles' ];
- }
}
* @file
* @ingroup Site
*
- * @license GNU GPL v2+
+ * @license GPL-2.0-or-later
* @author Jeroen De Dauw < jeroendedauw@gmail.com >
* @author Katie Filbert < aude.wiki@gmail.com >
*/
* @file
* @ingroup Site
*
- * @license GNU GPL v2+
+ * @license GPL-2.0-or-later
* @author Jeroen De Dauw < jeroendedauw@gmail.com >
* @author Daniel Kinzler
*/
*
* @file
*
- * @license GNU GPL v2+
+ * @license GPL-2.0-or-later
*/
/**
*
* @since 1.27
*
- * @license GNU GPL v2+
+ * @license GPL-2.0-or-later
* @author John Erling Blad < jeblad@gmail.com >
* @author Daniel Kinzler
* @author Jeroen De Dauw < jeroendedauw@gmail.com >
*
* @file
* @ingroup Site
- * @license GNU GPL v2+
+ * @license GPL-2.0-or-later
* @author John Erling Blad < jeblad@gmail.com >
* @author Daniel Kinzler
* @author Jeroen De Dauw < jeroendedauw@gmail.com >
* @file
* @ingroup Site
*
- * @license GNU GPL v2+
+ * @license GPL-2.0-or-later
* @author Jeroen De Dauw < jeroendedauw@gmail.com >
*/
class Site implements Serializable {
* @file
* @ingroup Site
*
- * @license GNU GPL v2+
+ * @license GPL-2.0-or-later
* @author Daniel Kinzler
*/
class SiteExporter {
* @file
* @ingroup Site
*
- * @license GNU GPL v2+
+ * @license GPL-2.0-or-later
* @author Daniel Kinzler
*/
class SiteImporter {
* @file
* @ingroup Site
*
- * @license GNU GPL v2+
+ * @license GPL-2.0-or-later
* @author Jeroen De Dauw < jeroendedauw@gmail.com >
*/
class SiteList extends GenericArrayObject {
* @file
* @ingroup Site
*
- * @license GNU GPL v2+
+ * @license GPL-2.0-or-later
*/
interface SiteLookup {
* @file
* @ingroup Site
*
- * @license GNU GPL v2+
+ * @license GPL-2.0-or-later
* @author Daniel Kinzler
*/
class SiteSQLStore {
* @file
* @ingroup Site
*
- * @license GNU GPL v2+
+ * @license GPL-2.0-or-later
* @author Jeroen De Dauw < jeroendedauw@gmail.com >
*/
interface SiteStore extends SiteLookup {
*
* @file
*
- * @license GNU GPL v2+
+ * @license GPL-2.0-or-later
*/
class SitesCacheFileBuilder {
* @file
*/
+use Wikimedia\WrappedString;
+use Wikimedia\WrappedStringList;
+
/**
* New base template for a skin's template extended from QuickTemplate
* this class features helper methods that provide common ways of interacting
* debug stuff. This should be called right before outputting the closing
* body and html tags.
*
- * @return string
+ * @return string|WrappedStringList HTML
* @since 1.29
*/
- function getTrail() {
- $html = MWDebug::getDebugHTML( $this->getSkin()->getContext() );
- $html .= $this->get( 'bottomscripts' );
- $html .= $this->get( 'reporttime' );
-
- return $html;
+ public function getTrail() {
+ return WrappedString::join( "\n", [
+ MWDebug::getDebugHTML( $this->getSkin()->getContext() ),
+ $this->get( 'bottomscripts' ),
+ $this->get( 'reporttime' )
+ ] );
}
}
*/
use MediaWiki\MediaWikiServices;
+use Wikimedia\WrappedString;
+use Wikimedia\WrappedStringList;
/**
* @defgroup Skins Skins
/**
* @param array $data
* @param string $nonce OutputPage::getCSPNonce()
- * @return string
+ * @return string|WrappedString HTML
*/
static function makeVariablesScript( $data, $nonce = null ) {
if ( $data ) {
/**
* This gets called shortly before the "</body>" tag.
*
- * @return string HTML-wrapped JS code to be put before "</body>"
+ * @return string|WrappedStringList HTML containing scripts to put before `</body>`
*/
function bottomScripts() {
// TODO and the suckage continues. This function is really just a wrapper around
// OutputPage::getBottomScripts() which takes a Skin param. This should be cleaned
// up at some point
- $bottomScriptText = $this->getOutput()->getBottomScripts();
- Hooks::run( 'SkinAfterBottomScripts', [ $this, &$bottomScriptText ] );
-
- return $bottomScriptText;
+ $chunks = [ $this->getOutput()->getBottomScripts() ];
+
+ // Keep the hook appendage separate to preserve WrappedString objects.
+ // This enables BaseTemplate::getTrail() to merge them where possible.
+ $extraHtml = '';
+ Hooks::run( 'SkinAfterBottomScripts', [ $this, &$extraHtml ] );
+ if ( $extraHtml !== '' ) {
+ $chunks[] = $extraHtml;
+ }
+ return WrappedString::join( "\n", $chunks );
}
/**
}
/**
- * 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
- * and includes the style version inside of the url.
+ * Return a fully resolved style path URL to images or styles stored in the
+ * current skin's folder. This method returns a URL resolved using the
+ * configured skin style path.
*
* Requires $stylename to be set, otherwise throws MWException.
*
* @param string $name The name or path of a skin resource file
- * @return string The fully resolved style path url including styleversion
+ * @return string The fully resolved style path URL
* @throws MWException
*/
function getSkinStylePath( $name ) {
- global $wgStylePath, $wgStyleVersion;
+ global $wgStylePath;
if ( $this->stylename === null ) {
$class = static::class;
throw new MWException( "$class::\$stylename must be set to use getSkinStylePath()" );
}
- return "$wgStylePath/{$this->stylename}/$name?$wgStyleVersion";
+ return "$wgStylePath/{$this->stylename}/$name";
}
/* these are used extensively in SkinTemplate, but also some other places */
// Building a language selector
$userLang = $this->getLanguage()->getCode();
$languages = Language::fetchLanguageNames( $userLang, 'mwfile' );
- ksort( $languages );
$options = [];
foreach ( $languages as $code => $name ) {
$options["$code - $name"] = $code;
/**
* Check if OOUI mode is enabled, by config or query string
+ *
+ * @since 1.32
* @param IContextSource $context The context.
* @return bool
*/
}
$software[$dbr->getSoftwareLink()] = $dbr->getServerInfo();
- if ( IcuCollation::getICUVersion() ) {
- $software['[http://site.icu-project.org/ ICU]'] = IcuCollation::getICUVersion();
- }
+ $software['[http://site.icu-project.org/ ICU]'] = INTL_ICU_VERSION;
// Allow a hook to add/remove items.
Hooks::run( 'SoftwareInfo', [ &$software ] );
+++ /dev/null
-<?php
-/**
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- * http://www.gnu.org/copyleft/gpl.html
- *
- * @file
- */
-
-/**
- * Temporarily define PreferencesForm as an interface, so PreferencesFormOOUI
- * and PreferencesFormLegacy can implement it.
- *
- * When PreferencesFormLegacy we can merge PreferencesFormOOUI with PreferencesForm.
- */
-interface PreferencesForm {
-}
/**
* Form to edit user preferences.
+ *
+ * @since 1.32
*/
-class PreferencesFormLegacy extends HTMLForm implements PreferencesForm {
+class PreferencesFormLegacy extends HTMLForm {
// Override default value from HTMLForm
protected $mSubSectionBeforeFields = false;
return array_keys( array_filter( $this->mFieldTree, 'is_array' ) );
}
}
+
+// Retain the old class name for backwards compatibility.
+// In the future, this alias will be changed to point to PreferencesFormOOUI.
+class PreferencesForm extends PreferencesFormLegacy {
+}
+// Phan doesn't understand class_alias()?
+// class_alias( PreferencesFormLegacy::class, 'PreferencesForm' );
/**
* Form to edit user preferences.
+ *
+ * @since 1.32
*/
-class PreferencesFormOOUI extends OOUIHTMLForm implements PreferencesForm {
+class PreferencesFormOOUI extends OOUIHTMLForm {
// Override default value from HTMLForm
protected $mSubSectionBeforeFields = false;
* @ingroup SpecialPage
* @author Ævar Arnfjörð Bjarmason <avarab@gmail.com>
* @copyright Copyright © 2005, Ævar Arnfjörð Bjarmason
- * @license http://www.gnu.org/copyleft/gpl.html GNU General Public License 2.0 or later
+ * @license GPL-2.0-or-later
*/
/**
* @file
* @ingroup Watchlist
*
- * @license GNU GPL v2+
+ * @license GPL-2.0-or-later
*/
class WatchedItemQueryService {
}
private function getRecentChangeFieldsFromRow( stdClass $row ) {
- // This can be simplified to single array_filter call filtering by key value,
- // once we stop supporting PHP 5.5
+ // FIXME: This can be simplified to single array_filter call filtering by key value,
+ // now we have stopped supporting PHP 5.5
$allFields = get_object_vars( $row );
$rcKeys = array_filter(
array_keys( $allFields ),
* @file
* @ingroup Watchlist
*
- * @license GNU GPL v2+
+ * @license GPL-2.0-or-later
*/
interface WatchedItemQueryServiceExtension {
* Select and input widget.
*
* @copyright 2011-2018 MediaWiki Widgets Team and others; see AUTHORS.txt
- * @license The MIT License (MIT); see LICENSE.txt
+ * @license MIT
*/
class SizeFilterWidget extends \OOUI\Widget {
"resources/src/jquery.tipsy",
"resources/src/jquery/jquery.color.js",
"resources/src/jquery/jquery.expandableField.js",
- "resources/src/jquery/jquery.farbtastic.css",
- "resources/src/jquery/jquery.farbtastic.js",
"resources/src/jquery/jquery.highlightText.js",
"resources/src/jquery/jquery.mw-jump.js",
"resources/src/mediawiki.legacy",
* 'all' all available languages
* 'mw' only if the language is defined in MediaWiki or wgExtraLanguageNames (default)
* 'mwfile' only if the language is in 'mw' *and* has a message file
- * @return array Language code => language name
+ * @return array Language code => language name (sorted by key)
* @since 1.20
*/
public static function fetchLanguageNames( $inLanguage = null, $include = 'mw' ) {
* 'all' all available languages
* 'mw' only if the language is defined in MediaWiki or wgExtraLanguageNames (default)
* 'mwfile' only if the language is in 'mw' *and* has a message file
- * @return array Language code => language name
+ * @return array Language code => language name (sorted by key)
*/
private static function fetchLanguageNamesUncached( $inLanguage = null, $include = 'mw' ) {
global $wgExtraLanguageNames, $wgUsePigLatinVariant;
*
* @file
* @author Ævar Arnfjörð Bjarmason <avarab@gmail.com>
- * @license http://www.gnu.org/copyleft/gpl.html GNU General Public License
- * @license http://www.gnu.org/copyleft/fdl.html GNU Free Documentation License
+ * @license GPL-2.0-or-later
+ * @license GFDL-1.3-or-later
* @ingroup Language
*/
class CrhExceptions {
+ const WB = '\b'; # default word boundary; may be updated in the future
+
function __construct() {
$this->loadRegs();
}
# load C2L and L2C bidirectional affix mappings
$this->addMappings( $this->prefixMapping,
- $this->Cyrl2LatnPatterns, $this->Latn2CyrlPatterns, false, '/\b', '/u' );
+ $this->Cyrl2LatnPatterns, $this->Latn2CyrlPatterns, false, '/'.self::WB, '/u' );
$this->addMappings( $this->suffixMapping,
- $this->Cyrl2LatnPatterns, $this->Latn2CyrlPatterns, false, '/', '\b/u' );
+ $this->Cyrl2LatnPatterns, $this->Latn2CyrlPatterns, false, '/', self::WB.'/u' );
# tack on one-way mappings to the ends of the prefix and suffix patterns
$this->Cyrl2LatnPatterns += $this->Cyrl2LatnRegexes;
'доцент' => 'dotsent', 'фармацевт' => 'farmatsevt', 'глицер' => 'glitser',
'люцерна' => 'lütserna', 'лицей' => 'litsey', 'меццо' => 'metstso', 'наци' => 'natsi',
'проце' => 'protse', 'рецеп' => 'retsep', 'реценз' => 'retsenz', 'теплица' => 'teplitsa',
- 'вице' => 'vitse', 'швейцар' => 'şveytsar',
+ 'вице' => 'vitse', 'швейцар' => 'şveytsar', 'богородиц' => 'bogorodits',
+ 'бруцел' => 'brutsel', 'дацюк' => 'datsük', 'доницетти' => 'donitsetti',
+ 'драцена' => 'dratsena', 'контрацеп' => 'kontratsep', 'коцюб' => 'kotsüb',
+ 'меценат' => 'metsenat', 'мицел' => 'mitsel', 'моцарт' => 'motsart', 'плац' => 'plats',
+ 'плацен' => 'platsen', 'прецедент' => 'pretsedent', 'прецес' => 'pretses',
+ 'прицеп' => 'pritsep', 'спец' => 'spets', 'троиц' => 'troits', 'шприц' => 'şprits',
+ 'эпицентр' => 'epitsentr', 'яценюк' => 'yatsenük',
# слова с тс
# words with тс
// TODO: refactor upper/lower/first capital whole words without
// regexes into simpler list
- '/\bКъЮШ\b/u' => 'QYŞ',
- '/\bЮШ\b/u' => 'YŞ',
-
- '/\bкок\b/u' => 'kök',
- '/\bКок\b/u' => 'Kök',
- '/\bКОК\b/u' => 'KÖK',
- '/\bком-кок\b/u' => 'köm-kök',
- '/\bКом-кок\b/u' => 'Köm-kök',
- '/\bКОМ-КОК\b/u' => 'KÖM-KÖK',
-
- '/\bкоп\b/u' => 'köp',
- '/\bКоп\b/u' => 'Köp',
- '/\bКОП\b/u' => 'KÖP',
-
- '/\bкурк\b/u' => 'kürk',
- '/\bКурк\b/u' => 'Kürk',
- '/\bКУРК\b/u' => 'KÜRK',
-
- '/\bог\b/u' => 'ög',
- '/\bОг\b/u' => 'Ög',
- '/\bОГ\b/u' => 'ÖG',
-
- '/\bюрип\b/u' => 'yürip',
- '/\bЮрип\b/u' => 'Yürip',
- '/\bЮРИП\b/u' => 'YÜRİP',
-
- '/\bюз\b/u' => 'yüz',
- '/\bЮз\b/u' => 'Yüz',
- '/\bЮЗ\b/u' => 'YÜZ',
-
- '/\bюк\b/u' => 'yük',
- '/\bЮк\b/u' => 'Yük',
- '/\bЮК\b/u' => 'YÜK',
-
- '/\bбуюп\b/u' => 'büyüp',
- '/\bБуюп\b/u' => 'Büyüp',
- '/\bБУЮП\b/u' => 'BÜYÜP',
-
- '/\bбуюк\b/u' => 'büyük',
- '/\bБуюк\b/u' => 'Büyük',
- '/\bБУЮК\b/u' => 'BÜYÜK',
-
- '/\bджонк\b/u' => 'cönk',
- '/\bДжонк\b/u' => 'Cönk',
- '/\bДЖОНК\b/u' => 'CÖNK',
- '/\bджонкю\b/u' => 'cönkü',
- '/\bДжонкю\b/u' => 'Cönkü',
- '/\bДЖОНКЮ\b/u' => 'CÖNKÜ',
-
- '/\bустке\b/u' => 'üstke',
- '/\bУстке\b/u' => 'Üstke',
- '/\bУСТКЕ\b/u' => 'ÜSTKE',
- '/\bустте\b/u' => 'üstte',
- '/\bУстте\b/u' => 'Üstte',
- '/\bУСТТЕ\b/u' => 'ÜSTTE',
- '/\bусттен\b/u' => 'üstten',
- '/\bУсттен\b/u' => 'Üstten',
- '/\bУСТТЕН\b/u' => 'ÜSTTEN',
+ '/'.self::WB.'КъЮШ'.self::WB.'/u' => 'QYŞ',
+ '/'.self::WB.'ЮШ'.self::WB.'/u' => 'YŞ',
+
+ '/'.self::WB.'кок'.self::WB.'/u' => 'kök',
+ '/'.self::WB.'Кок'.self::WB.'/u' => 'Kök',
+ '/'.self::WB.'КОК'.self::WB.'/u' => 'KÖK',
+ '/'.self::WB.'ком-кок'.self::WB.'/u' => 'köm-kök',
+ '/'.self::WB.'Ком-кок'.self::WB.'/u' => 'Köm-kök',
+ '/'.self::WB.'КОМ-КОК'.self::WB.'/u' => 'KÖM-KÖK',
+
+ '/'.self::WB.'коп'.self::WB.'/u' => 'köp',
+ '/'.self::WB.'Коп'.self::WB.'/u' => 'Köp',
+ '/'.self::WB.'КОП'.self::WB.'/u' => 'KÖP',
+
+ '/'.self::WB.'курк'.self::WB.'/u' => 'kürk',
+ '/'.self::WB.'Курк'.self::WB.'/u' => 'Kürk',
+ '/'.self::WB.'КУРК'.self::WB.'/u' => 'KÜRK',
+
+ '/'.self::WB.'ог'.self::WB.'/u' => 'ög',
+ '/'.self::WB.'Ог'.self::WB.'/u' => 'Ög',
+ '/'.self::WB.'ОГ'.self::WB.'/u' => 'ÖG',
+
+ '/'.self::WB.'юрип'.self::WB.'/u' => 'yürip',
+ '/'.self::WB.'Юрип'.self::WB.'/u' => 'Yürip',
+ '/'.self::WB.'ЮРИП'.self::WB.'/u' => 'YÜRİP',
+
+ '/'.self::WB.'юз'.self::WB.'/u' => 'yüz',
+ '/'.self::WB.'Юз'.self::WB.'/u' => 'Yüz',
+ '/'.self::WB.'ЮЗ'.self::WB.'/u' => 'YÜZ',
+
+ '/'.self::WB.'юк'.self::WB.'/u' => 'yük',
+ '/'.self::WB.'Юк'.self::WB.'/u' => 'Yük',
+ '/'.self::WB.'ЮК'.self::WB.'/u' => 'YÜK',
+
+ '/'.self::WB.'буюп'.self::WB.'/u' => 'büyüp',
+ '/'.self::WB.'Буюп'.self::WB.'/u' => 'Büyüp',
+ '/'.self::WB.'БУЮП'.self::WB.'/u' => 'BÜYÜP',
+
+ '/'.self::WB.'буюк'.self::WB.'/u' => 'büyük',
+ '/'.self::WB.'Буюк'.self::WB.'/u' => 'Büyük',
+ '/'.self::WB.'БУЮК'.self::WB.'/u' => 'BÜYÜK',
+
+ '/'.self::WB.'джонк'.self::WB.'/u' => 'cönk',
+ '/'.self::WB.'Джонк'.self::WB.'/u' => 'Cönk',
+ '/'.self::WB.'ДЖОНК'.self::WB.'/u' => 'CÖNK',
+ '/'.self::WB.'джонкю'.self::WB.'/u' => 'cönkü',
+ '/'.self::WB.'Джонкю'.self::WB.'/u' => 'Cönkü',
+ '/'.self::WB.'ДЖОНКЮ'.self::WB.'/u' => 'CÖNKÜ',
+
+ '/'.self::WB.'устке'.self::WB.'/u' => 'üstke',
+ '/'.self::WB.'Устке'.self::WB.'/u' => 'Üstke',
+ '/'.self::WB.'УСТКЕ'.self::WB.'/u' => 'ÜSTKE',
+ '/'.self::WB.'устте'.self::WB.'/u' => 'üstte',
+ '/'.self::WB.'Устте'.self::WB.'/u' => 'Üstte',
+ '/'.self::WB.'УСТТЕ'.self::WB.'/u' => 'ÜSTTE',
+ '/'.self::WB.'усттен'.self::WB.'/u' => 'üstten',
+ '/'.self::WB.'Усттен'.self::WB.'/u' => 'Üstten',
+ '/'.self::WB.'УСТТЕН'.self::WB.'/u' => 'ÜSTTEN',
# отдельно стоящие Ё и Я
# stand-alone Ё and Я
- '/\bЯ\b/u' => 'Ya',
- '/\bЁ\b/u' => 'Yo',
+ '/'.self::WB.'Я'.self::WB.'/u' => 'Ya',
+ '/'.self::WB.'Ё'.self::WB.'/u' => 'Yo',
############################
# относятся к началу слова #
# word prefixes #
############################
- '/\bКъЮШн/u' => 'QYŞn',
- '/\bЮШн/u' => 'YŞn',
+ '/'.self::WB.'КъЮШн/u' => 'QYŞn',
+ '/'.self::WB.'ЮШн/u' => 'YŞn',
# need to convert digraphs (гъ, къ, нъ, дж) now to match patterns
'/гъ/u' => 'ğ',
'/Д[жЖ]/u' => 'C',
# о => ö
- '/\b(['.Crh::C_M_CONS.'])о(['.Crh::C_CONS.'])(['.Crh::C_CONS.'])([еиэюьü])/u' => '$1ö$2$3$4',
- '/\bо(['.Crh::C_CONS.'])(['.Crh::C_CONS.'])([еиэюьü])/u' => 'ö$1$2$3',
- '/\b(['.Crh::C_M_CONS.'])О(['.Crh::C_CONS.'])(['.Crh::C_CONS.'])([еиэюьüЕИЭЮЬÜ])/u' =>
- '$1Ö$2$3$4',
- '/\bО(['.Crh::C_CONS.'])(['.Crh::C_CONS.'])([еиэюьüЕИЭЮЬÜ])/u' => 'Ö$1$2$3',
-
- '/\b(['.Crh::C_M_CONS.'])о(['.Crh::C_CONS.'])([еиэюьü])/u' => '$1ö$2$3',
- '/\bо(['.Crh::C_CONS.'])([еиэюьü])/u' => 'ö$1$2',
- '/\b(['.Crh::C_M_CONS.'])О(['.Crh::C_CONS.'])([еиэюьüЕИЭЮЬÜ])/u' => '$1Ö$2$3',
- '/\bО(['.Crh::C_CONS.'])([еиэюьüЕИЭЮЬÜ])/u' => 'Ö$1$2',
+ '/'.self::WB.'(['.Crh::C_M_CONS.'])о(['.Crh::C_CONS.'])(['.Crh::C_CONS.'])([еиэюьü])/u'
+ => '$1ö$2$3$4',
+ '/'.self::WB.'о(['.Crh::C_CONS.'])(['.Crh::C_CONS.'])([еиэюьü])/u' => 'ö$1$2$3',
+ '/'.self::WB.'(['.Crh::C_M_CONS.'])О(['.Crh::C_CONS.'])(['.Crh::C_CONS.'])([еиэюьüЕИЭЮЬÜ])/u'
+ => '$1Ö$2$3$4',
+ '/'.self::WB.'О(['.Crh::C_CONS.'])(['.Crh::C_CONS.'])([еиэюьüЕИЭЮЬÜ])/u' => 'Ö$1$2$3',
+
+ '/'.self::WB.'(['.Crh::C_M_CONS.'])о(['.Crh::C_CONS.'])([еиэюьü])/u' => '$1ö$2$3',
+ '/'.self::WB.'о(['.Crh::C_CONS.'])([еиэюьü])/u' => 'ö$1$2',
+ '/'.self::WB.'(['.Crh::C_M_CONS.'])О(['.Crh::C_CONS.'])([еиэюьüЕИЭЮЬÜ])/u' => '$1Ö$2$3',
+ '/'.self::WB.'О(['.Crh::C_CONS.'])([еиэюьüЕИЭЮЬÜ])/u' => 'Ö$1$2',
# ё => yö
- '/\bё(['.Crh::C_CONS.'])(['.Crh::C_CONS.'])([ьеюü])/u' => 'yö$1$2$3',
- '/\bЁ(['.Crh::C_CONS_LC.'])(['.Crh::C_CONS_LC.'])([ьеюü])/u' => 'Yö$1$2$3',
- '/\bЁ(['.Crh::C_CONS_UC.'])(['.Crh::C_CONS_UC.'])([ЬЕЮÜ])/u' => 'YÖ$1$2$3',
- '/\bё(['.Crh::C_CONS.'])([ьеюü])/u' => 'yö$1$2',
- '/\bЁ(['.Crh::C_CONS_LC.'])([ьеюü])/u' => 'Yö$1$2',
- '/\bЁ(['.Crh::C_CONS_UC.'])([ЬЕЮÜ])/u' => 'YÖ$1$2',
+ '/'.self::WB.'ё(['.Crh::C_CONS.'])(['.Crh::C_CONS.'])([ьеюü])/u' => 'yö$1$2$3',
+ '/'.self::WB.'Ё(['.Crh::C_CONS_LC.'])(['.Crh::C_CONS_LC.'])([ьеюü])/u' => 'Yö$1$2$3',
+ '/'.self::WB.'Ё(['.Crh::C_CONS_UC.'])(['.Crh::C_CONS_UC.'])([ЬЕЮÜ])/u' => 'YÖ$1$2$3',
+ '/'.self::WB.'ё(['.Crh::C_CONS.'])([ьеюü])/u' => 'yö$1$2',
+ '/'.self::WB.'Ё(['.Crh::C_CONS_LC.'])([ьеюü])/u' => 'Yö$1$2',
+ '/'.self::WB.'Ё(['.Crh::C_CONS_UC.'])([ЬЕЮÜ])/u' => 'YÖ$1$2',
# у => ü, ую => üyü
- '/\b(['.Crh::C_M_CONS.'])у(['.Crh::C_CONS.'])(['.Crh::C_CONS.'])([еиэюьü])/u' => '$1ü$2$3$4',
- '/\bу(['.Crh::C_CONS.'])(['.Crh::C_CONS.'])([еиэюьü])/u' => 'ü$1$2$3',
- '/\bую(['.Crh::C_CONS.'])(['.Crh::C_CONS.'])([еиэюьü])/u' => 'üyü$1$2$3',
- '/\b(['.Crh::C_M_CONS.'])У(['.Crh::C_CONS.'])(['.Crh::C_CONS.'])([еиэюьüЕИЭЮЬÜ])/u' =>
- '$1Ü$2$3$4',
- '/\bУ(['.Crh::C_CONS.'])(['.Crh::C_CONS.'])([еиэюьüЕИЭЮЬÜ])/u' => 'Ü$1$2$3',
- '/\bУю(['.Crh::C_CONS.'])(['.Crh::C_CONS.'])([еиэюьü])/u' => 'Üyü$1$2$3',
- '/\bУЮ(['.Crh::C_CONS.'])(['.Crh::C_CONS.'])([еиэюьü])/u' => 'ÜYÜ$1$2$3',
-
- '/\b(['.Crh::C_M_CONS.'])у(['.Crh::C_CONS.'])([еиэюьü])/u' => '$1ü$2$3',
- '/\bу(['.Crh::C_CONS.'])([еиэюьü])/u' => 'ü$1$2',
- '/\bую(['.Crh::C_CONS.'])([еиэюьü])/u' => 'üyü$1$2',
- '/\b(['.Crh::C_M_CONS.'])У(['.Crh::C_CONS.'])([еиэюьüЕИЭЮЬÜ])/u' => '$1Ü$2$3',
- '/\bУ(['.Crh::C_CONS.'])([еиэюьüЕИЭЮЬÜ])/u' => 'Ü$1$2',
- '/\bУю(['.Crh::C_CONS.'])([еиэюьü])/u' => 'Üyü$1$2',
- '/\bУЮ(['.Crh::C_CONS.'])([еиэюьü])/u' => 'ÜYÜ$1$2',
+ '/'.self::WB.'(['.Crh::C_M_CONS.'])у(['.Crh::C_CONS.'])(['.Crh::C_CONS.'])([еиэюьü])/u'
+ => '$1ü$2$3$4',
+ '/'.self::WB.'у(['.Crh::C_CONS.'])(['.Crh::C_CONS.'])([еиэюьü])/u' => 'ü$1$2$3',
+ '/'.self::WB.'ую(['.Crh::C_CONS.'])(['.Crh::C_CONS.'])([еиэюьü])/u' => 'üyü$1$2$3',
+ '/'.self::WB.'(['.Crh::C_M_CONS.'])У(['.Crh::C_CONS.'])(['.Crh::C_CONS.'])([еиэюьüЕИЭЮЬÜ])/u'
+ => '$1Ü$2$3$4',
+ '/'.self::WB.'У(['.Crh::C_CONS.'])(['.Crh::C_CONS.'])([еиэюьüЕИЭЮЬÜ])/u' => 'Ü$1$2$3',
+ '/'.self::WB.'Ую(['.Crh::C_CONS.'])(['.Crh::C_CONS.'])([еиэюьü])/u' => 'Üyü$1$2$3',
+ '/'.self::WB.'УЮ(['.Crh::C_CONS.'])(['.Crh::C_CONS.'])([еиэюьü])/u' => 'ÜYÜ$1$2$3',
+
+ '/'.self::WB.'(['.Crh::C_M_CONS.'])у(['.Crh::C_CONS.'])([еиэюьü])/u' => '$1ü$2$3',
+ '/'.self::WB.'у(['.Crh::C_CONS.'])([еиэюьü])/u' => 'ü$1$2',
+ '/'.self::WB.'ую(['.Crh::C_CONS.'])([еиэюьü])/u' => 'üyü$1$2',
+ '/'.self::WB.'(['.Crh::C_M_CONS.'])У(['.Crh::C_CONS.'])([еиэюьüЕИЭЮЬÜ])/u' => '$1Ü$2$3',
+ '/'.self::WB.'У(['.Crh::C_CONS.'])([еиэюьüЕИЭЮЬÜ])/u' => 'Ü$1$2',
+ '/'.self::WB.'Ую(['.Crh::C_CONS.'])([еиэюьü])/u' => 'Üyü$1$2',
+ '/'.self::WB.'УЮ(['.Crh::C_CONS.'])([еиэюьü])/u' => 'ÜYÜ$1$2',
# ю => yü
- '/\b([аыоуеиёюАЫОУЕИЁЮ]?)ю(['.Crh::C_CONS.'])(['.Crh::C_CONS.'])([ьеюü])/u' => '$1yü$2$3$4',
- '/\b([АЫОУЕИЁЮ]?)Ю(['.Crh::C_CONS_LC.'])(['.Crh::C_CONS_LC.'])([ьеюü])/u' => '$1Yü$2$3$4',
- '/\b([АЫОУЕИЁЮ]?)Ю(['.Crh::C_CONS_UC.'])(['.Crh::C_CONS_UC.'])([ЬЕЮÜ])/u' => '$1YÜ$2$3$4',
- '/\b([аыоуеиёюАЫОУЕИЁЮ]?)ю(['.Crh::C_CONS.'])([ьеюü])/u' => '$1yü$2$3',
- '/\b([АЫОУЕИЁЮ]?)Ю(['.Crh::C_CONS_LC.'])([ьеюü])/u' => '$1Yü$2$3',
- '/\b([АЫОУЕИЁЮ]?)Ю(['.Crh::C_CONS_UC.'])([ЬЕЮÜ])/u' => '$1YÜ$2$3',
+ '/'.self::WB.'([аыоуеиёюАЫОУЕИЁЮ]?)ю(['.Crh::C_CONS.'])(['.Crh::C_CONS.'])([ьеюü])/u'
+ => '$1yü$2$3$4',
+ '/'.self::WB.'([АЫОУЕИЁЮ]?)Ю(['.Crh::C_CONS_LC.'])(['.Crh::C_CONS_LC.'])([ьеюü])/u'
+ => '$1Yü$2$3$4',
+ '/'.self::WB.'([АЫОУЕИЁЮ]?)Ю(['.Crh::C_CONS_UC.'])(['.Crh::C_CONS_UC.'])([ЬЕЮÜ])/u'
+ => '$1YÜ$2$3$4',
+ '/'.self::WB.'([аыоуеиёюАЫОУЕИЁЮ]?)ю(['.Crh::C_CONS.'])([ьеюü])/u' => '$1yü$2$3',
+ '/'.self::WB.'([АЫОУЕИЁЮ]?)Ю(['.Crh::C_CONS_LC.'])([ьеюü])/u' => '$1Yü$2$3',
+ '/'.self::WB.'([АЫОУЕИЁЮ]?)Ю(['.Crh::C_CONS_UC.'])([ЬЕЮÜ])/u' => '$1YÜ$2$3',
# e => ye, я => ya
- '/\bе/u' => 'ye',
- '/\bЕ(['.Crh::C_LC.'cğñqöü])/u' => 'Ye$1',
- '/\bЕ(['.Crh::C_UC.'CĞÑQÖÜ])/u' => 'YE$1',
- '/\bя/u' => 'ya',
- '/\bЯ(['.Crh::C_LC.'cğñqöü])/u' => 'Ya$1',
- '/\bЯ(['.Crh::C_UC.'CĞÑQÖÜ])/u' => 'YA$1',
+ '/'.self::WB.'е/u' => 'ye',
+ '/'.self::WB.'Е(['.Crh::C_LC.'cğñqöü])/u' => 'Ye$1',
+ '/'.self::WB.'Е(['.Crh::C_UC.'CĞÑQÖÜ])/u' => 'YE$1',
+ '/'.self::WB.'я/u' => 'ya',
+ '/'.self::WB.'Я(['.Crh::C_LC.'cğñqöü])/u' => 'Ya$1',
+ '/'.self::WB.'Я(['.Crh::C_UC.'CĞÑQÖÜ])/u' => 'YA$1',
'/([аеёиоуыэюяйьъaeöüАЕЁИОУЫЭЮЯЙЬЪAEÖÜ])е/u' => '$1ye',
'/([аеёиоуыэюяйьъaeöüАЕЁИОУЫЭЮЯЙЬЪAEÖÜ])Е(['.Crh::C_LC.'cğñqöü])/u' => '$1Ye$2',
'/([аеёиоуыэюяйьъaeöüАЕЁИОУЫЭЮЯЙЬЪAEÖÜ])Е(['.Crh::C_UC.'CĞÑQÖÜ])/u' => '$1YE$2',
// TODO: refactor upper/lower/first capital whole words without
// regexes into simpler list
- '/\ban\b/u' => 'ань',
- '/\bAn\b/u' => 'Ань',
- '/\bAN\b/u' => 'АНЬ',
- '/\bange\b/u' => 'аньге',
- '/\bAnge\b/u' => 'Аньге',
- '/\bANGE\b/u' => 'АНЬГЕ',
- '/\bande\b/u' => 'аньде',
- '/\bAnde\b/u' => 'Аньде',
- '/\bANDE\b/u' => 'АНЬДЕ',
- '/\banki\b/u' => 'аньки',
- '/\bAnki\b/u' => 'Аньки',
- '/\bANKİ\b/u' => 'АНЬКИ',
- '/\bderal\b/u' => 'деръал',
- '/\bDeral\b/u' => 'Деръал',
- '/\bDERAL\b/u' => 'ДЕРЪАЛ',
- '/\bkör\b/u' => 'кёр',
- '/\bKör\b/u' => 'Кёр',
- '/\bKÖR\b/u' => 'КЁР',
- '/\bmer\b/u' => 'мэр',
- '/\bMer\b/u' => 'Мэр',
- '/\bMER\b/u' => 'МЭР',
-
- '/\bджонк/u' => 'cönk',
- '/\bДжонк/u' => 'Cönk',
- '/\bДЖОНК/u' => 'CÖNK',
-
- '/\bкуркчи/u' => 'kürkçi',
- '/\bКуркчи/u' => 'Kürkçi',
- '/\bКУРКЧИ/u' => 'KÜRKÇI',
+ '/'.self::WB.'an'.self::WB.'/u' => 'ань',
+ '/'.self::WB.'An'.self::WB.'/u' => 'Ань',
+ '/'.self::WB.'AN'.self::WB.'/u' => 'АНЬ',
+ '/'.self::WB.'ange'.self::WB.'/u' => 'аньге',
+ '/'.self::WB.'Ange'.self::WB.'/u' => 'Аньге',
+ '/'.self::WB.'ANGE'.self::WB.'/u' => 'АНЬГЕ',
+ '/'.self::WB.'ande'.self::WB.'/u' => 'аньде',
+ '/'.self::WB.'Ande'.self::WB.'/u' => 'Аньде',
+ '/'.self::WB.'ANDE'.self::WB.'/u' => 'АНЬДЕ',
+ '/'.self::WB.'anki'.self::WB.'/u' => 'аньки',
+ '/'.self::WB.'Anki'.self::WB.'/u' => 'Аньки',
+ '/'.self::WB.'ANKİ'.self::WB.'/u' => 'АНЬКИ',
+ '/'.self::WB.'deral'.self::WB.'/u' => 'деръал',
+ '/'.self::WB.'Deral'.self::WB.'/u' => 'Деръал',
+ '/'.self::WB.'DERAL'.self::WB.'/u' => 'ДЕРЪАЛ',
+ '/'.self::WB.'kör'.self::WB.'/u' => 'кёр',
+ '/'.self::WB.'Kör'.self::WB.'/u' => 'Кёр',
+ '/'.self::WB.'KÖR'.self::WB.'/u' => 'КЁР',
+ '/'.self::WB.'mer'.self::WB.'/u' => 'мэр',
+ '/'.self::WB.'Mer'.self::WB.'/u' => 'Мэр',
+ '/'.self::WB.'MER'.self::WB.'/u' => 'МЭР',
+
+ '/'.self::WB.'джонк/u' => 'cönk',
+ '/'.self::WB.'Джонк/u' => 'Cönk',
+ '/'.self::WB.'ДЖОНК/u' => 'CÖNK',
+
+ '/'.self::WB.'куркчи/u' => 'kürkçi',
+ '/'.self::WB.'Куркчи/u' => 'Kürkçi',
+ '/'.self::WB.'КУРКЧИ/u' => 'KÜRKÇI',
# буква Ё - первый заход
# расставляем Ь после согласных
- '/\b([yY])ö(['.Crh::L_N_CONS.'])([aAuU'.Crh::L_CONS.']|\b)/u' => '$1ö$2ь$3',
- '/\b([yY])Ö(['.Crh::L_N_CONS.'])([aAuU'.Crh::L_CONS.']|\b)/u' => '$1Ö$2Ь$3',
- '/\bAQŞ([^AEI]|\b)/u' => 'АКъШ$1',
+ '/'.self::WB.'([yY])ö(['.Crh::L_N_CONS.'])([aAuU'.Crh::L_CONS.']|'.self::WB.')/u' => '$1ö$2ь$3',
+ '/'.self::WB.'([yY])Ö(['.Crh::L_N_CONS.'])([aAuU'.Crh::L_CONS.']|'.self::WB.')/u' => '$1Ö$2Ь$3',
+ '/'.self::WB.'AQŞ([^AEI]|'.self::WB.')/u' => 'АКъШ$1',
# буква Ю - первый заход
# расставляем Ь после согласных
- '/\b([yY])ü(['.Crh::L_N_CONS.'])([aAuU'.Crh::L_CONS.']|\b)/u' => '$1ü$2ь$3',
- '/\b([yY])Ü(['.Crh::L_N_CONS.'])([aAuU'.Crh::L_CONS.']|\b)/u' => '$1Ü$2Ь$3',
-
- '/\b([bcgkpşBCGKPŞ])ö(['.Crh::L_N_CONS.'])(['.Crh::L_CONS.']|\b)/u' => '$1ö$2ь$3',
- '/\b([bcgkpşBCGKPŞ])Ö(['.Crh::L_N_CONS.'])(['.Crh::L_CONS.']|\b)/u' => '$1Ö$2Ь$3',
- '/\b([bcgkpşBCGKPŞ])Ö(['.Crh::L_N_CONS.'])(['.Crh::L_CONS.']|\b)/u' => '$1Ö$2Ь$3',
- '/\b([bcgkpşBCGKPŞ])ü(['.Crh::L_N_CONS.'])(['.Crh::L_CONS.']|\b)/u' => '$1ü$2ь$3',
- '/\b([bcgkpşBCGKPŞ])Ü(['.Crh::L_N_CONS.'])(['.Crh::L_CONS.']|\b)/u' => '$1Ü$2Ь$3',
- '/\b([bcgkpşBCGKPŞ])Ü(['.Crh::L_N_CONS.'])(['.Crh::L_CONS.']|\b)/u' => '$1Ü$2Ь$3',
+ '/'.self::WB.'([yY])ü(['.Crh::L_N_CONS.'])([aAuU'.Crh::L_CONS.']|'.self::WB.')/u' => '$1ü$2ь$3',
+ '/'.self::WB.'([yY])Ü(['.Crh::L_N_CONS.'])([aAuU'.Crh::L_CONS.']|'.self::WB.')/u' => '$1Ü$2Ь$3',
+
+ '/'.self::WB.'([bcgkpşBCGKPŞ])ö(['.Crh::L_N_CONS.'])(['.Crh::L_CONS.']|'.self::WB.')/u'
+ => '$1ö$2ь$3',
+ '/'.self::WB.'([bcgkpşBCGKPŞ])Ö(['.Crh::L_N_CONS.'])(['.Crh::L_CONS.']|'.self::WB.')/u'
+ => '$1Ö$2Ь$3',
+ '/'.self::WB.'([bcgkpşBCGKPŞ])Ö(['.Crh::L_N_CONS.'])(['.Crh::L_CONS.']|'.self::WB.')/u'
+ => '$1Ö$2Ь$3',
+ '/'.self::WB.'([bcgkpşBCGKPŞ])ü(['.Crh::L_N_CONS.'])(['.Crh::L_CONS.']|'.self::WB.')/u'
+ => '$1ü$2ь$3',
+ '/'.self::WB.'([bcgkpşBCGKPŞ])Ü(['.Crh::L_N_CONS.'])(['.Crh::L_CONS.']|'.self::WB.')/u'
+ => '$1Ü$2Ь$3',
+ '/'.self::WB.'([bcgkpşBCGKPŞ])Ü(['.Crh::L_N_CONS.'])(['.Crh::L_CONS.']|'.self::WB.')/u'
+ => '$1Ü$2Ь$3',
# ö и ü в начале слова
# случаи, когда нужен Ь
- '/\bö(['.Crh::L_N_CONS.'pP])(['.Crh::L_CONS.']|\b)/u' => 'ö$1ь$2',
- '/\bÖ(['.Crh::L_N_CONS_LC.'p])(['.Crh::L_CONS.']|\b)/u' => 'Ö$1ь$2',
- '/\bÖ(['.Crh::L_N_CONS_UC.'P])(['.Crh::L_CONS.']|\b)/u' => 'Ö$1Ь$2',
- '/\bü(['.Crh::L_N_CONS.'])(['.Crh::L_CONS.']|\b)/u' => 'ü$1ь$2',
- '/\bÜ(['.Crh::L_N_CONS_LC.'])(['.Crh::L_CONS.']|\b)/u' => 'Ü$1ь$2',
- '/\bÜ(['.Crh::L_N_CONS_UC.'])(['.Crh::L_CONS.']|\b)/u' => 'Ü$1Ь$2',
-
- '/ts\b/u' => 'ц',
- '/şç\b/u' => 'щ',
- '/Ş[çÇ]\b/u' => 'Щ',
- '/T[sS]\b/u' => 'Ц',
+ '/'.self::WB.'ö(['.Crh::L_N_CONS.'pP])(['.Crh::L_CONS.']|'.self::WB.')/u' => 'ö$1ь$2',
+ '/'.self::WB.'Ö(['.Crh::L_N_CONS_LC.'p])(['.Crh::L_CONS.']|'.self::WB.')/u' => 'Ö$1ь$2',
+ '/'.self::WB.'Ö(['.Crh::L_N_CONS_UC.'P])(['.Crh::L_CONS.']|'.self::WB.')/u' => 'Ö$1Ь$2',
+ '/'.self::WB.'ü(['.Crh::L_N_CONS.'])(['.Crh::L_CONS.']|'.self::WB.')/u' => 'ü$1ь$2',
+ '/'.self::WB.'Ü(['.Crh::L_N_CONS_LC.'])(['.Crh::L_CONS.']|'.self::WB.')/u' => 'Ü$1ь$2',
+ '/'.self::WB.'Ü(['.Crh::L_N_CONS_UC.'])(['.Crh::L_CONS.']|'.self::WB.')/u' => 'Ü$1Ь$2',
+
+ '/ts'.self::WB.'/u' => 'ц',
+ '/şç'.self::WB.'/u' => 'щ',
+ '/Ş[çÇ]'.self::WB.'/u' => 'Щ',
+ '/T[sS]'.self::WB.'/u' => 'Ц',
# Ь после Л
# add Ь after Л
- '/(['.Crh::L_F.'])l(['.Crh::L_CONS_LC.']|\b)/u' => '$1ль$2',
- '/(['.Crh::L_F_UC.'])L(['.Crh::L_CONS.']|\b)/u' => '$1ЛЬ$2',
+ '/(['.Crh::L_F.'])l(['.Crh::L_CONS_LC.']|'.self::WB.')/u' => '$1ль$2',
+ '/(['.Crh::L_F_UC.'])L(['.Crh::L_CONS.']|'.self::WB.')/u' => '$1ЛЬ$2',
- '/etsin\b/u' => 'етсин',
- '/Etsin\b/u' => 'Етсин',
- '/ETSİN\b/u' => 'ЕТСИН',
+ '/etsin'.self::WB.'/u' => 'етсин',
+ '/Etsin'.self::WB.'/u' => 'Етсин',
+ '/ETSİN'.self::WB.'/u' => 'ЕТСИН',
# относятся к началу слова
- '/\bts/u' => 'ц',
- '/\bT[sS]/u' => 'Ц',
+ '/'.self::WB.'ts/u' => 'ц',
+ '/'.self::WB.'T[sS]/u' => 'Ц',
- '/\bşç/u' => 'щ',
- '/\bŞ[çÇ]/u' => 'Щ',
+ '/'.self::WB.'şç/u' => 'щ',
+ '/'.self::WB.'Ş[çÇ]/u' => 'Щ',
# Э
- '/(\b|['.Crh::L_VOW.'аеэяАЕЭЯ])e/u' => '$1э',
- '/(\b|['.Crh::L_VOW_UC.'АЕЭЯ])E/u' => '$1Э',
-
- '/\b(['.Crh::L_M_CONS.'])ö/u' => '$1о',
- '/\b(['.Crh::L_M_CONS.'])Ö/u' => '$1О',
- '/\b(['.Crh::L_M_CONS.'])ü/u' => '$1у',
- '/\b(['.Crh::L_M_CONS.'])Ü/u' => '$1У',
-
- '/\bö/u' => 'о',
- '/\bÖ/u' => 'О',
- '/\bü/u' => 'у',
- '/\bÜ/u' => 'У',
+ '/('.self::WB.'|['.Crh::L_VOW.'аеэяАЕЭЯ])e/u' => '$1э',
+ '/('.self::WB.'|['.Crh::L_VOW_UC.'АЕЭЯ])E/u' => '$1Э',
+
+ '/'.self::WB.'(['.Crh::L_M_CONS.'])ö/u' => '$1о',
+ '/'.self::WB.'(['.Crh::L_M_CONS.'])Ö/u' => '$1О',
+ '/'.self::WB.'(['.Crh::L_M_CONS.'])ü/u' => '$1у',
+ '/'.self::WB.'(['.Crh::L_M_CONS.'])Ü/u' => '$1У',
+
+ '/'.self::WB.'ö/u' => 'о',
+ '/'.self::WB.'Ö/u' => 'О',
+ '/'.self::WB.'ü/u' => 'у',
+ '/'.self::WB.'Ü/u' => 'У',
# некоторые исключения
# some exceptions
"recentchanges-legend-plusminus": "(''±১২৩'')",
"rcfilters-legend-heading": "<strong>সংক্ষিপ্ত ৰূপৰ তালিকা:</strong>",
"rcfilters-other-review-tools": "আন পুনৰীক্ষণ সঁজুলি",
+ "rcfilters-quickfilters": "সঞ্চিত পৰিস্ৰাৱক",
+ "rcfilters-savedqueries-defaultlabel": "সঞ্চিত পৰিস্ৰাৱক",
"rcfilters-search-placeholder": "পৰিৱৰ্তনসমূহ ছেকক (ছেকনীৰ নামৰ বাবে মেন্যু বা সন্ধান ব্যৱহাৰ কৰক)",
+ "rcfilters-highlightbutton-title": "ফলাফলসমূহ উজ্জ্বল কৰক",
+ "rcfilters-filter-editsbyself-label": "আপুনি কৰা সালসলনিসমূহ",
+ "rcfilters-filter-editsbyself-description": "আপোনাৰ নিজৰ অৱদানসমূহ।",
+ "rcfilters-filter-editsbyother-label": "আনে কৰা সালসলনিসমূহ",
+ "rcfilters-filter-editsbyother-description": "আপুনি কৰাখিনিৰ বাহিৰে আন সকলো সালসলনি।",
+ "rcfilters-filtergroup-userExpLevel": "সদস্য পঞ্জীয়ন আৰু অভিজ্ঞতা",
+ "rcfilters-filter-user-experience-level-registered-label": "পঞ্জীয়নভুক্ত",
+ "rcfilters-filter-user-experience-level-registered-description": "প্ৰৱেশ কৰা সম্পাদকসকল।",
+ "rcfilters-filter-user-experience-level-unregistered-description": "প্ৰৱেশ নকৰা সম্পাদকসকল।",
+ "rcfilters-filter-user-experience-level-newcomer-label": "নবাগতসকল",
+ "rcfilters-filter-user-experience-level-newcomer-description": "১টাতকৈ কম সম্পাদনা কৰা বা ৪ দিনতকৈ কম সময় সক্ৰিয় থকা পঞ্জীয়নভুক্ত সম্পাদকসকল।",
+ "rcfilters-filter-user-experience-level-learner-label": "ন-শিকাৰুসকল",
+ "rcfilters-filter-user-experience-level-learner-description": "পঞ্জীয়নভুক্ত সম্পাদকসকল যাৰ অভিজ্ঞতাৰ স্তৰ \"নবাগত\" আৰু \"অভিজ্ঞ সদস্য\"ৰ মাজত।",
+ "rcfilters-filter-user-experience-level-experienced-label": "অভিজ্ঞ সদস্যসকল",
+ "rcfilters-filter-user-experience-level-experienced-description": "৫০০তকৈ বেছি সম্পাদনা কৰা আৰু ৩০ দিনতকৈ বেছি সময় সক্ৰিয় থকা পঞ্জীয়নভুক্ত সম্পাদকসকল।",
"rcfilters-filter-humans-label": "মানুহ (ব'ট নহয়)",
"rcfilters-filter-pageedits-label": "পৃষ্ঠা সম্পাদনা",
"rcfilters-filter-newpages-label": "পৃষ্ঠা সৃষ্টি",
"ignorewarning": "Праігнараваць папярэджаньне і захаваць файл",
"ignorewarnings": "Ігнараваць усе папярэджаньні",
"minlength1": "Назва файлу павінна ўтрымліваць хаця б адну літару.",
- "illegalfilename": "Назва файла «$1» зьмяшчае сымбалі, якія нельга выкарыстоўваць у назвах старонак. Калі ласка, зьмяніце назву файла і паспрабуйце загрузіць яго зноў.",
+ "illegalfilename": "Назва файлу «$1» зьмяшчае сымбалі, якія нельга выкарыстоўваць у назвах старонак. Калі ласка, зьмяніце назву файлу і паспрабуйце загрузіць яго зноў.",
"filename-toolong": "Назвы файлаў ня могуць быць даўжэй 240 байтаў.",
"badfilename": "Назва файла была зьмененая на «$1».",
"filetype-mime-mismatch": "Пашырэньне файла «.$1» не адпавядае выяўленаму MIME-тыпу файла ($2).",
"unregistered-user-config": "З прычынаў бясьпекі JavaScript, CSS і JSON-падстаронкі ўдзельніка ня могуць быць загружаныя для незарэгістраваных удзельнікаў.",
"passwordpolicies": "Палітыка пароляў",
"passwordpolicies-summary": "Гэта сьпіс дзейных палітыкаў пароляў для групаў удзельнікаў, вызначаных у гэтай вікі.",
- "passwordpolicies-group": "Група"
+ "passwordpolicies-group": "Група",
+ "passwordpolicies-policies": "Палітыкі",
+ "passwordpolicies-policy-minimalpasswordlength": "Пароль мусіць мець даўжыню найменей $1 {{PLURAL:$1|сымбаль|сымбалі|сымбаляў}}",
+ "passwordpolicies-policy-minimumpasswordlengthtologin": "Пароль мусіць мець даўжыню найменш $1 {{PLURAL:$1|сымбаль|сымбалі|сымбаляў}}, каб уваходзіць у сыстэму"
}
"prefs-watchlist-edits": "নজরতালিকাতে দেখানোর জন্য সর্বাধিক পরিবর্তনের সংখ্যা:",
"prefs-watchlist-edits-max": "সর্বোচ্চ সংখ্যা: ১০০০",
"prefs-watchlist-token": "নজরতালিকা টোকেন:",
- "prefs-watchlist-managetokens": "টোকেন পরিচালনা করুন",
+ "prefs-watchlist-managetokens": "টোকেনসমূহ পরিচালনা করুন",
"prefs-misc": "বিবিধ",
"prefs-resetpass": "পাসওয়ার্ড পরিবর্তন",
"prefs-changeemail": "ইমেইল ঠিকানা পরিবর্তন বা বাতিল করুন",
"prefs-dateformat": "তারিখ বিন্যাস",
"prefs-timeoffset": "সময় অফসেট",
"prefs-advancedediting": "সাধারণ পছন্দগুলি",
+ "prefs-developertools": "উন্নয়নকারীর সরঞ্জাম",
"prefs-editor": "সম্পাদক",
"prefs-preview": "প্রাকদর্শন",
"prefs-advancedrc": "উচ্চতর পছন্দগুলি",
"right-editcontentmodel": "পাতার তথ্যের ধরন সম্পাদনা করুন",
"right-editinterface": "ব্যবহারকারী ইন্টারফেস সম্পাদনা",
"right-editusercss": "অন্য ব্যবহারকারীগণের CSS ফাইল সম্পাদনা",
+ "right-edituserjson": "অন্য ব্যবহারকারীগণের JSON ফাইল সম্পাদনা",
"right-edituserjs": "অন্য ব্যবহারকারীগণের JS ফাইল সম্পাদনা",
"right-editmyusercss": "আপনার নিজস্ব ব্যবহারকারী সিএসএস ফাইল সম্পাদনা করুন",
+ "right-editmyuserjson": "আপনার নিজস্ব ব্যবহারকারী JSON ফাইল সম্পাদনা করা",
"right-editmyuserjs": "আপনার নিজস্ব ব্যবহারকারী জাভাস্ক্রিপ্ট ফাইল সম্পাদনা করুন",
"right-viewmywatchlist": "আপনার নজরতালিকা দেখুন",
"right-editmywatchlist": "আপনার নজরতালিকা সম্পাদনা করুন। মনে রাখবেন, এই পরিবর্তনের পরও বিভিন্ন পাতা তালিকায় যুক্ত হয়ে থেতে পারে।",
"recentchangeslinked-feed": "সম্পর্কিত পরিবর্তন",
"recentchangeslinked-toolbox": "সম্পর্কিত পরিবর্তন",
"recentchangeslinked-title": "\"$1\"-এর সাথে সম্পর্কিত পরিবর্তনসমূহ",
- "recentchangeslinked-summary": "একটি পাতায় বা পাতা থেকে সংযুক্ত পাতাগুলির পরিবর্তন দেখতে একটি পাতার নাম লিখুন। (একটি বিষয়শ্রেণীর সদস্যদের দেখতে, বিষয়শ্রেণী:বিষয়শ্রেণীর নাম লিখুন)। আপনার [[Special:Watchlist|আপনার নজরতালিকায়]] রাখা পাতাগুলি <strong>গাঢ়</strong> করে দেখানো হয়েছে।",
+ "recentchangeslinked-summary": "একটি পাতায় বা পাতা থেকে সংযুক্ত পাতাগুলির পরিবর্তন দেখতে একটি পাতার নাম লিখুন। (একটি বিষয়শ্রেণীর সদস্যদের দেখতে, {{ns:category}}:বিষয়শ্রেণীর নাম লিখুন)। আপনার [[Special:Watchlist|আপনার নজরতালিকায়]] রাখা পাতাগুলি <strong>গাঢ়</strong> করে দেখানো হয়েছে।",
"recentchangeslinked-page": "পাতার নাম:",
"recentchangeslinked-to": "প্রদত্ত পাতায় সংযুক্ত আছে এমন পাতাগুলোর পরিবর্তন দেখাও",
"recentchanges-page-added-to-category": "বিষয়শ্রেণীতে [[:$1]] যোগ করা হয়েছে",
"undelete-cantcreate": "আপনি এই পাতাটি ফিরিয়ে আনতে পারবেন না কারণ এই নামে কোন পাতা বিদ্যমান নেই ও আপনার এই পাতাটি তৈরি করার অনুমতি নেই।",
"pagedata-title": "পাতার উপাত্ত",
"pagedata-not-acceptable": "কোন মিলে যাওয়া বিন্যাস পাওয়া যায় নি। সমর্থিত MIME ধরনগুলি হল: $1",
- "pagedata-bad-title": "অপ্রযোজ্য শিরোনাম: \"$1\""
+ "pagedata-bad-title": "অপ্রযোজ্য শিরোনাম: \"$1\"",
+ "passwordpolicies-group": "দল",
+ "passwordpolicies-policies": "নীতিসমূহ",
+ "passwordpolicies-policy-minimalpasswordlength": "পাসওয়ার্ড অবশ্যই {{PLURAL:$1|১ অক্ষরের|$1 অক্ষরের}} হতে হবে"
}
"linkstoimage-redirect": "$1 (файлан дӀасахьажорг) $2",
"duplicatesoffile": "{{PLURAL:$1|Лахара файл ю дубликат|Лахара $1 файлаш ю дубликаташ}} хӀокху файлан ([[Special:FileDuplicateSearch/$2|мадарра]]):",
"sharedupload": "ХӀара хӀума оцун $1 чура ю иза хила мега лелош кхечу проекташкахь.",
- "sharedupload-desc-here": "Ð¥Ó\80аÑ\80а Ñ\84айл $1 Ñ\87Ñ\83Ñ\80а Ñ\8e и лело йиÑ\88 Ñ\8e маÑ\81Ñ\81о пÑ\80оекÑ\82аÑ\88каÑ\85Ñ\8c.\nЦÑ\83нна Ñ\85аам гайÑ\82ина лаÑ\85аÑ\85Ñ\8c. [$2 Файл Ð\92икигÑ\83ламехь]",
+ "sharedupload-desc-here": "Ð¥Ó\80аÑ\80а Ñ\84айл $1 Ñ\87Ñ\83Ñ\80а Ñ\8e и лело йиÑ\88 Ñ\8e маÑ\81Ñ\81о пÑ\80оекÑ\82аÑ\88каÑ\85Ñ\8c.\nЦÑ\83нна Ñ\85аам гайÑ\82ина лаÑ\85аÑ\85Ñ\8c. [$2 Файл Ð\92икилаÑ\80мехь]",
"filepage-nofile": "Иштта цӀе йолуш файл яц.",
"filepage-nofile-link": "Иштта цӀе йолуш файл яц. Хьа йиш ю и [$1 чуяккха].",
"uploadnewversion-linktext": "Чуяккха керла верси хӀокху файлан",
"subject-preview": "Forhåndsvisning af emne/overskrift:",
"previewerrortext": "Der opstod en fejl under forsøget på at lave en forhåndsvisning af dine ændringer.",
"blockedtitle": "Du eller din IP-adresse er blokeret",
- "blockedtext": "'''Dit brugernavn eller din IP-adresse er blevet blokeret.'''\n\nBlokeringen er foretaget af $1.\nDen anførte grund er ''$2''.\n\nBlokeringen starter: $8\nBlokeringen udløber: $6\nBlokeringen er rettet mod: $7\n\nDu kan kontakte $1 eller en af de andre [[{{MediaWiki:Grouppage-sysop}}|administratorer]] for at diskutere blokeringen.\nDu kan ikke bruge funktionen 'e-mail til denne bruger' medmindre der er angivet en gyldig e-mailadresse i dine\n[[Special:Preferences|kontoindstillinger]], og du ikke er blevet blokeret fra at bruge den.\n\nDin nuværende IP-adresse er $3, og blokerings-id er #$5.\nAngiv venligst alle ovenstående detaljer ved henvendelser om blokeringen.",
+ "blockedtext": "<strong>Dit brugernavn eller din IP-adresse er blevet blokeret.</strong>\n\nBlokeringen er foretaget af $1.\nDen anførte grund er <em>$2</em>.\n\nBlokeringen starter: $8\nBlokeringen udløber: $6\nBlokeringen er rettet mod: $7\n\nDu kan kontakte $1 eller en af de andre [[{{MediaWiki:Grouppage-sysop}}|administratorer]] for at diskutere blokeringen.\nDu kan ikke bruge funktionen \"{{int:emailuser}}\" medmindre der er angivet en gyldig e-mailadresse i dine [[Special:Preferences|kontoindstillinger]], og du ikke er blevet blokeret fra at bruge den.\n\nDin nuværende IP-adresse er $3, og blokerings-id er #$5.\nAngiv venligst alle ovenstående detaljer ved henvendelser om blokeringen.",
"autoblockedtext": "Din IP-adresse er blevet blokeret automatisk fordi den blev brugt af en anden bruger som er blevet blokeret af $1.\nBegrundelsen for det er:\n\n:''$2''\n\n* Blokeringsperiodens start: $8\n* Blokeringen udløber: $6\n* Blokeringen er ment for: $7\n\nDu kan kontakte $1 eller en af de andre [[{{MediaWiki:Grouppage-sysop}}|administratorer]] for at diskutere blokeringen.\n\nBemærk at du ikke kan bruge funktionen \"e-mail til denne bruger\" medmindre du har en gyldig e-mailadresse registreret i din [[Special:Preferences|brugerindstilling]], og du ikke er blevet blokeret fra at bruge den.\n\nDin nuværende IP-adresse er $3, og blokerings-id'et er #$5.\nAngiv venligst alle de ovenstående detaljer ved eventuelle henvendelser.",
"systemblockedtext": "Dit brugernavn eller din IP-adresse er automatisk blokeret af MediaWiki.\nBegrundelsen for det er:\n\n:<em>$2</em>\n\n* Blokeringsperiodens start: $8\n* Blokeringen udløber: $6\n* Blokeringen er ment for: $7\n\nDin nuværende IP-adresse er $3.\nAngiv venligst alle de ovenstående detaljer ved eventuelle henvendelser.",
"blockednoreason": "ingen begrundelse givet",
"recentchangeslinked-feed": "Relaterede ændringer",
"recentchangeslinked-toolbox": "Relaterede ændringer",
"recentchangeslinked-title": "Ændringer der relaterer til \"$1\"",
- "recentchangeslinked-summary": "Indtast et sidenavn for at sændringer på sider henvist til eller fra den side. (For at se medlemmer af en kategori indtast Category:Kategorinavn). Ændringer til sider på [[Special:Watchlist|din overvågningsliste]] er vist med <strong>fed</strong> skrift.",
+ "recentchangeslinked-summary": "Indtast et sidenavn for at sændringer på sider henvist til eller fra den side. (For at se medlemmer af en kategori indtast {{ns:category}}:Kategorinavn). Ændringer til sider på [[Special:Watchlist|din overvågningsliste]] er vist med <strong>fed</strong> skrift.",
"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",
"italic_sample": "Italic text",
"savearticle": "Save page",
"anonpreviewwarning": "<em>You are not logged in. Saving will record your IP address in this page's edit history.</em>",
- "blockedtext": "<strong>Your username or IP address has been blocked.</strong>\n\nThe block was made by $1.\nThe reason given is <em>$2</em>.\n\n* Start of block: $8\n* Expiry of block: $6\n* Intended blockee: $7\n\nYou can contact $1 or another [[{{MediaWiki:Grouppage-sysop}}|administrator]] to discuss the block.\nYou cannot use the \"email this user\" feature unless a valid email address is specified in your [[Special:Preferences|account preferences]] and you have not been blocked from using it.\nYour current IP address is $3, and the block ID is #$5.\nPlease include all above details in any queries you make.",
+ "blockedtext": "<strong>Your username or IP address has been blocked.</strong>\n\nThe block was made by $1.\nThe reason given is <em>$2</em>.\n\n* Start of block: $8\n* Expiration of block: $6\n* Intended blockee: $7\n\nYou can contact $1 or another [[{{MediaWiki:Grouppage-sysop}}|administrator]] to discuss the block.\nYou cannot use the \"{{int:emailuser}}\" feature unless a valid e-mail address is specified in your [[Special:Preferences|account preferences]] and you have not been blocked from using it.\nYour current IP address is $3, and the block ID is #$5.\nPlease include all above details in any queries you make.",
"autoblockedtext": "Your IP address has been automatically blocked because it was used by another user, who was blocked by $1.\nThe reason given is:\n\n:<em>$2</em>\n\n* Start of block: $8\n* Expiry of block: $6\n* Intended blockee: $7\n\nYou may contact $1 or one of the other [[{{MediaWiki:Grouppage-sysop}}|administrators]] to discuss the block.\n\nNote that you may not use the \"email this user\" feature unless you have a valid email address registered in your [[Special:Preferences|user preferences]] and you have not been blocked from using it.\n\nYour current IP address is $3, and the block ID is #$5.\nPlease include all above details in any queries you make.",
"loginreqlink": "log in",
"noarticletext": "There is currently no text in this page.\nYou can [[Special:Search/{{PAGENAME}}|search for this page title]] in other pages,\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} search the related logs],\nor [{{fullurl:{{FULLPAGENAME}}|action=edit}} create this page]</span>.",
"boteditletter": "b",
"rc-change-size-new": "$1 {{PLURAL:$1|byte|bytes}} after change",
"recentchangeslinked-toolbox": "Related changes",
- "recentchangeslinked-summary": "This is a list of changes made recently to pages linked from a specified page (or to members of a specified category).\nPages on [[Special:Watchlist|your watchlist]] are <strong>bold</strong>.",
+ "recentchangeslinked-summary": "Enter a page name to see changes on the pages linked to or from that page. (To see members of a category, enter \"{{ns:category}}:Name of category\"). Changes to pages on [[Special:Watchlist|your Watchlist]] are highlighted in <strong>bold</strong>.",
"upload": "Upload file",
"license": "Licencing:",
"license-header": "Licencing",
"newpages": "New pages",
"allpagessubmit": "Go",
"listgrants-summary": "The following is a list of grants with their associated access to user rights. Users can authorise applications to use their account, but with limited permissions based on the grants the user gave to the application. An application acting on behalf of a user cannot actually use rights that the user does not have however.\nThere may be [[{{MediaWiki:Listgrouprights-helppage}}|additional information]] about individual rights.",
+ "emailuser": "E-mail this user",
"wlshowhidecategorization": "page categorisation",
"rollbacklink": "rollback",
"sessionfailure": "There seems to be a problem with your login session;\nthis action has been cancelled as a precaution against session hijacking.\nGo back to the previous page, reload that page and then try again.",
"tooltip-t-whatlinkshere": "A list of all wiki pages that link here",
"tooltip-t-recentchangeslinked": "Recent changes in pages linked from this page",
"tooltip-feed-atom": "Atom feed for this page",
+ "tooltip-t-emailuser": "Send an e-mail to {{GENDER:$1|this user}}",
"tooltip-t-upload": "Upload files",
"tooltip-t-specialpages": "A list of all special pages",
"tooltip-t-print": "Printable version of this page",
"passwordpolicies-policy-passwordcannotmatchusername": "La contraseña no puede ser la misma que el nombre de usuario",
"passwordpolicies-policy-passwordcannotmatchblacklist": "La contraseña no puede coincidir con la lista de contraseñas específicamente prohibidas",
"passwordpolicies-policy-maximalpasswordlength": "La contraseña no puede tener más de $1 {{PLURAL:$1|caracter|caracteres}}",
- "passwordpolicies-policy-passwordcannotbepopular": "La contraseña no puede encontrarse {{PLURAL:$1|en la lista|en las $1 listas}} de contraseñas populares"
+ "passwordpolicies-policy-passwordcannotbepopular": "La contraseña no puede {{PLURAL:$1|ser la contraseña más popular|encontrarse en la lista de $1 contraseñas populares}}"
}
"permanentlink": "Lotura finkoa",
"permanentlink-revid": "Berrikuspen IDa",
"permanentlink-submit": "Berrikusketara joan",
- "dberr-problems": "Barkatu! Webgune honek zailtasun teknikoak jasaten ari da.",
+ "dberr-problems": "Barkatu! Webgune hau zailtasun teknikoak izaten ari da.",
"dberr-again": "Saiatu pare bat minutu itxaroten edo kargatu ezazu orrialdea berriro.",
"dberr-info": "($1: Ezin da datu-basera konektatu)",
"dberr-info-hidden": "(Ezin da konektatu datu-basera)",
"version-specialpages": "Pages spéciales",
"version-parserhooks": "Greffons de l'analyseur syntaxique",
"version-variables": "Variables",
- "version-editors": "Contributeurs",
+ "version-editors": "Éditeurs",
"version-antispam": "Prévention du pollupostage",
"version-other": "Divers",
"version-mediahandlers": "Manipulateurs de médias",
"index-category": "અનુક્રમણિકા બનાવેલા પાનાં",
"noindex-category": "અનુક્રમણિકા નહીં બનાવેલા પાનાં",
"broken-file-category": "ફાઇલોની ત્રૂટક કડીઓવાળાં પાનાં",
+ "categoryviewer-pagedlinks": "($1) ($2)",
+ "category-header-numerals": "$1–$2",
"about": "વિષે",
"article": "લેખનું પાનું",
"newwindow": "(નવા પાનામાં ખુલશે)",
"versionrequired": "મીડીયાવિકિનું $1 સંસ્કરણ જરૂરી",
"versionrequiredtext": "આ પાનાના વપરાશ માટે મીડિયાવિકિનું $1 સંસ્કરણ જરૂરી.\n\nજુઓ [[Special:Version|સંસ્કરણ પાનું]].",
"ok": "મંજૂર",
+ "pagetitle": "$1 - {{SITENAME}}",
+ "pagetitle-view-mainpage": "{{SITENAME}}",
+ "backlinksubtitle": "← $1",
"retrievedfrom": "\"$1\" થી મેળવેલ",
"youhavenewmessages": "{{PLURAL:$3|તમારી પાસે}} $1 ($2).",
"youhavenewmessagesfromusers": "{{PLURAL:$4|આપ}}ને માટે {{PLURAL:$3|અન્ય સભ્ય|$3 અન્ય સભ્યો}} તરફથી $1 છે. ($2).",
"site-atom-feed": "$1 એટમ ફીડ",
"page-rss-feed": "\"$1\" RSS ફીડ",
"page-atom-feed": "\"$1\" એટમ ફીડ",
+ "feed-atom": "ઍટમ",
+ "feed-rss": "RSS",
"red-link-title": "$1 (પાનું અસ્તિત્વમાં નથી)",
"sort-descending": "ઉતરતા ક્રમમાં ગોઠવો",
"sort-ascending": "ચડતા ક્રમમાં ગોઠવો",
"nosuchusershort": "\"$1\" નામનો કોઇ સભ્ય નથી, તમારી જોડણી તપાસો.",
"nouserspecified": "તમારે સભ્ય નામ દર્શાવવાની જરૂર છે.",
"login-userblocked": "આ યુઝર પ્રતિબંધિત છે. પ્રવેશ વર્જીત.",
- "wrongpassword": "તમà«\87 લàª\96à«\87લà«\80 àª\97à«\81પà«\8dત સàª\82àª\9cà«\8dàª\9eા àª\96à«\8bàª\9fà«\80 છે.\nફરીથી પ્રયત્ન કરો.",
+ "wrongpassword": "àª\96à«\8bàª\9fà«\81àª\82 સàªà«\8dયનામ àª\85થવા àª\97à«\81પà«\8dત સàª\82àª\9cà«\8dàª\9eા (પાસવરà«\8dડâ\80\8c) દાàª\96લ àª\95રà«\87 છે.\nફરીથી પ્રયત્ન કરો.",
"wrongpasswordempty": "તમે ગુપ્ત સંજ્ઞા લખવાનું ભુલી ગયા લાગો છો.\nફરીથી પ્રયત્ન કરો.",
"passwordtooshort": "ગુપ્ત સંજ્ઞામાં ઓછામાં {{PLURAL:$1|ઓછો એક અક્ષર હોવો |ઓછા $1 અક્ષર હોવા}} જોઇએ.",
+ "passwordtoolong": "ગુપ્ત સંજ્ઞા (પાસવર્ડ) {{PLURAL:$1|1 અક્ષર|$1 અક્ષરો}} કરતા લાંબો રાખી શકાતો નથી.",
"password-name-match": "તમારી ગુપ્તસંજ્ઞા તમારા સભ્યનામ કરતાં અલગ જ હોવી જોઇએ.",
"password-login-forbidden": "આ સભ્યનામ અને ગુપ્તસંજ્ઞા વાપરવા પર પ્રતિબંધ છે.",
"mailmypassword": "પાસવર્ડ ફરી ગોઠવો",
"ancientpages": "સૌથી જૂનાં પાનાં",
"move": "નામ બદલો",
"movethispage": "આ પાનું ખસેડો",
- "unusedimagestext": "નà«\80àª\9aà«\87નà«\80 ફાàª\87લà«\8b àª\85સà«\8dતિતà«\8dવમાàª\82 તà«\8b àª\9bà«\87 પણ àª\95à«\8bàª\87 પાના પર તà«\87નà«\8b àª\89પયà«\8bàª\97 થયà«\87લ નથà«\80.\nàª\95à«\8dરà«\8dપયા નà«\8bàª\82ધ લà«\87àª\96à«\8b àª\95à«\87 àª\86 ફાàª\87લનà«\87 àª\85નà«\8dય વà«\87બસાàª\87àª\9fà«\8b સà«\80ધા URL ના માધà«\8dયમ દà«\8dવારા વાપરà«\80 શàª\95à«\87 àª\9bà«\87 àª\85નà«\87 àª\95à«\8bàª\87 પણ àª\89પયà«\8bàª\97 સિવાય àª\98ણà«\80 ફાàª\87લà«\8b àª\85હà«\80àª\82 યાદિમાં હોઇ શકે.",
+ "unusedimagestext": "નà«\80àª\9aà«\87નà«\80 ફાàª\87લà«\8b àª\85સà«\8dતિતà«\8dવમાàª\82 àª\9bà«\87 પરàª\82તà«\81 àª\95à«\8bàª\87 પાનાàª\82 પર તà«\87નà«\8b àª\89પયà«\8bàª\97 થયà«\87લ નથà«\80.\nàª\95à«\83પા àª\95રà«\80 નà«\8bàª\82ધ લà«\87શà«\8b àª\95à«\87 àª\86 ફાàª\87લનà«\87 àª\85નà«\8dય વà«\87બસાàª\87àª\9fà«\8b સà«\80ધા URLના માધà«\8dયમ દà«\8dવારા વાપરà«\80 શàª\95à«\87 àª\9bà«\87 àª\85નà«\87 àª\95à«\8bàª\87 પણ àª\89પયà«\8bàª\97 સિવાય àª\98ણà«\80 ફાàª\87લà«\8b àª\85હà«\80àª\82 યાદà«\80માં હોઇ શકે.",
"unusedcategoriestext": "નીચેના શ્રેણી પાના છે પણા કોઈ લેખ આનો ઉપયોગ કરતાં નથી",
"notargettitle": "કોઇ લક્ષ્ય નથી",
"notargettext": "આ ક્રિયા જેના પર કરવાની છે તે સભ્ય કે પાનાની માહિતી તમે પૂરી પાડી નથી",
"viewdeletedpage": "הצגה של דפים מחוקים",
"undeletepagetext": "{{PLURAL:$1|הדף שלהלן נמחק, אך הוא עדיין בארכיון וניתן לשחזר אותו|הדפים שלהלן נמחקו, אך הם עדיין בארכיון וניתן לשחזר אותם}}.\nייתכן שהארכיון ינוקה מעת לעת.",
"undelete-fieldset-title": "שחזור גרסאות",
- "undeleteextrahelp": "×\9b×\93×\99 ×\9cש×\97×\96ר ×\90ת ×\94×\99ס×\98×\95ר×\99×\99ת ×\94×\92רס×\90×\95ת ×\94×\9e×\9c×\90×\94 ש×\9c ×\94×\93×£, ×\90×\9c {{GENDER:|תס×\9e×\9f|תס×\9e× ×\99|תס×\9e× ×\95}} ש×\95×\9d ת×\99×\91ת ס×\99×\9e×\95×\9f; פש×\95×\98 {{GENDER:|×\9c×\97×¥|×\9c×\97צ×\99|×\9c×\97צ×\95}} ×¢×\9c <strong>{{int:undeletebtn}}</strong>.\n×\9b×\93×\99 ×\9cש×\97×\96ר ×\92רס×\90×\95ת ×\9eס×\95×\99×\9e×\95ת ×\91×\9c×\91×\93, {{GENDER:|ס×\9e×\9f|ס×\9e× ×\99|ס×\9e× ×\95}} ×\90ת ×\94×\92רס×\90×\95ת ש{{GENDER:|×\91רצ×\95× ×\9a|×\91רצ×\95× ×\9a|×\91רצ×\95× ×\9b×\9d}} ×\9cש×\97×\96ר ×\95×\9c×\90×\97ר ×\9e×\9b×\9f {{GENDER:|×\9c×\97×¥|×\9c×\97צ×\99|×\9c×\97צ×\95}} על <strong>{{int:undeletebtn}}</strong>.",
+ "undeleteextrahelp": "×\9b×\93×\99 ×\9cש×\97×\96ר ×\90ת ×\94×\99ס×\98×\95ר×\99×\99ת ×\94×\92רס×\90×\95ת ×\94×\9e×\9c×\90×\94 ש×\9c ×\94×\93×£, ×\99ש ×\9c×\94ש×\90×\99ר ×\90ת ×\9b×\9c ת×\99×\91×\95ת ×\94ס×\99×\9e×\95×\9f ר×\99ק×\95ת ×\95×\9c×\9c×\97×\95×¥ ×¢×\9c <strong>{{int:undeletebtn}}</strong>.\n×\9b×\93×\99 ×\9cש×\97×\96ר ×\92רס×\90×\95ת ×\9eס×\95×\99×\9e×\95ת ×\91×\9c×\91×\93, ×\99ש ×\9cס×\9e×\9f ×\90ת ×\94×\92רס×\90×\95ת שתש×\95×\97×\96×¨× ×\94 ×\95×\9c×\90×\97ר ×\9e×\9b×\9f ×\9c×\9c×\97×\95×¥ על <strong>{{int:undeletebtn}}</strong>.",
"undeleterevisions": "{{PLURAL:$1|גרסה אחת נמחקה|$1 גרסאות נמחקו}}",
- "undeletehistory": "×\90×\9d {{GENDER:|תש×\97×\96ר|תש×\97×\96ר×\99|תש×\97×\96ר×\95}} ×\90ת ×\94×\93×£, ×\94×\92רס×\90×\95ת ×\99ש×\95×\97×\96ר×\95 ×\9c×\94×\99ס×\98×\95ר×\99×\99ת ×\94ש×\99× ×\95×\99×\99×\9d ש×\9c×\95.\n×\90×\9d ×\94×\93×£ ×\94×\96×\94 × ×\9e×\97ק ×\91×¢×\91ר ×\95×\9c×\90×\97ר ×\9e×\9b×\9f × ×\95צר ×\9e×\97×\93ש, ×\94×\92רס×\90×\95ת ש{{GENDER:|תש×\97×\96ר|תש×\97×\96ר×\99|תש×\97×\96ר×\95}} ×\99×\9e×\95×\96×\92×\95 ×\9c×\94×\99ס×\98×\95ר×\99×\99ת ×\94ש×\99× ×\95×\99×\99×\9d ש×\9c ×\94×\93×£ ×\95×\99×\95פ×\99×¢×\95 ×\91ת×\95ר ×\94×\92רס×\90×\95ת ×\94×\99×©× ×\95ת ×\91×\99×\95תר ש×\9c×\95.",
+ "undeletehistory": "ש×\97×\96×\95ר ×\94×\93×£ ×\99×\92ר×\95×\9d ×\9c×\9b×\9a ש×\94×\92רס×\90×\95ת ש×\9c×\95 תש×\95×\97×\96×¨× ×\94 ×\95ת×\95×¤×¢× ×\94 ×\91×\94×\99ס×\98×\95ר×\99×\99ת ×\94ש×\99× ×\95×\99×\99×\9d ש×\9c ×\94×\93×£.\n×\90×\9d ×\94×\93×£ ×\94×\96×\94 × ×\9e×\97ק ×\91×¢×\91ר ×\95×\9c×\90×\97ר ×\9e×\9b×\9f × ×\95צר ×\9e×\97×\93ש ×\91×\90×\95ת×\95 ×\94ש×\9d, ×\94×\92רס×\90×\95ת ×\94×\9eש×\95×\97×\96ר×\95ת ת×\95×¤×¢× ×\94 ×\91ת×\95ר ×\94×\92רס×\90×\95ת ×\94×\99×©× ×\95ת ×\91×\99×\95תר.",
"undeleterevdel": "השחזור לא יכול להתבצע אם הגרסה האחרונה של הדף מחוקה או מוסתרת.\nבמקרה כזה, יש לבטל קודם את ההסתרה של הגרסה האחרונה.",
"undeletehistorynoadmin": "דף זה נמחק.\nהסיבה למחיקה מוצגת בתקציר שלמטה, וגם פרטים על המשתמשים שערכו את הדף לפני שהוא נמחק.\nהטקסט של הגרסאות הללו זמין למפעילי מערכת בלבד.",
"undelete-revision": "גרסה שנמחקה מהדף $1 (מ־$5, $4) מאת $3:",
- "undeleterevision-missing": "הגרסה שגויה או חסרה. ייתכן שמדובר בקישור שבור, או שהגרסה שוחזרה או הוסרה מהארכיון.",
+ "undeleterevision-missing": "הגרסה שגויה או חסרה.\nייתכן שמדובר בקישור שבור, או שהגרסה שוחזרה או הוסרה מהארכיון.",
"undeleterevision-duplicate-revid": "לא ניתן היה לשחזר {{PLURAL:$1|גרסה אחת|$1 גרסאות}}, כיוון ששדה <code>rev_id</code> {{PLURAL:$1|שלה|שלהן}} כבר נמצא בשימוש.",
"undelete-nodiff": "לא נמצאה גרסה קודמת.",
"undeletebtn": "שחזור",
"undeleteinvert": "הפיכת הבחירה",
"undeletecomment": "סיבה:",
"cannotundelete": "השחזור (או חלק ממנו) נכשל:\n$1",
- "undeletedpage": "<strong>×\94×\93×£ $1 ש×\95×\97×\96ר</strong>\n\nר×\90×\95 ×\90ת [[Special:Log/delete|×\99×\95×\9e×\9f ×\94×\9e×\97×\99ק×\95ת]] ×\9cרש×\99×\9e×\94 ש×\9c ×\94×\9e×\97×\99ק×\95ת ×\95×\94ש×\97×\96×\95ר×\99×\9d ש×\91×\95צע×\95 ×\9c×\90×\97ר×\95× ×\94.",
- "undelete-header": "{{GENDER:|ראה|ראי|ראו}} את [[Special:Log/delete|יומן המחיקות]] לרשימה של דפים שנמחקו לאחרונה.",
+ "undeletedpage": "<strong>×\94×\93×£ $1 ש×\95×\97×\96ר</strong>\n\nרש×\99×\9eת ×\94×\9e×\97×\99ק×\95ת ×\95×\94ש×\97×\96×\95ר×\99×\9d ש×\91×\95צע×\95 ×\9c×\90×\97ר×\95× ×\94 ×\9e×\95פ×\99×¢×\94 ×\91[[Special:Log/delete|×\99×\95×\9e×\9f ×\94×\9e×\97×\99ק×\95ת]].",
+ "undelete-header": "רשימת הדפים שנמחקו לאחרונה מופיעה ב[[Special:Log/delete|יומן המחיקות]].",
"undelete-search-title": "חיפוש דפים שנמחקו",
"undelete-search-box": "חיפוש דפים שנמחקו",
"undelete-search-prefix": "הצגת דפים החל מ:",
"undelete-filename-mismatch": "לא ניתן לשחזר את גרסת הקובץ מ־$1: שם הקובץ לא תואם.",
"undelete-bad-store-key": "לא ניתן לשחזר את גרסת הקובץ מ־$1: הקובץ היה חסר לפני המחיקה.",
"undelete-cleanup-error": "שגיאת בעת מחיקת קובץ הארכיון \"$1\" שאינו בשימוש.",
- "undelete-missing-filearchive": "שחזור קובץ הארכיון שמספרו $1 נכשל כיוון שהוא אינו בבסיס הנתונים. ייתכן שהוא כבר שוחזר.",
+ "undelete-missing-filearchive": "שחזור קובץ הארכיון שמספרו $1 נכשל כיוון שהוא אינו בבסיס הנתונים.\nייתכן שהוא כבר שוחזר.",
"undelete-error": "שגיאה בשחזור דף",
"undelete-error-short": "שגיאה בשחזור הקובץ: $1",
"undelete-error-long": "שגיאות שאירעו בעת שחזור הקובץ:\n\n$1",
"expansion-depth-exceeded-category": "Paginas in que le profunditate de expansion excede le limite",
"expansion-depth-exceeded-category-desc": "Le pagina excede le profunditate de expansion maxime.",
"expansion-depth-exceeded-warning": "Le profunditate de expansion in iste pagina excede le limite",
- "parser-unstrip-loop-warning": "Bucla de \"unstrip\" detegite",
- "unstrip-depth-warning": "Limite de recursion de \"unstrip\" excedite ($1)",
+ "parser-unstrip-loop-warning": "Bucla detegite in le function \"unstrip\"",
+ "unstrip-depth-warning": "Limite de profunditate de \"unstrip\" excedite ($1)",
+ "unstrip-depth-category": "Paginas con recursion excessive de \"unstrip\"",
+ "unstrip-size-warning": "Limite de dimension de \"unstrip\" excedite ($1)",
+ "unstrip-size-category": "Paginas con dimension excessive de \"unstrip\"",
"converter-manual-rule-error": "Error detegite in le regula manual de conversion de lingua",
"undo-success": "Le modification pote esser disfacite.\nPer favor controla le comparation infra pro verificar que tu vole facer isto, e postea salveguarda le modificationes infra pro assi disfacer le modification.",
"undo-failure": "Le modification non poteva esser annullate a causa de conflicto con modificationes intermedie.",
"prefs-watchlist-edits": "Numero maxime de modificationes a monstrar in le observatorio:",
"prefs-watchlist-edits-max": "Numero maxime: 1000",
"prefs-watchlist-token": "Indicio pro le observatorio:",
- "prefs-watchlist-managetokens": "Gerer indicios",
+ "prefs-watchlist-managetokens": "Gerer claves",
"prefs-misc": "Misc",
"prefs-resetpass": "Cambiar contrasigno",
"prefs-changeemail": "Cambiar o remover adresse de e-mail",
"stub-threshold-disabled": "Disactivate",
"recentchangesdays": "Numero de dies a monstrar in modificationes recente:",
"recentchangesdays-max": "(non plus de $1 {{PLURAL:$1|die|dies}})",
- "recentchangescount": "Numero de modificationes a monstrar per predefinition:",
- "prefs-help-recentchangescount": "Isto include modificationes recente, historias de paginas, e registros.",
+ "recentchangescount": "Numero predefinite de modificationes a monstrar in le lista de modificationes recente, in le historias de paginas e in le registros:",
+ "prefs-help-recentchangescount": "Numero maxime: 1000",
"prefs-help-watchlist-token2": "Isto es le clave secrete pro le syndication web de tu observatorio.\nOmne persona qui lo cognosce pote leger tu observatorio, dunque, non divide lo.\nIn caso de necessitate, [[Special:ResetTokens|clicca hic pro reinitialisar lo]].",
"prefs-help-tokenmanagement": "Tu pote vider e reinitialisar le clave secrete pro tu conto que pote acceder al aggregator Web de tu observatorio. Tote persona que cognosce le clave potera leger tu observatorio, dunque non divulga lo.",
"savedprefs": "Tu preferentias ha essite confirmate.",
"default": "predefinite",
"prefs-files": "Files",
"prefs-custom-css": "CSS personalisate",
+ "prefs-custom-json": "JSON personalisate",
"prefs-custom-js": "JS personalisate",
- "prefs-common-config": "CSS/JS commun a tote le apparentias:",
+ "prefs-common-config": "CSS/JSON/JavaScript commun a tote le apparentias:",
"prefs-reset-intro": "Iste pagina es pro reinitialisar tu preferentias al valores predefinite del sito.\nLe operation non pote esser disfacite.",
"prefs-emailconfirm-label": "Confirmation del e-mail:",
"youremail": "E-mail:",
"prefs-dateformat": "Formato de data",
"prefs-timeoffset": "Differentia de tempore",
"prefs-advancedediting": "Optiones general",
+ "prefs-developertools": "Instrumentos pro disveloppatores",
"prefs-editor": "Editor",
"prefs-preview": "Previsualisation",
"prefs-advancedrc": "Optiones avantiate",
"right-editcontentmodel": "Modificar le modello de contento de un pagina",
"right-editinterface": "Modificar le interfacie de usator",
"right-editusercss": "Modificar le files CSS de altere usatores",
+ "right-edituserjson": "Modificar le files JSON de altere usatores",
"right-edituserjs": "Modificar le files JS de altere usatores",
"right-editmyusercss": "Modificar le proprie files CSS de usator",
- "right-editmyuserjs": "Modificar le proprie files JavaScript de usator",
+ "right-editmyuserjson": "Modificar le files JSON del proprie usator",
+ "right-editmyuserjs": "Modificar le files JavaScript del proprie usator",
"right-viewmywatchlist": "Vider le proprie observatorio",
"right-editmywatchlist": "Modificar le proprie observatorio. Remarca que alcun actiones totevia adde paginas mesmo sin iste derecto.",
"right-viewmyprivateinfo": "Vider le proprie datos private (p.ex. adresse de e-mail, nomine real)",
"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/JavaScript de usatores",
- "grant-editmycssjs": "Modificar le CSS/JavaScript del proprie usator",
+ "grant-editinterface": "Modificar le spatio de nomines MediaWiki e le CSS/JSON/JavaScript de usatores",
+ "grant-editmycssjs": "Modificar le CSS/JSON/JavaScript del proprie usator",
"grant-editmyoptions": "Modificar tu preferentias de usator",
"grant-editmywatchlist": "Modificar tu observatorio",
"grant-editpage": "Modificar paginas existente",
"rcfilters-filter-humans-label": "Persona (non robot)",
"rcfilters-filter-humans-description": "Modificationes facite per esseres human.",
"rcfilters-filtergroup-reviewstatus": "Stato de revision",
+ "rcfilters-filter-reviewstatus-unpatrolled-description": "Modificationes non marcate como patruliate, manual- o automaticamente.",
"rcfilters-filter-reviewstatus-unpatrolled-label": "Non patruliate",
+ "rcfilters-filter-reviewstatus-manual-description": "Modificationes manualmente marcate como patruliate.",
+ "rcfilters-filter-reviewstatus-manual-label": "Patruliate manualmente",
+ "rcfilters-filter-reviewstatus-auto-description": "Modificationes per usatores avantiate cuje travalio se marca automaticamente como patruliate.",
+ "rcfilters-filter-reviewstatus-auto-label": "Autopatruliate",
"rcfilters-filtergroup-significance": "Importantia",
"rcfilters-filter-minor-label": "Modificationes minor",
"rcfilters-filter-minor-description": "Modificationes que le autor ha marcate como minor.",
"deadendpages": "Paginas sin exito",
"deadendpagestext": "Le sequente paginas non ha ligamines a altere paginas in {{SITENAME}}.",
"protectedpages": "Paginas protegite",
+ "protectedpages-filters": "Filtros:",
"protectedpages-indef": "Solmente protectiones infinite",
"protectedpages-summary": "Iste pagina lista paginas existente que es actualmente protegite. Pro un lista de titulos protegite contra creation, vide [[{{#special:ProtectedTitles}}|{{int:protectedtitles}}]].",
"protectedpages-cascade": "Protectiones in cascada solmente",
"protectedtitles-submit": "Monstrar titulos",
"listusers": "Lista de usatores",
"listusers-editsonly": "Monstrar solmente usatores con modificationes",
+ "listusers-temporarygroupsonly": "Monstrar solmente usatores in gruppos temporari",
"listusers-creationsort": "Ordinar per data de creation",
"listusers-desc": "Ordinar in senso descendente",
"usereditcount": "$1 {{PLURAL:$1|modification|modificationes}}",
"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-templated-parameter-reason": "Iste [[Special:ApiHelp/main#main/templatedparams|parametro de patrono]] es offerite a base del {{PLURAL:$1|valor|valores}} of $2.",
"apisandbox-deprecated-parameters": "Parametros obsolescente",
"apisandbox-fetch-token": "Auto-reimpler le indicio",
+ "apisandbox-add-multi": "Adder",
"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",
"whatlinkshere": "Paginas ligate a iste",
"whatlinkshere-title": "Paginas con ligamines verso $1",
"whatlinkshere-page": "Pagina:",
- "linkshere-2": "Le sequente paginas contine ligamines a '''$1''':",
- "nolinkshere-2": "Nulle pagina contine un ligamine verso '''$1'''.",
- "nolinkshere-ns-2": "Nulle pagina liga a '''$1''' in le spatio de nomines seligite.",
+ "linkshere-2": "Le sequente paginas contine ligamines a <strong>$1</strong>:",
+ "nolinkshere-2": "Nulle pagina contine un ligamine verso <strong>$1</strong>.",
+ "nolinkshere-ns-2": "Nulle pagina liga a <strong>$1</strong> in le spatio de nomines seligite.",
"isredirect": "pagina de redirection",
"istemplate": "transclusion",
"isimage": "ligamine al file",
"fix-double-redirects": "Actualisar tote le redirectiones que puncta verso le titulo original",
"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:",
+ "semiprotectedpagemovewarning": "<strong>Nota:</strong> Iste pagina ha essite protegite de sorta que solmente usatores autoconfirmate pote renominar lo. Le ultime entrata del registro es fornite hic infra pro referentia:",
"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",
"thumbnail_dest_directory": "Impossibile crear directorio de destination",
"thumbnail_image-type": "typo de imagine non supportate",
"thumbnail_gd-library": "le configuration del bibliotheca GD es incomplete: manca le function $1",
+ "thumbnail_image-size-zero": "Le dimension del file de imagine pare esser zero.",
"thumbnail_image-missing": "le file pare mancar: $1",
"thumbnail_image-failure-limit": "Il ha habite recentemente troppo de tentativas fallite ($1 o plus) de generar iste miniatura. Per favor reproba plus tarde.",
"import": "Importar paginas",
"interlanguage-link-title": "$1 (in $2)",
"common.css": "/* Le CSS placiate hic se applicara a tote le stilos */",
"print.css": "/* Le CSS placiate hic influentiara le apparentia del paginas imprimite */",
+ "common.json": "/* Omne JSON hic essera cargate pro tote le usatores a cata cargamento de pagina. */",
"common.js": "/* Omne JavaScript hic se executara pro tote le usatores a cata cargamento de pagina. */",
"anonymous": "{{PLURAL:$1|Usator|Usatores}} anonyme de {{SITENAME}}",
"siteuser": "Usator $1 de {{SITENAME}}",
"watchlistedit-clear-titles": "Titulos:",
"watchlistedit-clear-submit": "Rader le observatorio (isto es permanente!)",
"watchlistedit-clear-done": "Tu observatorio ha essite radite.",
+ "watchlistedit-clear-jobqueue": "Tu observatorio es in curso de vacuation. Isto pote prender un certe tempore.",
"watchlistedit-clear-removed": "{{PLURAL:$1|1 titulo|$1 titulos}} ha essite removite:",
"watchlistedit-too-many": "Il ha troppo de paginas pro monstrar los hic.",
"watchlisttools-clear": "Rader le observatorio",
"version-specialpages": "Paginas special",
"version-parserhooks": "Uncinos del analysator syntactic",
"version-variables": "Variabiles",
+ "version-editors": "Editores",
"version-antispam": "Prevention de spam",
"version-other": "Altere",
"version-mediahandlers": "Executores de media",
"limitreport-templateargumentsize-value": "$1/$2 {{PLURAL:$2|byte|bytes}}",
"limitreport-expansiondepth": "Maxime profunditate de expansion",
"limitreport-expensivefunctioncount": "Numero de functiones analysator costose",
+ "limitreport-unstrip-depth": "Profunditate de recursion de \"unstrip\"",
+ "limitreport-unstrip-size": "Dimension de \"unstrip\" post expansion",
+ "limitreport-unstrip-size-value": "$1/$2 {{PLURAL:$2|byte|bytes}}",
"expandtemplates": "Expander patronos",
"expand_templates_intro": "Iste pagina special prende wikitexto e expande recursivemente tote le patronos in illo.\nIllo expande etiam le functiones del analysator syntactic como\n<code><nowiki>{{</nowiki>#language:…}}</code>, e variabiles como\n<code><nowiki>{{</nowiki>CURRENTDAY}}</code>.\nDe facto, illo expande quasi toto inter accolladas duple.",
"expand_templates_title": "Titulo de contexto, pro {{FULLPAGENAME}} etc.:",
"unlinkaccounts-success": "Le conto ha essite disligate.",
"authenticationdatachange-ignored": "Le cambiamento del datos de authentication non ha succedite. Pote esser que nulle fornitor ha essite configurate?",
"userjsispublic": "Nota ben: Subpaginas JavaScript non debe continer datos confidential perque altere usatores pote vider los.",
+ "userjsonispublic": "Nota ben: Subpaginas JSON non debe continer datos confidential perque altere usatores pote vider los.",
"usercssispublic": "Nota ben: Subpaginas CSS non debe continer datos confidential perque altere usatores pote vider los.",
"restrictionsfield-badip": "Adresse o intervallo IP non valide: $1",
"restrictionsfield-label": "Intervallos IP permittite:",
"pagedata-title": "Datos de pagina",
"pagedata-text": "Iste pagina forni un interfacie de datos a paginas. Forni le titulo del pagina in le URL, usante le syntaxe de subpaginas.\n* Le negotiation de contento depende del capite \"Accept\" de tu cliente. Isto significa que le datos del pagina essera fornite in le formato que tu cliente prefere.",
"pagedata-not-acceptable": "Nulle formato correspondente trovate. Typos MIME supportate: $1",
- "pagedata-bad-title": "Titulo invalide: $1."
+ "pagedata-bad-title": "Titulo invalide: $1.",
+ "unregistered-user-config": "Pro motivos de securitate, subpaginas de usator con JavaScript, CSS e JSON non pote esser cargate pro usatores non registrate.",
+ "passwordpolicies": "Politicas de contrasigno",
+ "passwordpolicies-summary": "Isto es un lista de politicas de contrasigno in vigor pro le gruppos de usatores definite in iste wiki.",
+ "passwordpolicies-group": "Gruppo",
+ "passwordpolicies-policies": "Politicas",
+ "passwordpolicies-policy-minimalpasswordlength": "Le contrasigno debe continer al minus $1 {{PLURAL:$1|character|characteres}}",
+ "passwordpolicies-policy-minimumpasswordlengthtologin": "Le contrasigno debe continer al minus $1 {{PLURAL:$1|character|characteres}} pro poter aperir session",
+ "passwordpolicies-policy-passwordcannotmatchusername": "Le contrasigno non pote esser identic al nomine de usator",
+ "passwordpolicies-policy-passwordcannotmatchblacklist": "Le contrasigno non pote corresponder a contrasignos in le lista nigre",
+ "passwordpolicies-policy-maximalpasswordlength": "Le contrasigno debe continer minus de $1 {{PLURAL:$1|character|characteres}}",
+ "passwordpolicies-policy-passwordcannotbepopular": "Le contrasigno non pote esser {{PLURAL:$1|le contrasigno le plus popular|in le lista de $1 contrasignos popular}}"
}
"print": "Зарба тоха",
"view": "Хьажар",
"view-foreign": "Укх $1 сайта чу хьажа",
- "edit": "Ð\9dийÑ\81де",
+ "edit": "Тоае",
"edit-local": "Хувца локальни йоазонца сурт оттадар",
"create": "Хьакхолла",
"create-local": "ТIатоха локальни йоазонца сурт оттадар",
"newpage": "Керда оагӀув",
"talkpagelinktext": "дувца оттадар",
"specialpage": "ГIулакха оагӀув",
- "personaltools": "Ð\94оакÑ\8aаÑ\88Ñ\85оÑ\87Ñ\83н гÓ\80иÑ\80Ñ\81аш",
- "talk": "Ð\94Ñ\83вÑ\86а оÑ\82Ñ\82адар",
+ "personaltools": "Ð\94оакÑ\8aаÑ\88Ñ\85оÑ\87Ñ\83н кеÑ\87алаш",
+ "talk": "ЮвÑ\86ар",
"views": "Хьажараш",
- "toolbox": "Ð\93Ó\80иÑ\80Ñ\81аш",
+ "toolbox": "Ð\9aеÑ\87алаш",
"imagepage": "Файла оагIон бIаргтоха",
"mediawikipage": "Хьахьокха хоам бара оагIув",
"templatepage": "Лера оагIон бIаргтоха",
"viewhelppage": "Новкъостал эцар",
- "categorypage": "Ð\9aаÑ\82егоÑ\80ен оагIон бIаргтоха",
- "viewtalkpage": "Дувца оттадара бIаргтоха",
+ "categorypage": "Ð\9eагÓ\80аÑ\82а оагIонга бIаргтоха",
+ "viewtalkpage": "Дувцара оагIонга бIаргтоха",
"otherlanguages": "Кхыча меттаех",
"redirectedfrom": "($1 яха оагIув дIа-хьа хьожаяьй укхаза)",
"redirectpagesub": "ДIа-хьа хьожавара оагIув",
"cannotdelete-title": "ДIаяккха йиш яц «$1» яха оагIув",
"badtitle": "Мегаш йоаца цӀи",
"badtitletext": "Езаш йола оагӀон цӀи нийса яц, яьсса я, е харцахь йоалаяй меттий юкъера цIи е интервики цӀи. Иштта, цӀера юкъе оттаде мегаш доаца хьаракаш нийсаденна хила мегаш да.",
- "viewsource": "Хьажар",
+ "viewsource": "Хьажа",
"viewsource-title": "$1 яхача оагӏон чухьнахьарча текстага хьажар",
"actionthrottled": "Сухала доазув дар",
"protectedpagetext": "Ер оагIув лораяь я цу тIа хувцамаш дергдоацаш.",
"viewsourcetext": "Укх оагIон чухьнахьарча текстах бIаргатоха а, цунах кеп яьккха а, йиш я хьа.",
"virus-unknownscanner": "йовзанза антивирус:",
- "welcomeuser": "Ð\9cаÑ\8cÑ\80Ñ\88а воагIалва, доакÑ\8aаÑ\88Ñ\85о $1!",
+ "welcomeuser": "Марша воагIалва, доакъашхо $1!",
"yourname": "Дагара йоазон цIи:",
"userlogin-yourname": "Доакъашхочун цӀи",
"userlogin-yourname-ph": "Iочуязъе хьай дагара йоазон цӀи",
"createacct-yourpasswordagain": "Бакъйе пароль",
"createacct-yourpasswordagain-ph": "Кхы цхьаькхаза Ӏочуязъе пароль",
"userlogin-remembermypassword": "Ражача чувиса",
- "yourdomainname": "Ð¥Ñ\8cа нана-Ñ\86Iа:",
+ "yourdomainname": "Ð¥Ñ\8cа домен:",
"login": "Чувала/яла",
"nav-login-createaccount": "Шоаш довзийтар / Дагара йоазув кхоллар",
"logout": "Аравала/яла",
"createacct-benefit-body3": "ТӀехьарча хана хинна {{PLURAL:$1|доакъашхо|доакъашхой}}",
"badretype": "Оаша Iочуяьздаь къайладIоагIий цIераш цхьантара яц.",
"loginerror": "Доакъашхо вовзара гIалат",
- "mailmypassword": "Ð\9aÑ\8aайладIоагIа тIеракхоссар",
- "mailerror": "Каьхат дIадохьиййташ гӀалат хилар: $1",
- "emailconfirmlink": "Бакъде хьа электронни пошта адрес",
+ "mailmypassword": "Ð\9fаÑ\80олÑ\8c тIеракхоссар",
+ "mailerror": "Каьхат дIадохьийтача хана гӀалат хилар: $1",
+ "emailconfirmlink": "Бакъде хьай электронни пошта цIай",
"loginlanguagelabel": "Мотт: $1",
"pt-login": "Чувала/яла",
"pt-login-button": "Чувала/яла",
"botpasswords-label-create": "Хьакхолла",
"botpasswords-label-update": "Кердадаккха",
"botpasswords-label-cancel": "Эшац",
- "botpasswords-label-delete": "ДIадаккха",
+ "botpasswords-label-delete": "ДIаяккха",
"botpasswords-label-resetpassword": "Пароль тIеракхоссар",
"resetpass-submit-loggedin": "КъайладIоагӀа дӀахувца",
"resetpass-submit-cancel": "Эшац",
"diff-multi-otherusers": "(Укх {{PLURAL:$2|цхьан доакъашхочун|$2 доакъашхой}} \n{{PLURAL:$1|юккъера верси гайтаяц|юккъера версеш гайтаяц}})",
"searchresults": "Лахар чакхдоалаш корадаьр",
"searchresults-title": "«$1» лахар",
- "notextmatches": "Ð\9eагIонай Ñ\82екÑ\81Ñ\82аÑ\88Ñ\82а Ñ\8eкÑ\8aе цхьатара хилар дац",
+ "notextmatches": "Ð\9eагIоний Ñ\82екÑ\81Ñ\82аÑ\88Ñ\82а Ñ\87Ñ\83 цхьатара хилар дац",
"prevn": "{{PLURAL:$1|1=хьалхайогIар|хьалхайогIараш}} $1",
"nextn": "{{PLURAL:$1|1=тIехьайоагIар|тIехьайоагIараш}} $1",
"prevn-title": "{{PLURAL:$1|ХьалхадоагIа $1 дIаяздар}}",
"fileuploadsummary": "Лоаца сурт оттадар:",
"license": "Лицензи ялар:",
"license-header": "Лицензировани",
+ "listfiles-delete": "дӀаяккха",
"imgfile": "файл",
"listfiles": "Файлий хьаязъяьр",
"listfiles_date": "Ди",
"file-anchor-link": "Файл",
"filehist": "Файла истори",
"filehist-help": "Ди/ха долча IотIатоIае цу хана файл мишта хиннай хьажа йиш хуpгьйолаш",
+ "filehist-deleteone": "дӀаяккха",
"filehist-revert": "юхаяьккха",
"filehist-current": "xIанзара",
"filehist-datetime": "Ди/Ха",
"listgrouprights-namespaceprotection-namespace": "ЦIерий моттиг",
"emailuser": "Доакъашхочоа каьхат",
"usermessage-editor": "Системан дIакхоачадар",
- "watchlist": "Зем бара хьаязъяьр",
- "mywatchlist": "Зем бара хьаязъяьр",
+ "watchlist": "Зем",
+ "mywatchlist": "Зем",
"watchlistfor2": "Цунна $1 $2",
"addedwatchtext": "Статья «[[:$1]]» а, цун дувца оттадара оагIув а тIатехай хьа [[Special:Watchlist|зем бара хьаязъяьра]].",
"removedwatchtext": "Статья «[[:$1]]» а, иштта цун дувца оттадара оагIув а дIаяьккхай хьа [[Special:Watchlist|зем бара хьаязъяьр]] чура.",
"watching": "Зем бара хьаязъяьр чу тIатохар",
"unwatching": "Зем бара хьаязъяьр чура дIадаккхар",
"enotif_reset": "Белгалъе еррига оагӀонаш бӀаргтехача санна",
+ "enotif_impersonal_salutation": "{{grammar:genitive|{{SITENAME}}}} – доакъашхо",
"deletepage": "ДIаяккха оагIув",
+ "delete-confirm": "$1 — дӀаяккхар",
+ "delete-legend": "ДӀаяккхар",
"confirmdeletetext": "Оаш дIадийхад бIарчча дIадаккхар оагIон а (е сурта), цун деррига хувцара истори а. '''Дехар да''', бакъде шоай из бокъонца де безам болаш долга а, из дича хургдар кхеташ долга а, из дар укх [[{{MediaWiki:Policy-url}}|бокъонашца]] долга.",
"actioncomplete": "Ардам кхоачашдаьд",
"actionfailed": "Ардам кхоачашдаьдац",
"tags-active-yes": "XӀау",
"tags-active-no": "A",
"tags-edit": "нийсде",
+ "tags-delete": "дӀаяккха",
"tags-hitcount": "$1 {{PLURAL:$1|1=хувцам|хувцамаш}}",
"tags-create-submit": "Хьакхолла",
"compare-page1": "ЦхьоаллагIа оагIув",
"rcfilters-activefilters": "Agiva filtrili",
"rcfilters-advancedfilters": "Rafinita filtrili",
"rcfilters-limit-title": "Rezulti por montrar",
+ "rcfilters-limit-and-date-label": "$1 {{PLURAL:$1|modifikuro|modifikuri}}, $2",
"rcfilters-date-popup-title": "Quanto di tempo por serchar",
"rcfilters-days-title": "Recenta dii",
"rcfilters-hours-title": "Recenta hori",
"rcfilters-filter-user-experience-level-experienced-label": "Experta uzeri",
"rcfilters-filter-user-experience-level-experienced-description": "Plu kam 30 dii di agemeso e 500 redakti.",
"rcfilters-filter-humans-label": "Homala (ne 'bot')",
+ "rcfilters-filter-humans-description": "Redakturi kreita da homi.",
"rcfilters-filtergroup-significance": "Senco",
"rcfilters-filter-pageedits-label": "Redakti di pagini",
+ "rcfilters-filter-pageedits-description": "Redakturi en la kontenajo dil Wiki, diskuti, deskriptado di kategorii...",
"rcfilters-filter-newpages-label": "Kreado di pagini",
+ "rcfilters-filter-newpages-description": "Redakturi qui kreas nova pagini.",
"rcfilters-filter-categorization-label": "Modifiki di la kategorio",
"rcfilters-filter-logactions-label": "Agadi enrejistrata",
+ "rcfilters-filter-logactions-description": "Agadi dal administreri, kreado di konti, efaco di pagini, sendo di arkivi...",
"rcfilters-liveupdates-button": "Quika aktualigi",
"rcnotefrom": "Infre {{PLURAL:$5|esas la chanjo|esas la chanji}} de <strong>$3, $4</strong> (montrata til <strong>$1</strong>).",
"rclistfrom": "Montrar nova chanji startante de $3 $2",
"unusedimagestext": "La sequanta arkivi existas, ma ne esas enterigita en irga pagino.\nVoluntez remarkar ke altra ret-siti povus ligesar ad arkivo per direta URL, e do ol povus esar listizita hike malgre ke on aktive uzas lo.",
"notargettitle": "Ne esas vakua pagino",
"notargettext": "Vu ne definis en qua pagino agar ica funciono.",
+ "nopagetitle": "La pagino ne existas",
+ "nopagetext": "La pagino quon vu serchis ne existas.",
"pager-newer-n": "{{PLURAL:$1|plu nova 1|plu nova $1}}",
"pager-older-n": "{{PLURAL:$1|plu anciena 1|plu anciena $1}}",
"apihelp-no-such-module": "Modulo « $1 » ne esis trovita.",
"tags-delete-too-many-uses": "L'etiketo \"$1\" uzesas en plua kam $2 {{PLURAL:$2|revizo|revizi}}, do ol ne povas eskartesar.",
"tags-delete-warnings-after-delete": "L'etiketo \"$1\" efacesis, ma la sequanta {{PLURAL:$2|avizo|avizi}} renkontresis:",
"tags-activate-not-found": "L'etiketo \"$1\" ne existas.",
+ "dberr-problems": "Pardonez! Ica retopagino subisas teknikala problemi.",
+ "dberr-again": "Voluntez vartar kelka minuti, e riprobez acesar ol.",
+ "dberr-info": "(Ne povis acesar la datumaro: $1)",
+ "dberr-info-hidden": "(La datumaro ne esas disponebla)",
+ "dberr-outofdate": "Atencez ke l'indexi pri kontenaji povas esar antiquatra.",
"htmlform-reset": "Desfacar chanji",
"htmlform-selectorother-other": "Altra",
"htmlform-cloner-create": "Adjuntar plue",
"october-date": "Байсан $1",
"november-date": "Маййилик $1",
"december-date": "Тунлу $1",
+ "period-am": "ТБ",
+ "period-pm": "ТС",
"pagecategories": "{{PLURAL:$1|Категория|Категориялар}}",
"category_header": "\"$1\" категориядан сагьифалар",
"subcategories": "Субкатегориялар",
"jumpto": "Мунда гёчмек:",
"jumptonavigation": "навигация",
"jumptosearch": "излев",
+ "pool-errorunknown": "Белгисиз янгылыш",
"poolcounter-usage-error": "Къоллав хата: $1",
"aboutsite": "{{SITENAME}} гьакъында",
"aboutpage": "Project:Сыпатлав",
"helppage-top-gethelp": "Кёмек",
"mainpage": "Баш Сагьифа",
"mainpage-description": "Баш сагьифа",
+ "policy-url": "Project:Къайдалар",
"portal": "Бирлешив портал",
"portal-url": "Project:Бирлешив портал",
"privacy": "Энчилилик ёругъу",
"privacypage": "Project:Конфиденциаллыкъ сиясаты",
+ "badaccess": "Гириш хатасы",
"ok": "OK",
"retrievedfrom": "Чыкъмагъы — «$1»",
"youhavenewmessages": "{{PLURAL:$3|Сен алдынг}} $1 ($2).",
"confirmable-confirm": "{{GENDER:$1|сен}} аминмисен?",
"confirmable-yes": "Дюр",
"confirmable-no": "Ёкъ",
+ "viewdeleted": "Къарамакъмы $1?",
"feedlinks": "Агъыш",
+ "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": "Артывуна гёре тизмек",
"nstab-main": "Макъала",
"nstab-user": "Къоллавчу сагьифасы",
"nstab-special": "Хас сагьифа",
"nstab-help": "Кёмек сагьифа",
"nstab-category": "Категория",
"mainpage-nstab": "Баш сагьифа",
+ "nosuchaction": "Булай гьаракат ёкъ",
"nosuchspecialpage": "Олай хас сагьифасы ёкъдур",
"nospecialpagetext": "<strong>Сен талап этген хас сагьифа ёкъ.</strong>\n\nДурус хас сагьифалар булан тизме мунда: [[Special:SpecialPages|{{int:specialpages}}]].",
"error": "Хата",
+ "databaseerror-query": "Талап: $1",
"databaseerror-function": "Функция: $1",
"databaseerror-error": "Хата: $1",
+ "missingarticle-rev": "(тюрю № $1)",
+ "missingarticle-diff": "(Башгъалыгъы: $1, $2)",
"internalerror": "Ичдеги хата",
+ "internalerror_info": "Ичдеги хата: $1",
"badtitle": "Къыйышмайгъан ат",
"badtitletext": "Чакъырылгъан сагьифаны аты бузукъ эди, яда бош, яда тил-ара яда вики-ара байланывлары янгылыш кюйде берилген эди.\nБалики, атында бир-эки ярамайгъан гьарп берилген эди.",
"viewsource": "Кюрчю кодуна къарамакъ",
"viewsource-title": "$1 сагьифаны аслу текстине къарамакъ",
"viewsourcetext": "Бу сагьифаны аслу кодуна къарап ва ону кёплеп боласан.",
+ "welcomeuser": "Хош гединг, $1!",
+ "yourname": "Къоллавчу аты",
"userlogin-yourname": "Къоллавчу аты",
"userlogin-yourname-ph": "Гьисабынгны атын бер",
+ "yourpassword": "Чечил:",
"userlogin-yourpassword": "Чечил",
"userlogin-yourpassword-ph": "Чечилингни бер",
"createacct-yourpassword-ph": "Чечилингни бер",
"createacct-yourpasswordagain-ph": "Чечилингни янгыдан бер",
"userlogin-remembermypassword": "Мени къайытлы сакъламакъ",
"login": "Гирмек",
+ "logout": "Чыкъмакъ",
+ "userlogout": "Чыкъмакъ",
"userlogin-noaccount": "Бир бет ёкъму?",
"userlogin-joinproject": "{{SITENAME}} проектни ортакъчы болмакъ",
"createaccount": "Янгы бет этмек",
"userlogin-resetpassword-link": "Чечилингни унутгъанмысан?",
"userlogin-helplink2": "Гириш саялы кёмек",
+ "createacct-emailrequired": "Поч ерлешими",
"createacct-emailoptional": "Электрон почну ерлешими (гёнгюллю)",
"createacct-email-ph": "Электрон почну ерлешимин бер",
+ "createacct-another-email-ph": "Электрон почну ерлешимин бер",
+ "createacct-realname": "Герти ат (истесенг)",
+ "createacct-reason": "Себеп",
"createacct-submit": "Бетинг яса",
+ "createacct-another-submit": "Гьисап бет ачмакъ",
"createacct-benefit-heading": "{{SITENAME}} сени йимик адамланы ортакъ загьматы.",
"createacct-benefit-body1": "{{PLURAL:$1|тюзлев}}",
"createacct-benefit-body2": "{{PLURAL:$1|сагьифа|сагьифалар}}",
"pt-login-button": "Гирмек",
"pt-createaccount": "Янгы бет этмек",
"pt-userlogout": "Чыкъмакъ",
+ "changepassword": "Чечил алышдырыв",
+ "oldpassword": "Эсги чечил:",
+ "newpassword": "Янгы чечил:",
+ "botpasswords-label-create": "Яратмакъ",
+ "botpasswords-label-update": "Янгыртмакъ",
+ "botpasswords-label-cancel": "Гери алыв",
+ "botpasswords-label-delete": "Тайдырмакъ",
+ "botpasswords-label-resetpassword": "Чечилни янгыдан бегетмек",
+ "resetpass-submit-loggedin": "Чечил алышдырыв",
+ "resetpass-submit-cancel": "Гери алыв",
"passwordreset": "Чечилни янгыдан бегетмек",
+ "passwordreset-username": "Къоллавчу аты",
+ "changeemail-none": "(ёкъ)",
"bold_sample": "Къалын матын",
"bold_tip": "Къалын матын",
"italic_sample": "Авункъу матын",
"minoredit": "Увакъ тюзлев",
"watchthis": "Бу сагьифаны гьызарламакъ",
"savearticle": "Сагьифаны сакъламакъ",
+ "savearticle-start": "Сагьифаны сакъламакъ",
+ "savechanges-start": "Алышынывланы сакъламакъ",
"preview": "Ингкъарав",
"showpreview": "Ингкъарав",
"showdiff": "Тюзлевлени гёрсетмек",
"anoneditwarning": "<strong>Тергев:</strong> Сен гириш этмединг. Тюзлевлер этсенг сени IP адресинг публикли гёрюнер. Эгер <strong>[$1 гириш]</strong> яда <strong>[$2 къайыт]</strong> этсенг, тюзлевлеринг сени ортакъчы аты булан гьисап этилер, оьзге пайдалардан да къайры.",
"blockedtext": "Сени къоллавчу атынг яда IP адресинг къамалгъан эди.''\n\nКъамав этген $1 ($2).\nСебеп берилген: ''$3'.\n\n* Къамав башлады: $4\n* Къамав бите: $5\n* Къамавну мурады: $7\n\n$1 булан яда къайсы оьзге [[{{MediaWiki:Grouppage-sysop}}|администратор]] булан къатнап къамавну гьакъында сёйлешмеге боласан.\nТергеп къой, сени [[Special:Preferences|энчили кюйлемлерингде]] e-mail адресинг тюз бермединг буса яда герти этмединг буса, яда къамав шартлагъа мактуп язывуну къадагъа гире буса, \"къоллавчугъа мактуп\" функцияны къоллап болмассан.\nСени IP адресинг — $3, къамавну идентификатору — $5. Тилев, бу маълюматланы бары талапларынга гийир.",
"loginreqlink": "гирмек",
+ "newarticle": "(Янгы)",
"newarticletext": "Сен гьалиде яратылмагъан сагьифагъа гёчдинг.\nБу сагьифаны яратмакъ учун, тюбюндеги къутугъунда язып башлагъыз (артыкъ маълюмат учун [$1 кёмек сагьифагъа] къара).\nЯнгылыш этип бери гёчген бусанг, сени браузеринг <strong>артгъа</strong> тюймесине бас.",
"anontalkpagetext": "<em>Бу гьали де бет яратмагъан яда бетин къолламайгъан аноним къоллавчуну учун сёйлешив.</em>\nШолай буса биз ону белгилемек учун санавлу IP адресни пайдаламакъ герекбиз.\nБу IP адрес бир нече къоллавчуланы арасында пайланып турмагъа бола.\nСен аноним къоллавчу бусанг, ва сагъа тюгюл язывлар бакъдырылгъан деп ойлаша бусанг, тилев, [[Special:CreateAccount|янгы бет ярат]] яда [[Special:UserLogin|гириш эт]], гележекде оьзге аноним къоллавчулар булан сен къарашыкъ болмас учун.",
"noarticletext": "Бу сагьифа гьали де матынсыз. Сен башгъа сагьифаларда [[Special:Search/{{PAGENAME}}|булай атын эсгеривлерини излемеге]] боласан, <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} тийишли гюнделик язывланы тапмагъа] яда '''[{{fullurl:{{FULLPAGENAME}}|action=edit}} булай аты булан сагьифа яратмагъа боласан]'''</span>.",
"noarticletext-nopermission": "Бу сагьифа гьали де текстсиз. Сен башгъа сагьифаларда [[Special:Search/{{PAGENAME}}|булай атын эсгеривлерини излемеге]], яда <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} тийишли гюнделиклени тапмагъа боласан]. </span> Тек бу сагьифаны яратмагъа ихтиярынг ёкъ.",
"userpage-userdoesnotexist-view": "\"$1\" гьисап къайытланмагъан.",
"clearyourcache": "<strong>Note:</strong> Сакълангъан сонг, тюрлевлени гёрмек саялы сагъа браузерингни кэшин янгыртмагъа яда тазаламагъа герек болма бола \n* <strong>Firefox / Safari:</strong> <em>Shift</em> тутуп <em>Reload</em> бас, башгъалай <em>Ctrl-F5</em> яда <em>Ctrl-R</em> бас (Mac буса <em>⌘-R</em>)\n* <strong>Google Chrome:</strong> <em>Ctrl-Shift-R</em> бас(Mac буса <em>⌘-Shift-R</em>)\n* <strong>Internet Explorer:</strong> <em>Ctrl</em> тутуп <em>Refresh</em> бас, яда <em>Ctrl-F5</em> бас\n* <strong>Opera:</strong> <em>Menu → Settings</em> бёлмеге гёч (Mac буса <em>Opera → Preferences</em>) ва сонг <em>Privacy & security → Clear browsing data → Cached images and files</em>.",
+ "updated": "(Янгыртылгъан)",
"previewnote": "<strong>Бу ингкъарав экенни эсде сакъла.</strong>\nАлышынывларынг гьали де сакъланмагъан!",
"continue-editing": "Тюзлевню давамламакъ",
"editing": "Тюзлев $1",
"creating": "$1 сагьифасын ясаву",
"editingsection": "Тюзлев: $1 (бёлме)",
+ "yourtext": "Текстинг",
+ "yourdiff": "Башгъалыкълар",
"templatesused": "Бу сагьифада къоллангъан {{PLURAL:$1|къалип|къалиплер}}",
"templatesusedpreview": "Бу инггёрсетивде пайдалангъан {{PLURAL:$1|уьлгюлер|}}:",
"template-protected": "(къоругъан)",
"recreate-moveddeleted-warn": "<strong>Тергев бер: Алдын тайдырылгъан сагьифаны ярашдырма айланасан.</strong>\n\nБашлап тергеп къара, гертиден де тарыкъмы экен ол сагьифаны ярашдырмагъа.\nТайдырыв ва атын алышдырыв гюнделиги тюпде берилген:",
"moveddeleted-notice": "Бу сагьифа тайдырылгъан эди.\nБу сагьифаны тайдырыв, къорув ва атянгыртыв гюнделиги маълюмат саялы тюпде гёрсетилген.",
"content-model-wikitext": "викиматын",
+ "content-model-javascript": "JavaScript",
"undo-failure": "Аралыкъ алышынывланы къыйышывсызлгъы учун тюзлев гери алынмай.",
"viewpagelogs": "Бу сагьифа учун гюнделиклени гёрсетмек",
"currentrev-asof": "Ахырынчы тюрю $1 тархда",
"nextrevision": "Сонггъу тюрю →",
"currentrevisionlink": "Ахырынчы тюрю",
"cur": "гьал.",
+ "next": "гелеген",
"last": "ингкъ.",
+ "page_first": "биринчи",
+ "page_last": "ахырынчы",
"histlegend": "Тюзлевлерден сайлав: тенглешдирмеге сюеген бары тюрлерин белгилеп '''{{int:compare-submit}}''' бас.<br />\nАчыкълавлар: '''({{int:cur}})''' — гьалиги тюрюнден башгъалыкъ; '''({{int:last}})''' — алдагъы тюрюнден башгъалыкъ; '''{{int:minoreditletter}}''' — увакъ тюзелтив.",
"history-fieldset-title": "Тюзлевлеге излев",
"histfirst": "инг эсгилер",
"histlast": "инг янгылар",
+ "historyempty": "(бош)",
"history-feed-title": "Тюзлевлер тарихи",
"history-feed-description": "Бу сагьифаны викиде тюзлев тарихи",
"history-feed-item-nocomment": "$1 $2 заманда",
"rev-delundel": "гёрсетмек/яшырмакъ",
+ "rev-showdeleted": "гёрсетмек",
+ "revdelete-show-file-submit": "Дюр",
+ "revdelete-radio-same": "(алышдырмамакъ)",
+ "revdelete-radio-set": "Яшырылгъан",
+ "revdelete-log": "Себеп:",
+ "pagehist": "Сагьифа тарихи",
+ "deletedhist": "Тайдырыв тарихи",
+ "revdelete-reasonotherlist": "Башгъа себеп",
+ "mergehistory-reason": "Себеп:",
"mergelog": "Бирлешдирив гюнделиги",
+ "revertmerge": "Бёлмек",
"history-title": "\"$1\" тюзлев тарихи",
"difference-title": "Тюрлени арасында башгъалыгъы \"$1\"",
"lineno": "Сатыр: $1",
"searchresults-title": "\"$1\" учун натижаланы излемек",
"prevn": "алдагъы {{PLURAL:$1|$1}}",
"nextn": "сонггъу {{PLURAL:$1|$1}}",
+ "prev-page": "алдагъы сагьифа",
+ "next-page": "гелеген сагьифа",
"prevn-title": "Алдагъы $1 {{PLURAL:$1|гьасил}}",
"nextn-title": "Гелеген $1 {{PLURAL:$1|гьасил|гьасиллер}}",
"shown-title": "Айры бир сагьифада $1 {{PLURAL:$1|языв|язывланы}} гёрсетмек",
"search-result-category-size": "{{PLURAL:$1|1 ортакъчы|$1 ортакъчы}} ({{PLURAL:$2|1 тюп категория|$2 тюп категория}}, {{PLURAL:$3|1 саплам|$3 саплам}})",
"search-redirect": "($1 сагьифадан бакъдырылгъан)",
"search-section": "($1 бёлме)",
+ "search-category": "(категория $1)",
"search-file-match": "(сапламны ичделигине рас геле)",
"search-suggest": "Буну ойлаймысан экен: $1",
+ "search-interwiki-more": "(дагъы)",
+ "search-interwiki-more-results": "дагъы да натижалар",
+ "search-relatedarticle": "Байлавлу",
+ "searchrelated": "байлавлу",
"searchall": "бары да",
"search-showingresults": "{{PLURAL:$4|<strong>$1</strong> натижа <strong>$3</strong> натижалардан|<strong>$1 – $2</strong> натижа <strong>$3</strong> натижалардан}}",
"search-nonefound": "Бу талапгъа тийишли натижалар табулмады.",
+ "powersearch-legend": "Генглешген излев",
+ "powersearch-toggleall": "Тюм",
+ "powersearch-togglenone": "Ёкъ",
"mypreferences": "Кюйлемлер",
+ "skin-preview": "Ингкъарав",
+ "prefs-user-pages": "Къоллавчу сагьифасы",
+ "prefs-watchlist": "Гьызарлав тизмеси",
+ "saveprefs": "Сакъламакъ",
+ "prefs-editing": "Тюзлев",
+ "searchresultshead": "Излев",
+ "stub-threshold-sample-link": "уьлгю",
+ "stub-threshold-disabled": "Сёнген",
+ "timezoneregion-asia": "Азия",
+ "timezoneregion-europe": "Авропа",
+ "prefs-searchoptions": "Излев",
+ "prefs-namespaces": "Атлар аралыгъы",
+ "prefs-files": "Сапламлар",
+ "youremail": "Эмейл:",
+ "group-membership-link-with-expiry": "$1 ($2 ерли)",
+ "yourrealname": "Герти аты:",
+ "yourlanguage": "Тил:",
+ "yournick": "Янгы къолбас",
+ "email": "Эмейл",
+ "prefs-signature": "Къолбас",
+ "prefs-preview": "Ингкъарав",
+ "editusergroup": "Ортакъчына гюплерин юклемек",
+ "group": "Гюп:",
+ "group-user": "Къоллавчулар",
"group-bot": "Ботлар",
"group-sysop": "Юрютювчилер",
+ "group-all": "(тюм)",
+ "grouppage-user": "{{ns:project}}:Къоллавчулар",
"grouppage-bot": "{{ns:project}}:Ботлар",
"grouppage-sysop": "{{ns:project}}:Башчылар",
+ "right-read": "Сагьифа охув",
+ "right-edit": "Сагьифа тюзлев",
"right-writeapi": "Языв учун API къоллав",
+ "right-delete": "Сагьифа тайдырыв",
"newuserlogpage": "Янгы къоллавчу тизме гюнделиги",
"rightslog": "Ортакъчы ихтиярларын гюнделиги",
+ "action-read": "бу сагьифаны охув",
"action-edit": "бу сагьифаны тюзлемек",
+ "action-createpage": "бу сагьифаны яратмакъ",
"action-createaccount": "бу гьисапны яратыву",
"enhancedrc-history": "тарих",
"recentchanges": "Яп-янгы тюзлевлер",
"recentchanges-label-plusminus": "Сагьифаны гёлеми шунчакъы байт булан алышынгъан",
"recentchanges-legend-heading": "<strong>Уйдурма:</strong>",
"recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (шунда да [[Special:NewPages|янгы сагьифаланы сиягьына къарагъыз]])",
+ "recentchanges-submit": "Гёрсетмек",
+ "rcfilters-savedqueries-rename": "Атын алышдырмакъ",
+ "rcfilters-savedqueries-remove": "Тайдырмакъ",
+ "rcfilters-savedqueries-new-name-label": "Ат",
+ "rcfilters-savedqueries-cancel-label": "Гери алыв",
+ "rcfilters-filterlist-title": "Сюзгючлер",
+ "rcfilters-highlightmenu-title": "Тюсюн сайламакъ",
+ "rcfilters-filter-user-experience-level-learner-label": "Охуйгъанлар",
+ "rcfilters-filter-bots-label": "Бот",
"rcnotefrom": "Тюбюндеги — <strong>$3, $4</strong> гюнден берли {{PLURAL:$5|тюзлевюдюр|тюзлевлеридир}}.",
"rclistfrom": "$2, $3 тюзлевлерден башлап гёрсетмек",
"rcshowhideminor": "$1 увакъ тюзлевлер",
"rcshowhideanons-show": "Гёрсетмек",
"rcshowhideanons-hide": "Яшырмакъ",
"rcshowhidepatr": "$1 тергелген тюзлевлер",
+ "rcshowhidepatr-show": "Гёрсетмек",
+ "rcshowhidepatr-hide": "Яшырмакъ",
"rcshowhidemine": "$1 мени тюзлевлерим",
"rcshowhidemine-show": "Гёрсетмек",
"rcshowhidemine-hide": "Яшырмакъ",
+ "rcshowhidecategorization-show": "Гёрсетмек",
+ "rcshowhidecategorization-hide": "Яшырмакъ",
"rclinks": "Ахырынчы $2 гюнню ичинде ахырынчы $1 тюзлевню гёрсетмек",
"diff": "алыш.",
"hist": "тарих",
"recentchangeslinked-page": "Сагьифаны аты:",
"recentchangeslinked-to": "Къайта, бу сагьифагъа байлавлу сагьифаланы алышынывларын гёрсетмек",
"upload": "Сапламны юклемек",
+ "uploadbtn": "Сапламны юклемек",
"uploadlogpage": "Юклев журналы",
+ "filename": "Сапламны аты",
"filedesc": "Къысгъартылым",
+ "fileuploadsummary": "Къысгъартылым:",
+ "filesource": "Эник:",
+ "upload-dialog-button-cancel": "Гери алыв",
+ "upload-dialog-button-back": "Артгъа",
+ "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": "Сапламны аты",
+ "upload-form-label-infoform-date": "Тарх",
"license": "Лицензиялав:",
"license-header": "Лицензиялав",
+ "listfiles-delete": "тайдырмакъ",
"imgfile": "саплам",
"listfiles": "Саплам тизмеси",
+ "listfiles_thumb": "Гиччисурат",
+ "listfiles_date": "Тарх",
+ "listfiles_name": "Ат",
+ "listfiles_user": "Къоллавчу",
+ "listfiles_size": "Гёлем",
+ "listfiles_description": "Тасвир",
+ "listfiles_count": "Тюрлер",
+ "listfiles-latestversion": "Гьалиги тюрю",
+ "listfiles-latestversion-yes": "Дюр",
+ "listfiles-latestversion-no": "Ёкъ",
"file-anchor-link": "Саплам",
"filehist": "Саплам тарихи",
"filehist-help": "Тарх/замангъа бассанг саплам о вакътиде нечик болгъанны гёрежексен",
+ "filehist-deleteall": "Тюмюн тайдырмакъ",
+ "filehist-deleteone": "тайдырмакъ",
"filehist-revert": "къайтармакъ",
"filehist-current": "гьалиги",
"filehist-datetime": "Тарх/Заман",
"filehist-nothumb": "миниатюрю ёкъ",
"filehist-user": "Къоллавчу",
"filehist-dimensions": "Оьлчевлери",
+ "filehist-filesize": "Саплам гёлеми",
"filehist-comment": "Ёрум",
"imagelinks": "Сапламны къоллаву",
"linkstoimage": "Шундан сонггъу {{PLURAL:$1|сагьифа|$1 сагьифалар}} бу сапламгъа байлангъан:",
"sharedupload-desc-here": "Бу саплам $1 проектдендир, ва башгъасында да къолланма бола. Ону [$2 тасвир сагьифасындан] маълюматы тюпде бериле.",
"filepage-nofile": "Булай аты булан саплам ёкъдур.",
"upload-disallowed-here": "Бу сапламны уьстюнде язмакъ болмайсан.",
+ "filerevert-comment": "Себеп:",
+ "filerevert-submit": "Къайтармакъ",
+ "filedelete": "$1 тайдырмакъ",
+ "filedelete-legend": "Сапламны тайдырмакъ",
+ "filedelete-comment": "Себеп:",
+ "filedelete-submit": "Тайдырмакъ",
+ "filedelete-reason-otherlist": "Башгъа себеп",
+ "mimesearch": "MIME излев",
+ "download": "эндирмек",
+ "unusedtemplateswlh": "башгъа байланывлар",
"randompage": "Хапарсыз сагьифа",
+ "randomincategory-category": "Категория:",
+ "randomincategory-submit": "Гёчмек",
"statistics": "Истатистик",
+ "statistics-pages": "Сагьифа",
+ "pageswithprop-submit": "Тапмакъ",
"double-redirect-fixer": "Ёллав дуруславу",
+ "brokenredirects-edit": "тюзлемек",
+ "brokenredirects-delete": "тайдырмакъ",
+ "withoutinterwiki-submit": "Гёрсетмек",
"nbytes": "$1 {{PLURAL:$1|байт|байтлар}}",
"nmembers": "$1 {{PLURAL:$1|ортакъчы}}",
"prefixindex": "Префикс булан бары да сагьифалар",
"perfcachedts": "La datos seguente veni de prememoria e la refresci la plu resente ia aveni a $1. No plu ca {{PLURAL:$4|un resulta|$4 resultas}} es disponable en la prememoria.",
"querypage-no-updates": "Refrescis de esta paje es aora descomutada.\nDatos asi no va es refrescida a presente.",
"viewsource": "Regarda vicitesto",
- "viewsource-title": "Regarda vicitesto per $1",
+ "viewsource-title": "Regarda fonte per $1",
"actionthrottled": "Ata limitada",
"actionthrottledtext": "Per defende contra malusa, usores no pote fa esta ata a tro multe veses en un tempo corta, e tu ia esede esta limita.\nPer favore, atenta denova pos alga minutos.",
"protectedpagetext": "Esta paje es protejeda per preveni editas o otra atas.",
"cascadeprotected": "Esta paje es protejeda contra editas car lo es transcluida en la {{PLURAL:$1|paje|pajes}} seguente, cual es cascadin protejeda:\n$2",
"namespaceprotected": "Tu no es permeteda a edita pajes en la spasio de nom <strong>$1</strong>.",
"customcssprotected": "Tu no es permeteda a edita esta paje de CSS, car lo conteni la preferes personal de un otra usor.",
+ "customjsonprotected": "Tu no es permeteda a edita esta paje de JSON, car lo conteni la preferes personal de un otra usor.",
"customjsprotected": "Tu no es permeteda a edita esta paje de JavaScript, car lo conteni la preferes personal de un otra usor.",
"mycustomcssprotected": "Tu no es permeteda a edita esta paje de CSS.",
+ "mycustomjsonprotected": "Tu no es permeteda a edita esta paje de JSON.",
"mycustomjsprotected": "Tu no es permeteda a edita esta paje de JavaScript.",
"myprivateinfoprotected": "Tu no es permeteda a edita tua informas privata.",
"mypreferencesprotected": "Tu no es permeteda a edita tua preferes.",
"nowiki_sample": "Ajunta asi testo nonformatida",
"nowiki_tip": "Iniora sintatica de vici",
"image_tip": "Fix interna",
- "media_tip": "Lia a un fix",
+ "media_tip": "Lia de fix",
"sig_tip": "Tua suscrive con indica de ora",
"hr_tip": "Linia orizonal (per usas rara)",
"summary": "Resoma:",
"tooltip-pt-watchlist": "Un lista de pajes cual tu monitori per cambias",
"tooltip-pt-mycontris": "Un lista de tua contribuis",
"tooltip-pt-anoncontribs": "Un lista de editas fada de esta adirije IP",
- "tooltip-pt-login": "Nos recomenda ce tu autentici, ma esta no es no obligante",
+ "tooltip-pt-login": "Nos recomenda ce tu autentici, ma esta no es obligante",
"tooltip-pt-login-private": "Tu nesesa autentici per usa esta vici",
"tooltip-pt-logout": "Desautentici",
"tooltip-pt-createaccount": "Nos recomenda ce tu crea un conta e autentici, ma esta no es obligante",
"botpasswords-existing": "Eksisterende robotpassord",
"botpasswords-createnew": "Opprett et nytt robotpassord",
"botpasswords-editexisting": "Redigere et eksisterende robotpassord",
+ "botpasswords-label-needsreset": "(passordet må settes på nytt)",
"botpasswords-label-appid": "Robotnavn:",
"botpasswords-label-create": "Opprett",
"botpasswords-label-update": "Oppdater",
"botpasswords-restriction-failed": "Begrensninger for robotpassord tillater ikke denne innloggingen.",
"botpasswords-invalid-name": "Det angitte brukernavnet inneholder ikke separasjonstegnet for robotpassord (\"$1\").",
"botpasswords-not-exist": "Brukeren \"$1\" har ikke noe robotpassord for \"$2\".",
+ "botpasswords-needs-reset": "Botpassordet for botnavnet «$2» for {{GENDER:$1|brukeren}} «$1» må settes på nytt.",
"resetpass_forbidden": "Passord kan ikke endres",
"resetpass_forbidden-reason": "Passordene kan ikke endres: $1",
"resetpass-no-info": "Du må være logget inn for å gå til denne siden direkte",
"protectedtitles-submit": "Vis titler",
"listusers": "Brukerliste",
"listusers-editsonly": "Vis bare brukere med redigeringer",
+ "listusers-temporarygroupsonly": "Vis kun brukere i midlertidige brukergrupper",
"listusers-creationsort": "Sorter etter opprettelsesdato",
"listusers-desc": "Sorter i synkende rekkefølge",
"usereditcount": "{{PLURAL:$1|én redigering|$1 redigeringer}}",
"authmanager-password-help": "Passord for autentisering.",
"authmanager-domain-help": "Domene for ekstern autentisering.",
"authmanager-retype-help": "Passord igjen for å bekrefte.",
- "authmanager-email-label": "Epost",
+ "authmanager-email-label": "E-post",
"authmanager-email-help": "Epostadresse",
"authmanager-realname-label": "Virkelig navn",
"authmanager-realname-help": "Brukerens virkelige navn",
"pagedata-title": "Sidedata",
"pagedata-text": "Denne siden gir et datagrensesnitt til sidene. Oppgi en sidetittel i URL-en, med undersidesyntaks.\n* Innholdsforhandlingen er basert på din klients Accept-header. Dette betyr at data for siden blir angitt på formatet som foretrekkes av din klient.",
"pagedata-not-acceptable": "Ingen passende format funnet. Støttede MIME-typer: $1",
- "pagedata-bad-title": "Ugyldig tittel: $1."
+ "pagedata-bad-title": "Ugyldig tittel: $1.",
+ "passwordpolicies-group": "Gruppe",
+ "passwordpolicies-policy-minimalpasswordlength": "Passordet må være på minst $1 {{PLURAL:$1|tegn}}.",
+ "passwordpolicies-policy-minimumpasswordlengthtologin": "Passordet må være på minst $1 {{PLURAL:$1|tegn}} for å kunne logge inn",
+ "passwordpolicies-policy-passwordcannotmatchusername": "Passordet kan ikke være det samme som brukernavnet",
+ "passwordpolicies-policy-passwordcannotmatchblacklist": "Passordet kan ikke matche spesifikt svartelistede passord",
+ "passwordpolicies-policy-maximalpasswordlength": "Passordet må være på minst $1 {{PLURAL:$1|tegn}}",
+ "passwordpolicies-policy-passwordcannotbepopular": "Passordet kan ikke være {{PLURAL:$1|det populære passordet|i lista over $1 populære passord}}"
}
"previewerrortext": "Er is een fout opgetreden tijdens het weergeven van uw wijzigingen.",
"blockedtitle": "Gebruiker is geblokkeerd",
"blockedtext": "'''Uw gebruikersaccount of IP-adres is geblokkeerd.'''\n\nDe blokkade is uitgevoerd door $1.\nDe opgegeven reden is ''$2''.\n\n* Aanvang blokkade: $8\n* Einde blokkade: $6\n* Bedoeld te blokkeren: $7\n\nU kunt contact opnemen met $1 of een andere [[{{MediaWiki:Grouppage-sysop}}|beheerder]] om de blokkade te bespreken.\nU kunt geen gebruik maken van de functie \"{{int:emailuser}}\", tenzij u een geldig e-mailadres hebt opgegeven in uw [[Special:Preferences|voorkeuren]] en het gebruik van deze functie niet geblokkeerd is.\nUw huidige IP-adres is $3 en het blokkadenummer is #$5.\nVermeld alle bovenstaande gegevens als u ergens op deze blokkade reageert.",
- "autoblockedtext": "Uw IP-adres is automatisch geblokkeerd, omdat het gebruikt is door een andere gebruiker, die geblokkeerd is door $1.\nDe opgegeven reden is:\n\n:''$2''\n\n* Aanvang blokkade: $8\n* Einde blokkade: $6\n* Bedoeld te blokkeren: $7\n\nU kunt contact opnemen met $1 of een andere [[{{MediaWiki:Grouppage-sysop}}|beheerder]] om de blokkade te bespreken.\n\nU kunt geen gebruik maken van de functie \"{{ing:emailuser}}\", tenzij u een geldig e-mailadres hebt opgegeven in uw [[Special:Preferences|voorkeuren]], en het gebruik van deze functie niet is geblokkeerd.\n\nUw huidige IP-adres is $3 en het blokkadenummer is #$5.\nVermeld alle bovenstaande gegevens als u ergens op deze blokkade reageert.",
+ "autoblockedtext": "Uw IP-adres is automatisch geblokkeerd, omdat het gebruikt is door een andere gebruiker, die geblokkeerd is door $1.\nDe opgegeven reden is:\n\n:''$2''\n\n* Aanvang blokkade: $8\n* Einde blokkade: $6\n* Bedoeld te blokkeren: $7\n\nU kunt contact opnemen met $1 of een andere [[{{MediaWiki:Grouppage-sysop}}|beheerder]] om de blokkade te bespreken.\n\nU kunt geen gebruik maken van de functie \"{{int:emailuser}}\", tenzij u een geldig e-mailadres hebt opgegeven in uw [[Special:Preferences|voorkeuren]], en het gebruik van deze functie niet is geblokkeerd.\n\nUw huidige IP-adres is $3 en het blokkadenummer is #$5.\nVermeld alle bovenstaande gegevens als u ergens op deze blokkade reageert.",
"systemblockedtext": "Uw gebruikersaccount of IP-adres is automatisch geblokkeerd door MediaWiki.\nDe opgegeven reden is:\n\n:<em>$2</em>\n\n* Aanvang blokkade: $8\n* Einde blokkade: $6\n* Bedoeld te blokkeren: $7\n\nUw huidige IP-adres is $3.\nVermeld alle bovenstaande gegevens als u ergens op deze blokkade reageert.",
"blockednoreason": "geen reden opgegeven",
"whitelistedittext": "U moet $1 om pagina's te bewerken.",
"rcfilters-filter-reviewstatus-unpatrolled-label": "Niet gecontroleerd",
"rcfilters-filter-reviewstatus-manual-description": "Bewerkingen die handmatig zijn gecontroleerd",
"rcfilters-filter-reviewstatus-manual-label": "Handmatig gecontroleerd",
- "rcfilters-filter-reviewstatus-auto-description": "Bewerkingen door geavanceerde gebruikers wiens werk automatisch gecontroleerd is.",
+ "rcfilters-filter-reviewstatus-auto-description": "Bewerkingen door geavanceerde gebruikers wier werk automatisch gecontroleerd wordt.",
"rcfilters-filter-reviewstatus-auto-label": "Automatisch gecontroleerd",
"rcfilters-filtergroup-significance": "Belangrijkheid",
"rcfilters-filter-minor-label": "Kleine bewerkingen",
"thumbnail_dest_directory": "Niet in staat doelmap aan te maken",
"thumbnail_image-type": "Dit bestandstype wordt niet ondersteund",
"thumbnail_gd-library": "De instellingen voor de GD-bibliotheek zijn incompleet. De functie $1 ontbreekt",
- "thumbnail_image-size-zero": "De afbeeldingsbestandsgrootte lijkt nul te zijn.",
+ "thumbnail_image-size-zero": "De grootte van het afbeeldingsbestand lijkt nul te zijn.",
"thumbnail_image-missing": "Het bestand lijkt niet aanwezig te zijn: $1",
"thumbnail_image-failure-limit": "Het maken van een miniatuurafbeelding is te vaak mislukt ($1 keer of vaker). Probeer het later nog eens.",
"import": "Pagina's importeren",
"pagedata-text": "Deze pagina biedt een data-interface voor pagina's. Geef een paginatitel op door deze in de URL op te nemen, op de manier van een deelpagina.\n* De inhoud wordt afgestemd op de door de client meegestuurde Accept Header. Dit betekent dat de gegevens voor de pagina worden aangeboden in het voorkeursformaat van uw client.",
"pagedata-not-acceptable": "Er is geen overeenkomende indeling gevonden. Ondersteunde MIME-typen: $1",
"pagedata-bad-title": "Ongeldige titel: $1.",
- "unregistered-user-config": "Vanwege veiligheidsredenen wordt worden gebruikersdeelpagina's met JavaScript, CSS en JSON niet langer geladen voor gebruikers die niet zijn geregistreerd.",
+ "unregistered-user-config": "Om veiligheidsredenen worden gebruikersdeelpagina's met JavaScript, CSS en JSON niet geladen voor gebruikers die niet zijn geregistreerd.",
"passwordpolicies": "Wachtwoordbeleid",
"passwordpolicies-summary": "Dit is een lijst met de wachtwoordbeleidvormen die van toepassing zijn op de gebruikersgroepen van deze wiki.",
"passwordpolicies-group": "Groep",
"rcfilters-quickfilters-placeholder-description": "For å lagra filterinnstillingane dine og bruka dei på nytt seinare, klikk på bokmerkeikonet i området for aktive filter under.",
"rcfilters-savedqueries-defaultlabel": "Lagra filter",
"rcfilters-savedqueries-rename": "Gje nytt namn",
+ "rcfilters-savedqueries-setdefault": "Set som standard",
"rcfilters-savedqueries-new-name-label": "Namn",
"rcfilters-savedqueries-new-name-placeholder": "Skildra føremålet med filteret",
"rcfilters-savedqueries-apply-label": "Lagra innstillingar",
+ "rcfilters-savedqueries-apply-and-setdefault-label": "Opprett standardfilter",
"rcfilters-savedqueries-add-new-title": "Lagra gjeldande filterinnstillingar",
+ "rcfilters-savedqueries-already-saved": "Desse filtera er alt lagra. Endra innstillingane dine for å oppretta eit nytt lagra filter.",
"rcfilters-clear-all-filters": "Fjern alle filter",
"rcfilters-show-new-changes": "Sjå dei nyaste endringane",
"rcfilters-search-placeholder": "Filtrer endringar (nytt meny eller søk etter filternamn)",
"right-siteadmin": "Verrolhar e desverrolhar la basa de donadas",
"right-override-export-depth": "Exportar las paginas en incluent las paginas ligadas fins a una prigondor de 5 nivèls",
"right-sendemail": "Mandar un corrièl als autres utilizaires",
+ "right-managechangetags": "Crear, activar e desactivar [[Special:Tags|tags]]",
"right-applychangetags": "Aplicar [[Special:Tags|las balisas]] amb sas pròprias modificacions",
+ "right-changetags": "Apondre e suprimir arbitràriament [[Special:Tags|tags]] sus de revisions individualas e d'intradas de jornal",
+ "right-deletechangetags": "Suprimir [[Special:Tags|tags]] dempuèi la basa de donadas",
"grant-generic": "ensemble de dreits « $1 »",
"grant-group-page-interaction": "Interagir amb de paginas",
"grant-group-file-interaction": "Interagir amb de mèdias",
"grant-group-watchlist-interaction": "Interagir amb vòstra lista de seguiment",
"grant-group-email": "Mandar un corrièr electronic",
+ "grant-group-high-volume": "Realizar una activitat de volum naut",
"grant-group-customization": "Personalizacion e preferéncias",
"grant-group-administration": "Efectuar d'accions administrativas",
"grant-group-private-information": "Accedir a vòstras donadas privadas",
"grant-blockusers": "Blocar e desblocar d'utilizaires",
"grant-createaccount": "Crear de comptes",
"grant-createeditmovepage": "Crear, modificar e desplaçar de paginas",
+ "grant-delete": "Suprimir paginas, revisions e dintradas de jornal",
"grant-editinterface": "Modificar l'espaci de noms de MediaWiki e lo CSS/JSON/Javascript",
"grant-editmycssjs": "Modificar vòstre CSS/JSON/JavaScript utilizator",
"grant-editmyoptions": "Modificar vòstras preferéncias d'utilizaire",
+ "grant-editmywatchlist": "Modificar la vòstra lista de seguiment",
"grant-editpage": "Modificar de paginas existentas",
"grant-editprotected": "Modificar de paginas protegidas",
+ "grant-highvolume": "Modificacion de volum naut",
+ "grant-oversight": "Amagar los usatgièrs e suprimir las revisions",
"grant-patrol": "Verificar las modificacions de paginas",
"grant-privateinfo": "Accedir a las informacions privadas",
+ "grant-protect": "Protegir e desprotegir paginas",
+ "grant-rollback": "Anullar modificacions sus de paginas",
"grant-sendemail": "Mandar de corriers electronics als autres utilizaires",
"grant-uploadeditmovefile": "Telecargar, remplaçar e renomenar de fichièrs",
"grant-uploadfile": "Importar de fichièrs novèls",
"grant-basic": "Dreits de basa",
"grant-viewdeleted": "Afichar los fichièrs e paginas suprimits",
"grant-viewmywatchlist": "Afichar vòstra lista de seguiment",
+ "grant-viewrestrictedlogs": "Afichar las entradas del jornal confidencialas",
"newuserlogpage": "Istoric de las creacions de comptes",
"newuserlogpagetext": "Jornal de las creacions de comptes d'utilizaires.",
"rightslog": "Istoric de las modificacions d'estatut",
"action-createpage": "crear aquesta pagina",
"action-createtalk": "crear aquesta pagina de discussion",
"action-createaccount": "crear aqueste compte d'utilizaire",
+ "action-autocreateaccount": "Crear automaticament aquel compte d'usatgièr extèrne",
"action-history": "afichar l’istoric d'aquesta pagina",
"action-minoredit": "marcar aqueste cambiament coma menor",
"action-move": "renomenar aquesta pagina",
"action-deleterevision": "suprimir las revisions",
"action-deletelogentry": "suprimir las entradas del jornal",
"action-deletedhistory": "veire l’istoric suprimit d'una pagina",
+ "action-deletedtext": "Afichar lo tèxte de la revision suprimida",
"action-browsearchive": "recercar de paginas suprimidas",
"action-undelete": "restablir de paginas",
"action-suppressrevision": "visionar e restablir de revisions suprimidas",
"action-viewmywatchlist": "afichar vòstra pròpria lista de seguiment",
"action-viewmyprivateinfo": "veire vòstras informacions personalas",
"action-editmyprivateinfo": "modificar vòstras informacions personalas",
+ "action-editcontentmodel": "Editar lo modèl de contengut d'una pagina",
+ "action-managechangetags": "Crear e (des)activar d'etiquetas",
+ "action-applychangetags": "Aplicar las etiquetas amb los vòstres cambiaments",
+ "action-changetags": "Apondre e suprimir arbitràriament d'etiquetas a las revisions individualas e a las entradas de jornal.",
+ "action-deletechangetags": "Suprimir d'etiquetas dempuèi la basa de donadas",
"action-purge": "purgar aquesta pagina",
"nchanges": "$1 {{PLURAL:$1|cambiament|cambiaments}}",
"enhancedrc-since-last-visit": "$1 {{PLURAL:$1|dempuèi la darrièra visita}}",
"recentchanges-legend": "Opcions dels darrièrs cambiaments",
"recentchanges-summary": "Vaquí sus aquesta pagina, los darrièrs cambiaments de {{SITENAME}}.",
"recentchanges-noresult": "Pas cap de modificacion que correspond a aqueles critèris sul periòde indicat.",
+ "recentchanges-timeout": "Aquesta cerca dura tròp de temps. Podètz ensajar de paramètres de cerca diferents",
+ "recentchanges-network": "Se pòt pas afichar pas cap de resultat en causa d'una error tecnica. Ensajatz de tornar cargar la pagina.",
+ "recentchanges-notargetpage": "Dintrar lo nom d'una pagina per veire los cambiaments relatius a aquesta pagina.",
"recentchanges-feed-description": "Seguissètz los darrièrs cambiaments d'aqueste wiki dins un flux.",
"recentchanges-label-newpage": "Aquesta modificacion a creat una pagina novèla",
"recentchanges-label-minor": "Aqueste cambiament es menor",
"recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (veire tanben la [[Special:NewPages|lista de las paginas novèlas]]).",
"recentchanges-legend-plusminus": "(''±123'')",
"recentchanges-submit": "Afichar",
+ "rcfilters-tag-remove": "Suprimir '$1'",
+ "rcfilters-legend-heading": "<strong>Lista de las abreviacions:</strong>",
+ "rcfilters-other-review-tools": "Autras aisinas de supervision",
+ "rcfilters-group-results-by-page": "Agropar los resultats per pagina",
"rcfilters-activefilters": "Filtres actius",
+ "rcfilters-advancedfilters": "Filtres avançats",
+ "rcfilters-limit-title": "Resultats d'affichar",
"rcfilters-hours-title": "Darrièras oras",
"rcfilters-days-show-days": "($1 {{PLURAL:$1|jorn|jorns}})",
"rcfilters-days-show-hours": "$1 {{PLURAL:$1|ora|oras}}",
"rcfilters-quickfilters": "Filtres salvats",
+ "rcfilters-quickfilters-placeholder-title": "Pas encara de filtre salvagardat",
+ "rcfilters-quickfilters-placeholder-description": "Per salvagardar los paramètres de los vòstres filtres e tornar los utilizar mai tard , clicatz sus l'icòna dels favorits dins l'airal de Filtres Actius, dejós.",
"rcfilters-savedqueries-defaultlabel": "Filtres salvats",
"rcfilters-savedqueries-rename": "Renomenar",
"rcfilters-savedqueries-setdefault": "Activar per defaut",
"rcfilters-savedqueries-apply-label": "Crear un filtre",
"rcfilters-savedqueries-apply-and-setdefault-label": "Crear lo filtre per defaut",
"rcfilters-savedqueries-cancel-label": "Anullar",
+ "rcfilters-savedqueries-add-new-title": "Salvagardar los paramètres del filtre actual",
+ "rcfilters-savedqueries-already-saved": "Aquestes filtres son ja salvagardats. Vos cal modificar de paramètres per crear un novèl filtre salvagardat.",
+ "rcfilters-restore-default-filters": "Restaurar los filtres per defaut",
+ "rcfilters-clear-all-filters": "Escafar totes los filtres",
+ "rcfilters-show-new-changes": "Veire los cambiaments los mai recents",
+ "rcfilters-search-placeholder": "Filtrar los cambiaments (utilizatz lo menu o cercatz lo nom d'un filtre)",
"rcfilters-invalid-filter": "Filtre pas valid",
+ "rcfilters-empty-filter": "I a pas cap de filtre actiu. Se mòstran totas las contribucions.",
"rcfilters-filterlist-title": "Filtres",
+ "rcfilters-filterlist-whatsthis": "Cossí fonciona aquò ?",
+ "rcfilters-filterlist-feedbacklink": "Digatz nos que pensatz d'aquestas aisinas (novelas) per filtrar",
+ "rcfilters-highlightbutton-title": "Valorar los resultats",
"rcfilters-highlightmenu-title": "Causir una color",
+ "rcfilters-highlightmenu-help": "Causir una color per valorar aquesta proprietat",
"rcfilters-filterlist-noresults": "Cap de filtre pas trobat",
+ "rcfilters-noresults-conflict": "S'es pas trobat cap de resultat perque los critèris de cèrca son en conflicte",
"rcfilters-filtergroup-authorship": "Paternitat de las contribucions",
"rcfilters-filter-editsbyself-label": "Modificacions faitas per vos",
"rcfilters-filter-editsbyself-description": "Vòstras pròprias contribucions.",
"pagedata-text": "Esta página fornece uma interface de dados para páginas. Forneça o título da página no URL, usando a sintaxe de subpáginas, por favor.\n* Aplica-se a negociação de conteúdo com base no cabeçalho Accept do seu cliente. Isto significa que os dados da página serão fornecidos no formato preferido do seu cliente.",
"pagedata-not-acceptable": "Nenhum formato correspondente encontrado. Tipos MIME suportados: $1",
"pagedata-bad-title": "Título inválido: $1.",
- "unregistered-user-config": "Por razões de segurança as subpáginas de utilizador com JavaScript, CSS e JSON não podem ser carregadas para usuários não registados."
+ "unregistered-user-config": "Por razões de segurança as subpáginas de utilizador com JavaScript, CSS e JSON não podem ser carregadas para usuários não registados.",
+ "passwordpolicies": "Políticas de senha",
+ "passwordpolicies-summary": "Esta é uma lista da senha efetiva para os grupos de usuários definidos neste wiki.",
+ "passwordpolicies-group": "Grupo",
+ "passwordpolicies-policies": "Políticas",
+ "passwordpolicies-policy-minimalpasswordlength": "A senha deve ter pelo menos $1 {{PLURAL:$1|caráter|caracteres}}",
+ "passwordpolicies-policy-minimumpasswordlengthtologin": "A senha deve ter pelo menos $1 {{PLURAL:$1|caráter|caracteres}} para poder entrar",
+ "passwordpolicies-policy-passwordcannotmatchusername": "Senha não pode ser o mesmo que nome de usuário",
+ "passwordpolicies-policy-passwordcannotmatchblacklist": "A senha não pode corresponder senhas especificamente na lista negra",
+ "passwordpolicies-policy-maximalpasswordlength": "A senha deve ser menor que $1 {{PLURAL:$1|caráter|caracteres}}"
}
"pagedata-text": "Esta página fornece uma interface de dados para páginas. Forneça o título da página no URL, usando a sintaxe de subpáginas, por favor.\n* Aplica-se a negociação de conteúdo com base no cabeçalho Accept do seu cliente. Isto significa que os dados da página serão fornecidos no formato preferido do seu cliente.",
"pagedata-not-acceptable": "Não foi encontrado nenhum formato correspondente. Tipos MIME suportados: $1",
"pagedata-bad-title": "Título inválido: $1.",
- "unregistered-user-config": "Por razões de segurança as subpáginas de utilizador com JavaScript, CSS e JSON não podem ser carregadas para utilizadores não registados."
+ "unregistered-user-config": "Por razões de segurança as subpáginas de utilizador com JavaScript, CSS e JSON não podem ser carregadas para utilizadores não registados.",
+ "passwordpolicies": "Regras para palavras-passe",
+ "passwordpolicies-group": "Grupo",
+ "passwordpolicies-policies": "Normas e recomendações"
}
"expansion-depth-exceeded-category": "This message is used as a category name for a [[mw:Help:Tracking categories|tracking category]] where pages are placed automatically if the [[meta:Help:Expansion_depth|expansion depth]] of the preprocessor exceeds the limit.",
"expansion-depth-exceeded-category-desc": "Expansion depth exceeded category description. Shown on [[Special:TrackingCategories]].\n\nSee also:\n* {{msg-mw|Expansion-depth-exceeded-category}}",
"expansion-depth-exceeded-warning": "Error message shown when a page exceeded the [[meta:Help:Expansion_depth|expansion depth limit]] of the preprocessor.\n\nParameters:\n* $1 - (Unused) the value of the depth limit\n* $2 - (Unused) the value of the max depth limit\nSee also:\n* {{msg-mw|Expansion-depth-exceeded-category}}",
- "parser-unstrip-loop-warning": "{{Doc-important|Do not translate function name <code>unstrip</code>.}}\nThis error is shown when a parser extension tag such as <code><nowiki><pre></nowiki></code> includes a reference to itself in its own output.\n\nThe reference must be to the exact same invocation of the tag at the same location in the source, merely writing <code><nowiki><pre><pre></pre></pre></nowiki></code> will not do it.\n\nThis is usually impossible and unlikely to happen by accident, so translation is not essential.\n\n\"Unstrip\" refers to the internal function of the parser, called \"unstrip\", which recursively puts the output of parser functions in the place of the parser function call and which would enter an infinite loop in the situation above.\n\nSee also:\n*{{msg-mw|Parser-unstrip-recursion-limit}}",
- "unstrip-depth-warning": "{{doc-important|Do not translate function name <code>unstrip</code>.}}\nThis message is shown when the recursion limit for nested parser extension tags is exceeded.\n\nThis warning may be encountered due to input text like <code><nowiki><ref><ref><ref>...</ref></ref></ref></nowiki></code>.\n\nParameters:\n* $1 - the depth limit\n\n\"Unstrip\" refers to the internal function of the parser, called 'unstrip', which recursively puts the output of parser functions in the place of the parser function call.\n\nSee also:\n* {{msg-mw|Parser-unstrip-loop-warning}}",
- "unstrip-depth-category": "This message is used as the category name of a [[mw:Help:Tracking categories|tracking category]] in which pages are placed automatically if the unstrip recursion depth limit is exceeded.",
- "unstrip-size-warning": "{{doc-important|Do not translate function name <code>unstrip</code>.}}\nThis message is shown when the maximum expansion size for nested parser extension tags is exceeded.\n\nParameters:\n* $1 - the size limit\n\n\"Unstrip\" refers to the internal function of the parser, called 'unstrip', which recursively puts the output of parser functions in the place of the parser function call.\n\nSee also:\n* {{msg-mw|Parser-unstrip-loop-warning}}",
- "unstrip-size-category": "This message is used as the category name of a [[mw:Help:Tracking categories|tracking category]] in which pages are placed automatically if the unstrip expansion size limit is exceeded.",
+ "parser-unstrip-loop-warning": "{{Doc-important|Do not translate function name <code>unstrip</code>.}}\nThis error is shown when a parser extension tag such as <code><nowiki><pre></nowiki></code> includes a reference to itself in its own output.\n\nThe reference must be to the exact same invocation of the tag at the same location in the source, merely writing <code><nowiki><pre><pre></pre></pre></nowiki></code> will not do it.\n\nThis is usually impossible and unlikely to happen by accident, so translation is not essential.\n\n\"Unstrip\" refers to the internal function of the parser, called \"unstrip\", which recursively puts the output of parser functions in the place of the parser function call and which would enter an infinite loop in the situation above.\n\nSee also:\n*{{msg-mw|Limitreport-unstrip-depth}}\n*{{msg-mw|Limitreport-unstrip-size}}\n*{{msg-mw|Unstrip-depth-category}}\n*{{msg-mw|Unstrip-depth-warning}}\n*{{msg-mw|Unstrip-size-category}}\n*{{msg-mw|Unstrip-size-warning}}",
+ "unstrip-depth-warning": "{{doc-important|Do not translate function name <code>unstrip</code>.}}\nThis message is shown when the recursion limit for nested parser extension tags is exceeded.\n\nThis warning may be encountered due to input text like <code><nowiki><ref><ref><ref>...</ref></ref></ref></nowiki></code>.\n\nParameters:\n* $1 - the depth limit\n\n\"Unstrip\" refers to the internal function of the parser, called 'unstrip', which recursively puts the output of parser functions in the place of the parser function call.\n\nSee also:\n*{{msg-mw|Limitreport-unstrip-depth}}\n*{{msg-mw|Limitreport-unstrip-size}}\n*{{msg-mw|Parser-unstrip-loop-warning}}\n*{{msg-mw|Unstrip-depth-category}}\n*{{msg-mw|Unstrip-size-category}}\n*{{msg-mw|Unstrip-size-warning}}",
+ "unstrip-depth-category": "{{Doc-important|Do not translate function name <code>unstrip</code>.}}\nThis message is used as the category name of a [[mw:Help:Tracking categories|tracking category]] in which pages are placed automatically if the unstrip recursion depth limit is exceeded.\n\n\"Unstrip\" refers to the internal function of the parser, called \"unstrip\", which recursively puts the output of parser functions in the place of the parser function call.\n\nSee also:\n*{{msg-mw|Limitreport-unstrip-depth}}\n*{{msg-mw|Limitreport-unstrip-size}}\n*{{msg-mw|Parser-unstrip-loop-warning}}\n*{{msg-mw|Unstrip-depth-warning}}\n*{{msg-mw|Unstrip-size-category}}\n*{{msg-mw|Unstrip-size-warning}}",
+ "unstrip-size-warning": "{{doc-important|Do not translate function name <code>unstrip</code>.}}\nThis message is shown when the maximum expansion size for nested parser extension tags is exceeded.\n\nParameters:\n* $1 - the size limit\n\n\"Unstrip\" refers to the internal function of the parser, called 'unstrip', which recursively puts the output of parser functions in the place of the parser function call.\n\nSee also:\n*{{msg-mw|Limitreport-unstrip-depth}}\n*{{msg-mw|Limitreport-unstrip-size}}\n*{{msg-mw|Parser-unstrip-loop-warning}}\n*{{msg-mw|Unstrip-depth-category}}\n*{{msg-mw|Unstrip-depth-warning}}\n*{{msg-mw|Unstrip-size-category}}",
+ "unstrip-size-category": "{{Doc-important|Do not translate function name <code>unstrip</code>.}}\nThis message is used as the category name of a [[mw:Help:Tracking categories|tracking category]] in which pages are placed automatically if the unstrip expansion size limit is exceeded.\n\n\"Unstrip\" refers to the internal function of the parser, called \"unstrip\", which recursively puts the output of parser functions in the place of the parser function call.\n\nSee also:\n*{{msg-mw|Limitreport-unstrip-depth}}\n*{{msg-mw|Limitreport-unstrip-size}}\n*{{msg-mw|Parser-unstrip-loop-warning}}\n*{{msg-mw|Unstrip-depth-category}}\n*{{msg-mw|Unstrip-depth-warning}}\n*{{msg-mw|Unstrip-size-warning}}",
"converter-manual-rule-error": "Used as error message when a manual conversion rule for the [[mw:Language_converter|language converter]] has errors. For example it's not using the correct syntax, or not supplying text in all variants.",
"undo-success": "Text on special page to confirm edit revert. You arrive on this page by clicking on the \"undo\" link on a revision history special page.\n\n{{Identical|Undo}}",
"undo-failure": "Message appears if an attempt to revert an edit by clicking the \"undo\" link on the page history fails.\n\nSee also:\n* {{msg-mw|Undo-norev}}\n* {{msg-mw|Undo-nochange}}\n{{Identical|Undo}}",
"limitreport-expansiondepth-value": "{{optional}}\nFormat for the \"Highest expansion depth\" row in the limit report table.\n\nParameters:\n* $1 - the depth\n* $2 - the maximum",
"limitreport-expensivefunctioncount": "Label for the \"Expensive parser function count\" row in the limit report table",
"limitreport-expensivefunctioncount-value": "{{optional}}\nFormat for the \"Expensive parser function count\" row in the limit report table.\n\nParameters:\n* $1 - the usage\n* $2 - the maximum",
- "limitreport-unstrip-depth": "Label for the \"unstrip depth\" row in the limit report table. \"Unstrip\" is a MediaWiki function name and as such does not need to be translated.",
+ "limitreport-unstrip-depth": "{{Doc-important|Do not translate function name <code>unstrip</code>.}}\nLabel for the \"unstrip depth\" row in the limit report table.\n\n\"Unstrip\" refers to the internal function of the parser, called \"unstrip\", which recursively puts the output of parser functions in the place of the parser function call.\n\nSee also:\n*{{msg-mw|Limitreport-unstrip-size}}\n*{{msg-mw|Parser-unstrip-loop-warning}}\n*{{msg-mw|Unstrip-depth-category}}\n*{{msg-mw|Unstrip-depth-warning}}\n*{{msg-mw|Unstrip-size-category}}\n*{{msg-mw|Unstrip-size-warning}}",
"limitreport-unstrip-depth-value": "{{optional}}\nFormat for the \"unstrip depth\" row in the limit report table.\n\nParameters:\n* $1 - the usage\n* $2 - the maximum",
- "limitreport-unstrip-size": "Label for the \"unstrip size\" row in the limit report table. \"Unstrip\" is a MediaWiki function name and as such does not need to be translated.",
+ "limitreport-unstrip-size": "{{Doc-important|Do not translate function name <code>unstrip</code>.}}\nLabel for the \"unstrip size\" row in the limit report table.\n\n\"Unstrip\" refers to the internal function of the parser, called \"unstrip\", which recursively puts the output of parser functions in the place of the parser function call.\n\nSee also:\n*{{msg-mw|Limitreport-unstrip-depth}}\n*{{msg-mw|Parser-unstrip-loop-warning}}\n*{{msg-mw|Unstrip-depth-category}}\n*{{msg-mw|Unstrip-depth-warning}}\n*{{msg-mw|Unstrip-size-category}}\n*{{msg-mw|Unstrip-size-warning}}",
"limitreport-unstrip-size-value": "Format for the \"unstrip size\" row in the limit report table.\n\nParameters:\n* $1 - the usage\n* $2 - the maximum\n{{Identical|Byte}}",
"expandtemplates": "{{doc-special|ExpandTemplates}}\nThe name of the [[mw:Extension:ExpandTemplates|Expand Templates extension]].",
"expand_templates_intro": "This is the explanation given in the heading of the [[Special:ExpandTemplates]] page; it describes its functionality to the users.\nFor more information, see [[mw:Extension:ExpandTemplates]]",
"subject-preview": "Andeprime de l'oggette:",
"previewerrortext": "'N'errore ha assute quanne ste facive l'andeprime de le cangiaminde.",
"blockedtitle": "L'utende è blocchete",
- "blockedtext": "''''U nome de l'utende o l'indirizze IP ha state bloccate.'''\n\n'U blocche ha state fatte da $1.\n'U mutive date jè ''$2''.\n\n* 'U Blocche accumenze: $8\n* 'U Blocche spicce: $6\n* Tipe de blocche: $7\n\nTu puè condatta $1 o n'otre [[{{MediaWiki:Grouppage-sysop}}|amministratore]] pe 'ngazzarte sus a 'u blocche.\nTu non ge puè ausà 'u strumende 'manne 'na mail a stu utende' senza ca mitte n'indirizze e-mail valide jndr'à le\n[[Special:Preferences|preferenze tue]] e ce è state blocchete sus 'a l'use sue.\nL'IP ca tine mò jè $3 e 'u codece d'u blocche jè #$5.\nPe piacere mitte ste doje 'mbormaziune ce manne 'na richieste de sblocche.",
+ "blockedtext": "<strong>'U nome de l'utende o l'indirizze IP ha state bloccate.</strong>\n\n'U blocche ha state fatte da $1.\n'U mutive date jè <em>$2</em>.\n\n* 'U Blocche accumenze: $8\n* 'U Blocche spicce: $6\n* Tipe de blocche: $7\n\nTu puè condatta $1 o n'otre [[{{MediaWiki:Grouppage-sysop}}|amministratore]] pe 'ngazzarte sus a 'u blocche.\nTu non ge puè ausà 'u strumende \"{{int:emailuser}}\" senza ca mitte n'indirizze email valide jndr'à le\n[[Special:Preferences|preferenze tune]] e ce è state bloccate sus a l'use sue.\nL'IP ca tine mò jè $3 e 'u codece d'u blocche jè #$5.\nPe piacere mitte ste doje 'mbormaziune ce manne 'na richieste de sblocche.",
"autoblockedtext": "L'indirizze IP tue ha state automaticamende blocchete purcè ha state ausete da n'otre utende, ca avère state blocchete da $1.\n'U mutive date jè 'u seguende:\n\n:''$2''\n\n* Inizie d'u blocche: $8\n* Scadenze d'u blocche: $6\n* Blocche 'ndise: $7\n\nTu puè cundattà $1 o une de l'otre [[{{MediaWiki:Grouppage-sysop}}|amministrature]] pe parà de stu probbleme.\n\nVide Bbuene ca tu non ge puè ausà 'a funziona \"manne n'e-mail a stu utende\" senze ca tu tìne 'n'indirizze e-mail valide e reggistrete jndr'à seziona [[Special:Preferences|me piace accussì]] e tu non ge sinde blocchete da ausarle.\n\nL'indirizze IP corrende jè $3, e 'u codece d'u blocche jè #$5.\nPe piacere mitte tutte le dettaglie ca ponne essere utile pe le richieste tue.",
"blockednoreason": "nisciune mutive",
"whitelistedittext": "Tu ha $1 pàggene da cangià.",
"recentchangeslinked-feed": "Cangiaminde culleghete",
"recentchangeslinked-toolbox": "Cangiaminde culleghete",
"recentchangeslinked-title": "Cangiaminde culleghete a \"$1\"",
- "recentchangeslinked-summary": "Mitte 'u nome de 'na pàgene pe 'ndrucà le cangiaminde a le pàggene ca sò collegate o ca appondane a sta pàgene. (Pe 'ndrucà le membre de 'na categorije, mitte Categoria:Nome d'a categorije). Le cangiaminde a le pàggene ca stonne jndr'à l'elenghe de [[Special:Watchlist|le Pàggene condrollate]] stonne in <strong>grascette</strong>.",
+ "recentchangeslinked-summary": "Mitte 'u nome de 'na pàgene pe 'ndrucà le cangiaminde a le pàggene ca sò collegate o ca appondane a sta pàgene. (Pe 'ndrucà le membre de 'na categorije, mitte {{ns:category}}:Nome d'a categorije). Le cangiaminde a le pàggene ca stonne jndr'à l'elenghe de [[Special:Watchlist|le Pàggene condrollate]] stonne in <strong>grascette</strong>.",
"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",
"rcfilters-restore-default-filters": "Восстановить фильтры по умолчанию",
"rcfilters-clear-all-filters": "Очистить все фильтры",
"rcfilters-show-new-changes": "Последние изменения",
- "rcfilters-search-placeholder": "Ð\98зменениÑ\8f Ñ\84илÑ\8cÑ\82Ñ\80ов (используйте меню или ищите по названию фильтра)",
+ "rcfilters-search-placeholder": "ФилÑ\8cÑ\82Ñ\80оваÑ\82Ñ\8c изменениÑ\8f (используйте меню или ищите по названию фильтра)",
"rcfilters-invalid-filter": "Недопустимый фильтр",
"rcfilters-empty-filter": "Нет активных фильтров. Показываются все правки.",
"rcfilters-filterlist-title": "Фильтры",
"movenosubpage": "У этой страницы нет подстраниц.",
"movereason": "Причина:",
"revertmove": "возврат",
- "delete_and_move_text": "Страница с именем «[[:$1]]» уже существует. \nХотите удалить её, чтобы сделать возможным переименование?",
+ "delete_and_move_text": "ЦелеваÑ\8f Ñ\81траница с именем «[[:$1]]» уже существует. \nХотите удалить её, чтобы сделать возможным переименование?",
"delete_and_move_confirm": "Да, удалить эту страницу",
"delete_and_move_reason": "Удалено для возможности переименования «[[$1]]»",
"selfmove": "Невозможно переименовать страницу: исходное и новое имя страницы совпадают.",
"limitreport-expensivefunctioncount-value": "$1/$2",
"limitreport-unstrip-depth": "Глубинная рекурсия Unstrip",
"limitreport-unstrip-depth-value": "$1/$2",
- "limitreport-unstrip-size": "Ð\9fоÑ\81ле Ñ\80аÑ\81Ñ\88иÑ\80ениÑ\8f Ñ\80азмеÑ\80 Unstrip",
+ "limitreport-unstrip-size": "РазмеÑ\80 Unstrip поÑ\81ле Ñ\80аÑ\81кÑ\80Ñ\8bÑ\82иÑ\8f вклÑ\8eÑ\87ений",
"limitreport-unstrip-size-value": "$1/$2 {{PLURAL:$2|байт|байта|байт}}",
"expandtemplates": "Развёртка шаблонов",
"expand_templates_intro": "Эта служебная страница преобразует текст, рекурсивно разворачивая все шаблоны в нём.\nТакже развёртке подвергаются функции парсера\n<code><nowiki>{{#language:…}}</nowiki></code> и переменные вида\n<code><nowiki>{{CURRENTDAY}}</nowiki></code> — в общем, всё внутри двойных фигурных скобок.",
"actionthrottled": "Asion ritardà",
"actionthrottledtext": "Come misura de sicuresa contro e o spam, l'esecusion de alcune asion e a xè limità a on numaro masimo de volte en on determinà periodo de tenpo, limite che en questo caso xè sta superà. Se prega de riprovare tra qualche minuto.",
"protectedpagetext": "Sta pàjina ła xe stà proteta de modo che nisun posa canbiarla o far altre operasion.",
- "viewsourcetext": "Se pole vardar e copiar el testo de sta pagina:",
+ "viewsourcetext": "Te poli vardar e copiar el testo de sta pagina.",
"viewyourtext": "Xè posibile vedàre e copiare el codexe sorzente de le '''to modifighe''' a sta pajina:",
"protectedinterface": "Sta pàjina ła gà drento un testo de l'interfacia utente del software de sto sito, quindi la xe proteta parché nisuni ła strusie.\nPar xontar o modifegar tradusion par tute łe wiki doparar [https://translatewiki.net/ translatewiki.net], el projeto de locałixasion de MediaWiki.",
"editinginterface": "'''Ocio:''' El testo de sta pàjina el fa parte de l'interfacia utente del sito. Tute łe modifeghe aportae a sta pajina se riflete so i mesaji visuałixà par tuti i utenti so sta wiki.\nPar xontare o modifegar łe tradusion vałide so tute łe wiki, considera ła posibiłità de doparar [https://translatewiki.net/wiki/Main_Page?setlang=vec translatewiki.net], el projeto MediaWiki par ła localixasion.",
"permissionserrorstext": "Nò se dispone dei parmesi nesessari ad eseguir l'asion richiesta, par {{PLURAL:$1|el seguente motivo|i seguenti motivi}}:",
"permissionserrorstext-withaction": "Nò se dispone dei parmesi nesesari par $2, par {{PLURAL:$1|el seguente modivo|i seguenti modivi}}:",
"recreate-moveddeleted-warn": "'''Ocio: te stè par ricrear na pagina zà scancelà precedentemente.'''\n\nPar piaser assicùrete che sia dal bon el caso de 'ndar vanti a modificar sta pagina.\nL'elenco de i relativi spostamenti e scancelazion el vien riportà qua de seguito par comodità:",
- "moveddeleted-notice": "Sta pagina la xe stà scancelà.\nL'elenco dei so spostamenti e scancelassion el vien riportà qua soto par informassion.",
+ "moveddeleted-notice": "Sta pagina la xe stà scancelà.\nL'elenco dei so spostamenti, protesion e scancelassion te lo cati qua soto par informassion.",
"log-fulllog": "Varda registro conpleto",
"edit-hook-aborted": "Modifica abortìa da parte de l'hook.\nNo xe stà dà nissuna spiegazion in merito.",
"edit-gone-missing": "No se riesse a agiornar la pàxena.\nPararìa che la sìpia stà scancelà.",
"page_first": "prima",
"page_last": "ultima",
"histlegend": "Confronto tra version: segna le casèle de le version che te voli confrontar e struca Invio o el boton in fondo.\n\nLegenda: '''({{int:cur}})''' = difarense co l'ultima version, '''({{int:last}})''' = difarense co la version subito prima, '''{{int:minoreditletter}}''' = canbiamento picenin",
- "history-fieldset-title": "Ruma in te la storia",
+ "history-fieldset-title": "Ruma in te le revision",
"history-show-deleted": "Solo quei scancelà",
"histfirst": "pi vecia",
"histlast": "pi nova",
"editundo": "tira indrìo",
"diff-empty": "(Nissuna difarensa)",
"diff-multi-sameuser": "({{PLURAL:$1|Una revision intermedia|$1 revision intermedie}} del stesso utente mia mostrà)",
+ "diff-multi-otherusers": "({{PLURAL:$1|Na version intermedia|$1 version intermedie}} de {{PLURAL:$2|n'altro utente|$2 utenti}} mia mostrà)",
"diff-multi-manyusers": "({{PLURAL:$1|Una revision intermedia|$1 revision intermedie}} de pi de {{PLURAL:$2|un utente|$2 utenti}} mia mostrà)",
"difference-missing-revision": "{{PLURAL:$2|Na version|$2 version}} de sta difarensa ($1) {{PLURAL:$2|nó ła xe sta trovà|nó łe xe stae trovae}}.\n\nCuesto se verifega de sołito seguendo un ligamente vecio de un dif a na pàjina scansełà.\nI detaji i pol esar catai inte'l [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} registro de łe scansełasion].",
"searchresults": "Risultati de la riserca",
"search-redirect": "(rimando da $1)",
"search-section": "(sesion $1)",
"search-category": "(categoria $1)",
+ "search-file-match": "(catà drento el file)",
"search-suggest": "Sercavito forsi: $1",
"search-interwiki-caption": "Projeti fradei",
"search-interwiki-default": "Risultati da $1:",
"recentchanges": "Ultimi canbiamenti",
"recentchanges-legend": "Prefarense par i ultimi canbiamenti",
"recentchanges-summary": "Qua se vede i ultimi canbiamenti fati a sto sito.",
+ "recentchanges-noresult": "No gò catà nissuna modifica in sto periodo co sti criteri de riserca.",
"recentchanges-feed-description": "Tien tracia dei ultimi canbiamenti fati a sto sito",
"recentchanges-label-newpage": "Sta modifica la ga creà na pagina nova",
"recentchanges-label-minor": "Sto qua el xe un canbiamento picenin",
"recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (varda anca [[Special:NewPages|l'elenco de le pagine nove]])",
"rcfilters-filter-reviewstatus-manual-label": "Verificà manualmente",
"rcfilters-filter-reviewstatus-auto-label": "Verificà en automatico.",
- "rcnotefrom": "Qui di seguito sono elencate le modifiche da '''$2''' (fino a '''$1''').",
+ "rcnotefrom": "Qua de soto {{PLURAL:$5|xe mostrà la modifica fata|xe mostrà le modifiche fate }} da <strong>$3, $4</strong> (se ghe ne vede fin a <strong>$1</strong>).",
"rclistfrom": "Mostra i canbiamenti fati da ƚe $2 del $3",
"rcshowhideminor": "$1 i canbiamenti picenini",
"rcshowhideminor-show": "Mostra",
"recentchangeslinked-feed": "Canbiamenti ligà a sta pagina",
"recentchangeslinked-toolbox": "Canbiamenti ligà a sta pagina",
"recentchangeslinked-title": "Canbiamenti ligà a \"$1\"",
- "recentchangeslinked-summary": "Sti qua i xe i canbiamenti fati ultimamente a pagine pontà da na pagina indicà da ti (o a pagine de na categoria indicà da ti).\nLe pagine [[Special:Watchlist|tegnùe d'ocio]] le xe in '''grosso'''.",
+ "recentchangeslinked-summary": "Scrivi el nome de na pagina pa' védar i canbiamenti fati a le pagine pontà da ela. (Pa' védar le pagine de na categoria, scrivi {{ns:category}}:Nome de la categoria). I canbiamenti a le pagine [[Special:Watchlist|tegnùe d'ocio]] i xe in <strong>groso</strong>.",
"recentchangeslinked-page": "Nome de la pagina:",
"recentchangeslinked-to": "Mostra solo i canbiamenti a le pagine ligà a quela indicà",
"upload": "Carga un file",
"booksources-invalid-isbn": "El nùmaro ISBN inserìo no'l xe mia valido: controla de novo se te lo ghè copià justo da la fonte originale.",
"magiclink-tracking-isbn": "Pàgine che dòpara coƚegamenti magisi ISBN",
"specialloguserlabel": "Asion efetuà da:",
- "speciallogtitlelabel": "Asion efetuà so:",
+ "speciallogtitlelabel": "Asion efetuà so (titolo de la pagina o {{ns:user}}:nome utente):",
"log": "Registri",
"all-logs-page": "Tuti i registri pùblici",
"alllogstext": "Vixualixazion unificà de tuti i registri disponibili de {{SITENAME}}.\nTe podi restrénzar i criteri de riçerca selezionando el tipo de registro, el nome utente, o la pàxena interessà (ocio che sti ultimi du i distingue tra majuscolo e minuscolo).",
"unwatchthispage": "Desmeti de tegner d'ocio",
"notanarticle": "Sta pagina no la xè na pagina de contenuto",
"notvisiblerev": "La revision la xe stà scancelà",
- "watchlist-details": "Te sì drio tegner d'ocio {{PLURAL:$1|una pagina (e la so pagina de discussion)|$1 pagine (e le so pagine de discussion)}}.",
+ "watchlist-details": "Te sì drio tegner d'ocio {{PLURAL:$1|una pagina|$1 pagine}} (più le pagine de discussion).",
"wlheader-enotif": "Xe ativà la notifica via e-mail.",
- "wlheader-showupdated": "Le pagine che xe stà canbià da la to ultima visita le xe segnà in '''grosso'''",
- "wlnote": "Cuà soto te cati {{PLURAL:$1|'l ultimo canbiamento|i ultimi '''$1''' canbiamenti}} inte {{PLURAL:$2|l'ultema ora|łe ultime '''$2''' ore}}; i dati i xe axornai a łe $4 del $3.",
+ "wlheader-showupdated": "Le pagine che xe stà canbià da l'ultima olta che te le ghè viste, a le xe segnà in <strong>groso</strong>.",
+ "wlnote": "Cuà soto te cati {{PLURAL:$1|'l ultimo canbiamento|i ultimi <strong>$1</strong> canbiamenti}} inte {{PLURAL:$2|l'ultema ora|łe ultime <strong>$2</strong> ore}}; i dati i xe axornai a łe $4 del $3.",
"wlshowlast": "Mostra le ultime $1 ore $2 zorni",
"watchlist-options": "Inpostassion de le pagine tegnùe d'ocio",
"watching": "Taco a tegner d'ocio...",
"tooltip-feed-rss": "Feed RSS par sta pagina",
"tooltip-feed-atom": "Feed Atom par sta pagina",
"tooltip-t-contributions": "La lista de i contribui de {{GENDER:$1|sto|sta}} utente",
- "tooltip-t-emailuser": "Invia on mesajo e-mail a sto utente",
+ "tooltip-t-emailuser": "Màndeghe na e-mail a {{GENDER:$1|sto utente qua}}",
"tooltip-t-upload": "Carga file",
"tooltip-t-specialpages": "Lista de tute le pagine speciali",
"tooltip-t-print": "Version stanpabile de sta pagina",
"pageinfo-length": "Longhessa de la pagina (in byte)",
"pageinfo-article-id": "ID de la pagina",
"pageinfo-language": "Lengua del contenuto de la pagina",
- "pageinfo-robot-policy": "Stato par i motori de riserca",
+ "pageinfo-content-model": "Modèl del contegnùo de la pagina",
+ "pageinfo-robot-policy": "Indexixasion par i robot",
"pageinfo-robot-index": "Parmesso",
"pageinfo-robot-noindex": "Vietà",
"pageinfo-watchers": "Nùmaro de utenti che tien d'ocio sta pagina",
"pageinfo-few-watchers": "Manco de $1 {{PLURAL:$1|oservador|oservadori}}",
- "pageinfo-redirects-name": "Rimandi verso sta pagina",
+ "pageinfo-redirects-name": "Nùmaro de rimandi verso sta pagina",
"pageinfo-subpages-name": "Sotopagine de sta pagina",
"pageinfo-subpages-value": "$1 ($2 {{PLURAL:$2|rimandi}}; $3 {{PLURAL:$3|no rimandi}})",
"pageinfo-firstuser": "Creador de sta pagina",
"watchlistedit-raw-added": "Xe stà zontà {{PLURAL:$1|una pagina|$1 pagine}}:",
"watchlistedit-raw-removed": "Xe stà eliminà {{PLURAL:$1|una pagina|$1 pagine}}:",
"watchlistedit-clear-titles": "Pagine:",
+ "watchlisttools-clear": "Desvoda la lista dei tegnùi d'ocio",
"watchlisttools-view": "Varda i canbiamenti",
"watchlisttools-edit": "Varda e canbia le pagine tegnùe d'ocio",
"watchlisttools-raw": "Canbia la lista in formato testo",
"version-libraries-license": "Licensa",
"version-libraries-description": "Descrision",
"version-libraries-authors": "Autori",
- "redirect": "Rimando par file, utente, pagina o ID de version.",
+ "redirect": "Rimando par file, utente, pagina, revision o registro",
"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:",
"redirect-value": "Valor:",
"redirect-user": "ID utente",
+ "redirect-page": "ID de la pagina",
"redirect-revision": "Revision de la pagina",
"redirect-file": "Nome del file",
"redirect-not-exists": "Valor mia catà",
"htmlform-yes": "Sì",
"htmlform-chosen-placeholder": "Selessiona na opzione",
"logentry-delete-delete": "$1 {{GENDER:$2|el|la}} ga scansełà ła pajina $3",
- "logentry-delete-restore": "$1 {{GENDER:$2|el|la}} ga ripristinà \"$3\"",
+ "logentry-delete-restore": "$1 {{GENDER:$2|el|la}} ga ripristinà $3 ($4)",
"logentry-delete-event": "$1 {{GENDER:$2|el|la}} ga canbià ła vixibiłità de {{PLURAL:$5|n'asion del registro|$5 asion del registro}} de \"$3\": $4",
"logentry-delete-revision": "$1 {{GENDER:$2|el|la}} ga canbià ła vixibiłità de {{PLURAL:$5|na revixion|$5 revixion}} de ła pajina\"$3\": $4",
"logentry-delete-event-legacy": "$1 {{GENDER:$2|el|la}} ga canbià ła vixibiłità de calche asion del registro de \"$3\"",
"logentry-rights-rights-legacy": "$1 {{GENDER:$2|el|la}} ga canbià l'apartenensa a grupi de $3",
"logentry-rights-autopromote": "$1 {{GENDER:$2|el|la}} xe stà automategamente promoso/a da $4 a $5",
"logentry-upload-upload": "$1 {{GENDER:$2|el|la}} gà cargà $3",
+ "logentry-upload-overwrite": "$1 {{GENDER:$2|el|la}} gà cargà na version nova de $3.",
"rightsnone": "(nissun)",
"feedback-adding": "Inserimento del feedback inte ła pàjina...",
"feedback-back": "Indrìo",
"mw-widgets-dateinput-placeholder-day": "AAAA-MM-GG",
"mw-widgets-dateinput-placeholder-month": "AAAA-MM",
"mw-widgets-titleinput-description-redirect": "rimando a $1",
- "randomrootpage": "Pagina raìsa caxuale"
+ "randomrootpage": "Pagina raìsa a ocio"
}
"Asdfugil",
"Deryck Chan",
"Hello903hello",
- "Fitoschido"
+ "Fitoschido",
+ "Kanashimi"
]
},
"tog-underline": "連結加底線:",
"recentchanges-label-unpatrolled": "呢次編輯重未巡查過",
"recentchanges-label-plusminus": "頁面位元組大細變化",
"recentchanges-legend-heading": "<strong>標記:</strong>",
- "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (睇埋[[Special:NewPages|新開版]])",
+ "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (睇埋[[Special:NewPages|新版一覽]])",
"recentchanges-submit": "顯示",
"rcfilters-tag-remove": "剷走 $1",
"rcfilters-legend-heading": "<strong>縮寫一覽:</strong>",
"exif-ycbcrpositioning-1": "置中",
"exif-dc-contributor": "貢獻者",
"exif-dc-date": "日子",
- "exif-dc-publisher": "發佈者",
+ "exif-dc-publisher": "發布者",
"exif-dc-rights": "權",
"exif-rating-rejected": "拒絕咗",
"exif-isospeedratings-overflow": "超出咗65535嘅限制",
"和平至上",
"Sanmosa",
"Dongzn",
- "Shangkuanlc"
+ "Shangkuanlc",
+ "Kanashimi"
]
},
"tog-underline": "底線標示連結:",
"watchthis": "監視此頁面",
"savearticle": "儲存頁面",
"savechanges": "儲存變更",
- "publishpage": "發佈頁面",
- "publishchanges": "發佈變更",
+ "publishpage": "發布頁面",
+ "publishchanges": "發布變更",
"savearticle-start": "儲存頁面…",
"savechanges-start": "儲存變更…",
- "publishpage-start": "發佈頁面…",
- "publishchanges-start": "發佈變更…",
+ "publishpage-start": "發布頁面…",
+ "publishchanges-start": "發布變更…",
"preview": "預覽",
"showpreview": "顯示預覽",
"showdiff": "顯示變更",
"exif-iimcategory": "分類",
"exif-iimsupplementalcategory": "補充分類",
"exif-datetimeexpires": "於此日期後請勿使用",
- "exif-datetimereleased": "發佈於",
+ "exif-datetimereleased": "發布於",
"exif-originaltransmissionref": "原始傳輸位置代碼",
"exif-identifier": "識別碼",
"exif-lens": "使用鏡頭",
'Allmessages' => [ 'TodosLosMensajes', 'Todos_los_mensajes' ],
'AllMyUploads' => [ 'TodasMisSubidas', 'Todas_mis_subidas', 'TodosMisArchivos', 'Todos_mis_archivos' ],
'Allpages' => [ 'Todas', 'Todas_las_páginas' ],
+ 'ApiHelp' => [ 'AyudaAPI', 'Ayuda_de_la_API' ],
+ 'ApiSandbox' => [ 'Zona_de_pruebas_de_la_API' ],
'Ancientpages' => [ 'PáginasAntiguas', 'Páginas_antiguas' ],
+ 'Autoblocklist' => [ 'Lista_de_bloqueos_automáticos' ],
'Badtitle' => [ 'Título_incorrecto' ],
'Blankpage' => [ 'PáginaEnBlanco', 'Blanquear_página', 'BlanquearPágina', 'Página_en_blanco' ],
'Block' => [ 'Bloquear' ],
'Myuploads' => [ 'MisArchivosSubidos', 'Mis_archivos_subidos' ],
'Newimages' => [ 'NuevasImágenes', 'Nuevas_imágenes' ],
'Newpages' => [ 'PáginasNuevas', 'Páginas_nuevas' ],
+ 'PasswordPolicies' => [ 'Política_de_contraseñas' ],
'PasswordReset' => [ 'RestablecerContraseña', 'Restablecer_contraseña' ],
'PermanentLink' => [ 'EnlacePermanente', 'Enlace_permanente' ],
'Preferences' => [ 'Preferencias' ],
NS_CATEGORY => "Dalala",
NS_CATEGORY_TALK => "Lo'iya_dalala",
];
+
+$specialPageAliases = [
+ 'Activeusers' => [ 'TaOhu\'uwoAktif' ],
+ 'Allmessages' => [ 'Nga\'amilaTahuli' ],
+ 'AllMyUploads' => [ 'Nga\'amilaDiletohu\'u', 'Nga\'amilaBerkasi\'u' ],
+ 'Allpages' => [ 'Nga\'amilaHalaman' ],
+ 'ApiHelp' => [ 'ApiWubodu' ],
+ 'ApiSandbox' => [ 'ApiBakiLoHungayo' ],
+ 'Ancientpages' => [ 'HalamanMulolo' ],
+ 'AutoblockList' => [ 'AutoblockDaputari', 'DaputariAutoblocks' ],
+ 'Badtitle' => [ 'JudulMoleto' ],
+ 'Blankpage' => [ 'HalamanKosongi' ],
+ 'Block' => [ 'BlockTaOhu\'uwo' ],
+ 'Booksources' => [ 'BukuBungo' ],
+ 'BotPasswords' => [ 'BotTaheU\'unti' ],
+ 'BrokenRedirects' => [ 'BrokenLopobale' ],
+ 'Categories' => [ 'Dalala' ],
+ 'ChangeContentModel' => [ 'Boli\'aTuangoModel' ],
+ 'ChangeCredentials' => [ 'Boli\'aKredensial' ],
+ 'ChangeEmail' => [ 'Boli\'aEmail' ],
+ 'ChangePassword' => [ 'Boli\'aPassword', 'Tulo\'iPass', 'Tulo\'iPassword' ],
+ 'ComparePages' => [ 'PopotadengaHlaman' ],
+ 'Confirmemail' => [ 'KomfirmEmail' ],
+ 'Contributions' => [ 'Kontributor', 'Kontrib' ],
+ 'CreateAccount' => [ 'MohutuAkun' ],
+ 'Deadendpages' => [ 'HalamanBuntu' ],
+ 'DeletedContributions' => [ 'LulutaKontribusi' ],
+ 'DoubleRedirects' => [ 'DubuluRedirects' ],
+ 'EditTags' => [ 'Boli\'aTags' ],
+ 'EditWatchlist' => [ 'Boli\'aHeAwasiyalo' ],
+ 'Emailuser' => [ 'EmailTaOhu\'uwo', 'Email' ],
+ 'ExpandTemplates' => [ 'DuhengiTemplates' ],
+ 'Export' => [ 'Ekspor' ],
+ 'Fewestrevisions' => [ 'RevisiNgo\'idi' ],
+ 'FileDuplicateSearch' => [ 'LoloheBerkasDubulu' ],
+ 'GoToInterwiki' => [ 'NtaliOdeInterwiki' ],
+ 'Invalidateemail' => [ 'TilalaTanggalEmail' ],
+ 'BlockList' => [ 'BlockDaputari', 'DaputariBlocks', 'IPBlockDputari' ],
+ 'LinkSearch' => [ 'LoloheWumbuta' ],
+ 'LinkAccounts' => [ 'WumbutaAkun' ],
+ 'Listadmins' => [ 'DaputariAdmins' ],
+ 'Listbots' => [ 'DaputariBots' ],
+ 'Listfiles' => [ 'DaputariBerkas', 'BerkasDaputari', 'DaputariGambari' ],
+ 'Listgrouprights' => [ 'DaputariGroupRights', 'TaOhu\'uwoGroupRights' ],
+ 'Listgrants' => [ 'DaputariGrants' ],
+ 'Listredirects' => [ 'DaputariLopobale' ],
+ 'ListDuplicatedFiles' => [ 'DaputariBerkasDubulu', 'DaputariBerkasDubulu' ],
+ 'Listusers' => [ 'DaputariTaOhu\'uwo', 'TaOhu\'uwoDaputari' ],
+ 'Lonelypages' => [ 'HalamanTutuwawu', 'OrphanedHalaman' ],
+ 'Longpages' => [ 'HalamanHayahaya\'o' ],
+ 'MediaStatistics' => [ 'MediaStatistik' ],
+ 'MIMEsearch' => [ 'MIMELolohe' ],
+ 'Mostcategories' => [ 'DalalaUda\'a' ],
+ 'Mostimages' => [ 'WumbutaBerkasUda\'a', 'BerkasUda\'a', 'GambariUdara' ],
+ 'Mostinterwikis' => [ 'InterwikiUda\'a' ],
+ 'Mostlinked' => [ 'HalamanWumbutaUda\'a', 'WumbutaUda\'a' ],
+ 'Mostlinkedcategories' => [ 'WumbutaDalalaUda\'a', 'DalalaUda\'aPilomake' ],
+ 'Mostlinkedtemplates' => [ 'HalamanTranscludedUda\'a', 'WumbutaUda\'aTemplate', 'TemplateUda\'aPilomake' ],
+ 'Mostrevisions' => [ 'Boli\'oUda\'a' ],
+ 'Movepage' => [ 'MoheyiHalaman' ],
+ 'Mycontributions' => [ 'Kontribusi\'u' ],
+ 'MyLanguage' => [ 'Bahasa\'u' ],
+ 'Mypage' => [ 'Halamani\'u' ],
+ 'Mytalk' => [ 'Lo\'iya\'u' ],
+ 'Myuploads' => [ 'Diletohu\'u', 'Berkasi\'u' ],
+ 'Newimages' => [ 'BerkasBohu', 'GambariBaohu' ],
+ 'Newpages' => [ 'HalamanBohu' ],
+ 'PagesWithProp' => [ 'PagesWithProp', 'Pageswithprop', 'PagesByProp', 'Pagesbyprop' ],
+ 'PageData' => [ 'DataHalaman' ],
+ 'PageLanguage' => [ 'BahasaHalaman' ],
+ 'PasswordReset' => [ 'ResetTaheU\'unti' ],
+ 'PermanentLink' => [ 'WumbutaKakali', 'WumbKakali' ],
+ 'Preferences' => [ 'Preperensi' ],
+ 'Prefixindex' => [ 'PrefixIndeks' ],
+ 'Protectedpages' => [ 'HalamanOdudaha' ],
+ 'Protectedtitles' => [ 'JudulOdudaha' ],
+ 'Randompage' => [ 'Totonula', 'HalamanTotonula' ],
+ 'RandomInCategory' => [ 'TotonulaLoDalala' ],
+ 'Randomredirect' => [ 'TotonulaMopobale' ],
+ 'Randomrootpage' => [ 'TotonulaRootpage' ],
+ 'Recentchanges' => [ 'BoheliLoboli\'aMola' ],
+ 'Recentchangeslinked' => [ 'WumbutaBoheliLoboli\'aMola', 'RelatedLoboli\'a' ],
+ 'Redirect' => [ 'Mopobale' ],
+ 'RemoveCredentials' => [ 'YinggilaKredensial' ],
+ 'Revisiondelete' => [ 'MolulutoRevisi' ],
+ 'Search' => [ 'Lolohe' ],
+ 'Shortpages' => [ 'HalamanLimbu\'o' ],
+ 'Specialpages' => [ 'HalamanSpesial' ],
+ 'Statistics' => [ 'Statistik', 'Stat' ],
+ 'TrackingCategories' => [ 'TrackingDalala' ],
+ 'Uncategorizedcategories' => [ 'DalalaJaOdalala' ],
+ 'Uncategorizedimages' => [ 'BerkasJaOdalala', 'GambariJaOdalala' ],
+ 'Uncategorizedpages' => [ 'HalamanJaOdalala' ],
+ 'Uncategorizedtemplates' => [ 'TemplateJaOdalala' ],
+ 'Undelete' => [ 'BataliMoluluto' ],
+ 'UnlinkAccounts' => [ 'BataliyaWumbutaLoAkun' ],
+ 'Unusedcategories' => [ 'DalalaJaPilomake' ],
+ 'Unusedimages' => [ 'BerkasJaPilomake', 'GambariJaPilomake' ],
+ 'Unusedtemplates' => [ 'TemplateJaPilomake' ],
+ 'Unwatchedpages' => [ 'HalamanJaOdudaha' ],
+ 'Upload' => [ 'Detohe' ],
+ 'UploadStash' => [ 'DetoheStash' ],
+ 'Userlogin' => [ 'TumuwotoTaOhu\'uwo', 'Tumuwoto' ],
+ 'Userlogout' => [ 'LumuwaloTaOhu\'uwo', 'Lumuwalo' ],
+ 'Version' => [ 'Versi' ],
+ 'Wantedcategories' => [ 'DalalaOtohilawo' ],
+ 'Wantedfiles' => [ 'BerkasOtohilawo' ],
+ 'Wantedpages' => [ 'HalamanOtohilawo', 'WumbutaLorusa' ],
+ 'Wantedtemplates' => [ 'TemplateOtohilawo' ],
+ 'Watchlist' => [ 'DaputariHe\'awasiyalo' ],
+ 'Whatlinkshere' => [ 'WoloWumbutaTeye' ],
+ 'Withoutinterwiki' => [ 'Diya\'aInterwiki' ]
+];
/**
* @copyright Copyright © 2006, Niklas Laxström
- * @license http://www.gnu.org/copyleft/gpl.html GNU General Public License 2.0 or later
+ * @license GPL-2.0-or-later
*/
$linkTrail = '/^([a-zA-ZĀāČčĒēĢģĪīĶķĻļŅņŠšŪūŽž]+)(.*)$/sDu';
*/
/**
- * @license http://www.gnu.org/copyleft/fdl.html GNU Free Documentation License
- * @license http://www.gnu.org/copyleft/gpl.html GNU General Public License
+ * @license GFDL-1.3-or-later
+ * @license GPL-2.0-or-later
*
* @see https://meta.wikimedia.org/w/index.php?title=LanguageNn.php&action=history
* @see https://nn.wikipedia.org/w/index.php?title=Brukar:Dittaeva/LanguageNn.php&action=history
*
* @since 1.28
*/
-class AddRFCAndPMIDInterwiki extends LoggedUpdateMaintenance {
+class AddRFCandPMIDInterwiki extends LoggedUpdateMaintenance {
public function __construct() {
parent::__construct();
$this->addDescription( 'Add RFC and PMID to the interwiki database table' );
}
}
-$maintClass = AddRFCAndPMIDInterwiki::class;
+$maintClass = AddRFCandPMIDInterwiki::class;
require_once RUN_MAINTENANCE_IF_MAIN;
*
* @since 1.29
*
- * @license GNU GPL v2+
+ * @license GPL-2.0-or-later
* @author Florian Schmidt
*/
class AddSite extends Maintenance {
*
* @ingroup Maintenance
*/
-class CapsCleanup extends TableCleanup {
+class CleanupCaps extends TableCleanup {
private $user;
private $namespace;
$target = Title::makeTitle( $row->page_namespace, $upper );
if ( $target->exists() ) {
// Prefix "CapsCleanup" to bypass the conflict
- $target = Title::newFromText( __CLASS__ . '/' . $display );
+ $target = Title::newFromText( 'CapsCleanup/' . $display );
}
$ok = $this->movePage(
$current,
}
}
-$maintClass = CapsCleanup::class;
+$maintClass = CleanupCaps::class;
require_once RUN_MAINTENANCE_IF_MAIN;
*
* @ingroup Maintenance
*/
-class ImageCleanup extends TableCleanup {
+class CleanupImages extends TableCleanup {
protected $defaultParams = [
'table' => 'image',
'conds' => [],
}
}
-$maintClass = ImageCleanup::class;
+$maintClass = CleanupImages::class;
require_once RUN_MAINTENANCE_IF_MAIN;
*
* @ingroup Maintenance
*/
-class UploadStashCleanup extends Maintenance {
+class CleanupUploadStash extends Maintenance {
public function __construct() {
parent::__construct();
}
}
-$maintClass = UploadStashCleanup::class;
+$maintClass = CleanupUploadStash::class;
require_once RUN_MAINTENANCE_IF_MAIN;
*
* @ingroup Maintenance
*/
-class WatchlistCleanup extends TableCleanup {
+class CleanupWatchlist extends TableCleanup {
protected $defaultParams = [
'table' => 'watchlist',
'index' => [ 'wl_user', 'wl_namespace', 'wl_title' ],
}
}
-$maintClass = WatchlistCleanup::class;
+$maintClass = CleanupWatchlist::class;
require_once RUN_MAINTENANCE_IF_MAIN;
* @since 1.27
* @ingroup Maintenance
*/
-class GenerateCommonPassword extends Maintenance {
+class CreateCommonPasswordCdb extends Maintenance {
public function __construct() {
global $IP;
parent::__construct();
}
}
-$maintClass = GenerateCommonPassword::class;
+$maintClass = CreateCommonPasswordCdb::class;
require_once RUN_MAINTENANCE_IF_MAIN;
$this->addOption( 'dry-run', 'Print debug info instead of actually deleting' );
$this->addOption(
'check-old',
- 'Check old patrol logs (for deleting old format autopatrols).' .
- 'Note that this will not delete rows older than 2011 (MediaWiki 1.18).'
+ 'Check old patrol logs (for deleting old format autopatrols).'
);
$this->addOption(
'before',
$autopatrols = [];
foreach ( $result as $row ) {
$last = $row->log_id;
- Wikimedia\suppressWarnings();
- $params = unserialize( $row->log_params );
- Wikimedia\restoreWarnings();
+ $logEntry = DatabaseLogEntry::newFromRow( $row );
+ $params = $logEntry->getParameters();
+ if ( !is_array( $params ) ) {
+ continue;
+ }
- // Skipping really old rows, before 2011
- if ( !is_array( $params ) || !array_key_exists( '6::auto', $params ) ) {
+ // This logic belongs to PatrolLogFormatter::getMessageKey
+ // and LogFormatter::extractParameters the 'auto' value is logically presented as key [5].
+ // For legacy case the logical key is index + 3, meaning [2].
+ // For the modern case, the logical key is index - 1 meaning [6].
+ if ( array_key_exists( '6::auto', $params ) ) {
+ // Between 2011-2016 autopatrol logs
+ $auto = $params['6::auto'] === true;
+ } elseif ( $logEntry->isLegacy() === true && array_key_exists( 2, $params ) ) {
+ // Pre-2011 autopatrol logs
+ $auto = $params[2] === '1';
+ } else {
continue;
}
- $auto = $params['6::auto'];
- if ( $auto ) {
+ if ( $auto === true ) {
$autopatrols[] = $row->log_id;
}
}
*
* @ingroup Maintenance
*/
-class UploadDumper extends Maintenance {
+class DumpUploads extends Maintenance {
public function __construct() {
parent::__construct();
$this->addDescription( 'Generates list of uploaded files which can be fed to tar or similar.
}
}
-$maintClass = UploadDumper::class;
+$maintClass = DumpUploads::class;
require_once RUN_MAINTENANCE_IF_MAIN;
*
* @since 1.25
*
- * @license GNU GPL v2+
+ * @license GPL-2.0-or-later
* @author Daniel Kinzler
*/
class ExportSites extends Maintenance {
*
* @ingroup Maintenance
*/
-class TestFileOpPerformance extends Maintenance {
+class FileOpPerfTest extends Maintenance {
public function __construct() {
parent::__construct();
$this->addDescription( 'Test fileop performance' );
}
}
-$maintClass = TestFileOpPerformance::class;
+$maintClass = FileOpPerfTest::class;
require_once RUN_MAINTENANCE_IF_MAIN;
*
* @ingroup Maintenance
*/
-class MaintenanceFormatInstallDoc extends Maintenance {
+class FormatInstallDoc extends Maintenance {
function __construct() {
parent::__construct();
$this->addArg( 'path', 'The file name to format', false );
}
}
-$maintClass = MaintenanceFormatInstallDoc::class;
+$maintClass = FormatInstallDoc::class;
require_once RUN_MAINTENANCE_IF_MAIN;
*
* @ingroup Maintenance
*/
-class GetSlaveServer extends Maintenance {
+class GetReplicaServer extends Maintenance {
public function __construct() {
parent::__construct();
$this->addOption( "group", "Query group to check specifically" );
}
}
-$maintClass = GetSlaveServer::class;
+$maintClass = GetReplicaServer::class;
require_once RUN_MAINTENANCE_IF_MAIN;
*
* @since 1.25
*
- * @license GNU GPL v2+
+ * @license GPL-2.0-or-later
* @author Daniel Kinzler
*/
class ImportSites extends Maintenance {
$ucdallURL = "https://www.unicode.org/Public/<Unicode version>/ucdxml/ucd.all.grouped.zip";
if ( !$allkeysPresent || !$ucdallPresent ) {
- $icuVersion = IcuCollation::getICUVersion();
+ $icuVersion = INTL_ICU_VERSION;
$unicodeVersion = IcuCollation::getUnicodeVersionForICU();
$error = "";
}
$versionKnown = false;
- if ( !$icuVersion ) {
- // Unknown version - either very old intl,
- // or PHP < 5.3.7 which does not expose this information
- $error .= "As MediaWiki could not determine the version of ICU library used by your PHP's "
- . "intl extension it can't suggest which file version to download. "
- . "This can be caused by running a very old version of intl or PHP < 5.3.7. "
- . "If you are sure everything is all right, find out the ICU version "
- . "by running phpinfo(), check what is the Unicode version it is using "
- . "at http://site.icu-project.org/download, then try finding appropriate data file(s) at:";
- } elseif ( version_compare( $icuVersion, "4.0", "<" ) ) {
+ if ( version_compare( $icuVersion, "4.0", "<" ) ) {
// Extra old version
$error .= "You are using outdated version of ICU ($icuVersion), intended for "
. ( $unicodeVersion ? "Unicode $unicodeVersion" : "an unknown version of Unicode" )
*
* @ingroup Maintenance
*/
-class NamespaceConflictChecker extends Maintenance {
+class NamespaceDupes extends Maintenance {
/**
* @var IMaintainableDatabase
}
}
-$maintClass = NamespaceConflictChecker::class;
+$maintClass = NamespaceDupes::class;
require_once RUN_MAINTENANCE_IF_MAIN;
* @file
* @ingroup Maintenance
* @author Antoine Musso <hashar at free dot fr>
- * @license GNU General Public License 2.0 or later
+ * @license GPL-2.0-or-later
*/
require_once __DIR__ . '/Maintenance.php';
* @file
* @ingroup Maintenance
* @author Rob Church <robchur@gmail.com>
- * @license GNU General Public Licence 2.0 or later
+ * @license GPL-2.0-or-later
*/
use Wikimedia\Rdbms\IDatabase;
*
* @ingroup Maintenance
*/
-class BatchedQueryRunner extends Maintenance {
+class RunBatchedQuery extends Maintenance {
public function __construct() {
parent::__construct();
$this->addDescription(
}
}
-$maintClass = BatchedQueryRunner::class;
+$maintClass = RunBatchedQuery::class;
require_once RUN_MAINTENANCE_IF_MAIN;
* @author Brion Vibber
* @author Rob Church <robchur@gmail.com>
*
- * @license GNU General Public License 2.0 or later
+ * @license GPL-2.0-or-later
*/
require_once __DIR__ . '/Maintenance.php';
// Hide "other" textboxes by default
// Should not be done in CSS for javascript disabled compatibility
- $( '.enabledByOther' ).closest( '.config-block' ).hide();
+ if ( !$( '#config__NamespaceType_other' ).is( ':checked' ) ) {
+ $( '.enabledByOther' ).closest( '.config-block' ).hide();
+ }
// Enable/disable "other" textboxes
$( '.enableForOther' ).click( function () {
print '<?xml version="1.0"?>';
print Xml::openElement( 'OpenSearchDescription',
[
- 'xmlns' => 'http://a9.com/-/spec/opensearch/1.1/',
- 'xmlns:moz' => 'http://www.mozilla.org/2006/browser/search/' ] );
+ 'xmlns' => 'http://www.opensearch.org/Specifications/OpenSearch/1.1',
+ 'xmlns:moz' => 'https://www.mozilla.org/2006/browser/search/' ] );
/* The spec says the ShortName must be no longer than 16 characters,
* but 16 is *realllly* short. In practice, browsers don't appear to care
'mediawiki.skinning.content.externallinks' => [
'styles' => [
- 'resources/src/mediawiki.skinning/content.externallinks.css' => [ 'media' => 'screen' ],
+ 'resources/src/mediawiki.skinning/content.externallinks.less' => [ 'media' => 'screen' ],
],
],
'jquery.expandableField' => [
'scripts' => 'resources/src/jquery/jquery.expandableField.js',
],
- 'jquery.farbtastic' => [
- 'scripts' => 'resources/src/jquery/jquery.farbtastic.js',
- 'styles' => 'resources/src/jquery/jquery.farbtastic.css',
- 'dependencies' => 'jquery.colorUtil',
- ],
- 'jquery.footHovzer' => [
- 'scripts' => 'resources/src/jquery/jquery.footHovzer.js',
- 'styles' => 'resources/src/jquery/jquery.footHovzer.css',
- ],
'jquery.form' => [
'scripts' => 'resources/lib/jquery/jquery.form.js',
],
'scripts' => 'resources/src/jquery/jquery.tabIndex.js',
],
'jquery.tablesorter' => [
+ 'targets' => [ 'desktop', 'mobile' ],
'scripts' => 'resources/src/jquery.tablesorter/jquery.tablesorter.js',
'styles' => 'resources/src/jquery.tablesorter/jquery.tablesorter.less',
'messages' => [ 'sort-descending', 'sort-ascending' ],
],
'mediawiki.debug' => [
'scripts' => [
+ 'resources/src/mediawiki.debug/jquery.footHovzer.js',
'resources/src/mediawiki.debug/debug.js',
],
'styles' => [
+ 'resources/src/mediawiki.debug/jquery.footHovzer.css',
'resources/src/mediawiki.debug/debug.less',
],
'dependencies' => [
- 'jquery.footHovzer',
'oojs-ui-core',
],
],
],
'mediawiki.language.months' => [
+ 'targets' => [ 'desktop', 'mobile' ],
'scripts' => 'resources/src/mediawiki.language/mediawiki.language.months.js',
'dependencies' => 'mediawiki.language',
'messages' => array_merge(
],
'targets' => [ 'desktop', 'mobile' ],
],
- 'mediawiki.widgets.visibleByteLimit' => [
- 'dependencies' => 'mediawiki.widgets.visibleLengthLimit',
- 'deprecated' => 'Use "mediawiki.widgets.visibleLengthLimit" instead.',
- 'targets' => [ 'desktop', 'mobile' ]
- ],
'mediawiki.widgets.visibleLengthLimit' => [
'scripts' => [
'resources/src/mediawiki.widgets.visibleLengthLimit/mediawiki.widgets.visibleLengthLimit.js'
],
],
- /* es5-shim */
- 'es5-shim' => [
- 'deprecated' => 'Use of the "es5-shim" module is deprecated since MediaWiki 1.29.0',
- 'targets' => [ 'desktop', 'mobile' ],
- ],
-
/* dom-level2-shim */
'dom-level2-shim' => [
'deprecated' => 'Use of the "dom-level2-shim" module is deprecated since MediaWiki 1.29.0',
+++ /dev/null
-/**
- * Farbtastic Color Picker 1.2
- * © 2008 Steven Wittens
- *
- * 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
- */
-.farbtastic {
- position: relative;
-}
-.farbtastic * {
- position: absolute;
- cursor: crosshair;
-}
-.farbtastic,
-.farbtastic .wheel {
- width: 195px;
- height: 195px;
-}
-.farbtastic .color,
-.farbtastic .overlay {
- top: 47px;
- left: 47px;
- width: 101px;
- height: 101px;
-}
-.farbtastic .wheel {
- /* @embed */
- background: url( images/wheel.png ) no-repeat;
- width: 195px;
- height: 195px;
-}
-.farbtastic .overlay {
- /* @embed */
- background: url( images/mask.png ) no-repeat;
-}
-.farbtastic .marker {
- width: 17px;
- height: 17px;
- margin: -8px 0 0 -8px;
- overflow: hidden;
- /* @embed */
- background: url( images/marker.png ) no-repeat;
-}
+++ /dev/null
-/**
- * Farbtastic Color Picker 1.2
- * © 2008 Steven Wittens
- *
- * 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
- */
-
-//Adapted to uniform style with jQuery UI widgets and slightly change behavior
-//TODO:
-// - remove duplicated code by replacing it with jquery.colorUtils and modern jQuery
-// - uniform code style
-
-jQuery.fn.farbtastic = function (callback) {
- $.farbtastic(this, callback);
- return this;
-};
-
-jQuery.farbtastic = function (container, callback) {
- var container = $(container).get(0);
- return container.farbtastic || (container.farbtastic = new jQuery._farbtastic(container, callback));
-}
-
-jQuery._farbtastic = function (container, callback) {
- // Store farbtastic object
- var fb = this;
-
- // Insert markup
- $(container).html('<div class="farbtastic ui-widget-content"><div class="color"></div><div class="wheel"></div><div class="overlay"></div><div class="h-marker marker"></div><div class="sl-marker marker"></div></div>');
- $(container).addClass('ui-widget');
- var e = $('.farbtastic', container);
- fb.wheel = $('.wheel', container).get(0);
- // Dimensions
- fb.radius = 84;
- fb.square = 100;
- fb.width = 194;
-
- // Fix background PNGs in IE6
- if (navigator.appVersion.match(/MSIE [0-6]\./)) {
- $('*', e).each(function () {
- if (this.currentStyle.backgroundImage != 'none') {
- var image = this.currentStyle.backgroundImage;
- image = this.currentStyle.backgroundImage.slice(5, image.length - 2);
- $(this).css( {
- backgroundImage: 'none',
- filter: "progid:DXImageTransform.Microsoft.AlphaImageLoader(enabled=true, sizingMethod=crop, src='" + image + "')"
- } );
- }
- });
- }
-
- /**
- * Link to the given element(s) or callback.
- */
- fb.linkTo = function (callback) {
- // Unbind previous nodes
- if (typeof fb.callback == 'object') {
- $(fb.callback).unbind('keyup', fb.updateValue);
- }
-
- // Reset color
- fb.color = null;
-
- // Bind callback or elements
- if (typeof callback == 'function') {
- fb.callback = callback;
- }
- else if (typeof callback == 'object' || typeof callback == 'string') {
- fb.callback = $(callback);
- fb.callback.bind('keyup', fb.updateValue);
- if (fb.callback.get(0).value) {
- fb.setColor(fb.callback.get(0).value);
- }
- }
- return this;
- }
- fb.updateValue = function (event) {
- if (this.value != fb.color) {
- fb.setColor(this.value);
- }
- }
-
- /**
- * Change color with HTML syntax #123456
- */
- fb.setColor = function (color) {
- var rgb = $.colorUtil.getRGB( color );
- if (fb.color != color && rgb) {
- rgb = rgb.slice( 0 ); //make a clone
- //TODO: rewrite code so that this is not needed
- rgb[0] /= 255;
- rgb[1] /= 255;
- rgb[2] /= 255;
- fb.color = color;
- fb.rgb = rgb;
- fb.hsl = fb.RGBToHSL(fb.rgb);
- fb.updateDisplay();
- }
- return this;
- }
-
- /**
- * Change color with HSL triplet [0..1, 0..1, 0..1]
- */
- fb.setHSL = function (hsl) {
- fb.hsl = hsl;
- fb.rgb = fb.HSLToRGB(hsl);
- fb.color = fb.pack(fb.rgb);
- fb.updateDisplay();
- return this;
- }
-
- /////////////////////////////////////////////////////
-
- /**
- * Retrieve the coordinates of the given event relative to the center
- * of the widget.
- */
- fb.widgetCoords = function (event) {
- var ref = $( fb.wheel ).offset();
- return {
- x: event.pageX - ref.left - fb.width / 2,
- y: event.pageY - ref.top - fb.width / 2
- };
- }
-
- /**
- * Mousedown handler
- */
- fb.mousedown = function (event) {
- // Capture mouse
- if (!document.dragging) {
- $(document).bind('mousemove', fb.mousemove).bind('mouseup', fb.mouseup);
- document.dragging = true;
- }
-
- // Check which area is being dragged
- var pos = fb.widgetCoords(event);
- fb.circleDrag = Math.max(Math.abs(pos.x), Math.abs(pos.y)) * 2 > fb.square;
-
- // Process
- fb.mousemove(event);
- return false;
- }
-
- /**
- * Mousemove handler
- */
- fb.mousemove = function (event) {
- // Get coordinates relative to color picker center
- var pos = fb.widgetCoords(event);
-
- // Set new HSL parameters
- if (fb.circleDrag) {
- var hue = Math.atan2(pos.x, -pos.y) / 6.28;
- if (hue < 0) hue += 1;
- fb.setHSL([hue, fb.hsl[1], fb.hsl[2]]);
- }
- else {
- var sat = Math.max(0, Math.min(1, -(pos.x / fb.square) + .5));
- var lum = Math.max(0, Math.min(1, -(pos.y / fb.square) + .5));
- fb.setHSL([fb.hsl[0], sat, lum]);
- }
- return false;
- }
-
- /**
- * Mouseup handler
- */
- fb.mouseup = function () {
- // Uncapture mouse
- $(document).unbind('mousemove', fb.mousemove);
- $(document).unbind('mouseup', fb.mouseup);
- document.dragging = false;
- }
-
- /**
- * Update the markers and styles
- */
- fb.updateDisplay = function () {
- // Markers
- var angle = fb.hsl[0] * 6.28;
- $('.h-marker', e).css({
- left: Math.round(Math.sin(angle) * fb.radius + fb.width / 2) + 'px',
- top: Math.round(-Math.cos(angle) * fb.radius + fb.width / 2) + 'px'
- });
-
- $('.sl-marker', e).css({
- left: Math.round(fb.square * (.5 - fb.hsl[1]) + fb.width / 2) + 'px',
- top: Math.round(fb.square * (.5 - fb.hsl[2]) + fb.width / 2) + 'px'
- });
-
- // Saturation/Luminance gradient
- $('.color', e).css('backgroundColor', fb.pack(fb.HSLToRGB([fb.hsl[0], 1, 0.5])));
-
- // Linked elements or callback
- if (typeof fb.callback == 'object') {
- // Set background/foreground color
- $(fb.callback).css({
- backgroundColor: fb.color,
- color: fb.hsl[2] > 0.5 ? '#000' : '#fff'
- });
-
- // Change linked value
- $(fb.callback).each(function() {
- if ( $( this ).val() != fb.color) {
- $( this ).val( fb.color ).change();
- }
- });
- }
- else if (typeof fb.callback == 'function') {
- fb.callback.call(fb, fb.color);
- }
- }
-
- /* Various color utility functions */
- fb.pack = function (rgb) {
- var r = Math.round(rgb[0] * 255);
- var g = Math.round(rgb[1] * 255);
- var b = Math.round(rgb[2] * 255);
- return '#' + (r < 16 ? '0' : '') + r.toString(16) +
- (g < 16 ? '0' : '') + g.toString(16) +
- (b < 16 ? '0' : '') + b.toString(16);
- }
-
- fb.HSLToRGB = function (hsl) {
- var m1, m2, r, g, b;
- var h = hsl[0], s = hsl[1], l = hsl[2];
- m2 = (l <= 0.5) ? l * (s + 1) : l + s - l*s;
- m1 = l * 2 - m2;
- return [this.hueToRGB(m1, m2, h+0.33333),
- this.hueToRGB(m1, m2, h),
- this.hueToRGB(m1, m2, h-0.33333)];
- }
-
- fb.hueToRGB = function (m1, m2, h) {
- h = (h < 0) ? h + 1 : ((h > 1) ? h - 1 : h);
- if (h * 6 < 1) return m1 + (m2 - m1) * h * 6;
- if (h * 2 < 1) return m2;
- if (h * 3 < 2) return m1 + (m2 - m1) * (0.66666 - h) * 6;
- return m1;
- }
-
- fb.RGBToHSL = function (rgb) {
- var min, max, delta, h, s, l;
- var r = rgb[0], g = rgb[1], b = rgb[2];
- min = Math.min(r, Math.min(g, b));
- max = Math.max(r, Math.max(g, b));
- delta = max - min;
- l = (min + max) / 2;
- s = 0;
- if (l > 0 && l < 1) {
- s = delta / (l < 0.5 ? (2 * l) : (2 - 2 * l));
- }
- h = 0;
- if (delta > 0) {
- if (max == r && max != g) h += (g - b) / delta;
- if (max == g && max != b) h += (2 + (b - r) / delta);
- if (max == b && max != r) h += (4 + (r - g) / delta);
- h /= 6;
- }
- return [h, s, l];
- }
-
- // Install mousedown handler (the others are set on the document on-demand)
- $('*', e).mousedown(fb.mousedown);
-
- // Init color
- fb.setColor('#000000');
-
- // Set linked elements/callback
- if (callback) {
- fb.linkTo(callback);
- }
-}
+++ /dev/null
-#jquery-foot-hovzer {
- position: fixed;
- bottom: 0;
- width: 100%;
- z-index: 1000;
-}
+++ /dev/null
-/**
- * @class jQuery.plugin.footHovzer
- */
-( function ( $ ) {
- var $hovzer, footHovzer, $spacer;
-
- function getHovzer() {
- if ( $hovzer === undefined ) {
- $hovzer = $( '<div id="jquery-foot-hovzer"></div>' ).appendTo( 'body' );
- }
- return $hovzer;
- }
-
- /**
- * Utility to stack stuff in an overlay fixed on the bottom of the page.
- *
- * Usage:
- *
- * var hovzer = $.getFootHovzer();
- * hovzer.$.append( $myCollection );
- * hovzer.update();
- *
- * @static
- * @inheritable
- * @return {jQuery.footHovzer}
- */
- $.getFootHovzer = function () {
- footHovzer.$ = getHovzer();
- return footHovzer;
- };
-
- /**
- * @private
- * @class jQuery.footHovzer
- */
- footHovzer = {
-
- /**
- * @property {jQuery} $ The stack container
- */
-
- /**
- * Update dimensions of stack to account for changes in the subtree.
- */
- update: function () {
- var $body;
-
- $body = $( 'body' );
-
- if ( $spacer === undefined ) {
- $spacer = $( '<div>' ).attr( 'id', 'jquery-foot-hovzer-spacer' );
- $spacer.appendTo( $body );
- }
- // Ensure CSS is applied by browser before using .outerHeight()
- setTimeout( function () {
- $spacer.css( 'height', getHovzer().outerHeight( /* includeMargin = */ true ) );
- }, 0 );
- }
- };
-
- /**
- * @class jQuery
- * @mixins jQuery.plugin.footHovzer
- */
-
-}( jQuery ) );
--- /dev/null
+#jquery-foot-hovzer {
+ position: fixed;
+ bottom: 0;
+ width: 100%;
+ z-index: 1000;
+}
--- /dev/null
+/**
+ * @private
+ * @class jQuery.plugin.footHovzer
+ */
+( function ( $ ) {
+ var $hovzer, footHovzer, $spacer;
+
+ function getHovzer() {
+ if ( $hovzer === undefined ) {
+ $hovzer = $( '<div id="jquery-foot-hovzer"></div>' ).appendTo( 'body' );
+ }
+ return $hovzer;
+ }
+
+ /**
+ * Utility to stack stuff in an overlay fixed on the bottom of the page.
+ *
+ * Usage:
+ *
+ * var hovzer = $.getFootHovzer();
+ * hovzer.$.append( $myCollection );
+ * hovzer.update();
+ *
+ * @static
+ * @inheritable
+ * @return {jQuery.footHovzer}
+ */
+ $.getFootHovzer = function () {
+ footHovzer.$ = getHovzer();
+ return footHovzer;
+ };
+
+ /**
+ * @private
+ * @class jQuery.footHovzer
+ */
+ footHovzer = {
+
+ /**
+ * @property {jQuery} $ The stack container
+ */
+
+ /**
+ * Update dimensions of stack to account for changes in the subtree.
+ */
+ update: function () {
+ var $body;
+
+ $body = $( 'body' );
+
+ if ( $spacer === undefined ) {
+ $spacer = $( '<div>' ).attr( 'id', 'jquery-foot-hovzer-spacer' );
+ $spacer.appendTo( $body );
+ }
+ // Ensure CSS is applied by browser before using .outerHeight()
+ setTimeout( function () {
+ $spacer.css( 'height', getHovzer().outerHeight( /* includeMargin = */ true ) );
+ }, 0 );
+ }
+ };
+
+ /**
+ * @class jQuery
+ * @mixins jQuery.plugin.footHovzer
+ */
+
+}( jQuery ) );
}
/* preference page with js-genrated toc */
-/* TODO: Delete #preftoc when Special:Preference's non-OOUI mode is disabled */
+/* TODO: Delete #preftoc when Special:Preferences's non-OOUI mode is disabled */
#preftoc {
float: left;
margin: 1em 1em 1em 1em;
( function ( mw, $ ) {
var $galleries,
bound = false,
+ lastWidth = window.innerWidth,
+ justifyNeeded = false,
// Is there a better way to detect a touchscreen? Current check taken from stack overflow.
isTouchScreen = !!( window.ontouchstart !== undefined ||
window.DocumentTouch !== undefined && document instanceof window.DocumentTouch
}
function handleResizeStart() {
+ // Only do anything if window width changed. We don't care about the height.
+ if ( lastWidth === window.innerWidth ) {
+ return;
+ }
+
+ justifyNeeded = true;
+ // Temporarily set min-height, so that content following the gallery is not reflowed twice
+ $galleries.css( 'min-height', function () {
+ return $( this ).height();
+ } );
$galleries.children( 'li.gallerybox' ).each( function () {
var imgWidth = $( this ).data( 'imgWidth' ),
imgHeight = $( this ).data( 'imgHeight' ),
}
function handleResizeEnd() {
- $galleries.each( justify );
+ // If window width never changed during the resize, don't do anything.
+ if ( justifyNeeded ) {
+ justifyNeeded = false;
+ lastWidth = window.innerWidth;
+ $galleries
+ // Remove temporary min-height
+ .css( 'min-height', '' )
+ // Recalculate layout
+ .each( justify );
+ }
}
mw.hook( 'wikipage.content' ).add( function ( $content ) {
} else {
// Note use of just `a`, not `a.image`, since we also want this to trigger if a link
// within the caption text receives focus.
- // This is based on code from the 'jquery.mw-jump' module.
$content.find( 'ul.mw-gallery-packed-hover li.gallerybox' ).on( 'focus blur', 'a', function ( e ) {
// Confusingly jQuery leaves e.type as focusout for delegated blur events
var gettingFocus = e.type !== 'blur' && e.type !== 'focusout';
+++ /dev/null
-/*!
- * Icons and colors for external links.
- */
-
-/* T68091 is blocking is from converting this file to LESS
- * and using the .background-image-svg mixin. */
-
-/* SVG support using a transparent gradient to guarantee cross-browser
- * compatibility ( browsers able to understand gradient syntax support also SVG ).
- * http://pauginer.tumblr.com/post/36614680636/invisible-gradient-technique */
-
-.mw-parser-output a.external,
-.link-https {
- background: url( images/external-ltr.png ) center right no-repeat;
- /* @embed */
- background-image: -webkit-linear-gradient( transparent, transparent ), url( images/external-ltr.svg );
- /* @embed */
- background-image: linear-gradient( transparent, transparent ), url( images/external-ltr.svg );
- padding-right: 13px;
-}
-
-.mw-parser-output a.external[ href^='mailto:' ],
-.link-mailto {
- background: url( images/mail.png ) center right no-repeat;
- /* @embed */
- background-image: linear-gradient( transparent, transparent ), url( images/mail.svg );
- padding-right: 13px;
-}
-
-.mw-parser-output a.external[ href^='ftp://' ],
-.link-ftp {
- background: url( images/ftp-ltr.png ) center right no-repeat;
- /* @embed */
- background-image: linear-gradient( transparent, transparent ), url( images/ftp-ltr.svg );
- padding-right: 13px;
-}
-
-.mw-parser-output a.external[ href^='irc://' ],
-.mw-parser-output a.external[ href^='ircs://' ],
-.link-irc {
- background: url( images/chat-ltr.png ) center right no-repeat;
- /* @embed */
- background-image: linear-gradient( transparent, transparent ), url( images/chat-ltr.svg );
- padding-right: 13px;
-}
-
-.mw-parser-output a.external[ href$='.ogg' ],
-.mw-parser-output a.external[ href$='.OGG' ],
-.mw-parser-output a.external[ href$='.mid' ],
-.mw-parser-output a.external[ href$='.MID' ],
-.mw-parser-output a.external[ href$='.midi' ],
-.mw-parser-output a.external[ href$='.MIDI' ],
-.mw-parser-output a.external[ href$='.mp3' ],
-.mw-parser-output a.external[ href$='.MP3' ],
-.mw-parser-output a.external[ href$='.wav' ],
-.mw-parser-output a.external[ href$='.WAV' ],
-.mw-parser-output a.external[ href$='.wma' ],
-.mw-parser-output a.external[ href$='.WMA' ],
-.link-audio {
- background: url( images/audio-ltr.png ) center right no-repeat;
- /* @embed */
- background-image: linear-gradient( transparent, transparent ), url( images/audio-ltr.svg );
- padding-right: 13px;
-}
-
-.mw-parser-output a.external[ href$='.ogm' ],
-.mw-parser-output a.external[ href$='.OGM' ],
-.mw-parser-output a.external[ href$='.avi' ],
-.mw-parser-output a.external[ href$='.AVI' ],
-.mw-parser-output a.external[ href$='.mpeg' ],
-.mw-parser-output a.external[ href$='.MPEG' ],
-.mw-parser-output a.external[ href$='.mpg' ],
-.mw-parser-output a.external[ href$='.MPG' ],
-.link-video {
- background: url( images/video.png ) center right no-repeat;
- /* @embed */
- background-image: linear-gradient( transparent, transparent ), url( images/video.svg );
- padding-right: 13px;
-}
-
-.mw-parser-output a.external[ href$='.pdf' ],
-.mw-parser-output a.external[ href$='.PDF' ],
-.mw-parser-output a.external[ href*='.pdf#' ],
-.mw-parser-output a.external[ href*='.PDF#' ],
-.mw-parser-output a.external[ href*='.pdf?' ],
-.mw-parser-output a.external[ href*='.PDF?' ],
-.link-document {
- background: url( images/document-ltr.png ) center right no-repeat;
- /* @embed */
- background-image: linear-gradient( transparent, transparent ), url( images/document-ltr.svg );
- padding-right: 13px;
-}
-
-/* Interwiki styling */
-.mw-parser-output a.extiw,
-.mw-parser-output a.extiw:active {
- color: #36b;
-}
-
-/* External link color */
-.mw-parser-output a.external {
- color: #36b;
-}
--- /dev/null
+/*!
+ * Icons and colors for external links.
+ */
+
+@import 'mediawiki.mixins';
+
+.mw-parser-output a.external,
+.link-https {
+ background-position: center right;
+ background-repeat: no-repeat;
+ .background-image-svg( 'images/external-ltr.svg', 'images/external-ltr.png' );
+ padding-right: 13px;
+}
+
+.mw-parser-output a.external[ href^='mailto:' ],
+.link-mailto {
+ background-position: center right;
+ background-repeat: no-repeat;
+ .background-image-svg( 'images/mail.svg', 'images/mail.png' );
+ padding-right: 13px;
+}
+
+.mw-parser-output a.external[ href^='ftp://' ],
+.link-ftp {
+ background-position: center right;
+ background-repeat: no-repeat;
+ .background-image-svg( 'images/ftp-ltr.svg', 'images/ftp-ltr.png' );
+ padding-right: 13px;
+}
+
+.mw-parser-output a.external[ href^='irc://' ],
+.mw-parser-output a.external[ href^='ircs://' ],
+.link-irc {
+ background-position: center right;
+ background-repeat: no-repeat;
+ .background-image-svg( 'images/chat-ltr.svg', 'images/chat-ltr.png' );
+ padding-right: 13px;
+}
+
+.mw-parser-output a.external[ href$='.ogg' ],
+.mw-parser-output a.external[ href$='.OGG' ],
+.mw-parser-output a.external[ href$='.mid' ],
+.mw-parser-output a.external[ href$='.MID' ],
+.mw-parser-output a.external[ href$='.midi' ],
+.mw-parser-output a.external[ href$='.MIDI' ],
+.mw-parser-output a.external[ href$='.mp3' ],
+.mw-parser-output a.external[ href$='.MP3' ],
+.mw-parser-output a.external[ href$='.wav' ],
+.mw-parser-output a.external[ href$='.WAV' ],
+.mw-parser-output a.external[ href$='.wma' ],
+.mw-parser-output a.external[ href$='.WMA' ],
+.link-audio {
+ background-position: center right;
+ background-repeat: no-repeat;
+ .background-image-svg( 'images/audio-ltr.svg', 'images/audio-ltr.png' );
+ padding-right: 13px;
+}
+
+.mw-parser-output a.external[ href$='.ogm' ],
+.mw-parser-output a.external[ href$='.OGM' ],
+.mw-parser-output a.external[ href$='.avi' ],
+.mw-parser-output a.external[ href$='.AVI' ],
+.mw-parser-output a.external[ href$='.mpeg' ],
+.mw-parser-output a.external[ href$='.MPEG' ],
+.mw-parser-output a.external[ href$='.mpg' ],
+.mw-parser-output a.external[ href$='.MPG' ],
+.link-video {
+ background-position: center right;
+ background-repeat: no-repeat;
+ .background-image-svg( 'images/video.svg', 'images/video.png' );
+ padding-right: 13px;
+}
+
+.mw-parser-output a.external[ href$='.pdf' ],
+.mw-parser-output a.external[ href$='.PDF' ],
+.mw-parser-output a.external[ href*='.pdf#' ],
+.mw-parser-output a.external[ href*='.PDF#' ],
+.mw-parser-output a.external[ href*='.pdf?' ],
+.mw-parser-output a.external[ href*='.PDF?' ],
+.link-document {
+ background-position: center right;
+ background-repeat: no-repeat;
+ .background-image-svg( 'images/document-ltr.svg', 'images/document-ltr.png' );
+ padding-right: 13px;
+}
+
+/* Interwiki styling */
+.mw-parser-output a.extiw,
+.mw-parser-output a.extiw:active {
+ color: #36b;
+}
+
+/* External link color */
+.mw-parser-output a.external {
+ color: #36b;
+}
$preferences = $( '#preferences' );
// Make sure the accessibility tip is selectable so that screen reader users take notice,
- // but hide it per default to reduce interface clutter. Also make sure it becomes visible
- // when selected. Similar to jquery.mw-jump
+ // but hide it by default to reduce visual clutter.
+ // Make sure it becomes visible when focused.
$( '<div>' ).addClass( 'mw-navigation-hint' )
.text( mw.msg( 'prefs-tabs-navigation-hint' ) )
.attr( 'tabIndex', 0 )
$fieldsets.children( 'legend' ).addClass( 'mainLegend' );
// Make sure the accessibility tip is selectable so that screen reader users take notice,
- // but hide it per default to reduce interface clutter. Also make sure it becomes visible
- // when selected. Similar to jquery.mw-jump
+ // but hide it by default to reduce visual clutter.
+ // Make sure it becomes visible when focused.
$( '<div>' ).addClass( 'mw-navigation-hint' )
.text( mw.msg( 'prefs-tabs-navigation-hint' ) )
.attr( 'tabIndex', 0 )
mw.trackSubscribe( 'resourceloader.exception', logError );
mw.trackSubscribe( 'resourceloader.assert', logError );
- /**
- * Fired when all modules associated with the page have finished loading.
- *
- * @event resourceloader_loadEnd
- * @member mw.hook
- */
- $( function () {
- // Get a list of modules currently in loading state
- var modules = mw.loader.getModuleNames().filter( function ( module ) {
- return mw.loader.getState( module ) === 'loading';
- } );
- // Wait for them to complete loading (regardles of failures). First, try a single
- // mw.loader.using() call. That's efficient, but has the drawback of being rejected
- // upon first failure. Fall back to tracking each module separately. We usually avoid
- // that because of high overhead for that internally to mw.loader.
- mw.loader.using( modules ).catch( function () {
- return $.Deferred( function ( deferred ) {
- var i, count = modules.length;
- function decrement() {
- count--;
- if ( count === 0 ) {
- deferred.resolve();
- }
- }
- for ( i = 0; i < modules.length; i++ ) {
- mw.loader.using( modules[ i ] ).always( decrement );
- }
- } );
- } ).then( function () {
- if ( window.performance && performance.mark ) {
- performance.mark( 'mwLoadEnd' );
- }
- mw.hook( 'resourceloader.loadEnd' ).fire();
- } );
- } );
-
// Attach to window and globally alias
window.mw = window.mediaWiki = mw;
}( jQuery ) );
[ false, '', '', '' ],
[
true,
- "script-src 'unsafe-eval' 'self' 'nonce-secret' 'unsafe-inline' sister-site.somewhere.com *.wikipedia.org; default-src * data: blob:; style-src * data: blob: 'unsafe-inline'; report-uri /w/api.php?action=cspreport&format=json",
- "script-src 'unsafe-eval' 'self' 'nonce-secret' 'unsafe-inline' sister-site.somewhere.com *.wikipedia.org; default-src * data: blob:; style-src * data: blob: 'unsafe-inline'; report-uri /w/api.php?action=cspreport&format=json&reportonly=1",
+ "script-src 'unsafe-eval' 'self' 'nonce-secret' 'unsafe-inline' sister-site.somewhere.com *.wikipedia.org; default-src * data: blob:; style-src * data: blob: 'unsafe-inline'; report-uri /w/api.php?action=cspreport&format=json&",
+ "script-src 'unsafe-eval' 'self' 'nonce-secret' 'unsafe-inline' sister-site.somewhere.com *.wikipedia.org; default-src * data: blob:; style-src * data: blob: 'unsafe-inline'; report-uri /w/api.php?action=cspreport&format=json&reportonly=1&",
"script-src 'unsafe-eval' 'self' sister-site.somewhere.com *.wikipedia.org; default-src * data: blob:; style-src * data: blob: 'unsafe-inline'",
],
[
[],
- "script-src 'unsafe-eval' 'self' 'nonce-secret' 'unsafe-inline' sister-site.somewhere.com *.wikipedia.org; default-src * data: blob:; style-src * data: blob: 'unsafe-inline'; report-uri /w/api.php?action=cspreport&format=json",
- "script-src 'unsafe-eval' 'self' 'nonce-secret' 'unsafe-inline' sister-site.somewhere.com *.wikipedia.org; default-src * data: blob:; style-src * data: blob: 'unsafe-inline'; report-uri /w/api.php?action=cspreport&format=json&reportonly=1",
+ "script-src 'unsafe-eval' 'self' 'nonce-secret' 'unsafe-inline' sister-site.somewhere.com *.wikipedia.org; default-src * data: blob:; style-src * data: blob: 'unsafe-inline'; report-uri /w/api.php?action=cspreport&format=json&",
+ "script-src 'unsafe-eval' 'self' 'nonce-secret' 'unsafe-inline' sister-site.somewhere.com *.wikipedia.org; default-src * data: blob:; style-src * data: blob: 'unsafe-inline'; report-uri /w/api.php?action=cspreport&format=json&reportonly=1&",
"script-src 'unsafe-eval' 'self' sister-site.somewhere.com *.wikipedia.org; default-src * data: blob:; style-src * data: blob: 'unsafe-inline'",
],
[
[ 'script-src' => [ 'http://example.com', 'http://something,else.com' ] ],
- "script-src 'unsafe-eval' 'self' 'nonce-secret' http://example.com http://something%2Celse.com 'unsafe-inline' sister-site.somewhere.com *.wikipedia.org; default-src * data: blob:; style-src * data: blob: 'unsafe-inline'; report-uri /w/api.php?action=cspreport&format=json",
- "script-src 'unsafe-eval' 'self' 'nonce-secret' http://example.com http://something%2Celse.com 'unsafe-inline' sister-site.somewhere.com *.wikipedia.org; default-src * data: blob:; style-src * data: blob: 'unsafe-inline'; report-uri /w/api.php?action=cspreport&format=json&reportonly=1",
+ "script-src 'unsafe-eval' 'self' 'nonce-secret' http://example.com http://something%2Celse.com 'unsafe-inline' sister-site.somewhere.com *.wikipedia.org; default-src * data: blob:; style-src * data: blob: 'unsafe-inline'; report-uri /w/api.php?action=cspreport&format=json&",
+ "script-src 'unsafe-eval' 'self' 'nonce-secret' http://example.com http://something%2Celse.com 'unsafe-inline' sister-site.somewhere.com *.wikipedia.org; default-src * data: blob:; style-src * data: blob: 'unsafe-inline'; report-uri /w/api.php?action=cspreport&format=json&reportonly=1&",
"script-src 'unsafe-eval' 'self' http://example.com http://something%2Celse.com sister-site.somewhere.com *.wikipedia.org; default-src * data: blob:; style-src * data: blob: 'unsafe-inline'",
],
[
[ 'unsafeFallback' => false ],
- "script-src 'unsafe-eval' 'self' 'nonce-secret' sister-site.somewhere.com *.wikipedia.org; default-src * data: blob:; style-src * data: blob: 'unsafe-inline'; report-uri /w/api.php?action=cspreport&format=json",
- "script-src 'unsafe-eval' 'self' 'nonce-secret' sister-site.somewhere.com *.wikipedia.org; default-src * data: blob:; style-src * data: blob: 'unsafe-inline'; report-uri /w/api.php?action=cspreport&format=json&reportonly=1",
+ "script-src 'unsafe-eval' 'self' 'nonce-secret' sister-site.somewhere.com *.wikipedia.org; default-src * data: blob:; style-src * data: blob: 'unsafe-inline'; report-uri /w/api.php?action=cspreport&format=json&",
+ "script-src 'unsafe-eval' 'self' 'nonce-secret' sister-site.somewhere.com *.wikipedia.org; default-src * data: blob:; style-src * data: blob: 'unsafe-inline'; report-uri /w/api.php?action=cspreport&format=json&reportonly=1&",
"script-src 'unsafe-eval' 'self' sister-site.somewhere.com *.wikipedia.org; default-src * data: blob:; style-src * data: blob: 'unsafe-inline'",
],
[
[ 'unsafeFallback' => true ],
- "script-src 'unsafe-eval' 'self' 'nonce-secret' 'unsafe-inline' sister-site.somewhere.com *.wikipedia.org; default-src * data: blob:; style-src * data: blob: 'unsafe-inline'; report-uri /w/api.php?action=cspreport&format=json",
- "script-src 'unsafe-eval' 'self' 'nonce-secret' 'unsafe-inline' sister-site.somewhere.com *.wikipedia.org; default-src * data: blob:; style-src * data: blob: 'unsafe-inline'; report-uri /w/api.php?action=cspreport&format=json&reportonly=1",
+ "script-src 'unsafe-eval' 'self' 'nonce-secret' 'unsafe-inline' sister-site.somewhere.com *.wikipedia.org; default-src * data: blob:; style-src * data: blob: 'unsafe-inline'; report-uri /w/api.php?action=cspreport&format=json&",
+ "script-src 'unsafe-eval' 'self' 'nonce-secret' 'unsafe-inline' sister-site.somewhere.com *.wikipedia.org; default-src * data: blob:; style-src * data: blob: 'unsafe-inline'; report-uri /w/api.php?action=cspreport&format=json&reportonly=1&",
"script-src 'unsafe-eval' 'self' sister-site.somewhere.com *.wikipedia.org; default-src * data: blob:; style-src * data: blob: 'unsafe-inline'",
],
[
[ 'default-src' => false ],
- "script-src 'unsafe-eval' 'self' 'nonce-secret' 'unsafe-inline' sister-site.somewhere.com *.wikipedia.org; default-src * data: blob:; style-src * data: blob: 'unsafe-inline'; report-uri /w/api.php?action=cspreport&format=json",
- "script-src 'unsafe-eval' 'self' 'nonce-secret' 'unsafe-inline' sister-site.somewhere.com *.wikipedia.org; default-src * data: blob:; style-src * data: blob: 'unsafe-inline'; report-uri /w/api.php?action=cspreport&format=json&reportonly=1",
+ "script-src 'unsafe-eval' 'self' 'nonce-secret' 'unsafe-inline' sister-site.somewhere.com *.wikipedia.org; default-src * data: blob:; style-src * data: blob: 'unsafe-inline'; report-uri /w/api.php?action=cspreport&format=json&",
+ "script-src 'unsafe-eval' 'self' 'nonce-secret' 'unsafe-inline' sister-site.somewhere.com *.wikipedia.org; default-src * data: blob:; style-src * data: blob: 'unsafe-inline'; report-uri /w/api.php?action=cspreport&format=json&reportonly=1&",
"script-src 'unsafe-eval' 'self' sister-site.somewhere.com *.wikipedia.org; default-src * data: blob:; style-src * data: blob: 'unsafe-inline'",
],
[
[ 'default-src' => true ],
- "script-src 'unsafe-eval' 'self' 'nonce-secret' 'unsafe-inline' sister-site.somewhere.com *.wikipedia.org; default-src 'self' data: blob: https://upload.wikimedia.org https://commons.wikimedia.org sister-site.somewhere.com *.wikipedia.org; style-src 'self' data: blob: https://upload.wikimedia.org https://commons.wikimedia.org sister-site.somewhere.com *.wikipedia.org 'unsafe-inline'; report-uri /w/api.php?action=cspreport&format=json",
- "script-src 'unsafe-eval' 'self' 'nonce-secret' 'unsafe-inline' sister-site.somewhere.com *.wikipedia.org; default-src 'self' data: blob: https://upload.wikimedia.org https://commons.wikimedia.org sister-site.somewhere.com *.wikipedia.org; style-src 'self' data: blob: https://upload.wikimedia.org https://commons.wikimedia.org sister-site.somewhere.com *.wikipedia.org 'unsafe-inline'; report-uri /w/api.php?action=cspreport&format=json&reportonly=1",
+ "script-src 'unsafe-eval' 'self' 'nonce-secret' 'unsafe-inline' sister-site.somewhere.com *.wikipedia.org; default-src 'self' data: blob: https://upload.wikimedia.org https://commons.wikimedia.org sister-site.somewhere.com *.wikipedia.org; style-src 'self' data: blob: https://upload.wikimedia.org https://commons.wikimedia.org sister-site.somewhere.com *.wikipedia.org 'unsafe-inline'; report-uri /w/api.php?action=cspreport&format=json&",
+ "script-src 'unsafe-eval' 'self' 'nonce-secret' 'unsafe-inline' sister-site.somewhere.com *.wikipedia.org; default-src 'self' data: blob: https://upload.wikimedia.org https://commons.wikimedia.org sister-site.somewhere.com *.wikipedia.org; style-src 'self' data: blob: https://upload.wikimedia.org https://commons.wikimedia.org sister-site.somewhere.com *.wikipedia.org 'unsafe-inline'; report-uri /w/api.php?action=cspreport&format=json&reportonly=1&",
"script-src 'unsafe-eval' 'self' sister-site.somewhere.com *.wikipedia.org; default-src 'self' data: blob: https://upload.wikimedia.org https://commons.wikimedia.org sister-site.somewhere.com *.wikipedia.org; style-src 'self' data: blob: https://upload.wikimedia.org https://commons.wikimedia.org sister-site.somewhere.com *.wikipedia.org 'unsafe-inline'",
],
[
[ 'default-src' => [ 'https://foo.com', 'http://bar.com', 'baz.de' ] ],
- "script-src 'unsafe-eval' 'self' 'nonce-secret' 'unsafe-inline' sister-site.somewhere.com *.wikipedia.org; default-src 'self' data: blob: https://upload.wikimedia.org https://commons.wikimedia.org https://foo.com http://bar.com baz.de sister-site.somewhere.com *.wikipedia.org; style-src 'self' data: blob: https://upload.wikimedia.org https://commons.wikimedia.org https://foo.com http://bar.com baz.de sister-site.somewhere.com *.wikipedia.org 'unsafe-inline'; report-uri /w/api.php?action=cspreport&format=json",
- "script-src 'unsafe-eval' 'self' 'nonce-secret' 'unsafe-inline' sister-site.somewhere.com *.wikipedia.org; default-src 'self' data: blob: https://upload.wikimedia.org https://commons.wikimedia.org https://foo.com http://bar.com baz.de sister-site.somewhere.com *.wikipedia.org; style-src 'self' data: blob: https://upload.wikimedia.org https://commons.wikimedia.org https://foo.com http://bar.com baz.de sister-site.somewhere.com *.wikipedia.org 'unsafe-inline'; report-uri /w/api.php?action=cspreport&format=json&reportonly=1",
+ "script-src 'unsafe-eval' 'self' 'nonce-secret' 'unsafe-inline' sister-site.somewhere.com *.wikipedia.org; default-src 'self' data: blob: https://upload.wikimedia.org https://commons.wikimedia.org https://foo.com http://bar.com baz.de sister-site.somewhere.com *.wikipedia.org; style-src 'self' data: blob: https://upload.wikimedia.org https://commons.wikimedia.org https://foo.com http://bar.com baz.de sister-site.somewhere.com *.wikipedia.org 'unsafe-inline'; report-uri /w/api.php?action=cspreport&format=json&",
+ "script-src 'unsafe-eval' 'self' 'nonce-secret' 'unsafe-inline' sister-site.somewhere.com *.wikipedia.org; default-src 'self' data: blob: https://upload.wikimedia.org https://commons.wikimedia.org https://foo.com http://bar.com baz.de sister-site.somewhere.com *.wikipedia.org; style-src 'self' data: blob: https://upload.wikimedia.org https://commons.wikimedia.org https://foo.com http://bar.com baz.de sister-site.somewhere.com *.wikipedia.org 'unsafe-inline'; report-uri /w/api.php?action=cspreport&format=json&reportonly=1&",
"script-src 'unsafe-eval' 'self' sister-site.somewhere.com *.wikipedia.org; default-src 'self' data: blob: https://upload.wikimedia.org https://commons.wikimedia.org https://foo.com http://bar.com baz.de sister-site.somewhere.com *.wikipedia.org; style-src 'self' data: blob: https://upload.wikimedia.org https://commons.wikimedia.org https://foo.com http://bar.com baz.de sister-site.somewhere.com *.wikipedia.org 'unsafe-inline'",
],
[
[ 'includeCORS' => false ],
- "script-src 'unsafe-eval' 'self' 'nonce-secret' 'unsafe-inline'; default-src * data: blob:; style-src * data: blob: 'unsafe-inline'; report-uri /w/api.php?action=cspreport&format=json",
- "script-src 'unsafe-eval' 'self' 'nonce-secret' 'unsafe-inline'; default-src * data: blob:; style-src * data: blob: 'unsafe-inline'; report-uri /w/api.php?action=cspreport&format=json&reportonly=1",
+ "script-src 'unsafe-eval' 'self' 'nonce-secret' 'unsafe-inline'; default-src * data: blob:; style-src * data: blob: 'unsafe-inline'; report-uri /w/api.php?action=cspreport&format=json&",
+ "script-src 'unsafe-eval' 'self' 'nonce-secret' 'unsafe-inline'; default-src * data: blob:; style-src * data: blob: 'unsafe-inline'; report-uri /w/api.php?action=cspreport&format=json&reportonly=1&",
"script-src 'unsafe-eval' 'self'; default-src * data: blob:; style-src * data: blob: 'unsafe-inline'",
],
[
[ 'includeCORS' => false, 'default-src' => true ],
- "script-src 'unsafe-eval' 'self' 'nonce-secret' 'unsafe-inline'; default-src 'self' data: blob: https://upload.wikimedia.org https://commons.wikimedia.org; style-src 'self' data: blob: https://upload.wikimedia.org https://commons.wikimedia.org 'unsafe-inline'; report-uri /w/api.php?action=cspreport&format=json",
- "script-src 'unsafe-eval' 'self' 'nonce-secret' 'unsafe-inline'; default-src 'self' data: blob: https://upload.wikimedia.org https://commons.wikimedia.org; style-src 'self' data: blob: https://upload.wikimedia.org https://commons.wikimedia.org 'unsafe-inline'; report-uri /w/api.php?action=cspreport&format=json&reportonly=1",
+ "script-src 'unsafe-eval' 'self' 'nonce-secret' 'unsafe-inline'; default-src 'self' data: blob: https://upload.wikimedia.org https://commons.wikimedia.org; style-src 'self' data: blob: https://upload.wikimedia.org https://commons.wikimedia.org 'unsafe-inline'; report-uri /w/api.php?action=cspreport&format=json&",
+ "script-src 'unsafe-eval' 'self' 'nonce-secret' 'unsafe-inline'; default-src 'self' data: blob: https://upload.wikimedia.org https://commons.wikimedia.org; style-src 'self' data: blob: https://upload.wikimedia.org https://commons.wikimedia.org 'unsafe-inline'; report-uri /w/api.php?action=cspreport&format=json&reportonly=1&",
"script-src 'unsafe-eval' 'self'; default-src 'self' data: blob: https://upload.wikimedia.org https://commons.wikimedia.org; style-src 'self' data: blob: https://upload.wikimedia.org https://commons.wikimedia.org 'unsafe-inline'",
],
[
[ 'includeCORS' => true ],
- "script-src 'unsafe-eval' 'self' 'nonce-secret' 'unsafe-inline' sister-site.somewhere.com *.wikipedia.org; default-src * data: blob:; style-src * data: blob: 'unsafe-inline'; report-uri /w/api.php?action=cspreport&format=json",
- "script-src 'unsafe-eval' 'self' 'nonce-secret' 'unsafe-inline' sister-site.somewhere.com *.wikipedia.org; default-src * data: blob:; style-src * data: blob: 'unsafe-inline'; report-uri /w/api.php?action=cspreport&format=json&reportonly=1",
+ "script-src 'unsafe-eval' 'self' 'nonce-secret' 'unsafe-inline' sister-site.somewhere.com *.wikipedia.org; default-src * data: blob:; style-src * data: blob: 'unsafe-inline'; report-uri /w/api.php?action=cspreport&format=json&",
+ "script-src 'unsafe-eval' 'self' 'nonce-secret' 'unsafe-inline' sister-site.somewhere.com *.wikipedia.org; default-src * data: blob:; style-src * data: blob: 'unsafe-inline'; report-uri /w/api.php?action=cspreport&format=json&reportonly=1&",
"script-src 'unsafe-eval' 'self' sister-site.somewhere.com *.wikipedia.org; default-src * data: blob:; style-src * data: blob: 'unsafe-inline'",
],
[
],
[
[ 'report-uri' => true ],
- "script-src 'unsafe-eval' 'self' 'nonce-secret' 'unsafe-inline' sister-site.somewhere.com *.wikipedia.org; default-src * data: blob:; style-src * data: blob: 'unsafe-inline'; report-uri /w/api.php?action=cspreport&format=json",
- "script-src 'unsafe-eval' 'self' 'nonce-secret' 'unsafe-inline' sister-site.somewhere.com *.wikipedia.org; default-src * data: blob:; style-src * data: blob: 'unsafe-inline'; report-uri /w/api.php?action=cspreport&format=json&reportonly=1",
+ "script-src 'unsafe-eval' 'self' 'nonce-secret' 'unsafe-inline' sister-site.somewhere.com *.wikipedia.org; default-src * data: blob:; style-src * data: blob: 'unsafe-inline'; report-uri /w/api.php?action=cspreport&format=json&",
+ "script-src 'unsafe-eval' 'self' 'nonce-secret' 'unsafe-inline' sister-site.somewhere.com *.wikipedia.org; default-src * data: blob:; style-src * data: blob: 'unsafe-inline'; report-uri /w/api.php?action=cspreport&format=json&reportonly=1&",
"script-src 'unsafe-eval' 'self' sister-site.somewhere.com *.wikipedia.org; default-src * data: blob:; style-src * data: blob: 'unsafe-inline'",
],
[
$wgAllowImageTag = $origImg;
- $expected = "script-src 'unsafe-eval' 'self' 'nonce-secret' 'unsafe-inline' sister-site.somewhere.com *.wikipedia.org; default-src * data: blob:; style-src * data: blob: 'unsafe-inline'; report-uri /w/api.php?action=cspreport&format=json";
+ $expected = "script-src 'unsafe-eval' 'self' 'nonce-secret' 'unsafe-inline' sister-site.somewhere.com *.wikipedia.org; default-src * data: blob:; style-src * data: blob: 'unsafe-inline'; report-uri /w/api.php?action=cspreport&format=json&";
$this->assertEquals( $expected, $actual );
}
true,
ContentSecurityPolicy::REPORT_ONLY_MODE
);
- $expected = "script-src 'unsafe-eval' 'self' 'nonce-secret' 'unsafe-inline' sister-site.somewhere.com *.wikipedia.org; default-src * data: blob:; style-src * data: blob: 'unsafe-inline'; report-uri /w/api.php?action=cspreport&format=json&reportonly=1";
+ $expected = "script-src 'unsafe-eval' 'self' 'nonce-secret' 'unsafe-inline' sister-site.somewhere.com *.wikipedia.org; default-src * data: blob:; style-src * data: blob: 'unsafe-inline'; report-uri /w/api.php?action=cspreport&format=json&reportonly=1&";
$this->assertEquals( $expected, $actual );
// @codingStandardsIgnoreEnd Generic.Files.LineLength
}
*/
public function testGetReportUri() {
$full = $this->csp->getReportUri( ContentSecurityPolicy::FULL_MODE );
- $fullExpected = '/w/api.php?action=cspreport&format=json';
+ $fullExpected = '/w/api.php?action=cspreport&format=json&';
$this->assertEquals( $full, $fullExpected, 'normal report uri' );
$report = $this->csp->getReportUri( ContentSecurityPolicy::REPORT_ONLY_MODE );
- $reportExpected = $fullExpected . '&reportonly=1';
+ $reportExpected = $fullExpected . 'reportonly=1&';
$this->assertEquals( $report, $reportExpected, 'report only' );
global $wgScriptPath;
$origPath = wfSetVar( $wgScriptPath, '/tl;dr/a,%20wiki' );
$esc = $this->csp->getReportUri( ContentSecurityPolicy::FULL_MODE );
- $escExpected = '/tl%3Bdr/a%2C%20wiki/api.php?action=cspreport&format=json';
+ $escExpected = '/tl%3Bdr/a%2C%20wiki/api.php?action=cspreport&format=json&';
$wgScriptPath = $origPath;
$this->assertEquals( $esc, $escExpected, 'test esc rules' );
}
* @group Action
* @group Database
*
- * @license GNU GPL v2+
+ * @license GPL-2.0-or-later
* @author Thiemo Kreuz
*/
class ActionTest extends MediaWikiTestCase {
--- /dev/null
+<?php
+
+/**
+ * @covers WatchAction
+ *
+ * @group Action
+ */
+class WatchActionTest extends MediaWikiTestCase {
+
+ /**
+ * @var WatchAction
+ */
+ private $watchAction;
+
+ /**
+ * @var WikiPage
+ */
+ private $testWikiPage;
+
+ protected function setUp() {
+ parent::setUp();
+
+ $testTitle = Title::newFromText( 'UTTest' );
+ $this->testWikiPage = new WikiPage( $testTitle );
+ $testContext = new DerivativeContext( RequestContext::getMain() );
+ $testContext->setTitle( $testTitle );
+ $this->watchAction = new WatchAction( $this->testWikiPage, $testContext );
+ }
+
+ /**
+ * @throws MWException
+ */
+ protected function tearDown() {
+ parent::tearDown();
+
+ Hooks::clear( 'WatchArticle' );
+ Hooks::clear( 'UnwatchArticle' );
+ }
+
+ /**
+ * @covers WatchAction::getName()
+ */
+ public function testGetName() {
+ $this->assertEquals( 'watch', $this->watchAction->getName() );
+ }
+
+ /**
+ * @covers WatchAction::requiresUnblock()
+ */
+ public function testRequiresUnlock() {
+ $this->assertFalse( $this->watchAction->requiresUnblock() );
+ }
+
+ /**
+ * @covers WatchAction::doesWrites()
+ */
+ public function testDoesWrites() {
+ $this->assertTrue( $this->watchAction->doesWrites() );
+ }
+
+ /**
+ * @covers WatchAction::onSubmit()
+ * @covers WatchAction::doWatch()
+ */
+ public function testOnSubmit() {
+ /** @var Status $actual */
+ $actual = $this->watchAction->onSubmit( [] );
+
+ $this->assertTrue( $actual->isGood() );
+ }
+
+ /**
+ * @covers WatchAction::onSubmit()
+ * @covers WatchAction::doWatch()
+ */
+ public function testOnSubmitHookAborted() {
+ Hooks::register( 'WatchArticle', function () {
+ return false;
+ } );
+
+ /** @var Status $actual */
+ $actual = $this->watchAction->onSubmit( [] );
+
+ $this->assertInstanceOf( Status::class, $actual );
+ $this->assertTrue( $actual->hasMessage( 'hookaborted' ) );
+ }
+
+ /**
+ * @covers WatchAction::checkCanExecute()
+ */
+ public function testShowUserNotLoggedIn() {
+ $notLoggedInUser = new User();
+ $testContext = new DerivativeContext( $this->watchAction->getContext() );
+ $testContext->setUser( $notLoggedInUser );
+ $watchAction = new WatchAction( $this->testWikiPage, $testContext );
+ $this->setExpectedException( UserNotLoggedIn::class );
+
+ $watchAction->show();
+ }
+
+ /**
+ * @covers WatchAction::checkCanExecute()
+ */
+ public function testShowUserLoggedInNoException() {
+ $loggedInUser = $this->getMock( User::class );
+ $loggedInUser->method( 'isLoggedIn' )->willReturn( true );
+ $testContext = new DerivativeContext( $this->watchAction->getContext() );
+ $testContext->setUser( $loggedInUser );
+ $watchAction = new WatchAction( $this->testWikiPage, $testContext );
+
+ $exception = null;
+ try {
+ $watchAction->show();
+ } catch ( UserNotLoggedIn $e ) {
+ $exception = $e;
+ }
+ $this->assertNull( $exception,
+ 'UserNotLoggedIn exception should not be thrown if user is logged in.' );
+ }
+
+ /**
+ * @covers WatchAction::onSuccess()
+ */
+ public function testOnSuccessMainNamespaceTitle() {
+ $testContext = $this->getMock(
+ DerivativeContext::class,
+ [ 'msg' ],
+ [ $this->watchAction->getContext() ]
+ );
+ $testOutput = new OutputPage( $testContext );
+ $testContext->setOutput( $testOutput );
+ $testContext->method( 'msg' )->willReturnCallback( function ( $msgKey ) {
+ return new RawMessage( $msgKey );
+ } );
+ $watchAction = new WatchAction( $this->testWikiPage, $testContext );
+
+ $watchAction->onSuccess();
+
+ $this->assertEquals( '<p>addedwatchtext
+</p>', $testOutput->getHTML() );
+ }
+
+ /**
+ * @covers WatchAction::onSuccess()
+ */
+ public function testOnSuccessTalkPage() {
+ $testContext = $this->getMock(
+ DerivativeContext::class,
+ [],
+ [ $this->watchAction->getContext() ]
+ );
+ $testOutput = new OutputPage( $testContext );
+ $testContext->method( 'getOutput' )->willReturn( $testOutput );
+ $testContext->method( 'msg' )->willReturnCallback( function ( $msgKey ) {
+ return new RawMessage( $msgKey );
+ } );
+ $talkPageTitle = Title::newFromText( 'Talk:UTTest' );
+ $testContext->setTitle( $talkPageTitle );
+ $watchAction = new WatchAction( new WikiPage( $talkPageTitle ), $testContext );
+
+ $watchAction->onSuccess();
+
+ $this->assertEquals( '<p>addedwatchtext-talk
+</p>', $testOutput->getHTML() );
+ }
+
+ /**
+ * @covers WatchAction::doWatch()
+ */
+ public function testDoWatchNoCheckRights() {
+ $notPermittedUser = $this->getMock( User::class );
+ $notPermittedUser->method( 'isAllowed' )->willReturn( false );
+
+ $actual = WatchAction::doWatch( $this->testWikiPage->getTitle(), $notPermittedUser, false );
+
+ $this->assertTrue( $actual->isGood() );
+ }
+
+ /**
+ * @covers WatchAction::doWatch()
+ */
+ public function testDoWatchUserNotPermittedStatusNotGood() {
+ $notPermittedUser = $this->getMock( User::class );
+ $notPermittedUser->method( 'isAllowed' )->willReturn( false );
+
+ $actual = WatchAction::doWatch( $this->testWikiPage->getTitle(), $notPermittedUser, true );
+
+ $this->assertFalse( $actual->isGood() );
+ }
+
+ /**
+ * @covers WatchAction::doWatch()
+ */
+ public function testDoWatchCallsUserAddWatch() {
+ $permittedUser = $this->getMock( User::class );
+ $permittedUser->method( 'isAllowed' )->willReturn( true );
+ $permittedUser->expects( $this->once() )
+ ->method( 'addWatch' )
+ ->with( $this->equalTo( $this->testWikiPage->getTitle() ), $this->equalTo( true ) );
+
+ $actual = WatchAction::doWatch( $this->testWikiPage->getTitle(), $permittedUser );
+
+ $this->assertTrue( $actual->isGood() );
+ }
+
+ /**
+ * @covers WatchAction::doUnWatch()
+ */
+ public function testDoUnWatchWithoutRights() {
+ $notPermittedUser = $this->getMock( User::class );
+ $notPermittedUser->method( 'isAllowed' )->willReturn( false );
+
+ $actual = WatchAction::doUnWatch( $this->testWikiPage->getTitle(), $notPermittedUser );
+
+ $this->assertFalse( $actual->isGood() );
+ }
+
+ /**
+ * @covers WatchAction::doUnWatch()
+ */
+ public function testDoUnWatchUserHookAborted() {
+ $permittedUser = $this->getMock( User::class );
+ $permittedUser->method( 'isAllowed' )->willReturn( true );
+ Hooks::register( 'UnwatchArticle', function () {
+ return false;
+ } );
+
+ $status = WatchAction::doUnWatch( $this->testWikiPage->getTitle(), $permittedUser );
+
+ $this->assertFalse( $status->isGood() );
+ $errors = $status->getErrors();
+ $this->assertEquals( 1, count( $errors ) );
+ $this->assertEquals( 'hookaborted', $errors[0]['message'] );
+ }
+
+ /**
+ * @covers WatchAction::doUnWatch()
+ */
+ public function testDoUnWatchCallsUserRemoveWatch() {
+ $permittedUser = $this->getMock( User::class );
+ $permittedUser->method( 'isAllowed' )->willReturn( true );
+ $permittedUser->expects( $this->once() )
+ ->method( 'removeWatch' )
+ ->with( $this->equalTo( $this->testWikiPage->getTitle() ) );
+
+ $actual = WatchAction::doUnWatch( $this->testWikiPage->getTitle(), $permittedUser );
+
+ $this->assertTrue( $actual->isGood() );
+ }
+
+ /**
+ * @covers WatchAction::getWatchToken()
+ */
+ public function testGetWatchTokenNormalizesToWatch() {
+ $user = $this->getMock( User::class );
+ $user->expects( $this->once() )
+ ->method( 'getEditToken' )
+ ->with( $this->equalTo( 'watch' ) );
+
+ WatchAction::getWatchToken( $this->watchAction->getTitle(), $user, 'INVALID_ACTION' );
+ }
+
+ /**
+ * @covers WatchAction::getWatchToken()
+ */
+ public function testGetWatchTokenProxiesUserGetEditToken() {
+ $user = $this->getMock( User::class );
+ $user->expects( $this->once() )->method( 'getEditToken' );
+
+ WatchAction::getWatchToken( $this->watchAction->getTitle(), $user );
+ }
+
+ /**
+ * @covers WatchAction::getUnwatchToken()
+ */
+ public function testGetUnwatchToken() {
+ $user = $this->getMock( User::class );
+ $user->expects( $this->once() )->method( 'getEditToken' );
+ $this->hideDeprecated( 'WatchAction::getUnwatchToken' );
+
+ WatchAction::getUnWatchToken( $this->watchAction->getTitle(), $user );
+ }
+
+ /**
+ * @covers WatchAction::doWatchOrUnwatch()
+ */
+ public function testDoWatchOrUnwatchUserNotLoggedIn() {
+ $user = $this->getLoggedInIsWatchedUser( false );
+ $user->expects( $this->never() )->method( 'removeWatch' );
+ $user->expects( $this->never() )->method( 'addWatch' );
+
+ $status = WatchAction::doWatchOrUnwatch( true, $this->watchAction->getTitle(), $user );
+
+ $this->assertTrue( $status->isGood() );
+ }
+
+ /**
+ * @covers WatchAction::doWatchOrUnwatch()
+ */
+ public function testDoWatchOrUnwatchSkipsIfAlreadyWatched() {
+ $user = $this->getLoggedInIsWatchedUser();
+ $user->expects( $this->never() )->method( 'removeWatch' );
+ $user->expects( $this->never() )->method( 'addWatch' );
+
+ $status = WatchAction::doWatchOrUnwatch( true, $this->watchAction->getTitle(), $user );
+
+ $this->assertTrue( $status->isGood() );
+ }
+
+ /**
+ * @covers WatchAction::doWatchOrUnwatch()
+ */
+ public function testDoWatchOrUnwatchSkipsIfAlreadyUnWatched() {
+ $user = $this->getLoggedInIsWatchedUser( true, false );
+ $user->expects( $this->never() )->method( 'removeWatch' );
+ $user->expects( $this->never() )->method( 'addWatch' );
+
+ $status = WatchAction::doWatchOrUnwatch( false, $this->watchAction->getTitle(), $user );
+
+ $this->assertTrue( $status->isGood() );
+ }
+
+ /**
+ * @covers WatchAction::doWatchOrUnwatch()
+ */
+ public function testDoWatchOrUnwatchWatchesIfWatch() {
+ $user = $this->getLoggedInIsWatchedUser( true, false );
+ $user->expects( $this->never() )->method( 'removeWatch' );
+ $user->expects( $this->once() )
+ ->method( 'addWatch' )
+ ->with( $this->equalTo( $this->testWikiPage->getTitle() ), $this->equalTo( false ) );
+
+ $status = WatchAction::doWatchOrUnwatch( true, $this->watchAction->getTitle(), $user );
+
+ $this->assertTrue( $status->isGood() );
+ }
+
+ /**
+ * @covers WatchAction::doWatchOrUnwatch()
+ */
+ public function testDoWatchOrUnwatchUnwatchesIfUnwatch() {
+ $user = $this->getLoggedInIsWatchedUser();
+ $user->method( 'isAllowed' )->willReturn( true );
+ $user->expects( $this->never() )->method( 'addWatch' );
+ $user->expects( $this->once() )
+ ->method( 'removeWatch' )
+ ->with( $this->equalTo( $this->testWikiPage->getTitle() ) );
+
+ $status = WatchAction::doWatchOrUnwatch( false, $this->watchAction->getTitle(), $user );
+
+ $this->assertTrue( $status->isGood() );
+ }
+
+ /**
+ * @param bool $isLoggedIn Whether the user should be "marked" as logged in
+ * @param bool $isWatched The value any call to isWatched should return
+ * @return PHPUnit_Framework_MockObject_MockObject
+ */
+ private function getLoggedInIsWatchedUser( $isLoggedIn = true, $isWatched = true ) {
+ $user = $this->getMock( User::class );
+ $user->method( 'isLoggedIn' )->willReturn( $isLoggedIn );
+ $user->method( 'isWatched' )->willReturn( $isWatched );
+
+ return $user;
+ }
+
+}
ApiBase::PARAM_ISMULTI => true,
ApiBase::PARAM_ISMULTI_LIMIT1 => 2,
],
- [ 'a', 'b' ],
- [ [ 'apiwarn-toomanyvalues', 'myParam', 2 ] ],
+ ApiUsageException::newWithMessage(
+ null, [ 'apierror-toomanyvalues', 'myParam', 2 ], 'too-many-myParam'
+ ),
+ []
],
'Multi-valued parameter with exceeded limits for non-bot' => [
'a|b|c',
ApiBase::PARAM_ISMULTI_LIMIT1 => 2,
ApiBase::PARAM_ISMULTI_LIMIT2 => 3,
],
- [ 'a', 'b' ],
- [ [ 'apiwarn-toomanyvalues', 'myParam', 2 ] ],
+ ApiUsageException::newWithMessage(
+ null, [ 'apierror-toomanyvalues', 'myParam', 2 ], 'too-many-myParam'
+ ),
+ []
],
'Multi-valued parameter with non-exceeded limits for bot' => [
'a|b|c',
);
}
+ public function testTitleParams() {
+ $page1 = new TitleValue( 0, 'ApiQueryRecentChangesIntegrationTestPage' );
+ $page2 = new TitleValue( 1, 'ApiQueryRecentChangesIntegrationTestPage2' );
+ $page3 = new TitleValue( 0, 'ApiQueryRecentChangesIntegrationTestPage3' );
+ $this->doPageEdits(
+ $this->getLoggedInTestUser(),
+ [
+ [
+ 'target' => $page1,
+ 'summary' => 'Create the page',
+ ],
+ [
+ 'target' => $page2,
+ 'summary' => 'Create the page',
+ ],
+ [
+ 'target' => $page3,
+ 'summary' => 'Create the page',
+ ],
+ ]
+ );
+
+ $result = $this->doListRecentChangesRequest(
+ [
+ 'rctitle' => 'ApiQueryRecentChangesIntegrationTestPage',
+ 'rcprop' => 'title'
+ ]
+ );
+
+ $result2 = $this->doListRecentChangesRequest(
+ [
+ 'rctitle' => 'Talk:ApiQueryRecentChangesIntegrationTestPage2',
+ 'rcprop' => 'title'
+ ]
+ );
+
+ $this->assertEquals(
+ [
+ [
+ 'type' => 'new',
+ 'ns' => $page1->getNamespace(),
+ 'title' => $this->getPrefixedText( $page1 )
+ ],
+ ],
+ $this->getItemsFromApiResponse( $result )
+ );
+
+ $this->assertEquals(
+ [
+ [
+ 'type' => 'new',
+ 'ns' => $page2->getNamespace(),
+ 'title' => $this->getPrefixedText( $page2 )
+ ],
+ ],
+ $this->getItemsFromApiResponse( $result2 )
+ );
+ }
+
public function testStartEndParams() {
$target = new TitleValue( 0, 'ApiQueryRecentChangesIntegrationTestPage' );
$this->doPageEdit( $this->getLoggedInTestUser(), $target, 'Create the page' );
$logger->expects( $this->once() )->method( 'log' )->with( $this->anything(), $this->anything(), [
'throttle' => 'custom',
'index' => 0,
- 'ip' => '1.2.3.4',
+ 'ipKey' => '1.2.3.4',
'username' => 'SomeUser',
'count' => 1,
'expiry' => 10,
/**
* @covers HTMLForm
*
- * @license GNU GPL v2+
+ * @license GPL-2.0-or-later
* @author Gergő Tisza
* @author Thiemo Mättig
*/
*
* @group JobQueue
*
- * @license GNU GPL v2+
+ * @license GPL-2.0-or-later
* @author Thiemo Kreuz
*/
class JobQueueMemoryTest extends PHPUnit\Framework\TestCase {
* @group JobQueue
* @group Database
*
- * @license GNU GPL v2+
+ * @license GPL-2.0-or-later
* @author Addshore
*/
class CategoryMembershipChangeJobTest extends MediaWikiTestCase {
* @group JobQueue
* @group Database
*
- * @license GNU GPL v2+
+ * @license GPL-2.0-or-later
* @author Addshore
*/
class ClearUserWatchlistJobTest extends MediaWikiTestCase {
[ '0.0.0.0', '0.0.0.0' ],
[ '0.0.0.0', '00.00.00.00' ],
[ '0.0.0.0', '000.000.000.000' ],
+ [ '0.0.0.0/24', '000.000.000.000/24' ],
[ '141.0.11.253', '141.000.011.253' ],
[ '1.2.4.5', '1.2.4.5' ],
[ '1.2.4.5', '01.02.04.05' ],
* @covers IPTC::parse
*/
public function testIPTCParseForcedUTFButInvalid() {
- if ( version_compare( PHP_VERSION, '5.5.26', '<' )
- || ( version_compare( PHP_VERSION, '5.6.0', '>' )
- && version_compare( PHP_VERSION, '5.6.10', '<' )
- )
- ) {
- $this->markTestSkipped( 'Test fails on pre-PHP 5.5.25. See T124574/T39665 for details.' );
- }
$iptcData = "Photoshop 3.0\08BIM\4\4\0\0\0\0\0\x11\x1c\x02\x19\x00\x04\xC3\xC3\xC3\xB8"
. "\x1c\x01\x5A\x00\x03\x1B\x25\x47";
$res = IPTC::parse( $iptcData );
'test.user',
],
],
- 'styledeprecations' => [
+ 'styleDeprecations' => [
Xml::encodeJsCall(
'mw.log.warn',
[ 'This page is using the deprecated ResourceLoader module "test.styles.deprecated".
. 'mw.loader.implement("test.private@{blankVer}",function($,jQuery,require,module){},{"css":[]});'
. 'mw.loader.load(["test"]);'
. 'mw.loader.load("/w/load.php?debug=false\u0026lang=nl\u0026modules=test.scripts\u0026only=scripts\u0026skin=fallback");'
- . 'mw.log.warn("This page is using the deprecated ResourceLoader module \"test.styles.deprecated\".\nDeprecation message.");'
. '});</script>' . "\n"
. '<link rel="stylesheet" href="/w/load.php?debug=false&lang=nl&modules=test.styles.deprecated%2Cpure&only=styles&skin=fallback"/>' . "\n"
. '<style>.private{}</style>' . "\n"
$context = self::makeContext();
$context->getResourceLoader()->register( self::makeSampleModules() );
- $client = new ResourceLoaderClientHtml( $context );
+ $client = new ResourceLoaderClientHtml( $context, [ 'nonce' => false ] );
$client->setConfig( [ 'key' => 'value' ] );
$client->setModules( [
'test',
'test.private.bottom',
] );
+ $client->setModuleStyles( [
+ 'test.styles.deprecated',
+ ] );
$client->setModuleScripts( [
'test.scripts',
] );
-
- $expected = '';
- $expected = self::expandVariables( $expected );
+ // phpcs:disable Generic.Files.LineLength
+ $expected = '<script>(window.RLQ=window.RLQ||[]).push(function(){'
+ . 'mw.log.warn("This page is using the deprecated ResourceLoader module \"test.styles.deprecated\".\nDeprecation message.");'
+ . '});</script>';
+ // phpcs:enable
$this->assertEquals( $expected, $client->getBodyHtml() );
}
<?php
/**
- * @license GNU GPL v2+
+ * @license GPL-2.0-or-later
* @author Addshore
*
* @covers SpecialBlankpage
*
* @since 1.26
*
- * @license GNU GPL v2+
+ * @license GPL-2.0-or-later
* @author Jeroen De Dauw < jeroendedauw@gmail.com >
* @author Daniel Kinzler
* @author Addshore
*
* @since 1.30
*
- * @license GNU GPL v2+
+ * @license GPL-2.0-or-later
*/
class SpecialShortpagesTest extends MediaWikiTestCase {
/**
* @covers LanguageCrh
* @covers CrhConverter
+ * @covers MediaWiki\Languages\Data\CrhExceptions
*/
class LanguageCrhTest extends LanguageClassesTestCase {
/**
],
'ДЖУРЬМЕК CÜRMEK кетсин ketsin джумлеси cümlesi ильи ilyi Ильи İlyi'
],
+ [ // recent problem words, part 7
+ [
+ 'crh' => 'бруцел brutsel коцюб kotsüb плацен platsen эпицентр epitsentr',
+ 'crh-cyrl' => 'бруцел бруцел коцюб коцюб плацен плацен эпицентр эпицентр',
+ 'crh-latn' => 'brutsel brutsel kotsüb kotsüb platsen platsen epitsentr epitsentr',
+ ],
+ 'бруцел brutsel коцюб kotsüb плацен platsen эпицентр epitsentr'
+ ],
[ // regex pattern words
[
'crh' => 'köyünden коюнден ange аньге',
'log_timestamp' => 20091223210426
];
+ // Autopatrol #4 very old way
+ $logs[] = [
+ 'log_type' => 'patrol',
+ 'log_action' => 'patrol',
+ 'log_user' => 7257,
+ 'log_params' => "9227851\n0\n1",
+ 'log_timestamp' => 20081223210426
+ ];
+
+ // Manual patrol #3 very old way
+ $logs[] = [
+ 'log_type' => 'patrol',
+ 'log_action' => 'patrol',
+ 'log_user' => 7258,
+ 'log_params' => "9227851\n0\n0",
+ 'log_timestamp' => 20091223210426
+ ];
+
wfGetDB( DB_MASTER )->insert( 'logging', $logs );
}
'log_action' => 'patrol',
'log_user' => '7256',
],
+ (object)[
+ 'log_type' => 'patrol',
+ 'log_action' => 'patrol',
+ 'log_user' => '7257',
+ ],
+ (object)[
+ 'log_type' => 'patrol',
+ 'log_action' => 'patrol',
+ 'log_user' => '7258',
+ ],
];
$cases = [
$allRows[3],
$allRows[5],
$allRows[6],
+ $allRows[7],
+ $allRows[8],
],
[ '--sleep', '0', '-q' ]
],
$allRows[4],
$allRows[5],
$allRows[6],
+ $allRows[7],
+ $allRows[8],
],
[ '--sleep', '0', '--before', '20060123210426', '-q' ]
],
$allRows[3],
$allRows[4],
$allRows[6],
+ $allRows[8],
],
[ '--sleep', '0', '--check-old', '-q' ]
],